summaryrefslogtreecommitdiff
path: root/PermissionController/src/com/android/permissioncontroller/permission/utils
diff options
context:
space:
mode:
authorNate Myren <ntmyren@google.com>2023-03-07 15:12:47 -0800
committerNate Myren <ntmyren@google.com>2023-03-10 17:05:25 +0000
commit0ed5ef371b9dbe39f32a8a32af42f557b3958609 (patch)
tree1d6ea6389c951e0887d913cdd32e46ff22b7b2cb /PermissionController/src/com/android/permissioncontroller/permission/utils
parente2bad242d21b76689c2bc5ffc27892ee3c1c8820 (diff)
downloadPermission-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.kt26
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