PermissionProvider: Auto resolve correct ESM intent type
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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}")
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user