Allow handle READ_MEDIA_IMAGES permission

This commit is contained in:
MrSluffy
2024-08-17 09:47:37 +08:00
parent 8b035f70d2
commit d20ef2a164
3 changed files with 53 additions and 13 deletions
@@ -1,6 +1,5 @@
package app.lawnchair.backup.ui
import android.Manifest
import android.app.Activity
import android.app.WallpaperManager
import android.content.Intent
@@ -74,9 +73,11 @@ fun CreateBackupScreen(
val hasLiveWallpaper = remember { WallpaperManager.getInstance(context).wallpaperInfo != null }
val permissionState = rememberPermissionState(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Manifest.permission.MANAGE_EXTERNAL_STORAGE
android.Manifest.permission.READ_MEDIA_IMAGES
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
android.Manifest.permission.MANAGE_EXTERNAL_STORAGE
} else {
Manifest.permission.READ_EXTERNAL_STORAGE
android.Manifest.permission.READ_EXTERNAL_STORAGE
},
)
val hasStoragePermission = permissionState.status.isGranted || filesAndStorageGranted(context)
@@ -49,6 +49,8 @@ fun wallpaperDrawable(): Drawable? {
val wallpaperInfo = wallpaperManager.wallpaperInfo
val permissionState = rememberPermissionState(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
android.Manifest.permission.READ_MEDIA_IMAGES
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
android.Manifest.permission.MANAGE_EXTERNAL_STORAGE
} else {
android.Manifest.permission.READ_EXTERNAL_STORAGE
@@ -43,23 +43,43 @@ fun contactPermissionGranted(context: Context): Boolean {
}
fun checkAndRequestFilesPermission(context: Context, prefs: PreferenceManager): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
requestManageAllFilesAccessPermission(context)
prefs.searchResultFiles.set(false)
return false
when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> {
if (!Environment.isExternalStorageManager() || !hasReadMediaImagesPermission(context)) {
if (!Environment.isExternalStorageManager()) {
requestManageAllFilesAccessPermission(context)
}
if (!hasReadMediaImagesPermission(context)) {
requestReadMediaImagesPermission(context)
}
prefs.searchResultFiles.set(false)
return false
}
}
} else {
if (!hasReadExternalStoragePermission(context)) {
requestReadExternalStoragePermission(context)
return false
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> {
if (!Environment.isExternalStorageManager()) {
requestManageAllFilesAccessPermission(context)
prefs.searchResultFiles.set(false)
return false
}
}
else -> {
if (!hasReadExternalStoragePermission(context)) {
requestReadExternalStoragePermission(context)
return false
}
}
}
return true
}
fun filesAndStorageGranted(context: Context): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) Environment.isExternalStorageManager() else hasReadExternalStoragePermission(context)
return when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU ->
Environment.isExternalStorageManager() && hasReadMediaImagesPermission(context)
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> Environment.isExternalStorageManager()
else -> hasReadExternalStoragePermission(context)
}
}
@RequiresApi(Build.VERSION_CODES.R)
@@ -83,3 +103,20 @@ private fun requestReadExternalStoragePermission(context: Context) {
123,
)
}
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
private fun hasReadMediaImagesPermission(context: Context): Boolean {
return ContextCompat.checkSelfPermission(
context,
Manifest.permission.READ_MEDIA_IMAGES
) == PackageManager.PERMISSION_GRANTED
}
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
private fun requestReadMediaImagesPermission(context: Context) {
ActivityCompat.requestPermissions(
context as Activity,
arrayOf(Manifest.permission.READ_MEDIA_IMAGES),
124
)
}