From 6c7d403d5d002f15644c7f1bc75f5b18fa534fe4 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Thu, 21 Nov 2024 08:56:29 +0530 Subject: [PATCH] [mob][photos] Fix red screen error caused by the dialog asking for permission to allow opening album links in-app --- mobile/lib/services/deeplink_service.dart | 68 ++++++++++++----------- mobile/lib/ui/tabs/home_widget.dart | 7 ++- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/mobile/lib/services/deeplink_service.dart b/mobile/lib/services/deeplink_service.dart index f4c43395e5..a655514e35 100644 --- a/mobile/lib/services/deeplink_service.dart +++ b/mobile/lib/services/deeplink_service.dart @@ -23,41 +23,45 @@ class DeeplinkService { } Future requestDeeplinkPermissions(BuildContext context) async { - if (!hasConfiguredDeeplinkPermissions() && - RemoteSyncService.instance.isFirstRemoteSyncDone()) { - final choice = await showChoiceActionSheet( - isDismissible: false, - context, - title: "", - body: "Allow app to open album links", - firstButtonLabel: "Allow", - ); - if (choice!.action == ButtonAction.first) { - if (Platform.isAndroid) { - final AndroidIntent intent; - final PackageInfo packageInfo = await PackageInfo.fromPlatform(); - if (packageInfo.packageName == 'io.ente.photos.independent') { - intent = const AndroidIntent( - action: 'android.settings.APP_OPEN_BY_DEFAULT_SETTINGS', - package: 'io.ente.photos.independent', - data: 'package:io.ente.photos.independent', - ); - await intent.launch(); - } else if (packageInfo.packageName == 'io.ente.photos.fdroid') { - intent = const AndroidIntent( - action: 'android.settings.APP_OPEN_BY_DEFAULT_SETTINGS', - package: 'io.ente.photos.fdroid', - data: 'package:io.ente.photos.fdroid', - ); - await intent.launch(); + _logger.info("Requesting to allow opening public links in-app"); + try { + if (!hasConfiguredDeeplinkPermissions() && + RemoteSyncService.instance.isFirstRemoteSyncDone()) { + final choice = await showChoiceActionSheet( + isDismissible: false, + context, + title: "", + body: "Allow app to open album links", + firstButtonLabel: "Allow", + ); + if (choice!.action == ButtonAction.first) { + if (Platform.isAndroid) { + final AndroidIntent intent; + final PackageInfo packageInfo = await PackageInfo.fromPlatform(); + if (packageInfo.packageName == 'io.ente.photos.independent') { + intent = const AndroidIntent( + action: 'android.settings.APP_OPEN_BY_DEFAULT_SETTINGS', + package: 'io.ente.photos.independent', + data: 'package:io.ente.photos.independent', + ); + await intent.launch(); + } else if (packageInfo.packageName == 'io.ente.photos.fdroid') { + intent = const AndroidIntent( + action: 'android.settings.APP_OPEN_BY_DEFAULT_SETTINGS', + package: 'io.ente.photos.fdroid', + data: 'package:io.ente.photos.fdroid', + ); + await intent.launch(); + } + await setConfiguredDeeplinkPermissions(true); + _logger.info("Deeplink permissions granted"); } - await setConfiguredDeeplinkPermissions(true); - _logger.info("Deeplink permissions granted"); + } else { + _logger.info("Deeplink permissions not granted"); } - } else { - _logger.info("Deeplink permissions not granted"); - Navigator.of(context).pop(); } + } catch (e) { + _logger.severe("Failed to req deeplink permission for album links", e); } } diff --git a/mobile/lib/ui/tabs/home_widget.dart b/mobile/lib/ui/tabs/home_widget.dart index b113ae9634..3d74058c73 100644 --- a/mobile/lib/ui/tabs/home_widget.dart +++ b/mobile/lib/ui/tabs/home_widget.dart @@ -236,6 +236,12 @@ class _HomeWidgetState extends State { NotificationService.instance .initialize(_onDidReceiveNotificationResponse) .ignore(); + + Platform.isAndroid + ? WidgetsBinding.instance.addPostFrameCallback((_) { + DeeplinkService.instance.requestDeeplinkPermissions(context); + }) + : null; } Future _handlePublicAlbumLink(Uri uri) async { @@ -519,7 +525,6 @@ class _HomeWidgetState extends State { if (!LocalSyncService.instance.hasCompletedFirstImport()) { return const LoadingPhotosWidget(); } - DeeplinkService.instance.requestDeeplinkPermissions(context).ignore(); if (_sharedFiles != null && _sharedFiles!.isNotEmpty && _shouldRenderCreateCollectionSheet) {