From 33466e84ad36e1f95762e74cd255c91a36c04d9d Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 21 May 2025 17:50:32 -0400 Subject: [PATCH 1/2] Feature: Added support for always displaying the status center --- .../Contracts/IAppearanceSettingsService.cs | 6 +++++ .../Data/Enums/StatusCenterVisibility.cs | 23 +++++++++++++++++++ .../Settings/AppearanceSettingsService.cs | 7 ++++++ src/Files.App/Strings/en-US/Resources.resw | 9 ++++++++ .../UserControls/NavigationToolbar.xaml | 18 +++++++-------- .../Settings/AppearanceViewModel.cs | 21 +++++++++++++++++ .../NavigationToolbarViewModel.cs | 18 +++++++++++++++ .../Views/Settings/AppearancePage.xaml | 8 +++++++ 8 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 src/Files.App/Data/Enums/StatusCenterVisibility.cs diff --git a/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs b/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs index 415d53c3ec26..dc684c0e7226 100644 --- a/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs +++ b/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs @@ -116,5 +116,11 @@ public interface IAppearanceSettingsService : IBaseSettingsService, INotifyPrope /// Gets or sets a value whether the shelf pane toggle button should be displayed. /// bool ShowShelfPaneToggleButton{ get; set; } + + + /// + /// Gets or sets a value indicating when to display the Status Center button. + /// + StatusCenterVisibility StatusCenterVisibility { get; set; } } } diff --git a/src/Files.App/Data/Enums/StatusCenterVisibility.cs b/src/Files.App/Data/Enums/StatusCenterVisibility.cs new file mode 100644 index 000000000000..bafe15dbb22f --- /dev/null +++ b/src/Files.App/Data/Enums/StatusCenterVisibility.cs @@ -0,0 +1,23 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +namespace Files.App.Data.Enums +{ + public enum StatusCenterVisibility + { + /// + /// During active file operations until dismissed. + /// + DuringFileOperationsUntilDismissed, + + /// + /// During active file operations. + /// + DuringOngoingFileOperations, + + /// + /// Always displayed. + /// + Always, + } +} diff --git a/src/Files.App/Services/Settings/AppearanceSettingsService.cs b/src/Files.App/Services/Settings/AppearanceSettingsService.cs index e2b16aad26c8..5d53b29eccd7 100644 --- a/src/Files.App/Services/Settings/AppearanceSettingsService.cs +++ b/src/Files.App/Services/Settings/AppearanceSettingsService.cs @@ -159,6 +159,13 @@ public bool ShowShelfPaneToggleButton set => Set(value); } + /// + public StatusCenterVisibility StatusCenterVisibility + { + get => Get(StatusCenterVisibility.Always); + set => Set(value); + } + protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e) { base.RaiseOnSettingChangedEvent(sender, e); diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 4c2cfec9f4cf..543a6b523719 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4226,4 +4226,13 @@ Search for files and folders... + + During active operations and displayed until dismissed + + + Only during active operations + + + Show status center button + diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index 44e615ad6bb2..93bacf529eea 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -471,17 +471,16 @@ AutomationProperties.Name="{helpers:ResourceString Name=StatusCenter}" Style="{StaticResource AddressToolbarButtonStyle}" ToolTipService.ToolTip="{helpers:ResourceString Name=StatusCenter}" - Visibility="{x:Bind OngoingTasksViewModel.HasAnyItem, Mode=OneWay}"> + Visibility="{x:Bind ViewModel.ShowStatusCenterButton, Mode=OneWay}"> - + @@ -594,7 +594,7 @@ - + diff --git a/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs b/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs index 06f79b19f866..5c66313851c0 100644 --- a/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs @@ -24,6 +24,8 @@ public sealed partial class AppearanceViewModel : ObservableObject public Dictionary ImageHorizontalAlignmentTypes { get; private set; } = []; + public Dictionary StatusCenterVisibilityOptions { get; private set; } = []; + public ObservableCollection AppThemeResources { get; } public ICommand SelectImageCommand { get; } @@ -76,6 +78,12 @@ public AppearanceViewModel(IUserSettingsService userSettingsService, IResourcesS UpdateSelectedResource(); + // StatusCenterVisibility + StatusCenterVisibilityOptions.Add(StatusCenterVisibility.DuringFileOperationsUntilDismissed, Strings.DuringFileOperationsUntilDismissed.GetLocalizedResource()); + StatusCenterVisibilityOptions.Add(StatusCenterVisibility.DuringOngoingFileOperations, Strings.DuringOngoingFileOperations.GetLocalizedResource()); + StatusCenterVisibilityOptions.Add(StatusCenterVisibility.Always, Strings.Always.GetLocalizedResource()); + SelectedStatusCenterVisibilityOption = StatusCenterVisibilityOptions[UserSettingsService.AppearanceSettingsService.StatusCenterVisibility]; + SelectImageCommand = new RelayCommand(SelectBackgroundImage); RemoveImageCommand = new RelayCommand(RemoveBackgroundImage); } @@ -330,6 +338,19 @@ public bool ShowShelfPaneToggleButton } } + private string selectedStatusCenterVisibilityOption; + public string SelectedStatusCenterVisibilityOption + { + get => selectedStatusCenterVisibilityOption; + set + { + if (SetProperty(ref selectedStatusCenterVisibilityOption, value)) + { + UserSettingsService.AppearanceSettingsService.StatusCenterVisibility = StatusCenterVisibilityOptions.First(e => e.Value == value).Key; + } + } + } + public bool IsAppEnvironmentDev { get => AppLifecycleHelper.AppEnvironment is AppEnvironment.Dev; diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 8eae4938644f..b45f67d74205 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -36,6 +36,7 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr private readonly IUpdateService UpdateService = Ioc.Default.GetRequiredService(); private readonly ICommandManager Commands = Ioc.Default.GetRequiredService(); private readonly IContentPageContext ContentPageContext = Ioc.Default.GetRequiredService(); + private readonly StatusCenterViewModel OngoingTasksViewModel = Ioc.Default.GetRequiredService(); // Fields @@ -79,6 +80,10 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public bool ShowHomeButton => AppearanceSettingsService.ShowHomeButton; public bool EnableOmnibar => GeneralSettingsService.EnableOmnibar; + public bool ShowStatusCenterButton => + AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.Always || + (AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.DuringOngoingFileOperations && OngoingTasksViewModel.HasAnyItemInProgress) || + (AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.DuringFileOperationsUntilDismissed && OngoingTasksViewModel.HasAnyItem); public bool ShowShelfPaneToggleButton => AppearanceSettingsService.ShowShelfPaneToggleButton && AppLifecycleHelper.AppEnvironment is AppEnvironment.Dev; @@ -369,6 +374,9 @@ public NavigationToolbarViewModel() case nameof(AppearanceSettingsService.ShowHomeButton): OnPropertyChanged(nameof(ShowHomeButton)); break; + case nameof(AppearanceSettingsService.StatusCenterVisibility): + OnPropertyChanged(nameof(ShowStatusCenterButton)); + break; case nameof(AppearanceSettingsService.ShowShelfPaneToggleButton): OnPropertyChanged(nameof(ShowShelfPaneToggleButton)); break; @@ -383,6 +391,16 @@ public NavigationToolbarViewModel() break; } }; + OngoingTasksViewModel.PropertyChanged += (s, e) => + { + switch (e.PropertyName) + { + case nameof(OngoingTasksViewModel.HasAnyItem): + case nameof(OngoingTasksViewModel.HasAnyItemInProgress): + OnPropertyChanged(nameof(ShowStatusCenterButton)); + break; + } + }; } // Methods diff --git a/src/Files.App/Views/Settings/AppearancePage.xaml b/src/Files.App/Views/Settings/AppearancePage.xaml index 74e2f0b3c874..64af3aa0e41a 100644 --- a/src/Files.App/Views/Settings/AppearancePage.xaml +++ b/src/Files.App/Views/Settings/AppearancePage.xaml @@ -270,6 +270,14 @@ + + + + + From 71f293b223be9560c7be74937ad3648167c1fa30 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 22 May 2025 11:04:28 -0400 Subject: [PATCH 2/2] Requested changes --- src/Files.App/Data/Enums/StatusCenterVisibility.cs | 9 ++------- src/Files.App/Strings/en-US/Resources.resw | 5 +---- src/Files.App/ViewModels/Settings/AppearanceViewModel.cs | 3 +-- .../UserControls/NavigationToolbarViewModel.cs | 4 +--- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/Files.App/Data/Enums/StatusCenterVisibility.cs b/src/Files.App/Data/Enums/StatusCenterVisibility.cs index bafe15dbb22f..5266d5c9342b 100644 --- a/src/Files.App/Data/Enums/StatusCenterVisibility.cs +++ b/src/Files.App/Data/Enums/StatusCenterVisibility.cs @@ -6,18 +6,13 @@ namespace Files.App.Data.Enums public enum StatusCenterVisibility { /// - /// During active file operations until dismissed. + /// Always displayed. /// - DuringFileOperationsUntilDismissed, + Always, /// /// During active file operations. /// DuringOngoingFileOperations, - - /// - /// Always displayed. - /// - Always, } } diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 543a6b523719..f220f4df8347 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4226,11 +4226,8 @@ Search for files and folders... - - During active operations and displayed until dismissed - - Only during active operations + During file operations Show status center button diff --git a/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs b/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs index 5c66313851c0..ef273de6af22 100644 --- a/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs @@ -79,9 +79,8 @@ public AppearanceViewModel(IUserSettingsService userSettingsService, IResourcesS UpdateSelectedResource(); // StatusCenterVisibility - StatusCenterVisibilityOptions.Add(StatusCenterVisibility.DuringFileOperationsUntilDismissed, Strings.DuringFileOperationsUntilDismissed.GetLocalizedResource()); - StatusCenterVisibilityOptions.Add(StatusCenterVisibility.DuringOngoingFileOperations, Strings.DuringOngoingFileOperations.GetLocalizedResource()); StatusCenterVisibilityOptions.Add(StatusCenterVisibility.Always, Strings.Always.GetLocalizedResource()); + StatusCenterVisibilityOptions.Add(StatusCenterVisibility.DuringOngoingFileOperations, Strings.DuringOngoingFileOperations.GetLocalizedResource()); SelectedStatusCenterVisibilityOption = StatusCenterVisibilityOptions[UserSettingsService.AppearanceSettingsService.StatusCenterVisibility]; SelectImageCommand = new RelayCommand(SelectBackgroundImage); diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index b45f67d74205..798c63b0cd23 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -82,8 +82,7 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public bool EnableOmnibar => GeneralSettingsService.EnableOmnibar; public bool ShowStatusCenterButton => AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.Always || - (AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.DuringOngoingFileOperations && OngoingTasksViewModel.HasAnyItemInProgress) || - (AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.DuringFileOperationsUntilDismissed && OngoingTasksViewModel.HasAnyItem); + (AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.DuringOngoingFileOperations && OngoingTasksViewModel.HasAnyItem); public bool ShowShelfPaneToggleButton => AppearanceSettingsService.ShowShelfPaneToggleButton && AppLifecycleHelper.AppEnvironment is AppEnvironment.Dev; @@ -396,7 +395,6 @@ public NavigationToolbarViewModel() switch (e.PropertyName) { case nameof(OngoingTasksViewModel.HasAnyItem): - case nameof(OngoingTasksViewModel.HasAnyItemInProgress): OnPropertyChanged(nameof(ShowStatusCenterButton)); break; }