diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java index 423c289448c99..54656c5e26287 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java @@ -194,6 +194,11 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt /** All storage permissions */ private static final List STORAGE_PERMISSIONS = new ArrayList<>(); + + private static final Set READ_MEDIA_AURAL_PERMISSIONS = new ArraySet<>(); + + private static final Set READ_MEDIA_VISUAL_PERMISSIONS = new ArraySet<>(); + /** All nearby devices permissions */ private static final List NEARBY_DEVICES_PERMISSIONS = new ArrayList<>(); @@ -221,10 +226,10 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt Manifest.permission.INTERACT_ACROSS_USERS_FULL); STORAGE_PERMISSIONS.add(Manifest.permission.READ_EXTERNAL_STORAGE); STORAGE_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); - STORAGE_PERMISSIONS.add(Manifest.permission.ACCESS_MEDIA_LOCATION); - STORAGE_PERMISSIONS.add(Manifest.permission.READ_MEDIA_AUDIO); - STORAGE_PERMISSIONS.add(Manifest.permission.READ_MEDIA_IMAGES); - STORAGE_PERMISSIONS.add(Manifest.permission.READ_MEDIA_VIDEO); + READ_MEDIA_AURAL_PERMISSIONS.add(Manifest.permission.READ_MEDIA_AUDIO); + READ_MEDIA_VISUAL_PERMISSIONS.add(Manifest.permission.READ_MEDIA_VIDEO); + READ_MEDIA_VISUAL_PERMISSIONS.add(Manifest.permission.READ_MEDIA_IMAGES); + READ_MEDIA_VISUAL_PERMISSIONS.add(Manifest.permission.ACCESS_MEDIA_LOCATION); NEARBY_DEVICES_PERMISSIONS.add(Manifest.permission.BLUETOOTH_ADVERTISE); NEARBY_DEVICES_PERMISSIONS.add(Manifest.permission.BLUETOOTH_CONNECT); NEARBY_DEVICES_PERMISSIONS.add(Manifest.permission.BLUETOOTH_SCAN); @@ -2083,7 +2088,10 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt PermissionInfo permInfo = getPermissionInfo( newPackage.getRequestedPermissions().get(i), newPackage.getPackageName(), 0); - if (permInfo == null || !STORAGE_PERMISSIONS.contains(permInfo.name)) { + boolean isStorageOrMedia = STORAGE_PERMISSIONS.contains(permInfo.name) + || READ_MEDIA_AURAL_PERMISSIONS.contains(permInfo.name) + || READ_MEDIA_VISUAL_PERMISSIONS.contains(permInfo.name); + if (permInfo == null || !isStorageOrMedia) { continue; } @@ -3150,7 +3158,9 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt } if (bp.isRuntime()) { - if (!newPerm.equals(Manifest.permission.ACTIVITY_RECOGNITION)) { + if (!(newPerm.equals(Manifest.permission.ACTIVITY_RECOGNITION) + || READ_MEDIA_AURAL_PERMISSIONS.contains(newPerm) + || READ_MEDIA_VISUAL_PERMISSIONS.contains(newPerm))) { ps.updatePermissionFlags(bp, FLAG_PERMISSION_REVOKE_WHEN_REQUESTED, FLAG_PERMISSION_REVOKE_WHEN_REQUESTED);