From dee1adac8a4288cd6b897d702ffa06c83b8f7c13 Mon Sep 17 00:00:00 2001
From: d2dyno <53011783+d2dyno1@users.noreply.github.com>
Date: Fri, 19 Dec 2025 01:00:09 +0100
Subject: [PATCH 001/225] Begin work on animated intro background
---
src/Platforms/SecureFolderFS.UI/Constants.cs | 124 +++++++++++
.../InterfaceHost/NoVaultsAppHostControl.xaml | 8 +
.../NoVaultsAppHostControl.xaml.cs | 11 +
.../InterfaceRoot/MainWindowRootControl.xaml | 9 +
.../Introduction/IntroductionControl.xaml | 202 +++++++++++-------
.../Introduction/IntroductionControl.xaml.cs | 55 ++++-
.../Introduction/WelcomeScreen.xaml | 43 ++--
.../Introduction/WelcomeScreen.xaml.cs | 21 ++
.../Settings/PreferencesSettingsPage.xaml.cs | 2 +
9 files changed, 371 insertions(+), 104 deletions(-)
diff --git a/src/Platforms/SecureFolderFS.UI/Constants.cs b/src/Platforms/SecureFolderFS.UI/Constants.cs
index d03179ed3..87ee22e60 100644
--- a/src/Platforms/SecureFolderFS.UI/Constants.cs
+++ b/src/Platforms/SecureFolderFS.UI/Constants.cs
@@ -56,5 +56,129 @@ public static class FileData
FolderType = Generic
""";
}
+
+ public static class Introduction
+ {
+ public const string BACKGROUND_WEBVIEW = """
+
+
+
+
+
+ Fragment Shader
+
+
+
+
+
+
+
+ """;
+ }
}
}
diff --git a/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceHost/NoVaultsAppHostControl.xaml b/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceHost/NoVaultsAppHostControl.xaml
index 29152ddc2..ec3967d28 100644
--- a/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceHost/NoVaultsAppHostControl.xaml
+++ b/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceHost/NoVaultsAppHostControl.xaml
@@ -61,6 +61,14 @@
Command="{x:Bind ViewModel.AddNewVaultCommand, Mode=OneWay}"
Content="{l:ResourceString Rid=NewVault}"
Style="{ThemeResource AccentButtonStyle}" />
+
+
diff --git a/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceHost/NoVaultsAppHostControl.xaml.cs b/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceHost/NoVaultsAppHostControl.xaml.cs
index e3929eb00..e0e42edb3 100644
--- a/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceHost/NoVaultsAppHostControl.xaml.cs
+++ b/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceHost/NoVaultsAppHostControl.xaml.cs
@@ -1,6 +1,9 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
+using SecureFolderFS.Sdk.Services;
using SecureFolderFS.Sdk.ViewModels.Views.Host;
+using SecureFolderFS.Sdk.ViewModels.Views.Overlays;
+using SecureFolderFS.Shared;
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
@@ -13,6 +16,14 @@ public NoVaultsAppHostControl()
{
InitializeComponent();
}
+
+ private async void IntroButton_Click(object sender, RoutedEventArgs e)
+ {
+ var overlayService = DI.Service();
+ var overlay = new IntroductionOverlayViewModel(10);
+
+ await overlayService.ShowAsync(overlay);
+ }
public EmptyHostViewModel ViewModel
{
diff --git a/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceRoot/MainWindowRootControl.xaml b/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceRoot/MainWindowRootControl.xaml
index 01dc86059..72aece31b 100644
--- a/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceRoot/MainWindowRootControl.xaml
+++ b/src/Platforms/SecureFolderFS.Uno/UserControls/InterfaceRoot/MainWindowRootControl.xaml
@@ -98,5 +98,14 @@
+
+
+
diff --git a/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/IntroductionControl.xaml b/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/IntroductionControl.xaml
index e1de4f870..0a1446e8c 100644
--- a/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/IntroductionControl.xaml
+++ b/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/IntroductionControl.xaml
@@ -12,99 +12,145 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
diff --git a/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/IntroductionControl.xaml.cs b/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/IntroductionControl.xaml.cs
index a377f03a6..b6c46b4b6 100644
--- a/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/IntroductionControl.xaml.cs
+++ b/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/IntroductionControl.xaml.cs
@@ -1,4 +1,5 @@
using System.Threading.Tasks;
+using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using SecureFolderFS.Sdk.ViewModels.Views.Overlays;
using SecureFolderFS.Shared.ComponentModel;
@@ -6,6 +7,7 @@
using SecureFolderFS.Shared.Models;
using SecureFolderFS.UI.Utils;
using SecureFolderFS.Uno.Extensions;
+using SecureFolderFS.Uno.UserControls.InterfaceRoot;
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
@@ -14,6 +16,8 @@ namespace SecureFolderFS.Uno.UserControls.Introduction
{
public sealed partial class IntroductionControl : UserControl, IOverlayControl
{
+ private Grid? _overlayContainer;
+
public IntroductionOverlayViewModel? ViewModel
{
get => DataContext.TryCast();
@@ -26,16 +30,61 @@ public IntroductionControl()
}
///
- public Task ShowAsync() => ViewModel?.TaskCompletion.Task ?? Task.FromResult(Result.Failure(null));
+ public async Task ShowAsync()
+ {
+ if (ViewModel is null)
+ return Result.Failure(null);
+
+ if (ViewModel.TaskCompletion.Task.IsCompleted)
+ return ViewModel.TaskCompletion.Task.Result;
+
+ // Get the main window and its content
+ var mainWindow = App.Instance?.MainWindow;
+ if (mainWindow?.Content is not MainWindowRootControl rootControl)
+ return Result.Failure(null);
+
+ // Get the OverlayContainer from MainWindowRootControl
+ _overlayContainer = rootControl.OverlayContainer;
+ if (_overlayContainer is null)
+ return Result.Failure(null);
+
+ // Add this control to the overlay container
+ _overlayContainer.Children.Add(this);
+
+ // Set initial state for animation (invisible and slightly scaled down)
+ RootGrid.Opacity = 0;
+
+ // Show the overlay container
+ _overlayContainer.Visibility = Visibility.Visible;
+
+ // Play the show animation
+ await ShowOverlayStoryboard.BeginAsync();
+ ShowOverlayStoryboard.Stop();
+ RootGrid.Opacity = 1;
+
+ // Wait for the overlay to be closed
+ return await ViewModel.TaskCompletion.Task;
+ }
///
public void SetView(IViewable viewable) => ViewModel = (IntroductionOverlayViewModel)viewable;
///
- public Task HideAsync()
+ public async Task HideAsync()
{
+ // Play the hide animation
+ await HideOverlayStoryboard.BeginAsync();
+ HideOverlayStoryboard.Stop();
+
+ // Hide and clean up the overlay container
+ if (_overlayContainer is not null)
+ {
+ _overlayContainer.Children.Remove(this);
+ _overlayContainer.Visibility = Visibility.Collapsed;
+ _overlayContainer = null;
+ }
+
ViewModel?.TaskCompletion.SetResult(ContentDialogResult.None.ParseOverlayOption());
- return Task.CompletedTask;
}
}
}
diff --git a/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/WelcomeScreen.xaml b/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/WelcomeScreen.xaml
index 66bc0f475..78a283cdd 100644
--- a/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/WelcomeScreen.xaml
+++ b/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/WelcomeScreen.xaml
@@ -13,29 +13,26 @@
-
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/WelcomeScreen.xaml.cs b/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/WelcomeScreen.xaml.cs
index 577932fc0..844d1d811 100644
--- a/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/WelcomeScreen.xaml.cs
+++ b/src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/WelcomeScreen.xaml.cs
@@ -1,4 +1,8 @@
+using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
+using SecureFolderFS.Shared;
+using SecureFolderFS.UI.Enums;
+using SecureFolderFS.Uno.Helpers;
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
@@ -11,5 +15,22 @@ public WelcomeScreen()
{
InitializeComponent();
}
+
+ private void BackgroundWebView_Loaded(object sender, RoutedEventArgs e)
+ {
+ var htmlString = UI.Constants.Introduction.BACKGROUND_WEBVIEW
+ .Replace("c_bg", UnoThemeHelper.Instance.CurrentTheme switch
+ {
+ ThemeType.Light => "vec3(0.88, 0.93, 0.98)",
+ _ => "vec3(0.00, 0.08, 0.15)"
+ })
+ .Replace("c_wave", UnoThemeHelper.Instance.CurrentTheme switch
+ {
+ ThemeType.Light => "vec3(0.12, 0.48, 0.85)",
+ _ => "vec3(0.090, 0.569, 1.0)"
+ });
+
+ BackgroundWebView.NavigateToString(htmlString);
+ }
}
}
diff --git a/src/Platforms/SecureFolderFS.Uno/Views/Settings/PreferencesSettingsPage.xaml.cs b/src/Platforms/SecureFolderFS.Uno/Views/Settings/PreferencesSettingsPage.xaml.cs
index 6d1d5ca26..b44770ced 100644
--- a/src/Platforms/SecureFolderFS.Uno/Views/Settings/PreferencesSettingsPage.xaml.cs
+++ b/src/Platforms/SecureFolderFS.Uno/Views/Settings/PreferencesSettingsPage.xaml.cs
@@ -80,6 +80,7 @@ private async Task UpdateAdapterStatus(CancellationToken cancellationToken = def
break;
}
+#if WINDOWS
case Core.Dokany.Constants.FileSystem.FS_ID:
case Core.WinFsp.Constants.FileSystem.FS_ID:
{
@@ -112,6 +113,7 @@ private async Task UpdateAdapterStatus(CancellationToken cancellationToken = def
break;
}
+#endif
default:
ViewModel.BannerViewModel.FileSystemInfoBar.IsOpen = false;
From 6caa4a2c52fe3a4211936d60b1f38b4fc64b45a7 Mon Sep 17 00:00:00 2001
From: d2dyno <53011783+d2dyno1@users.noreply.github.com>
Date: Fri, 19 Dec 2025 02:16:26 +0100
Subject: [PATCH 002/225] Light mode adjustments
---
src/Platforms/SecureFolderFS.UI/Constants.cs | 53 +++++----
.../ConverterResources.xaml | 1 +
.../SecureFolderFS.Uno.csproj | 4 +-
.../InterfaceHost/NoVaultsAppHostControl.xaml | 5 -
.../Introduction/AgreementScreen.xaml | 39 -------
.../UserControls/Introduction/EndScreen.xaml | 21 ++--
.../Introduction/IntroductionControl.xaml | 106 ++++++++----------
.../Introduction/IntroductionControl.xaml.cs | 20 ++++
.../UserControls/Introduction/Slide1.xaml | 27 +++++
...AgreementScreen.xaml.cs => Slide1.xaml.cs} | 4 +-
.../Introduction/WelcomeScreen.xaml | 57 ++++++----
.../Introduction/WelcomeScreen.xaml.cs | 21 ----
12 files changed, 173 insertions(+), 185 deletions(-)
delete mode 100644 src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/AgreementScreen.xaml
create mode 100644 src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/Slide1.xaml
rename src/Platforms/SecureFolderFS.Uno/UserControls/Introduction/{AgreementScreen.xaml.cs => Slide1.xaml.cs} (76%)
diff --git a/src/Platforms/SecureFolderFS.UI/Constants.cs b/src/Platforms/SecureFolderFS.UI/Constants.cs
index 87ee22e60..888f72b88 100644
--- a/src/Platforms/SecureFolderFS.UI/Constants.cs
+++ b/src/Platforms/SecureFolderFS.UI/Constants.cs
@@ -68,6 +68,13 @@ public static class Introduction
Fragment Shader
+