瀏覽代碼

FileViewer: Swap delete and archive/unarchive options

Neeraj Gupta 2 年之前
父節點
當前提交
919eae5477
共有 3 個文件被更改,包括 40 次插入35 次删除
  1. 2 0
      lib/ui/viewer/file/detail_page.dart
  2. 17 11
      lib/ui/viewer/file/fading_app_bar.dart
  3. 21 24
      lib/ui/viewer/file/fading_bottom_bar.dart

+ 2 - 0
lib/ui/viewer/file/detail_page.dart

@@ -124,6 +124,8 @@ class _DetailPageState extends State<DetailPage> {
               _files![_selectedIndex],
               _onEditFileRequested,
               widget.config.mode == DetailPageMode.minimalistic,
+              onFileRemoved: _onFileRemoved,
+              userID: Configuration.instance.getUserID(),
               key: _bottomBarKey,
             ),
           ],

+ 17 - 11
lib/ui/viewer/file/fading_app_bar.dart

@@ -14,6 +14,7 @@ import 'package:photos/events/local_photos_updated_event.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/models/file_type.dart';
 import 'package:photos/models/ignored_file.dart';
+import "package:photos/models/magic_metadata.dart";
 import 'package:photos/models/selected_files.dart';
 import 'package:photos/models/trash_file.dart';
 import 'package:photos/services/collections_service.dart';
@@ -21,12 +22,12 @@ import 'package:photos/services/favorites_service.dart';
 import 'package:photos/services/hidden_service.dart';
 import 'package:photos/services/ignored_files_service.dart';
 import 'package:photos/services/local_sync_service.dart';
-import "package:photos/ui/actions/file/file_actions.dart";
 import 'package:photos/ui/common/progress_dialog.dart';
 import 'package:photos/ui/create_collection_sheet.dart';
 import 'package:photos/ui/viewer/file/custom_app_bar.dart';
 import 'package:photos/utils/dialog_util.dart';
 import 'package:photos/utils/file_util.dart';
+import "package:photos/utils/magic_util.dart";
 import 'package:photos/utils/toast_util.dart';
 
 class FadingAppBar extends StatefulWidget implements PreferredSizeWidget {
@@ -145,22 +146,22 @@ class FadingAppBarState extends State<FadingAppBar> {
             );
           }
           // options for files owned by the user
-          if (isOwnedByUser) {
+          if (isOwnedByUser && !isFileHidden) {
+            final bool isArchived =
+                widget.file.magicMetadata.visibility == visibilityArchive;
             items.add(
               PopupMenuItem(
                 value: 2,
                 child: Row(
                   children: [
                     Icon(
-                      Platform.isAndroid
-                          ? Icons.delete_outline
-                          : CupertinoIcons.delete,
+                      isArchived ? Icons.unarchive : Icons.archive_outlined,
                       color: Theme.of(context).iconTheme.color,
                     ),
                     const Padding(
                       padding: EdgeInsets.all(8),
                     ),
-                    const Text("Delete"),
+                    Text(isArchived ? "Unarchive" : "Archive"),
                   ],
                 ),
               ),
@@ -232,7 +233,7 @@ class FadingAppBarState extends State<FadingAppBar> {
           if (value == 1) {
             _download(widget.file);
           } else if (value == 2) {
-            await _showSingleFileDeleteSheet(widget.file);
+            await _toggleFileArchiveStatus(widget.file);
           } else if (value == 3) {
             _setAs(widget.file);
           } else if (value == 4) {
@@ -335,12 +336,17 @@ class FadingAppBarState extends State<FadingAppBar> {
     );
   }
 
-  Future<void> _showSingleFileDeleteSheet(File file) async {
-    await showSingleFileDeleteSheet(
+  Future<void> _toggleFileArchiveStatus(File file) async {
+    final bool isArchived =
+        widget.file.magicMetadata.visibility == visibilityArchive;
+    await changeVisibility(
       context,
-      file,
-      onFileRemoved: widget.onFileRemoved,
+      [widget.file],
+      isArchived ? visibilityVisible : visibilityArchive,
     );
+    if (mounted) {
+      setState(() {});
+    }
   }
 
   Future<void> _download(File file) async {

+ 21 - 24
lib/ui/viewer/file/fading_bottom_bar.dart

@@ -2,30 +2,30 @@ import 'dart:io';
 
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
-import 'package:photos/core/configuration.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/models/file_type.dart';
-import 'package:photos/models/magic_metadata.dart';
 import 'package:photos/models/selected_files.dart';
 import 'package:photos/models/trash_file.dart';
-import 'package:photos/services/collections_service.dart';
 import 'package:photos/theme/colors.dart';
 import 'package:photos/theme/ente_theme.dart';
 import "package:photos/ui/actions/file/file_actions.dart";
 import 'package:photos/ui/create_collection_sheet.dart';
 import 'package:photos/utils/delete_file_util.dart';
-import 'package:photos/utils/magic_util.dart';
 import 'package:photos/utils/share_util.dart';
 
 class FadingBottomBar extends StatefulWidget {
   final File file;
   final Function(File) onEditRequested;
+  final Function(File) onFileRemoved;
   final bool showOnlyInfoButton;
+  final int? userID;
 
   const FadingBottomBar(
     this.file,
     this.onEditRequested,
     this.showOnlyInfoButton, {
+    required this.onFileRemoved,
+    this.userID,
     Key? key,
   }) : super(key: key);
 
@@ -62,6 +62,8 @@ class FadingBottomBarState extends State<FadingBottomBar> {
 
   Widget _getBottomBar() {
     final List<Widget> children = [];
+    final bool isOwnedByUser =
+        widget.file.ownerID == null || widget.file.ownerID == widget.userID;
     children.add(
       Tooltip(
         message: "Info",
@@ -87,15 +89,7 @@ class FadingBottomBarState extends State<FadingBottomBar> {
     if (widget.file is TrashFile) {
       _addTrashOptions(children);
     }
-    final bool isUploadedByUser = widget.file.uploadedFileID != null &&
-        widget.file.ownerID == Configuration.instance.getUserID();
-    bool isFileHidden = false;
-    if (isUploadedByUser) {
-      isFileHidden = CollectionsService.instance
-              .getCollectionByID(widget.file.collectionID!)
-              ?.isHidden() ??
-          false;
-    }
+
     if (!widget.showOnlyInfoButton && widget.file is! TrashFile) {
       if (widget.file.fileType == FileType.image ||
           widget.file.fileType == FileType.livePhoto) {
@@ -117,26 +111,21 @@ class FadingBottomBarState extends State<FadingBottomBar> {
           ),
         );
       }
-      if (isUploadedByUser && !isFileHidden) {
-        final bool isArchived =
-            widget.file.magicMetadata.visibility == visibilityArchive;
+      if (isOwnedByUser) {
         children.add(
           Tooltip(
-            message: isArchived ? "Unarchive" : "Archive",
+            message: "Delete",
             child: Padding(
               padding: const EdgeInsets.only(top: 12, bottom: 12),
               child: IconButton(
                 icon: Icon(
-                  isArchived ? Icons.unarchive : Icons.archive_outlined,
+                  Platform.isAndroid
+                      ? Icons.delete_outline
+                      : CupertinoIcons.delete,
                   color: Colors.white,
                 ),
                 onPressed: () async {
-                  await changeVisibility(
-                    context,
-                    [widget.file],
-                    isArchived ? visibilityVisible : visibilityArchive,
-                  );
-                  safeRefresh();
+                  await _showSingleFileDeleteSheet(widget.file);
                 },
               ),
             ),
@@ -222,6 +211,14 @@ class FadingBottomBarState extends State<FadingBottomBar> {
     );
   }
 
+  Future<void> _showSingleFileDeleteSheet(File file) async {
+    await showSingleFileDeleteSheet(
+      context,
+      file,
+      onFileRemoved: widget.onFileRemoved,
+    );
+  }
+
   void _addTrashOptions(List<Widget> children) {
     children.add(
       Tooltip(