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( private fun knownPermissions(): Map<PermissionType, Intent> {
PermissionType.STORAGE_MANAGER to PackageUtil.getStorageManagerIntent(safe = true), return mapOf(
PermissionType.INSTALL_UNKNOWN_APPS to Intent( PermissionType.STORAGE_MANAGER to PackageUtil.getStorageManagerIntent(context),
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, PermissionType.INSTALL_UNKNOWN_APPS to Intent(
Uri.parse("package:${BuildConfig.APPLICATION_ID}") Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
), Uri.parse("package:${BuildConfig.APPLICATION_ID}")
PermissionType.DOZE_WHITELIST to Intent( ),
Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, PermissionType.DOZE_WHITELIST to Intent(
Uri.parse("package:${BuildConfig.APPLICATION_ID}") Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
), Uri.parse("package:${BuildConfig.APPLICATION_ID}")
PermissionType.APP_LINKS to Intent( ),
ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, PermissionType.APP_LINKS to Intent(
Uri.parse("package:${BuildConfig.APPLICATION_ID}") ACTION_APP_OPEN_BY_DEFAULT_SETTINGS,
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
)
) )
) }
fun request(permissionType: PermissionType) { fun request(permissionType: PermissionType) {
try { try {
@@ -96,7 +98,7 @@ class PermissionProvider : ActivityResultCallback<ActivityResult> {
PermissionType.EXTERNAL_STORAGE -> permissionLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE) PermissionType.EXTERNAL_STORAGE -> permissionLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
PermissionType.POST_NOTIFICATIONS -> permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) PermissionType.POST_NOTIFICATIONS -> permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
else -> { else -> {
val intent = permissionMap[permissionType] ?: return val intent = knownPermissions()[permissionType] ?: return
if (permissionType == PermissionType.STORAGE_MANAGER if (permissionType == PermissionType.STORAGE_MANAGER
&& !isGranted(PermissionType.INSTALL_UNKNOWN_APPS) && !isGranted(PermissionType.INSTALL_UNKNOWN_APPS)

View File

@@ -124,14 +124,23 @@ object PackageUtil {
} }
@RequiresApi(Build.VERSION_CODES.R) @RequiresApi(Build.VERSION_CODES.R)
fun getStorageManagerIntent(safe: Boolean = false): Intent { fun getStorageManagerIntent(context: Context): Intent {
return if (safe) { val intent = Intent(
Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) 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 { } else {
Intent( Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
)
} }
} }