diff --git a/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs b/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs
index f3ab7be69d42..572ed982e2d6 100644
--- a/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs
+++ b/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs
@@ -28,8 +28,8 @@ public LayoutPreferences()
this.LayoutMode = defaultLayout is FolderLayoutModes.Adaptive ? FolderLayoutModes.DetailsView : defaultLayout;
this.GridViewSize = UserSettingsService.LayoutSettingsService.DefaultGridViewSize;
- this.DirectorySortOption = UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption;
- this.DirectoryGroupOption = UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption;
+ this.DirectorySortOption = UserSettingsService.FoldersSettingsService.DefaultSortOption;
+ this.DirectoryGroupOption = UserSettingsService.FoldersSettingsService.DefaultGroupOption;
this.DirectorySortDirection = UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection;
this.SortDirectoriesAlongsideFiles = UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles;
this.IsAdaptiveLayoutOverridden = defaultLayout is not FolderLayoutModes.Adaptive;
diff --git a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs
index 804e0d6bc6c2..0f0b107f8b4d 100644
--- a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs
+++ b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs
@@ -207,6 +207,19 @@ public bool CalculateFolderSizes
get => Get(false);
set => Set(value);
}
+
+ public SortOption DefaultSortOption
+ {
+ get => (SortOption)Get((long)SortOption.Name);
+ set => Set((long)value);
+ }
+
+ public GroupOption DefaultGroupOption
+ {
+ get => (GroupOption)Get((long)GroupOption.None);
+ set => Set((long)value);
+ }
+
protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e)
{
switch (e.SettingName)
diff --git a/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs
index db36f66467d6..453205d1768d 100644
--- a/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs
+++ b/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs
@@ -24,22 +24,10 @@ public SortDirection DefaultDirectorySortDirection
set => Set((long)value);
}
- public SortOption DefaultDirectorySortOption
- {
- get => (SortOption)Get((long)SortOption.Name);
- set => Set((long)value);
- }
-
public bool DefaultSortDirectoriesAlongsideFiles
{
get => Get(false);
set => Set(value);
}
-
- public GroupOption DefaultDirectoryGroupOption
- {
- get => (GroupOption)Get((long)GroupOption.None);
- set => Set((long)value);
- }
}
}
diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw
index 547cc960e228..816edaa0f631 100644
--- a/src/Files.App/Strings/en-US/Resources.resw
+++ b/src/Files.App/Strings/en-US/Resources.resw
@@ -9,9 +9,7 @@
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
-
Example:
-
... ado.net/XML headers & schema ...
text/microsoft-resx
2.0
@@ -26,7 +24,6 @@
[base64 mime encoded string representing a byte array form of the .NET Framework object]
This is a comment
-
There are any number of "resheader" rows that contain simple
name/value pairs.
@@ -43,12 +40,10 @@
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
-
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
-
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
@@ -2862,6 +2857,9 @@
Path
+
+ Sorting and grouping
+
Archive
@@ -2931,4 +2929,10 @@
Sync status column
+
+ Group by
+
+
+ Sort by
+
\ No newline at end of file
diff --git a/src/Files.App/ViewModels/FolderSettingsViewModel.cs b/src/Files.App/ViewModels/FolderSettingsViewModel.cs
index aac54322382e..ef50c82cf2f8 100644
--- a/src/Files.App/ViewModels/FolderSettingsViewModel.cs
+++ b/src/Files.App/ViewModels/FolderSettingsViewModel.cs
@@ -312,19 +312,19 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen
{
userSettingsService.FoldersSettingsService.DefaultLayoutMode = prefs.LayoutMode;
userSettingsService.LayoutSettingsService.DefaultGridViewSize = prefs.GridViewSize;
- // Do not save OriginalPath as global sort option (only works in recycle bin)
+ // Do not save options which only work in recycle bin or cloud folders as global
if (prefs.DirectorySortOption != SortOption.OriginalFolder &&
prefs.DirectorySortOption != SortOption.DateDeleted &&
prefs.DirectorySortOption != SortOption.SyncStatus)
{
- userSettingsService.LayoutSettingsService.DefaultDirectorySortOption = prefs.DirectorySortOption;
+ userSettingsService.FoldersSettingsService.DefaultSortOption = prefs.DirectorySortOption;
}
if (prefs.DirectoryGroupOption != GroupOption.OriginalFolder &&
prefs.DirectoryGroupOption != GroupOption.DateDeleted &&
prefs.DirectoryGroupOption != GroupOption.FolderPath &&
prefs.DirectoryGroupOption != GroupOption.SyncStatus)
{
- userSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption = prefs.DirectoryGroupOption;
+ userSettingsService.FoldersSettingsService.DefaultGroupOption = prefs.DirectoryGroupOption;
}
userSettingsService.LayoutSettingsService.DefaultDirectorySortDirection = prefs.DirectorySortDirection;
userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles;
diff --git a/src/Files.App/ViewModels/ItemViewModel.cs b/src/Files.App/ViewModels/ItemViewModel.cs
index 25b0255e6cf8..bee620a072ad 100644
--- a/src/Files.App/ViewModels/ItemViewModel.cs
+++ b/src/Files.App/ViewModels/ItemViewModel.cs
@@ -497,6 +497,8 @@ await dispatcherQueue.EnqueueAsync(() =>
RefreshItems(null);
});
break;
+ case nameof(UserSettingsService.FoldersSettingsService.DefaultSortOption):
+ case nameof(UserSettingsService.FoldersSettingsService.DefaultGroupOption):
case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles):
case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences):
await dispatcherQueue.EnqueueAsync(() =>
diff --git a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs
index e5e6f7185dad..936e7a513e6f 100644
--- a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs
+++ b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs
@@ -10,6 +10,11 @@ public class FoldersViewModel : ObservableObject
{
private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService();
+
+ //FileTag combobox indexes (required to hide SyncStatus)
+ private readonly int FileTagSortingIndex = 5;
+ private readonly int FileTagGroupingIndex = 6;
+
// Commands
public RelayCommand ResetLayoutPreferencesCommand { get; }
public RelayCommand ShowResetLayoutPreferencesTipCommand { get; }
@@ -20,6 +25,8 @@ public FoldersViewModel()
ShowResetLayoutPreferencesTipCommand = new RelayCommand(() => IsResetLayoutPreferencesTipOpen = true);
SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode;
+ SelectedDefaultSortingIndex = UserSettingsService.FoldersSettingsService.DefaultSortOption == SortOption.FileTag ? FileTagSortingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultSortOption;
+ SelectedDefaultGroupingIndex = UserSettingsService.FoldersSettingsService.DefaultGroupOption == GroupOption.FileTag ? FileTagGroupingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultGroupOption;
}
// Properties
@@ -239,6 +246,34 @@ public bool CalculateFolderSizes
}
}
+ private int selectedDefaultSortingIndex;
+ public int SelectedDefaultSortingIndex
+ {
+ get => selectedDefaultSortingIndex;
+ set
+ {
+ if (SetProperty(ref selectedDefaultSortingIndex, value))
+ {
+ OnPropertyChanged(nameof(SelectedDefaultSortingIndex));
+ UserSettingsService.FoldersSettingsService.DefaultSortOption = value == FileTagSortingIndex ? SortOption.FileTag : (SortOption)value;
+ }
+ }
+ }
+
+ private int selectedDefaultGroupingIndex;
+ public int SelectedDefaultGroupingIndex
+ {
+ get => selectedDefaultGroupingIndex;
+ set
+ {
+ if (SetProperty(ref selectedDefaultGroupingIndex, value))
+ {
+ OnPropertyChanged(nameof(SelectedDefaultGroupingIndex));
+ UserSettingsService.FoldersSettingsService.DefaultGroupOption = value == FileTagGroupingIndex ? GroupOption.FileTag : (GroupOption)value;
+ }
+ }
+ }
+
// Local methods
public void ResetLayoutPreferences()
diff --git a/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs
index bed13a10439d..896b9917c664 100644
--- a/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs
+++ b/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs
@@ -511,7 +511,7 @@ public string Text
{
if (Path == "Home".GetLocalizedResource())
return "Home".GetLocalizedResource();
- return (Path == CommonPaths.RecycleBinPath)
+ return (Path == CommonPaths.RecycleBinPath)
? ApplicationData.Current.LocalSettings.Values.Get("RecycleBin_Title", "Recycle Bin")
: Path;
}
diff --git a/src/Files.App/Views/SettingsPages/Folders.xaml b/src/Files.App/Views/SettingsPages/Folders.xaml
index 7982e0c02f7d..9e175450eab9 100644
--- a/src/Files.App/Views/SettingsPages/Folders.xaml
+++ b/src/Files.App/Views/SettingsPages/Folders.xaml
@@ -120,6 +120,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs b/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs
index 665f4b04034f..5319e8f85d58 100644
--- a/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs
+++ b/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs
@@ -139,5 +139,15 @@ public interface IFoldersSettingsService : IBaseSettingsService, INotifyProperty
/// Gets or sets a value indicating whether or not to show folder size.
///
bool CalculateFolderSizes { get; set; }
+
+ ///
+ /// Gets or sets a value indicating the default sorting option.
+ ///
+ SortOption DefaultSortOption { get; set; }
+
+ ///
+ /// Gets or sets a value indicating the default grouping option.
+ ///
+ GroupOption DefaultGroupOption { get; set; }
}
}
diff --git a/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs b/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs
index d10a5b80213d..ae6b2b27d10a 100644
--- a/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs
+++ b/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs
@@ -7,13 +7,8 @@ public interface ILayoutSettingsService : IBaseSettingsService, INotifyPropertyC
{
int DefaultGridViewSize { get; set; }
- // move to folder settings and add UI to settings pages
SortDirection DefaultDirectorySortDirection { get; set; }
- SortOption DefaultDirectorySortOption { get; set; }
-
bool DefaultSortDirectoriesAlongsideFiles { get; set; }
-
- GroupOption DefaultDirectoryGroupOption { get; set; }
}
}
diff --git a/src/Files.Shared/Enums/SortOption.cs b/src/Files.Shared/Enums/SortOption.cs
index f6f8bf6ebde5..46ed1760b73a 100644
--- a/src/Files.Shared/Enums/SortOption.cs
+++ b/src/Files.Shared/Enums/SortOption.cs
@@ -7,9 +7,9 @@ public enum SortOption : byte
DateCreated,
Size,
FileType,
- SyncStatus,
+ SyncStatus, // Cloud drive
FileTag,
- OriginalFolder,
- DateDeleted
+ OriginalFolder, // Recycle bin
+ DateDeleted // Recycle bin
}
}
\ No newline at end of file