FileViewer: Swap delete and archive/unarchive options

This commit is contained in:
Neeraj Gupta 2023-02-22 16:24:31 +05:30
parent 7ba1f11dae
commit 919eae5477
No known key found for this signature in database
GPG key ID: 3C5A1684DC1729E1
3 changed files with 40 additions and 35 deletions

View file

@ -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,
),
],

View file

@ -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 {

View file

@ -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(