summaryrefslogtreecommitdiff
path: root/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt
diff options
context:
space:
mode:
authorNate Myren <ntmyren@google.com>2023-03-15 16:33:45 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-03-15 16:33:45 +0000
commit5f74a9a8da0cb11ef325c717c75cd0eb0c84d531 (patch)
tree92d95b68f68c77c4e9b8db2ffc469ecddd67b400 /PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt
parent9ee61ceaf4c2d42b94ccc148347beeb1ea1879e7 (diff)
parent0ed5ef371b9dbe39f32a8a32af42f557b3958609 (diff)
downloadPermission-5f74a9a8da0cb11ef325c717c75cd0eb0c84d531.tar.gz
Merge "Treat AML as a "partial grant" for apps that support photo picker" into udc-dev
Diffstat (limited to 'PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt')
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt32
1 files changed, 24 insertions, 8 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt
index c49994132..9f3d6f5b5 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt
@@ -20,7 +20,6 @@ package com.android.permissioncontroller.permission.ui.model
import android.Manifest
import android.Manifest.permission.ACCESS_COARSE_LOCATION
import android.Manifest.permission.ACCESS_FINE_LOCATION
-import android.Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED
import android.Manifest.permission_group.READ_MEDIA_VISUAL
import android.annotation.SuppressLint
import android.app.Activity
@@ -83,6 +82,7 @@ import com.android.permissioncontroller.permission.utils.KotlinUtils.isPermissio
import com.android.permissioncontroller.permission.utils.KotlinUtils.isPhotoPickerPromptEnabled
import com.android.permissioncontroller.permission.utils.LocationUtils
import com.android.permissioncontroller.permission.utils.PermissionMapping
+import com.android.permissioncontroller.permission.utils.PermissionMapping.getPartialStorageGrantPermissionsForGroup
import com.android.permissioncontroller.permission.utils.PermissionRationales
import com.android.permissioncontroller.permission.utils.SafetyNetLogger
import com.android.permissioncontroller.permission.utils.Utils
@@ -347,10 +347,8 @@ class AppPermissionViewModel(
selectState.isShown = true
deniedState.isChecked = !group.isGranted
- val onlyUserSelectedGranted = group.isGranted && group.permissions.values.all {
- it.name == READ_MEDIA_VISUAL_USER_SELECTED || !it.isGrantedIncludingAppOp }
- selectState.isChecked = onlyUserSelectedGranted
- allowedState.isChecked = group.isGranted && !onlyUserSelectedGranted
+ selectState.isChecked = isPartialStorageGrant(group)
+ allowedState.isChecked = group.isGranted && !isPartialStorageGrant(group)
} else {
// Allow / Deny case
allowedState.isShown = true
@@ -653,12 +651,12 @@ class AppPermissionViewModel(
}
if (changeRequest == ChangeRequest.PHOTOS_SELECTED) {
- val nonSelectedPerms = group.permissions.keys.filter {
- it != READ_MEDIA_VISUAL_USER_SELECTED }
+ val partialGrantPerms = getPartialStorageGrantPermissionsForGroup(group)
+ val nonSelectedPerms = group.permissions.keys.filter { it !in partialGrantPerms }
var newGroup = KotlinUtils.revokeForegroundRuntimePermissions(app, group,
filterPermissions = nonSelectedPerms)
newGroup = KotlinUtils.grantForegroundRuntimePermissions(app, newGroup,
- filterPermissions = listOf(READ_MEDIA_VISUAL_USER_SELECTED))
+ filterPermissions = partialGrantPerms.toList())
logPermissionChanges(group, newGroup, buttonClicked)
return
}
@@ -1105,6 +1103,24 @@ class AppPermissionViewModel(
"$uid packageName=$packageName" +
"permGroupName=$permGroupName")
}
+
+ /**
+ * A partial storage grant happens when:
+ * An app which doesn't support the photo picker has READ_MEDIA_VISUAL_USER_SELECTED granted, or
+ * An app which does support the photo picker has READ_MEDIA_VISUAL_USER_SELECTED and/or
+ * ACCESS_MEDIA_LOCATION granted
+ */
+ private fun isPartialStorageGrant(group: LightAppPermGroup): Boolean {
+ if (!isPhotoPickerPromptEnabled() || group.permGroupName != READ_MEDIA_VISUAL) {
+ return false
+ }
+
+ val partialPerms = getPartialStorageGrantPermissionsForGroup(group)
+
+ return group.isGranted && group.permissions.values.all {
+ it.name in partialPerms || (it.name !in partialPerms && !it.isGrantedIncludingAppOp)
+ }
+ }
}
/**