瀏覽代碼

Android: Add set as/ use as option for images

Neeraj Gupta 2 年之前
父節點
當前提交
2fc6c45563
共有 1 個文件被更改,包括 43 次插入0 次删除
  1. 43 0
      lib/ui/viewer/file/fading_app_bar.dart

+ 43 - 0
lib/ui/viewer/file/fading_app_bar.dart

@@ -7,6 +7,7 @@ import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:like_button/like_button.dart';
 import 'package:logging/logging.dart';
+import 'package:media_extension/media_extension.dart';
 import 'package:path/path.dart' as file_path;
 import 'package:photo_manager/photo_manager.dart';
 import 'package:photos/core/event_bus.dart';
@@ -153,6 +154,27 @@ class FadingAppBarState extends State<FadingAppBar> {
               ),
             );
           }
+          if ((widget.file.fileType == FileType.image ||
+                  widget.file.fileType == FileType.livePhoto) &&
+              Platform.isAndroid) {
+            items.add(
+              PopupMenuItem(
+                value: 3,
+                child: Row(
+                  children: [
+                    Icon(
+                      Icons.wallpaper_outlined,
+                      color: Theme.of(context).iconTheme.color,
+                    ),
+                    const Padding(
+                      padding: EdgeInsets.all(8),
+                    ),
+                    const Text("Use as"),
+                  ],
+                ),
+              ),
+            );
+          }
           return items;
         },
         onSelected: (value) {
@@ -160,6 +182,8 @@ class FadingAppBarState extends State<FadingAppBar> {
             _download(widget.file);
           } else if (value == 2) {
             _showDeleteSheet(widget.file);
+          } else if (value == 3) {
+            _useAs(widget.file);
           }
         },
       ),
@@ -344,4 +368,23 @@ class FadingAppBarState extends State<FadingAppBar> {
       showToast(context, "File saved to gallery");
     }
   }
+
+  Future<void> _useAs(File file) async {
+    final dialog = createProgressDialog(context, "Please wait...");
+    await dialog.show();
+    try {
+      // save and track image for livePhoto/image and video for FileType.video
+      final io.File fileToSave = await getFile(file);
+      var m = MediaExtension();
+      bool result = await m.setAs("file://${fileToSave.path}", "image/*");
+      if (result == false) {
+        showShortToast(context, "Something went wrong");
+      }
+      dialog.hide();
+    } catch (e) {
+      dialog.hide();
+      _logger.severe("Failed to use as", e);
+      showGenericErrorDialog(context);
+    }
+  }
 }