diff options
author | Nate Myren <ntmyren@google.com> | 2023-03-15 16:33:45 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-03-15 16:33:45 +0000 |
commit | 5f74a9a8da0cb11ef325c717c75cd0eb0c84d531 (patch) | |
tree | 92d95b68f68c77c4e9b8db2ffc469ecddd67b400 /PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt | |
parent | 9ee61ceaf4c2d42b94ccc148347beeb1ea1879e7 (diff) | |
parent | 0ed5ef371b9dbe39f32a8a32af42f557b3958609 (diff) | |
download | Permission-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.kt | 32 |
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) + } + } } /** |