Browse Source

Show correct progress dialog and toast text when changing visibility

ashilkn 1 year ago
parent
commit
eb67fd3db2
2 changed files with 87 additions and 21 deletions
  1. 27 12
      lib/ui/viewer/gallery/gallery_app_bar_widget.dart
  2. 60 9
      lib/utils/magic_util.dart

+ 27 - 12
lib/ui/viewer/gallery/gallery_app_bar_widget.dart

@@ -562,20 +562,30 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
               );
               if (mounted) setState(() {});
             } else if (value == AlbumPopupAction.ownedArchive) {
+              final isArchived = widget.collection!.isArchived();
+              final int prevVisiblity =
+                  isArchived ? archiveVisibility : visibleVisibility;
+              final int newVisiblity =
+                  isArchived ? visibleVisibility : archiveVisibility;
+
               await changeCollectionVisibility(
                 context,
-                widget.collection!,
-                widget.collection!.isArchived()
-                    ? visibleVisibility
-                    : archiveVisibility,
+                collection: widget.collection!,
+                newVisibility: newVisiblity,
+                prevVisibility: prevVisiblity,
               );
             } else if (value == AlbumPopupAction.ownedHide) {
+              final isHidden = widget.collection!.isHidden();
+              final int prevVisiblity =
+                  isHidden ? hiddenVisibility : visibleVisibility;
+              final int newVisiblity =
+                  isHidden ? visibleVisibility : hiddenVisibility;
+
               await changeCollectionVisibility(
                 context,
-                widget.collection!,
-                widget.collection!.isHidden()
-                    ? visibleVisibility
-                    : hiddenVisibility,
+                collection: widget.collection!,
+                newVisibility: newVisiblity,
+                prevVisibility: prevVisiblity,
               );
             } else if (value == AlbumPopupAction.delete) {
               await _trashCollection();
@@ -590,12 +600,17 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
             } else if (value == AlbumPopupAction.sort) {
               await _showSortOption(context);
             } else if (value == AlbumPopupAction.sharedArchive) {
+              final hasShareeArchived = widget.collection!.hasShareeArchived();
+              final int prevVisiblity =
+                  hasShareeArchived ? archiveVisibility : visibleVisibility;
+              final int newVisiblity =
+                  hasShareeArchived ? visibleVisibility : archiveVisibility;
+
               await changeCollectionVisibility(
                 context,
-                widget.collection!,
-                widget.collection!.hasShareeArchived()
-                    ? visibleVisibility
-                    : archiveVisibility,
+                collection: widget.collection!,
+                newVisibility: newVisiblity,
+                prevVisibility: prevVisiblity,
                 isOwner: false,
               );
               if (mounted) {

+ 60 - 9
lib/utils/magic_util.dart

@@ -20,6 +20,8 @@ import 'package:photos/utils/toast_util.dart';
 
 final _logger = Logger('MagicUtil');
 
+enum _VisibilityAction { hide, unHide, archive, unarchive }
+
 Future<void> changeVisibility(
   BuildContext context,
   List<File> files,
@@ -50,17 +52,22 @@ Future<void> changeVisibility(
 }
 
 Future<void> changeCollectionVisibility(
-  BuildContext context,
-  Collection collection,
-  int newVisibility, {
+  BuildContext context, {
+  required Collection collection,
+  required int newVisibility,
+  required int prevVisibility,
   bool isOwner = true,
 }) async {
+  final visibilityAction =
+      _getVisibilityAction(context, newVisibility, prevVisibility);
   final dialog = createProgressDialog(
     context,
-    newVisibility == archiveVisibility
-        ? S.of(context).archiving
-        : S.of(context).unarchiving,
+    _visActionProgressDialogText(
+      context,
+      visibilityAction,
+    ),
   );
+
   await dialog.show();
   try {
     final Map<String, dynamic> update = {magicKeyVisibility: newVisibility};
@@ -74,9 +81,10 @@ Future<void> changeCollectionVisibility(
     Bus.instance.fire(ForceReloadHomeGalleryEvent("CollectionArchiveChange"));
     showShortToast(
       context,
-      newVisibility == archiveVisibility
-          ? S.of(context).successfullyArchived
-          : S.of(context).successfullyUnarchived,
+      _visActionSuccessfulText(
+        context,
+        visibilityAction,
+      ),
     );
 
     await dialog.hide();
@@ -272,3 +280,46 @@ Future<void> _updatePublicMetadata(
 bool _shouldReloadGallery(String key) {
   return key == editTimeKey;
 }
+
+_visActionProgressDialogText(BuildContext context, _VisibilityAction action) {
+  switch (action) {
+    case _VisibilityAction.archive:
+      return S.of(context).archiving;
+    case _VisibilityAction.hide:
+      return "Hiding...";
+    case _VisibilityAction.unarchive:
+      return S.of(context).unarchiving;
+    case _VisibilityAction.unHide:
+      return "Unhiding...";
+  }
+}
+
+_visActionSuccessfulText(BuildContext context, _VisibilityAction action) {
+  switch (action) {
+    case _VisibilityAction.archive:
+      return S.of(context).successfullyArchived;
+    case _VisibilityAction.hide:
+      return "Successfully hid";
+    case _VisibilityAction.unarchive:
+      return S.of(context).successfullyUnarchived;
+    case _VisibilityAction.unHide:
+      return "Successfully unhid";
+  }
+}
+
+_VisibilityAction _getVisibilityAction(
+  context,
+  int newVisibility,
+  int prevVisibility,
+) {
+  if (newVisibility == archiveVisibility) {
+    return _VisibilityAction.archive;
+  } else if (newVisibility == hiddenVisibility) {
+    return _VisibilityAction.hide;
+  } else if (newVisibility == visibleVisibility &&
+      prevVisibility == archiveVisibility) {
+    return _VisibilityAction.unarchive;
+  } else {
+    return _VisibilityAction.unHide;
+  }
+}