FileViewer: Swap delete and archive/unarchive options
This commit is contained in:
parent
7ba1f11dae
commit
919eae5477
|
@ -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,
|
||||
),
|
||||
],
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in a new issue