diff options
author | Nate Myren <ntmyren@google.com> | 2023-03-07 15:12:47 -0800 |
---|---|---|
committer | Nate Myren <ntmyren@google.com> | 2023-03-10 17:05:25 +0000 |
commit | 0ed5ef371b9dbe39f32a8a32af42f557b3958609 (patch) | |
tree | 1d6ea6389c951e0887d913cdd32e46ff22b7b2cb /PermissionController/src/com/android/permissioncontroller/permission/utils | |
parent | e2bad242d21b76689c2bc5ffc27892ee3c1c8820 (diff) | |
download | Permission-0ed5ef371b9dbe39f32a8a32af42f557b3958609.tar.gz |
Treat AML as a "partial grant" for apps that support photo picker
When an app supports the photo picker permission prompt (by targeting T+
and explicitly requesting READ_MEDIA_VISUAL_USER_SELECTED), then treat
the ACCESS_MEDIA_LOCATION permission as a "partial grant", given when
clicking "select photos" or "allow all", and not silently expanding if
READ_MEDIA_IMAGES/VIDEO are requested later
Bug: 268075614
Test: atest PhotoPickerPermissionTest
Change-Id: I5ba2dadeee3e6e4548c9eab2f859a0d6bd046a9d
Diffstat (limited to 'PermissionController/src/com/android/permissioncontroller/permission/utils')
-rw-r--r-- | PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt index c0b174c28..69b9af7e7 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt @@ -23,6 +23,7 @@ import android.content.pm.PermissionInfo import android.health.connect.HealthPermissions.HEALTH_PERMISSION_GROUP import android.util.Log import com.android.modules.utils.build.SdkLevel +import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup /** * This file contains the canonical mapping of permission to permission group, used in the @@ -48,6 +49,8 @@ object PermissionMapping { Manifest.permission_group.READ_MEDIA_AURAL, Manifest.permission_group.READ_MEDIA_VISUAL) + val PARTIAL_MEDIA_PERMISSIONS: MutableSet<String> = mutableSetOf() + /** Mapping permission -> group for all dangerous platform permissions */ private val PLATFORM_PERMISSIONS: MutableMap<String, String> = mutableMapOf() @@ -59,6 +62,7 @@ object PermissionMapping { private val HEALTH_PERMISSIONS_SET: MutableSet<String> = mutableSetOf() + init { PLATFORM_PERMISSIONS[Manifest.permission.READ_CONTACTS] = Manifest.permission_group.CONTACTS PLATFORM_PERMISSIONS[Manifest.permission.WRITE_CONTACTS] = @@ -188,6 +192,11 @@ object PermissionMapping { ONE_TIME_PERMISSION_GROUPS.add(Manifest.permission_group.LOCATION) ONE_TIME_PERMISSION_GROUPS.add(Manifest.permission_group.CAMERA) ONE_TIME_PERMISSION_GROUPS.add(Manifest.permission_group.MICROPHONE) + + if (SdkLevel.isAtLeastU()) { + PARTIAL_MEDIA_PERMISSIONS.add(Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED) + PARTIAL_MEDIA_PERMISSIONS.add(Manifest.permission.ACCESS_MEDIA_LOCATION) + } } /** @@ -321,6 +330,23 @@ object PermissionMapping { } /** + * Get the permissions that, if granted, are considered a "partial grant" of the + * READ_MEDIA_VISUAL permission group. If the app declares READ_MEDIA_VISUAL_USER_SELECTED, then + * both READ_MEDIA_VISUAL_USER_SELECTED and ACCESS_MEDIA_LOCATION are considered a partial + * grant. Otherwise, ACCESS_MEDIA_LOCATION is considered a full grant (for compatibility). + */ + fun getPartialStorageGrantPermissionsForGroup(group: LightAppPermGroup): Set<String> { + val appSupportsPickerPrompt = group + .permissions[Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED]?.isImplicit == false + + return if (appSupportsPickerPrompt) { + PARTIAL_MEDIA_PERMISSIONS + } else { + setOf(Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED) + } + } + + /** * Returns true if the given permission is a health platform permission. */ @JvmStatic |