From 8404c87791511f2b9c89cc5ebd8f63b2613dc959 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta Date: Thu, 9 Sep 2021 01:36:37 +0530 Subject: [PATCH] Support sorting on ente albums by name, recent photo & last modified --- lib/main.dart | 2 ++ lib/ui/collections_gallery_widget.dart | 50 +++++++++++++++++++++++--- lib/utils/local_settings.dart | 10 +++--- 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index e404923d0..c8588f50d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -26,6 +26,7 @@ import 'package:photos/ui/home_widget.dart'; import 'package:photos/ui/lock_screen.dart'; import 'package:photos/utils/crypto_util.dart'; import 'package:photos/utils/file_uploader.dart'; +import 'package:photos/utils/local_settings.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:super_logging/super_logging.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -147,6 +148,7 @@ Future _init(bool isBackground) async { await RemoteSyncService.instance.init(); await SyncService.instance.init(); await MemoriesService.instance.init(); + LocalSettings.instance.init(); FeatureFlagService.instance.init(); _logger.info("Initialization done"); _initializationStatus.complete(); diff --git a/lib/ui/collections_gallery_widget.dart b/lib/ui/collections_gallery_widget.dart index fa61604f4..63511f9f9 100644 --- a/lib/ui/collections_gallery_widget.dart +++ b/lib/ui/collections_gallery_widget.dart @@ -20,6 +20,7 @@ import 'package:photos/ui/common_elements.dart'; import 'package:photos/ui/device_folder_page.dart'; import 'package:photos/ui/loading_widget.dart'; import 'package:photos/ui/thumbnail_widget.dart'; +import 'package:photos/utils/local_settings.dart'; import 'package:photos/utils/navigation_util.dart'; import 'package:photos/utils/toast_util.dart'; @@ -38,6 +39,7 @@ class _CollectionsGalleryWidgetState extends State StreamSubscription _collectionUpdatesSubscription; StreamSubscription _backupFoldersUpdatedEvent; StreamSubscription _loggedOutEvent; + AlbumSortKey sortKey; @override void initState() { @@ -57,6 +59,7 @@ class _CollectionsGalleryWidgetState extends State Bus.instance.on().listen((event) { setState(() {}); }); + sortKey = LocalSettings.instance.albumSortKey(); super.initState(); } @@ -100,8 +103,16 @@ class _CollectionsGalleryWidgetState extends State } } collectionsWithThumbnail.sort((first, second) { - return second.thumbnail.updationTime - .compareTo(first.thumbnail.updationTime); + if (sortKey == AlbumSortKey.albumName) { + // alphabetical ASC order + return first.collection.name.compareTo(second.collection.name); + } else if (sortKey == AlbumSortKey.recentPhoto) { + return second.thumbnail.creationTime + .compareTo(first.thumbnail.creationTime); + } else { + return second.collection.updationTime + .compareTo(first.collection.updationTime); + } }); return CollectionItems(folders, collectionsWithThumbnail); } @@ -139,9 +150,40 @@ class _CollectionsGalleryWidgetState extends State ), ), ), - Padding(padding: EdgeInsets.all(10)), + Padding(padding: EdgeInsets.all(4)), Divider(), - Padding(padding: EdgeInsets.all(10)), + PopupMenuButton( + offset: Offset(10, 40), + initialValue: sortKey?.index ?? 0, + child: Align( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text(sortKey.toString(), + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 12, + color: Theme.of(context).buttonColor, + ), + ), + Padding(padding: EdgeInsets.only(left: 5.0)), + Icon(Icons.sort_outlined), + ], + )), + onSelected: (int index) { + setState(() { + sortKey = AlbumSortKey.values[index]; + }); + }, + itemBuilder: (context) { + return List.generate(AlbumSortKey.values.length, (index) { + return PopupMenuItem( + value: index, + child: Text('${AlbumSortKey.values[index]}'), + ); + }); + }, + ), SectionTitle("on ente"), Padding(padding: EdgeInsets.all(12)), Configuration.instance.hasConfiguredAccount() diff --git a/lib/utils/local_settings.dart b/lib/utils/local_settings.dart index 204136f51..19ed4aeed 100644 --- a/lib/utils/local_settings.dart +++ b/lib/utils/local_settings.dart @@ -4,7 +4,7 @@ import 'package:shared_preferences/shared_preferences.dart'; enum AlbumSortKey { albumName, lastModified, - createdAt, + recentPhoto, } class LocalSettings { @@ -12,8 +12,6 @@ class LocalSettings { static final LocalSettings instance = LocalSettings._privateConstructor(); static const kCollectionSortPref = "collection_sort_pref"; - - final _logger = Logger("FeatureFlagService"); SharedPreferences _prefs; Future init() async { @@ -21,11 +19,11 @@ class LocalSettings { } AlbumSortKey albumSortKey() { - return AlbumSortKey.values[_prefs.getInt(kCollectionSortPref)] + return AlbumSortKey.values[_prefs?.getInt(kCollectionSortPref) ?? 0] ?? + AlbumSortKey.lastModified; } void setAlbumSortKey(AlbumSortKey key) { - _prefs.setInt(kCollectionSortPref, key.index); + _prefs?.setInt(kCollectionSortPref, key.index); } - }