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/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 +