From b3c6c0fc9bfa9fb4f30a98cee96a87088568edf3 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 4 Sep 2024 20:44:47 +0530 Subject: [PATCH 1/2] [mob][photos] Show lockscreen when guestview is enabled and app is killed --- mobile/lib/core/configuration.dart | 9 +++++++++ mobile/lib/main.dart | 3 ++- mobile/lib/ui/tools/lock_screen.dart | 1 + .../ui/viewer/actions/file_selection_actions_widget.dart | 1 + mobile/lib/ui/viewer/file/detail_page.dart | 1 + mobile/lib/ui/viewer/file/file_app_bar.dart | 3 +++ 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 16a65d497f..1c555cb877 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -71,6 +71,7 @@ class Configuration { "has_selected_all_folders_for_backup"; static const anonymousUserIDKey = "anonymous_user_id"; static const endPointKey = "endpoint"; + static const guestViewKey = "key_guest_view"; static final _logger = Logger("Configuration"); String? _cachedToken; @@ -633,6 +634,14 @@ class Configuration { return _preferences.setBool(keyShowSystemLockScreen, value); } + Future setGuestView(bool value) { + return _preferences.setBool(guestViewKey, value); + } + + bool getGuestView() { + return _preferences.getBool(guestViewKey) ?? false; + } + void setVolatilePassword(String volatilePassword) { _volatilePassword = volatilePassword; } diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index 459a6d041e..a70b59ae07 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -112,7 +112,8 @@ Future _runInForeground(AdaptiveThemeMode? savedThemeMode) async { builder: (args) => EnteApp(_runBackgroundTask, _killBGTask, locale, savedThemeMode), lockScreen: const LockScreen(), - enabled: await Configuration.instance.shouldShowLockScreen(), + enabled: await Configuration.instance.shouldShowLockScreen() || + Configuration.instance.getGuestView(), locale: locale, lightTheme: lightThemeData, darkTheme: darkThemeData, diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 15f9d0250b..28f9cdcf1f 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -345,6 +345,7 @@ class _LockScreenState extends State lockedTimeInSeconds = 15; isTimerRunning = false; }); + await Configuration.instance.setGuestView(false); } else { if (!_hasPlacedAppInBackground) { if (_lockscreenSetting.getInvalidAttemptCount() > 4 && 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 50c6306322..ca77ec9a8a 100644 --- a/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart +++ b/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart @@ -581,6 +581,7 @@ class _FileSelectionActionsWidgetState "guest_view", ), ); + await Configuration.instance.setGuestView(true); routeToPage(context, page, forceCustomPageRoute: true).ignore(); WidgetsBinding.instance.addPostFrameCallback((_) { Bus.instance.fire(GuestViewEvent(true, false)); diff --git a/mobile/lib/ui/viewer/file/detail_page.dart b/mobile/lib/ui/viewer/file/detail_page.dart index 24dd9c0499..d78c677446 100644 --- a/mobile/lib/ui/viewer/file/detail_page.dart +++ b/mobile/lib/ui/viewer/file/detail_page.dart @@ -156,6 +156,7 @@ class _DetailPageState extends State { final authenticated = await _requestAuthentication(); if (authenticated) { Bus.instance.fire(GuestViewEvent(false, false)); + await Configuration.instance.setGuestView(false); } } }, diff --git a/mobile/lib/ui/viewer/file/file_app_bar.dart b/mobile/lib/ui/viewer/file/file_app_bar.dart index 67b10bb9ad..ce87e4955c 100644 --- a/mobile/lib/ui/viewer/file/file_app_bar.dart +++ b/mobile/lib/ui/viewer/file/file_app_bar.dart @@ -6,6 +6,7 @@ import "package:flutter_svg/flutter_svg.dart"; import "package:local_auth/local_auth.dart"; import 'package:logging/logging.dart'; import 'package:media_extension/media_extension.dart'; +import "package:photos/core/configuration.dart"; import "package:photos/core/event_bus.dart"; import "package:photos/events/guest_view_event.dart"; import "package:photos/generated/l10n.dart"; @@ -475,6 +476,7 @@ class FileAppBarState extends State { Future _onTapGuestView() async { if (await LocalAuthentication().isDeviceSupported()) { Bus.instance.fire(GuestViewEvent(true, true)); + await Configuration.instance.setGuestView(true); } else { await showErrorDialog( context, @@ -492,6 +494,7 @@ class FileAppBarState extends State { ); if (hasAuthenticated) { Bus.instance.fire(GuestViewEvent(false, false)); + await Configuration.instance.setGuestView(false); } } } From 3e136baee20acda753aeb6f3d1f8fe0deabfc62b Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Tue, 10 Sep 2024 17:01:35 +0530 Subject: [PATCH 2/2] [mob][photos] Refractor code --- mobile/lib/core/configuration.dart | 9 --------- mobile/lib/main.dart | 2 +- mobile/lib/ui/tools/lock_screen.dart | 3 ++- .../ui/viewer/actions/file_selection_actions_widget.dart | 3 ++- mobile/lib/ui/viewer/file/detail_page.dart | 3 ++- mobile/lib/ui/viewer/file/file_app_bar.dart | 5 ++--- mobile/lib/utils/local_settings.dart | 9 +++++++++ 7 files changed, 18 insertions(+), 16 deletions(-) diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 1c555cb877..16a65d497f 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -71,7 +71,6 @@ class Configuration { "has_selected_all_folders_for_backup"; static const anonymousUserIDKey = "anonymous_user_id"; static const endPointKey = "endpoint"; - static const guestViewKey = "key_guest_view"; static final _logger = Logger("Configuration"); String? _cachedToken; @@ -634,14 +633,6 @@ class Configuration { return _preferences.setBool(keyShowSystemLockScreen, value); } - Future setGuestView(bool value) { - return _preferences.setBool(guestViewKey, value); - } - - bool getGuestView() { - return _preferences.getBool(guestViewKey) ?? false; - } - void setVolatilePassword(String volatilePassword) { _volatilePassword = volatilePassword; } diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index a70b59ae07..b3181f923c 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -113,7 +113,7 @@ Future _runInForeground(AdaptiveThemeMode? savedThemeMode) async { EnteApp(_runBackgroundTask, _killBGTask, locale, savedThemeMode), lockScreen: const LockScreen(), enabled: await Configuration.instance.shouldShowLockScreen() || - Configuration.instance.getGuestView(), + localSettings.isOnGuestView(), locale: locale, lightTheme: lightThemeData, darkTheme: darkThemeData, diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 28f9cdcf1f..15d8abe68c 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -9,6 +9,7 @@ import 'package:logging/logging.dart'; import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/l10n/l10n.dart"; +import "package:photos/service_locator.dart"; import "package:photos/services/user_service.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; @@ -345,7 +346,7 @@ class _LockScreenState extends State lockedTimeInSeconds = 15; isTimerRunning = false; }); - await Configuration.instance.setGuestView(false); + await localSettings.setOnGuestView(false); } else { if (!_hasPlacedAppInBackground) { if (_lockscreenSetting.getInvalidAttemptCount() > 4 && 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 ca77ec9a8a..d3ef8bc524 100644 --- a/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart +++ b/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart @@ -21,6 +21,7 @@ import 'package:photos/models/gallery_type.dart'; import "package:photos/models/metadata/common_keys.dart"; import "package:photos/models/ml/face/person.dart"; import 'package:photos/models/selected_files.dart'; +import "package:photos/service_locator.dart"; import 'package:photos/services/collections_service.dart'; import 'package:photos/services/hidden_service.dart'; import 'package:photos/services/machine_learning/face_ml/feedback/cluster_feedback.dart'; @@ -581,7 +582,7 @@ class _FileSelectionActionsWidgetState "guest_view", ), ); - await Configuration.instance.setGuestView(true); + await localSettings.setOnGuestView(true); routeToPage(context, page, forceCustomPageRoute: true).ignore(); WidgetsBinding.instance.addPostFrameCallback((_) { Bus.instance.fire(GuestViewEvent(true, false)); diff --git a/mobile/lib/ui/viewer/file/detail_page.dart b/mobile/lib/ui/viewer/file/detail_page.dart index d78c677446..9f46cb3df4 100644 --- a/mobile/lib/ui/viewer/file/detail_page.dart +++ b/mobile/lib/ui/viewer/file/detail_page.dart @@ -15,6 +15,7 @@ import "package:photos/generated/l10n.dart"; import "package:photos/models/file/extensions/file_props.dart"; import 'package:photos/models/file/file.dart'; import "package:photos/models/file/file_type.dart"; +import "package:photos/service_locator.dart"; import "package:photos/services/local_authentication_service.dart"; import "package:photos/ui/common/fast_scroll_physics.dart"; import 'package:photos/ui/tools/editor/image_editor_page.dart'; @@ -156,7 +157,7 @@ class _DetailPageState extends State { final authenticated = await _requestAuthentication(); if (authenticated) { Bus.instance.fire(GuestViewEvent(false, false)); - await Configuration.instance.setGuestView(false); + await localSettings.setOnGuestView(false); } } }, diff --git a/mobile/lib/ui/viewer/file/file_app_bar.dart b/mobile/lib/ui/viewer/file/file_app_bar.dart index ce87e4955c..37b79cbd68 100644 --- a/mobile/lib/ui/viewer/file/file_app_bar.dart +++ b/mobile/lib/ui/viewer/file/file_app_bar.dart @@ -6,7 +6,6 @@ import "package:flutter_svg/flutter_svg.dart"; import "package:local_auth/local_auth.dart"; import 'package:logging/logging.dart'; import 'package:media_extension/media_extension.dart'; -import "package:photos/core/configuration.dart"; import "package:photos/core/event_bus.dart"; import "package:photos/events/guest_view_event.dart"; import "package:photos/generated/l10n.dart"; @@ -476,7 +475,7 @@ class FileAppBarState extends State { Future _onTapGuestView() async { if (await LocalAuthentication().isDeviceSupported()) { Bus.instance.fire(GuestViewEvent(true, true)); - await Configuration.instance.setGuestView(true); + await localSettings.setOnGuestView(true); } else { await showErrorDialog( context, @@ -494,7 +493,7 @@ class FileAppBarState extends State { ); if (hasAuthenticated) { Bus.instance.fire(GuestViewEvent(false, false)); - await Configuration.instance.setGuestView(false); + await localSettings.setOnGuestView(false); } } } diff --git a/mobile/lib/utils/local_settings.dart b/mobile/lib/utils/local_settings.dart index cc657c369e..1ea9c4af95 100644 --- a/mobile/lib/utils/local_settings.dart +++ b/mobile/lib/utils/local_settings.dart @@ -15,6 +15,7 @@ class LocalSettings { static const kEnableMultiplePart = "ls.enable_multiple_part"; static const kRateUsPromptThreshold = 2; static const shouldLoopVideoKey = "video.should_loop"; + static const onGuestViewKey = "on_guest_view"; final SharedPreferences _prefs; @@ -91,4 +92,12 @@ class LocalSettings { bool shouldLoopVideo() { return _prefs.getBool(shouldLoopVideoKey) ?? true; } + + Future setOnGuestView(bool value) { + return _prefs.setBool(onGuestViewKey, value); + } + + bool isOnGuestView() { + return _prefs.getBool(onGuestViewKey) ?? false; + } }