From 81f66683d2ac721079a019d32988fed35eac3fb1 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sun, 30 Apr 2023 00:02:23 -0400 Subject: [PATCH] Less restrictive install permission requests (#488) --- lib/pages/add_app.dart | 3 --- lib/pages/app.dart | 3 --- lib/pages/apps.dart | 11 ++++++----- lib/providers/settings_provider.dart | 5 ++++- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/lib/pages/add_app.dart b/lib/pages/add_app.dart index 625e5dd..5f5400c 100644 --- a/lib/pages/add_app.dart +++ b/lib/pages/add_app.dart @@ -124,9 +124,6 @@ class _AddAppPageState extends State { pickedSource!, userInput, additionalSettings, trackOnlyOverride: trackOnly, overrideSource: pickedSourceOverride); - if (!trackOnly) { - await settingsProvider.getInstallPermission(); - } // Only download the APK here if you need to for the package ID if (sourceProvider.isTempId(app) && app.additionalSettings['trackOnly'] != true) { diff --git a/lib/pages/app.dart b/lib/pages/app.dart index 3e4c3aa..8f851e5 100644 --- a/lib/pages/app.dart +++ b/lib/pages/app.dart @@ -327,9 +327,6 @@ class _AppPageState extends State { ? () async { try { HapticFeedback.heavyImpact(); - if (app?.app.additionalSettings['trackOnly'] != true) { - await settingsProvider.getInstallPermission(); - } var res = await appsProvider.downloadAndInstallLatestApps( [app!.app.id], globalNavigatorKey.currentContext); if (res.isNotEmpty && mounted) { diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index e00dae2..11c69da 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -624,11 +624,6 @@ class AppsPageState extends State { bool shouldInstallNew = values['installs'] == true; bool shouldMarkTrackOnlies = values['trackonlies'] == true; (() async { - if (shouldInstallNew || shouldInstallUpdates) { - await settingsProvider.getInstallPermission(); - } - })() - .then((_) { List toInstall = []; if (shouldInstallUpdates) { toInstall.addAll(existingUpdateIdsAllOrSelected); @@ -639,6 +634,12 @@ class AppsPageState extends State { if (shouldMarkTrackOnlies) { toInstall.addAll(trackOnlyUpdateIdsAllOrSelected); } + if (toInstall.length > 1) { + // Permission is requested automatically, but if there are more than 1 installs, + // We want to explicitly request it and wait for the result to avoid multiple requests + await settingsProvider.getInstallPermission( + enforce: false); + } appsProvider .downloadAndInstallLatestApps( toInstall, globalNavigatorKey.currentContext) diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 7fe5693..3be2151 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -120,7 +120,7 @@ class SettingsProvider with ChangeNotifier { return result; } - Future getInstallPermission() async { + Future getInstallPermission({bool enforce = false}) async { while (!(await Permission.requestInstallPackages.isGranted)) { // Explicit request as InstallPlugin request sometimes bugged Fluttertoast.showToast( @@ -129,6 +129,9 @@ class SettingsProvider with ChangeNotifier { PermissionStatus.granted) { break; } + if (!enforce) { + break; + } } }