PermissionProvider: Auto resolve correct ESM intent type

This commit is contained in:
Rahul Patel
2024-07-29 01:09:21 +05:30
parent c694dd7891
commit 799b71f5d2
2 changed files with 33 additions and 22 deletions

View File

@@ -74,21 +74,23 @@ class PermissionProvider : ActivityResultCallback<ActivityResult> {
}
}
private val permissionMap: Map<PermissionType, Intent> = 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<PermissionType, Intent> {
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<ActivityResult> {
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)

View File

@@ -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)
}
}