Allow handle READ_MEDIA_IMAGES permission
This commit is contained in:
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user