From b7bd8c83bae2e32039d97fe44085fb018bfb13ff Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Thu, 8 Aug 2024 00:44:27 +0530 Subject: [PATCH 1/2] [mob][photos] Swipe lock for multiple files --- mobile/lib/events/file_swipe_lock_event.dart | 6 ++-- .../file_selection_actions_widget.dart | 28 +++++++++++++++++-- mobile/lib/ui/viewer/file/detail_page.dart | 21 ++++++++------ mobile/lib/ui/viewer/file/file_app_bar.dart | 20 ++++++------- .../lib/ui/viewer/file/file_bottom_bar.dart | 8 +++--- mobile/lib/ui/viewer/file/video_widget.dart | 6 ++-- .../lib/ui/viewer/file/video_widget_new.dart | 6 ++-- mobile/lib/ui/viewer/file/zoomable_image.dart | 6 ++-- 8 files changed, 65 insertions(+), 36 deletions(-) diff --git a/mobile/lib/events/file_swipe_lock_event.dart b/mobile/lib/events/file_swipe_lock_event.dart index 7e1a430202..48aed9bcf5 100644 --- a/mobile/lib/events/file_swipe_lock_event.dart +++ b/mobile/lib/events/file_swipe_lock_event.dart @@ -1,7 +1,7 @@ import "package:photos/events/event.dart"; class FileSwipeLockEvent extends Event { - final bool shouldSwipeLock; - - FileSwipeLockEvent(this.shouldSwipeLock); + final bool isGuestView; + final bool swipeLocked; + FileSwipeLockEvent(this.isGuestView, this.swipeLocked); } diff --git a/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart b/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart index 9485326abb..b37b17f671 100644 --- a/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart +++ b/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart @@ -8,6 +8,7 @@ import "package:logging/logging.dart"; import "package:modal_bottom_sheet/modal_bottom_sheet.dart"; import 'package:photos/core/configuration.dart'; import "package:photos/core/event_bus.dart"; +import "package:photos/events/file_swipe_lock_event.dart"; import "package:photos/events/people_changed_event.dart"; import "package:photos/face/model/person.dart"; import "package:photos/generated/l10n.dart"; @@ -32,9 +33,9 @@ import 'package:photos/ui/components/action_sheet_widget.dart'; import "package:photos/ui/components/bottom_action_bar/selection_action_button_widget.dart"; import 'package:photos/ui/components/buttons/button_widget.dart'; import 'package:photos/ui/components/models/button_type.dart'; -// import 'package:photos/ui/sharing/manage_links_widget.dart'; import "package:photos/ui/sharing/show_images_prevew.dart"; import "package:photos/ui/tools/collage/collage_creator_page.dart"; +import "package:photos/ui/viewer/file/detail_page.dart"; import "package:photos/ui/viewer/location/update_location_data_widget.dart"; import 'package:photos/utils/delete_file_util.dart'; import "package:photos/utils/dialog_util.dart"; @@ -271,7 +272,13 @@ class _FileSelectionActionsWidgetState ), ); } - + items.add( + SelectionActionButton( + icon: Icons.lock, + labelText: "Guest view", + onTap: _onGuestViewClick, + ), + ); items.add( SelectionActionButton( icon: Icons.grid_view_outlined, @@ -559,6 +566,23 @@ class _FileSelectionActionsWidgetState } } + Future _onGuestViewClick() async { + final List selectedFiles = widget.selectedFiles.files.toList(); + final page = DetailPage( + DetailPageConfiguration( + selectedFiles, + null, + 0, + "guest_view", + ), + ); + routeToPage(context, page, forceCustomPageRoute: true).ignore(); + WidgetsBinding.instance.addPostFrameCallback((_) { + Bus.instance.fire(FileSwipeLockEvent(true, false)); + }); + widget.selectedFiles.clearAll(); + } + Future _onArchiveClick() async { await changeVisibility( context, diff --git a/mobile/lib/ui/viewer/file/detail_page.dart b/mobile/lib/ui/viewer/file/detail_page.dart index 521a12ea69..bcf3d0540c 100644 --- a/mobile/lib/ui/viewer/file/detail_page.dart +++ b/mobile/lib/ui/viewer/file/detail_page.dart @@ -86,7 +86,8 @@ class _DetailPageState extends State { bool _hasLoadedTillEnd = false; final _enableFullScreenNotifier = ValueNotifier(false); bool _isFirstOpened = true; - bool isFileSwipeLocked = false; + bool isGuestView = false; + bool swipeLocked = false; late final StreamSubscription _fileSwipeLockEventSubscription; @@ -102,7 +103,8 @@ class _DetailPageState extends State { _fileSwipeLockEventSubscription = Bus.instance.on().listen((event) { setState(() { - isFileSwipeLocked = event.shouldSwipeLock; + isGuestView = event.isGuestView; + swipeLocked = event.swipeLocked; }); }); } @@ -138,12 +140,12 @@ class _DetailPageState extends State { " files .", ); return PopScope( - canPop: !isFileSwipeLocked, + canPop: !isGuestView, onPopInvoked: (didPop) async { - if (isFileSwipeLocked) { + if (isGuestView) { final authenticated = await _requestAuthentication(); if (authenticated) { - Bus.instance.fire(FileSwipeLockEvent(false)); + Bus.instance.fire(FileSwipeLockEvent(false, false)); } } }, @@ -176,7 +178,7 @@ class _DetailPageState extends State { _files![selectedIndex], _onEditFileRequested, widget.config.mode == DetailPageMode.minimalistic && - !isFileSwipeLocked, + !isGuestView, onFileRemoved: _onFileRemoved, userID: Configuration.instance.getUserID(), enableFullScreenNotifier: _enableFullScreenNotifier, @@ -235,10 +237,13 @@ class _DetailPageState extends State { } else { _selectedIndexNotifier.value = index; } + Bus.instance.fire(FileSwipeLockEvent(isGuestView, swipeLocked)); _preloadEntries(); }, - physics: _shouldDisableScroll || isFileSwipeLocked - ? const NeverScrollableScrollPhysics() + physics: _shouldDisableScroll || isGuestView + ? swipeLocked + ? const NeverScrollableScrollPhysics() + : const FastScrollPhysics(speedFactor: 4.0) : const FastScrollPhysics(speedFactor: 4.0), controller: _pageController, itemCount: _files!.length, diff --git a/mobile/lib/ui/viewer/file/file_app_bar.dart b/mobile/lib/ui/viewer/file/file_app_bar.dart index e67795888f..f6d83169c6 100644 --- a/mobile/lib/ui/viewer/file/file_app_bar.dart +++ b/mobile/lib/ui/viewer/file/file_app_bar.dart @@ -53,7 +53,7 @@ class FileAppBarState extends State { final List _actions = []; late final StreamSubscription _fileSwipeLockEventSubscription; - bool _isFileSwipeLocked = false; + bool isGuestView = false; @override void didUpdateWidget(FileAppBar oldWidget) { @@ -69,7 +69,7 @@ class FileAppBarState extends State { _fileSwipeLockEventSubscription = Bus.instance.on().listen((event) { setState(() { - _isFileSwipeLocked = event.shouldSwipeLock; + isGuestView = event.isGuestView; }); }); } @@ -124,19 +124,19 @@ class FileAppBarState extends State { switchOutCurve: Curves.easeInOut, child: AppBar( clipBehavior: Clip.none, - key: ValueKey(_isFileSwipeLocked), + key: ValueKey(isGuestView), iconTheme: const IconThemeData( color: Colors.white, ), //same for both themes leading: IconButton( icon: const Icon(Icons.arrow_back), onPressed: () { - _isFileSwipeLocked + isGuestView ? _requestAuthentication() : Navigator.of(context).pop(); }, ), - actions: shouldShowActions && !_isFileSwipeLocked ? _actions : [], + actions: shouldShowActions && !isGuestView ? _actions : [], elevation: 0, backgroundColor: const Color(0x00000000), ), @@ -306,7 +306,7 @@ class FileAppBarState extends State { const Padding( padding: EdgeInsets.all(8), ), - const Text("Swipe lock"), + const Text("Guest view"), ], ), ), @@ -329,7 +329,7 @@ class FileAppBarState extends State { } else if (value == 5) { await _handleUnHideRequest(context); } else if (value == 6) { - await _onSwipeLock(); + await _onTapGuestView(); } }, ), @@ -413,9 +413,9 @@ class FileAppBarState extends State { } } - Future _onSwipeLock() async { + Future _onTapGuestView() async { if (await LocalAuthentication().isDeviceSupported()) { - Bus.instance.fire(FileSwipeLockEvent(!_isFileSwipeLocked)); + Bus.instance.fire(FileSwipeLockEvent(!isGuestView, true)); } else { await showErrorDialog( context, @@ -432,7 +432,7 @@ class FileAppBarState extends State { "Please authenticate to view more photos and videos.", ); if (hasAuthenticated) { - Bus.instance.fire(FileSwipeLockEvent(false)); + Bus.instance.fire(FileSwipeLockEvent(false, false)); } } } diff --git a/mobile/lib/ui/viewer/file/file_bottom_bar.dart b/mobile/lib/ui/viewer/file/file_bottom_bar.dart index 9db7275918..a569656b29 100644 --- a/mobile/lib/ui/viewer/file/file_bottom_bar.dart +++ b/mobile/lib/ui/viewer/file/file_bottom_bar.dart @@ -47,7 +47,7 @@ class FileBottomBar extends StatefulWidget { class FileBottomBarState extends State { final GlobalKey shareButtonKey = GlobalKey(); - bool _isFileSwipeLocked = false; + bool isGuestView = false; late final StreamSubscription _fileSwipeLockEventSubscription; bool isPanorama = false; @@ -59,7 +59,7 @@ class FileBottomBarState extends State { _fileSwipeLockEventSubscription = Bus.instance.on().listen((event) { setState(() { - _isFileSwipeLocked = event.shouldSwipeLock; + isGuestView = event.isGuestView; }); }); } @@ -220,9 +220,9 @@ class FileBottomBarState extends State { valueListenable: widget.enableFullScreenNotifier, builder: (BuildContext context, bool isFullScreen, _) { return IgnorePointer( - ignoring: isFullScreen || _isFileSwipeLocked, + ignoring: isFullScreen || isGuestView, child: AnimatedOpacity( - opacity: isFullScreen || _isFileSwipeLocked ? 0 : 1, + opacity: isFullScreen || isGuestView ? 0 : 1, duration: const Duration(milliseconds: 250), curve: Curves.easeInOut, child: Align( diff --git a/mobile/lib/ui/viewer/file/video_widget.dart b/mobile/lib/ui/viewer/file/video_widget.dart index 2cbb14fed0..b9d06ecaff 100644 --- a/mobile/lib/ui/viewer/file/video_widget.dart +++ b/mobile/lib/ui/viewer/file/video_widget.dart @@ -48,7 +48,7 @@ class _VideoWidgetState extends State { final _progressNotifier = ValueNotifier(null); bool _isPlaying = false; final EnteWakeLock _wakeLock = EnteWakeLock(); - bool _isFileSwipeLocked = false; + bool isGuestView = false; late final StreamSubscription _fileSwipeLockEventSubscription; @@ -83,7 +83,7 @@ class _VideoWidgetState extends State { _fileSwipeLockEventSubscription = Bus.instance.on().listen((event) { setState(() { - _isFileSwipeLocked = event.shouldSwipeLock; + isGuestView = event.isGuestView; }); }); } @@ -188,7 +188,7 @@ class _VideoWidgetState extends State { ? _getVideoPlayer() : _getLoadingWidget(); final contentWithDetector = GestureDetector( - onVerticalDragUpdate: _isFileSwipeLocked + onVerticalDragUpdate: isGuestView ? null : (d) => { if (d.delta.dy > dragSensitivity) diff --git a/mobile/lib/ui/viewer/file/video_widget_new.dart b/mobile/lib/ui/viewer/file/video_widget_new.dart index dec11b3ca1..f1a91b77ff 100644 --- a/mobile/lib/ui/viewer/file/video_widget_new.dart +++ b/mobile/lib/ui/viewer/file/video_widget_new.dart @@ -47,7 +47,7 @@ class _VideoWidgetNewState extends State late StreamSubscription playingStreamSubscription; bool _isAppInFG = true; late StreamSubscription pauseVideoSubscription; - bool _isFileSwipeLocked = false; + bool isGuestView = false; late final StreamSubscription _fileSwipeLockEventSubscription; @@ -97,7 +97,7 @@ class _VideoWidgetNewState extends State _fileSwipeLockEventSubscription = Bus.instance.on().listen((event) { setState(() { - _isFileSwipeLocked = event.shouldSwipeLock; + isGuestView = event.isGuestView; }); }); } @@ -159,7 +159,7 @@ class _VideoWidgetNewState extends State ), fullscreen: const MaterialVideoControlsThemeData(), child: GestureDetector( - onVerticalDragUpdate: _isFileSwipeLocked + onVerticalDragUpdate: isGuestView ? null : (d) => { if (d.delta.dy > dragSensitivity) diff --git a/mobile/lib/ui/viewer/file/zoomable_image.dart b/mobile/lib/ui/viewer/file/zoomable_image.dart index 4df004b1a2..64a7b2e0e5 100644 --- a/mobile/lib/ui/viewer/file/zoomable_image.dart +++ b/mobile/lib/ui/viewer/file/zoomable_image.dart @@ -54,7 +54,7 @@ class _ZoomableImageState extends State { bool _isZooming = false; PhotoViewController _photoViewController = PhotoViewController(); final _scaleStateController = PhotoViewScaleStateController(); - bool _isFileSwipeLocked = false; + bool isGuestView = false; late final StreamSubscription _fileSwipeLockEventSubscription; @@ -75,7 +75,7 @@ class _ZoomableImageState extends State { _fileSwipeLockEventSubscription = Bus.instance.on().listen((event) { setState(() { - _isFileSwipeLocked = event.shouldSwipeLock; + isGuestView = event.isGuestView; }); }); } @@ -159,7 +159,7 @@ class _ZoomableImageState extends State { } final GestureDragUpdateCallback? verticalDragCallback = - _isZooming || _isFileSwipeLocked + _isZooming || isGuestView ? null : (d) => { if (!_isZooming) From 5925dfb3fc1188f87638149f57d58414276737fe Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Thu, 8 Aug 2024 21:41:46 +0530 Subject: [PATCH 2/2] [mob][photos] Minor fixes --- mobile/lib/events/file_swipe_lock_event.dart | 7 ------- mobile/lib/events/guest_view_event.dart | 7 +++++++ .../file_selection_actions_widget.dart | 4 ++-- mobile/lib/ui/viewer/file/detail_page.dart | 21 ++++++++----------- mobile/lib/ui/viewer/file/file_app_bar.dart | 15 +++++++------ .../lib/ui/viewer/file/file_bottom_bar.dart | 11 +++++----- mobile/lib/ui/viewer/file/video_widget.dart | 11 +++++----- .../lib/ui/viewer/file/video_widget_new.dart | 11 +++++----- mobile/lib/ui/viewer/file/zoomable_image.dart | 17 ++++----------- .../viewer/file/zoomable_live_image_new.dart | 18 ++++++++++++++-- 10 files changed, 60 insertions(+), 62 deletions(-) delete mode 100644 mobile/lib/events/file_swipe_lock_event.dart create mode 100644 mobile/lib/events/guest_view_event.dart diff --git a/mobile/lib/events/file_swipe_lock_event.dart b/mobile/lib/events/file_swipe_lock_event.dart deleted file mode 100644 index 48aed9bcf5..0000000000 --- a/mobile/lib/events/file_swipe_lock_event.dart +++ /dev/null @@ -1,7 +0,0 @@ -import "package:photos/events/event.dart"; - -class FileSwipeLockEvent extends Event { - final bool isGuestView; - final bool swipeLocked; - FileSwipeLockEvent(this.isGuestView, this.swipeLocked); -} diff --git a/mobile/lib/events/guest_view_event.dart b/mobile/lib/events/guest_view_event.dart new file mode 100644 index 0000000000..6c74f1f4ab --- /dev/null +++ b/mobile/lib/events/guest_view_event.dart @@ -0,0 +1,7 @@ +import "package:photos/events/event.dart"; + +class GuestViewEvent extends Event { + final bool isGuestView; + final bool swipeLocked; + GuestViewEvent(this.isGuestView, this.swipeLocked); +} diff --git a/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart b/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart index b37b17f671..148d97f5e6 100644 --- a/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart +++ b/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart @@ -8,7 +8,7 @@ import "package:logging/logging.dart"; import "package:modal_bottom_sheet/modal_bottom_sheet.dart"; import 'package:photos/core/configuration.dart'; import "package:photos/core/event_bus.dart"; -import "package:photos/events/file_swipe_lock_event.dart"; +import "package:photos/events/guest_view_event.dart"; import "package:photos/events/people_changed_event.dart"; import "package:photos/face/model/person.dart"; import "package:photos/generated/l10n.dart"; @@ -578,7 +578,7 @@ class _FileSelectionActionsWidgetState ); routeToPage(context, page, forceCustomPageRoute: true).ignore(); WidgetsBinding.instance.addPostFrameCallback((_) { - Bus.instance.fire(FileSwipeLockEvent(true, false)); + Bus.instance.fire(GuestViewEvent(true, false)); }); widget.selectedFiles.clearAll(); } diff --git a/mobile/lib/ui/viewer/file/detail_page.dart b/mobile/lib/ui/viewer/file/detail_page.dart index bcf3d0540c..64e1e73ac1 100644 --- a/mobile/lib/ui/viewer/file/detail_page.dart +++ b/mobile/lib/ui/viewer/file/detail_page.dart @@ -10,7 +10,7 @@ import 'package:photos/core/configuration.dart'; import 'package:photos/core/constants.dart'; import 'package:photos/core/errors.dart'; import "package:photos/core/event_bus.dart"; -import "package:photos/events/file_swipe_lock_event.dart"; +import "package:photos/events/guest_view_event.dart"; import "package:photos/generated/l10n.dart"; import 'package:photos/models/file/file.dart'; import "package:photos/models/file/file_type.dart"; @@ -88,8 +88,7 @@ class _DetailPageState extends State { bool _isFirstOpened = true; bool isGuestView = false; bool swipeLocked = false; - late final StreamSubscription - _fileSwipeLockEventSubscription; + late final StreamSubscription _guestViewEventSubscription; @override void initState() { @@ -100,8 +99,8 @@ class _DetailPageState extends State { _selectedIndexNotifier.value = widget.config.selectedIndex; _preloadEntries(); _pageController = PageController(initialPage: _selectedIndexNotifier.value); - _fileSwipeLockEventSubscription = - Bus.instance.on().listen((event) { + _guestViewEventSubscription = + Bus.instance.on().listen((event) { setState(() { isGuestView = event.isGuestView; swipeLocked = event.swipeLocked; @@ -111,7 +110,7 @@ class _DetailPageState extends State { @override void dispose() { - _fileSwipeLockEventSubscription.cancel(); + _guestViewEventSubscription.cancel(); _pageController.dispose(); _enableFullScreenNotifier.dispose(); _selectedIndexNotifier.dispose(); @@ -145,7 +144,7 @@ class _DetailPageState extends State { if (isGuestView) { final authenticated = await _requestAuthentication(); if (authenticated) { - Bus.instance.fire(FileSwipeLockEvent(false, false)); + Bus.instance.fire(GuestViewEvent(false, false)); } } }, @@ -237,13 +236,11 @@ class _DetailPageState extends State { } else { _selectedIndexNotifier.value = index; } - Bus.instance.fire(FileSwipeLockEvent(isGuestView, swipeLocked)); + Bus.instance.fire(GuestViewEvent(isGuestView, swipeLocked)); _preloadEntries(); }, - physics: _shouldDisableScroll || isGuestView - ? swipeLocked - ? const NeverScrollableScrollPhysics() - : const FastScrollPhysics(speedFactor: 4.0) + physics: _shouldDisableScroll || swipeLocked + ? const NeverScrollableScrollPhysics() : const FastScrollPhysics(speedFactor: 4.0), controller: _pageController, itemCount: _files!.length, diff --git a/mobile/lib/ui/viewer/file/file_app_bar.dart b/mobile/lib/ui/viewer/file/file_app_bar.dart index f6d83169c6..28ba653e2c 100644 --- a/mobile/lib/ui/viewer/file/file_app_bar.dart +++ b/mobile/lib/ui/viewer/file/file_app_bar.dart @@ -6,7 +6,7 @@ import "package:local_auth/local_auth.dart"; import 'package:logging/logging.dart'; import 'package:media_extension/media_extension.dart'; import "package:photos/core/event_bus.dart"; -import "package:photos/events/file_swipe_lock_event.dart"; +import "package:photos/events/guest_view_event.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/l10n/l10n.dart"; import "package:photos/models/file/extensions/file_props.dart"; @@ -51,8 +51,7 @@ class FileAppBar extends StatefulWidget { class FileAppBarState extends State { final _logger = Logger("FadingAppBar"); final List _actions = []; - late final StreamSubscription - _fileSwipeLockEventSubscription; + late final StreamSubscription _guestViewEventSubscription; bool isGuestView = false; @override @@ -66,8 +65,8 @@ class FileAppBarState extends State { @override void initState() { super.initState(); - _fileSwipeLockEventSubscription = - Bus.instance.on().listen((event) { + _guestViewEventSubscription = + Bus.instance.on().listen((event) { setState(() { isGuestView = event.isGuestView; }); @@ -76,7 +75,7 @@ class FileAppBarState extends State { @override void dispose() { - _fileSwipeLockEventSubscription.cancel(); + _guestViewEventSubscription.cancel(); super.dispose(); } @@ -415,7 +414,7 @@ class FileAppBarState extends State { Future _onTapGuestView() async { if (await LocalAuthentication().isDeviceSupported()) { - Bus.instance.fire(FileSwipeLockEvent(!isGuestView, true)); + Bus.instance.fire(GuestViewEvent(true, true)); } else { await showErrorDialog( context, @@ -432,7 +431,7 @@ class FileAppBarState extends State { "Please authenticate to view more photos and videos.", ); if (hasAuthenticated) { - Bus.instance.fire(FileSwipeLockEvent(false, false)); + Bus.instance.fire(GuestViewEvent(false, false)); } } } diff --git a/mobile/lib/ui/viewer/file/file_bottom_bar.dart b/mobile/lib/ui/viewer/file/file_bottom_bar.dart index a569656b29..2c9781cbc5 100644 --- a/mobile/lib/ui/viewer/file/file_bottom_bar.dart +++ b/mobile/lib/ui/viewer/file/file_bottom_bar.dart @@ -5,7 +5,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import "package:logging/logging.dart"; import "package:photos/core/event_bus.dart"; -import "package:photos/events/file_swipe_lock_event.dart"; +import "package:photos/events/guest_view_event.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/models/file/extensions/file_props.dart"; import 'package:photos/models/file/file.dart'; @@ -48,16 +48,15 @@ class FileBottomBar extends StatefulWidget { class FileBottomBarState extends State { final GlobalKey shareButtonKey = GlobalKey(); bool isGuestView = false; - late final StreamSubscription - _fileSwipeLockEventSubscription; + late final StreamSubscription _guestViewEventSubscription; bool isPanorama = false; int? lastFileGenID; @override void initState() { super.initState(); - _fileSwipeLockEventSubscription = - Bus.instance.on().listen((event) { + _guestViewEventSubscription = + Bus.instance.on().listen((event) { setState(() { isGuestView = event.isGuestView; }); @@ -66,7 +65,7 @@ class FileBottomBarState extends State { @override void dispose() { - _fileSwipeLockEventSubscription.cancel(); + _guestViewEventSubscription.cancel(); super.dispose(); } diff --git a/mobile/lib/ui/viewer/file/video_widget.dart b/mobile/lib/ui/viewer/file/video_widget.dart index b9d06ecaff..d700690edb 100644 --- a/mobile/lib/ui/viewer/file/video_widget.dart +++ b/mobile/lib/ui/viewer/file/video_widget.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:photos/core/constants.dart'; import "package:photos/core/event_bus.dart"; -import "package:photos/events/file_swipe_lock_event.dart"; +import "package:photos/events/guest_view_event.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/models/file/extensions/file_props.dart"; import 'package:photos/models/file/file.dart'; @@ -49,8 +49,7 @@ class _VideoWidgetState extends State { bool _isPlaying = false; final EnteWakeLock _wakeLock = EnteWakeLock(); bool isGuestView = false; - late final StreamSubscription - _fileSwipeLockEventSubscription; + late final StreamSubscription _guestViewEventSubscription; @override void initState() { @@ -80,8 +79,8 @@ class _VideoWidgetState extends State { } }); } - _fileSwipeLockEventSubscription = - Bus.instance.on().listen((event) { + _guestViewEventSubscription = + Bus.instance.on().listen((event) { setState(() { isGuestView = event.isGuestView; }); @@ -132,7 +131,7 @@ class _VideoWidgetState extends State { @override void dispose() { - _fileSwipeLockEventSubscription.cancel(); + _guestViewEventSubscription.cancel(); removeCallBack(widget.file); _videoPlayerController?.dispose(); _chewieController?.dispose(); diff --git a/mobile/lib/ui/viewer/file/video_widget_new.dart b/mobile/lib/ui/viewer/file/video_widget_new.dart index f1a91b77ff..274a5fce48 100644 --- a/mobile/lib/ui/viewer/file/video_widget_new.dart +++ b/mobile/lib/ui/viewer/file/video_widget_new.dart @@ -8,7 +8,7 @@ import "package:media_kit/media_kit.dart"; import "package:media_kit_video/media_kit_video.dart"; import "package:photos/core/constants.dart"; import "package:photos/core/event_bus.dart"; -import "package:photos/events/file_swipe_lock_event.dart"; +import "package:photos/events/guest_view_event.dart"; import "package:photos/events/pause_video_event.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/models/file/extensions/file_props.dart"; @@ -48,8 +48,7 @@ class _VideoWidgetNewState extends State bool _isAppInFG = true; late StreamSubscription pauseVideoSubscription; bool isGuestView = false; - late final StreamSubscription - _fileSwipeLockEventSubscription; + late final StreamSubscription _guestViewEventSubscription; @override void initState() { @@ -94,8 +93,8 @@ class _VideoWidgetNewState extends State pauseVideoSubscription = Bus.instance.on().listen((event) { player.pause(); }); - _fileSwipeLockEventSubscription = - Bus.instance.on().listen((event) { + _guestViewEventSubscription = + Bus.instance.on().listen((event) { setState(() { isGuestView = event.isGuestView; }); @@ -113,7 +112,7 @@ class _VideoWidgetNewState extends State @override void dispose() { - _fileSwipeLockEventSubscription.cancel(); + _guestViewEventSubscription.cancel(); pauseVideoSubscription.cancel(); removeCallBack(widget.file); _progressNotifier.dispose(); diff --git a/mobile/lib/ui/viewer/file/zoomable_image.dart b/mobile/lib/ui/viewer/file/zoomable_image.dart index 64a7b2e0e5..0743cba757 100644 --- a/mobile/lib/ui/viewer/file/zoomable_image.dart +++ b/mobile/lib/ui/viewer/file/zoomable_image.dart @@ -9,8 +9,7 @@ import 'package:photos/core/cache/thumbnail_in_memory_cache.dart'; import 'package:photos/core/constants.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/db/files_db.dart'; -import "package:photos/events/file_swipe_lock_event.dart"; -import 'package:photos/events/files_updated_event.dart'; +import "package:photos/events/files_updated_event.dart"; import 'package:photos/events/local_photos_updated_event.dart'; import "package:photos/models/file/extensions/file_props.dart"; import 'package:photos/models/file/file.dart'; @@ -26,6 +25,7 @@ class ZoomableImage extends StatefulWidget { final String? tagPrefix; final Decoration? backgroundDecoration; final bool shouldCover; + final bool isGuestView; const ZoomableImage( this.photo, { @@ -34,6 +34,7 @@ class ZoomableImage extends StatefulWidget { required this.tagPrefix, this.backgroundDecoration, this.shouldCover = false, + this.isGuestView = false, }); @override @@ -54,9 +55,6 @@ class _ZoomableImageState extends State { bool _isZooming = false; PhotoViewController _photoViewController = PhotoViewController(); final _scaleStateController = PhotoViewScaleStateController(); - bool isGuestView = false; - late final StreamSubscription - _fileSwipeLockEventSubscription; @override void initState() { @@ -72,17 +70,10 @@ class _ZoomableImageState extends State { debugPrint("isZooming = $_isZooming, currentState $value"); // _logger.info('is reakky zooming $_isZooming with state $value'); }; - _fileSwipeLockEventSubscription = - Bus.instance.on().listen((event) { - setState(() { - isGuestView = event.isGuestView; - }); - }); } @override void dispose() { - _fileSwipeLockEventSubscription.cancel(); _photoViewController.dispose(); _scaleStateController.dispose(); super.dispose(); @@ -159,7 +150,7 @@ class _ZoomableImageState extends State { } final GestureDragUpdateCallback? verticalDragCallback = - _isZooming || isGuestView + _isZooming || widget.isGuestView ? null : (d) => { if (!_isZooming) diff --git a/mobile/lib/ui/viewer/file/zoomable_live_image_new.dart b/mobile/lib/ui/viewer/file/zoomable_live_image_new.dart index 598ae60e02..036a3a62f0 100644 --- a/mobile/lib/ui/viewer/file/zoomable_live_image_new.dart +++ b/mobile/lib/ui/viewer/file/zoomable_live_image_new.dart @@ -1,3 +1,4 @@ +import "dart:async"; import "dart:io"; import 'package:flutter/material.dart'; @@ -5,6 +6,8 @@ import 'package:logging/logging.dart'; import "package:media_kit/media_kit.dart"; import "package:media_kit_video/media_kit_video.dart"; import 'package:motion_photos/motion_photos.dart'; +import "package:photos/core/event_bus.dart"; +import "package:photos/events/guest_view_event.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/models/file/extensions/file_props.dart"; import 'package:photos/models/file/file.dart'; @@ -23,11 +26,11 @@ class ZoomableLiveImageNew extends StatefulWidget { const ZoomableLiveImageNew( this.enteFile, { - Key? key, + super.key, this.shouldDisableScroll, required this.tagPrefix, this.backgroundDecoration, - }) : super(key: key); + }); @override State createState() => _ZoomableLiveImageNewState(); @@ -43,6 +46,9 @@ class _ZoomableLiveImageNewState extends State late final _player = Player(); VideoController? _videoController; + bool isGuestView = false; + late final StreamSubscription _guestViewEventSubscription; + @override void initState() { _enteFile = widget.enteFile; @@ -52,6 +58,12 @@ class _ZoomableLiveImageNewState extends State if (_enteFile.isLivePhoto && _enteFile.isUploaded) { LocalFileUpdateService.instance.checkLivePhoto(_enteFile).ignore(); } + _guestViewEventSubscription = + Bus.instance.on().listen((event) { + setState(() { + isGuestView = event.isGuestView; + }); + }); super.initState(); } @@ -83,6 +95,7 @@ class _ZoomableLiveImageNewState extends State tagPrefix: widget.tagPrefix, shouldDisableScroll: widget.shouldDisableScroll, backgroundDecoration: widget.backgroundDecoration, + isGuestView: isGuestView, ); } return GestureDetector( @@ -98,6 +111,7 @@ class _ZoomableLiveImageNewState extends State _videoController!.player.stop(); _videoController!.player.dispose(); } + _guestViewEventSubscription.cancel(); super.dispose(); }