[mob][photos] Only show dialog asking for permission to open public link in-app in the android app's independednt and fdroid versions
This commit is contained in:
@@ -1,10 +1,6 @@
|
||||
import "dart:io";
|
||||
|
||||
import "package:android_intent_plus/android_intent.dart";
|
||||
import "package:flutter/widgets.dart";
|
||||
import "package:logging/logging.dart";
|
||||
import "package:package_info_plus/package_info_plus.dart";
|
||||
import "package:photos/services/remote_sync_service.dart";
|
||||
import "package:photos/ui/components/buttons/button_widget.dart";
|
||||
import "package:photos/utils/dialog_util.dart";
|
||||
import "package:shared_preferences/shared_preferences.dart";
|
||||
@@ -13,7 +9,7 @@ class DeeplinkService {
|
||||
static final DeeplinkService instance = DeeplinkService._privateConstructor();
|
||||
DeeplinkService._privateConstructor();
|
||||
|
||||
static const hasConfiguredDeeplinkPermissionKey =
|
||||
static const _hasConfiguredDeeplinkPermissionKey =
|
||||
"has_configured_deeplink_permission";
|
||||
late SharedPreferences _preferences;
|
||||
final _logger = Logger("NotificationService");
|
||||
@@ -22,43 +18,40 @@ class DeeplinkService {
|
||||
_preferences = preferences;
|
||||
}
|
||||
|
||||
Future<void> requestDeeplinkPermissions(BuildContext context) async {
|
||||
Future<void> requestDeeplinkPermissions(
|
||||
BuildContext context,
|
||||
String packageName,
|
||||
) async {
|
||||
_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");
|
||||
}
|
||||
} else {
|
||||
_logger.info("Deeplink permissions not granted");
|
||||
final choice = await showChoiceActionSheet(
|
||||
isDismissible: false,
|
||||
context,
|
||||
title: "",
|
||||
body: "Allow app to open album links",
|
||||
firstButtonLabel: "Allow",
|
||||
);
|
||||
if (choice!.action == ButtonAction.first) {
|
||||
final AndroidIntent intent;
|
||||
if (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 (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");
|
||||
} else {
|
||||
_logger.info("Deeplink permissions not granted");
|
||||
}
|
||||
} catch (e) {
|
||||
_logger.severe("Failed to req deeplink permission for album links", e);
|
||||
@@ -66,11 +59,13 @@ class DeeplinkService {
|
||||
}
|
||||
|
||||
Future<void> setConfiguredDeeplinkPermissions(bool value) async {
|
||||
await _preferences.setBool(hasConfiguredDeeplinkPermissionKey, value);
|
||||
await _preferences.setBool(_hasConfiguredDeeplinkPermissionKey, value);
|
||||
}
|
||||
|
||||
/// This is only relevant for fdorid and independent builds since in them,
|
||||
/// user has to manually allow the app to open public links in-app
|
||||
bool hasConfiguredDeeplinkPermissions() {
|
||||
final result = _preferences.getBool(hasConfiguredDeeplinkPermissionKey);
|
||||
final result = _preferences.getBool(_hasConfiguredDeeplinkPermissionKey);
|
||||
return result ?? false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import 'package:logging/logging.dart';
|
||||
import "package:media_extension/media_extension_action_types.dart";
|
||||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
||||
import "package:move_to_background/move_to_background.dart";
|
||||
import "package:package_info_plus/package_info_plus.dart";
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/ente_theme_data.dart';
|
||||
@@ -35,6 +36,7 @@ import 'package:photos/services/collections_service.dart';
|
||||
import "package:photos/services/deeplink_service.dart";
|
||||
import 'package:photos/services/local_sync_service.dart';
|
||||
import "package:photos/services/notification_service.dart";
|
||||
import "package:photos/services/remote_sync_service.dart";
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import 'package:photos/states/user_details_state.dart';
|
||||
import 'package:photos/theme/colors.dart';
|
||||
@@ -233,15 +235,27 @@ class _HomeWidgetState extends State<HomeWidget> {
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
NotificationService.instance
|
||||
.initialize(_onDidReceiveNotificationResponse)
|
||||
.ignore();
|
||||
|
||||
Platform.isAndroid
|
||||
? WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
DeeplinkService.instance.requestDeeplinkPermissions(context);
|
||||
})
|
||||
: null;
|
||||
if (Platform.isAndroid &&
|
||||
!DeeplinkService.instance.hasConfiguredDeeplinkPermissions() &&
|
||||
RemoteSyncService.instance.isFirstRemoteSyncDone()) {
|
||||
PackageInfo.fromPlatform().then((packageInfo) {
|
||||
final packageName = packageInfo.packageName;
|
||||
if (packageName == 'io.ente.photos.independent' ||
|
||||
packageName == 'io.ente.photos.fdroid') {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (mounted) {
|
||||
DeeplinkService.instance
|
||||
.requestDeeplinkPermissions(context, packageName);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _handlePublicAlbumLink(Uri uri) async {
|
||||
|
||||
@@ -38,6 +38,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.7.0"
|
||||
android_intent_plus:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: android_intent_plus
|
||||
sha256: "38921ec22ebb3b9a7eb678792cf6fab0b6f458b61b9d327688573449c9b47db3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.2.0"
|
||||
animate_do:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -1501,10 +1509,11 @@ packages:
|
||||
media_extension:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: media_extension
|
||||
sha256: "5c4347d7035a48220c210149df776c764b920daf312b2ae7e3077506273db8d3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
path: "."
|
||||
ref: HEAD
|
||||
resolved-ref: "4bcd4cf45ea213feef8cf5e2814ea16d61f1d69e"
|
||||
url: "https://github.com/AmanRajSinghMourya/media_extension.git"
|
||||
source: git
|
||||
version: "1.0.2"
|
||||
media_kit:
|
||||
dependency: "direct main"
|
||||
|
||||
Reference in New Issue
Block a user