Skip to content

Commit 1dcfce8

Browse files
authored
Feature: Added setting to sync folder preferences across directories (#11085)
1 parent e9df282 commit 1dcfce8

File tree

9 files changed

+25
-80
lines changed

9 files changed

+25
-80
lines changed

src/Files.App/Helpers/AdaptiveLayoutHelpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public static bool PredictLayoutMode(FolderSettingsViewModel folderSettings, str
1616
{
1717
IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService<IUserSettingsService>();
1818

19-
if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences
19+
if (!userSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories
2020
&& folderSettings.IsAdaptiveLayoutEnabled
2121
&& !folderSettings.IsLayoutModeFixed)
2222
{

src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public FoldersSettingsService(ISettingsSharingContext settingsSharingContext)
1414
RegisterSettingsContext(settingsSharingContext);
1515
}
1616

17-
public bool EnableOverridingFolderPreferences
17+
public bool SyncFolderPreferencesAcrossDirectories
1818
{
19-
get => Get(true);
19+
get => Get(false);
2020
set => Set(value);
2121
}
2222

@@ -260,7 +260,7 @@ protected override void RaiseOnSettingChangedEvent(object sender, SettingChanged
260260
{
261261
switch (e.SettingName)
262262
{
263-
case nameof(EnableOverridingFolderPreferences):
263+
case nameof(SyncFolderPreferencesAcrossDirectories):
264264
case nameof(DefaultLayoutMode):
265265
case nameof(TagColumnWidth):
266266
case nameof(NameColumnWidth):

src/Files.App/Strings/en-US/Resources.resw

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,14 +1215,8 @@
12151215
<data name="SettingsSearchUnindexedItems" xml:space="preserve">
12161216
<value>Include unindexed items in search results</value>
12171217
</data>
1218-
<data name="ResetFolderPreferencesOverrides" xml:space="preserve">
1219-
<value>Reset folder overrides</value>
1220-
</data>
1221-
<data name="EnableOverridingFolderPreferencesDescription" xml:space="preserve">
1222-
<value>Changing the layout in a directory when this setting is turned off will update the layout for all directories.</value>
1223-
</data>
1224-
<data name="EnableOverridingFolderPreferences" xml:space="preserve">
1225-
<value>Enable overriding folder preferences in individual directories</value>
1218+
<data name="SyncFolderPreferencesAcrossDirectories" xml:space="preserve">
1219+
<value>Sync layout and sorting preferences across directories</value>
12261220
</data>
12271221
<data name="SettingsContextMenu.Text" xml:space="preserve">
12281222
<value>Customize the right click context menu</value>
@@ -2697,12 +2691,6 @@
26972691
<data name="Reset" xml:space="preserve">
26982692
<value>Reset</value>
26992693
</data>
2700-
<data name="ResetLayoutPreferences" xml:space="preserve">
2701-
<value>This action will reset all directories back to your default preferences.</value>
2702-
</data>
2703-
<data name="AreYouSure" xml:space="preserve">
2704-
<value>Are you sure?</value>
2705-
</data>
27062694
<data name="Lockscreen" xml:space="preserve">
27072695
<value>Lockscreen</value>
27082696
</data>

src/Files.App/ViewModels/FolderSettingsViewModel.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ public ColumnsViewModel ColumnsViewModel
287287
private static LayoutPreferences GetLayoutPreferencesForPath(string folderPath)
288288
{
289289
IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService<IUserSettingsService>();
290-
if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences)
290+
if (!userSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories)
291291
{
292292
folderPath = folderPath.TrimPath();
293293
var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath);
@@ -303,7 +303,7 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen
303303
{
304304
IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService<IUserSettingsService>();
305305

306-
if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences)
306+
if (!userSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories)
307307
{
308308
var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath);
309309
WriteLayoutPreferencesToDb(folderPath.TrimPath(), folderFRN, prefs);
@@ -506,7 +506,7 @@ public void OnDefaultPreferencesChanged(string folderPath, string settingsName)
506506
case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles):
507507
SortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles;
508508
break;
509-
case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences):
509+
case nameof(UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories):
510510
LayoutPreference = prefs;
511511
// TODO: update layout
512512
break;

src/Files.App/ViewModels/ItemViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ await dispatcherQueue.EnqueueAsync(() =>
500500
case nameof(UserSettingsService.FoldersSettingsService.DefaultSortOption):
501501
case nameof(UserSettingsService.FoldersSettingsService.DefaultGroupOption):
502502
case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles):
503-
case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences):
503+
case nameof(UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories):
504504
await dispatcherQueue.EnqueueAsync(() =>
505505
{
506506
folderSettings.OnDefaultPreferencesChanged(WorkingDirectory, e.SettingName);

src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,16 @@ public class FoldersViewModel : ObservableObject
1515
private readonly int FileTagSortingIndex = 5;
1616
private readonly int FileTagGroupingIndex = 6;
1717

18-
// Commands
19-
public RelayCommand ResetLayoutPreferencesCommand { get; }
20-
public RelayCommand ShowResetLayoutPreferencesTipCommand { get; }
2118

2219
public FoldersViewModel()
2320
{
24-
ResetLayoutPreferencesCommand = new RelayCommand(ResetLayoutPreferences);
25-
ShowResetLayoutPreferencesTipCommand = new RelayCommand(() => IsResetLayoutPreferencesTipOpen = true);
26-
2721
SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode;
2822
SelectedDefaultSortingIndex = UserSettingsService.FoldersSettingsService.DefaultSortOption == SortOption.FileTag ? FileTagSortingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultSortOption;
2923
SelectedDefaultGroupingIndex = UserSettingsService.FoldersSettingsService.DefaultGroupOption == GroupOption.FileTag ? FileTagGroupingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultGroupOption;
3024
}
3125

3226
// Properties
3327

34-
private bool isResetLayoutPreferencesTipOpen;
35-
public bool IsResetLayoutPreferencesTipOpen
36-
{
37-
get => isResetLayoutPreferencesTipOpen;
38-
set => SetProperty(ref isResetLayoutPreferencesTipOpen, value);
39-
}
40-
4128
private int selectedDefaultLayoutModeIndex;
4229
public int SelectedDefaultLayoutModeIndex
4330
{
@@ -52,14 +39,15 @@ public int SelectedDefaultLayoutModeIndex
5239
}
5340
}
5441

55-
public bool EnableOverridingFolderPreferences
42+
public bool SyncFolderPreferencesAcrossDirectories
5643
{
57-
get => UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences;
44+
get => UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories;
5845
set
5946
{
60-
if (value != UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences)
47+
if (value != UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories)
6148
{
62-
UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences = value;
49+
UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories = value;
50+
ResetLayoutPreferences();
6351
OnPropertyChanged();
6452
}
6553
}
@@ -373,7 +361,6 @@ public void ResetLayoutPreferences()
373361
// Is this proper practice?
374362
var dbInstance = FolderSettingsViewModel.GetDbInstance();
375363
dbInstance.ResetAll();
376-
IsResetLayoutPreferencesTipOpen = false;
377364
}
378365
}
379366
}

src/Files.App/ViewModels/ToolbarViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ public bool IsLayoutAdaptive
250250
&& IsAdaptiveLayoutEnabled;
251251

252252
public bool IsAdaptiveLayoutEnabled
253-
=> UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences;
253+
=> UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories;
254254

255255
private bool isUpdating;
256256
public bool IsUpdating
@@ -446,7 +446,7 @@ private void UserSettingsService_OnSettingChangedEvent(object? sender, SettingCh
446446
RefreshWidgetsRequested?.Invoke(this, EventArgs.Empty);
447447
OnPropertyChanged(e.SettingName);
448448
break;
449-
case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences):
449+
case nameof(UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories):
450450
FolderSettings_LayoutPreferencesUpdateRequired(null, 0);
451451
break;
452452
}

src/Files.App/Views/SettingsPages/Folders.xaml

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -42,48 +42,17 @@
4242

4343
<!-- Folder Overrides -->
4444
<local:SettingsBlockControl
45-
Title="{helpers:ResourceString Name=EnableOverridingFolderPreferences}"
45+
Title="{helpers:ResourceString Name=SyncFolderPreferencesAcrossDirectories}"
4646
HorizontalAlignment="Stretch"
47-
Description="{helpers:ResourceString Name=EnableOverridingFolderPreferencesDescription}"
4847
IsExpanded="True">
4948
<local:SettingsBlockControl.Icon>
5049
<FontIcon Glyph="&#xE2AC;" />
5150
</local:SettingsBlockControl.Icon>
5251

5352
<ToggleSwitch
54-
AutomationProperties.Name="{helpers:ResourceString Name=EnableOverridingFolderPreferences}"
55-
IsOn="{x:Bind ViewModel.EnableOverridingFolderPreferences, Mode=TwoWay}"
53+
AutomationProperties.Name="{helpers:ResourceString Name=SyncFolderPreferencesAcrossDirectories}"
54+
IsOn="{x:Bind ViewModel.SyncFolderPreferencesAcrossDirectories, Mode=TwoWay}"
5655
Style="{StaticResource RightAlignedToggleSwitchStyle}" />
57-
<local:SettingsBlockControl.ExpandableContent>
58-
<StackPanel>
59-
<!-- Reset folder overrides -->
60-
<local:SettingsBlockControl
61-
x:Name="ResetLayoutPreferencesButton"
62-
Title="{helpers:ResourceString Name=ResetFolderPreferencesOverrides}"
63-
ButtonCommand="{x:Bind ViewModel.ShowResetLayoutPreferencesTipCommand, Mode=OneWay}"
64-
IsClickable="True">
65-
<local:SettingsBlockControl.Icon>
66-
<FontIcon
67-
FontSize="14"
68-
Foreground="{ThemeResource TextFillColorPrimaryBrush}"
69-
Glyph="&#xE104;" />
70-
</local:SettingsBlockControl.Icon>
71-
<FontIcon
72-
HorizontalAlignment="Right"
73-
FontSize="14"
74-
Foreground="{ThemeResource TextFillColorPrimaryBrush}"
75-
Glyph="&#xE2B4;" />
76-
</local:SettingsBlockControl>
77-
<muxc:TeachingTip
78-
Title="{helpers:ResourceString Name=AreYouSure}"
79-
ActionButtonCommand="{x:Bind ViewModel.ResetLayoutPreferencesCommand, Mode=OneWay}"
80-
ActionButtonContent="{helpers:ResourceString Name=Confirm}"
81-
IsLightDismissEnabled="True"
82-
IsOpen="{x:Bind ViewModel.IsResetLayoutPreferencesTipOpen, Mode=TwoWay}"
83-
Subtitle="{helpers:ResourceString Name=ResetLayoutPreferences}"
84-
Target="{x:Bind ResetLayoutPreferencesButton}" />
85-
</StackPanel>
86-
</local:SettingsBlockControl.ExpandableContent>
8756
</local:SettingsBlockControl>
8857

8958
<!-- Details layout columns -->
@@ -332,7 +301,7 @@
332301
IsOn="{x:Bind ViewModel.SelectFilesOnHover, Mode=TwoWay}"
333302
Style="{StaticResource RightAlignedToggleSwitchStyle}" />
334303
</local:SettingsBlockControl>
335-
304+
336305
<!-- Double click to go up -->
337306
<local:SettingsBlockControl Title="{helpers:ResourceString Name=DoubleClickBlankSpaceToGoUp}" HorizontalAlignment="Stretch">
338307
<local:SettingsBlockControl.Icon>

src/Files.Backend/Services/Settings/IFoldersSettingsService.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Files.Shared.Enums;
1+
using Files.Sdk.Storage;
2+
using Files.Shared.Enums;
23
using System.ComponentModel;
34

45
namespace Files.Backend.Services.Settings
@@ -101,9 +102,9 @@ public interface IFoldersSettingsService : IBaseSettingsService, INotifyProperty
101102
double OriginalPathColumnWidth { get; set; }
102103

103104
/// <summary>
104-
/// Enable overriding folder preferencess in individual directories
105+
/// Sync folder preferences across all directories
105106
/// </summary>
106-
bool EnableOverridingFolderPreferences { get; set; }
107+
bool SyncFolderPreferencesAcrossDirectories { get; set; }
107108

108109
/// <summary>
109110
/// Gets or sets a value indicating whether or not hidden items should be visible.

0 commit comments

Comments
 (0)