diff --git a/app/src/main/java/com/aurora/store/data/providers/PermissionProvider.kt b/app/src/main/java/com/aurora/store/data/providers/PermissionProvider.kt index b386d6b85..03c6fe474 100644 --- a/app/src/main/java/com/aurora/store/data/providers/PermissionProvider.kt +++ b/app/src/main/java/com/aurora/store/data/providers/PermissionProvider.kt @@ -74,21 +74,23 @@ class PermissionProvider : ActivityResultCallback { } } - private val permissionMap: Map = mapOf( - PermissionType.STORAGE_MANAGER to PackageUtil.getStorageManagerIntent(safe = true), - PermissionType.INSTALL_UNKNOWN_APPS to Intent( - Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, - Uri.parse("package:${BuildConfig.APPLICATION_ID}") - ), - PermissionType.DOZE_WHITELIST to Intent( - Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, - Uri.parse("package:${BuildConfig.APPLICATION_ID}") - ), - PermissionType.APP_LINKS to Intent( - ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, - Uri.parse("package:${BuildConfig.APPLICATION_ID}") + private fun knownPermissions(): Map { + return mapOf( + PermissionType.STORAGE_MANAGER to PackageUtil.getStorageManagerIntent(context), + PermissionType.INSTALL_UNKNOWN_APPS to Intent( + Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, + Uri.parse("package:${BuildConfig.APPLICATION_ID}") + ), + PermissionType.DOZE_WHITELIST to Intent( + Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, + Uri.parse("package:${BuildConfig.APPLICATION_ID}") + ), + PermissionType.APP_LINKS to Intent( + ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, + Uri.parse("package:${BuildConfig.APPLICATION_ID}") + ) ) - ) + } fun request(permissionType: PermissionType) { try { @@ -96,7 +98,7 @@ class PermissionProvider : ActivityResultCallback { PermissionType.EXTERNAL_STORAGE -> permissionLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE) PermissionType.POST_NOTIFICATIONS -> permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) else -> { - val intent = permissionMap[permissionType] ?: return + val intent = knownPermissions()[permissionType] ?: return if (permissionType == PermissionType.STORAGE_MANAGER && !isGranted(PermissionType.INSTALL_UNKNOWN_APPS) diff --git a/app/src/main/java/com/aurora/store/util/PackageUtil.kt b/app/src/main/java/com/aurora/store/util/PackageUtil.kt index 255afbf64..a8f24e286 100644 --- a/app/src/main/java/com/aurora/store/util/PackageUtil.kt +++ b/app/src/main/java/com/aurora/store/util/PackageUtil.kt @@ -124,14 +124,23 @@ object PackageUtil { } @RequiresApi(Build.VERSION_CODES.R) - fun getStorageManagerIntent(safe: Boolean = false): Intent { - return if (safe) { - Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) + fun getStorageManagerIntent(context: Context): Intent { + val intent = Intent( + Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, + Uri.parse("package:${BuildConfig.APPLICATION_ID}") + ) + + // Check if the intent can be resolved + val packageManager = context.packageManager + val isIntentAvailable = packageManager.queryIntentActivities( + intent, + PackageManager.MATCH_DEFAULT_ONLY + ).isNotEmpty() + + return if (isIntentAvailable) { + intent } else { - Intent( - Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, - Uri.parse("package:${BuildConfig.APPLICATION_ID}") - ) + Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) } }