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 d9e74f8a6afd4..2277d8a8ecee9 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java @@ -195,6 +195,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<>(); @@ -222,10 +227,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); @@ -2070,7 +2075,13 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt PermissionInfo permInfo = getPermissionInfo( newPackage.getRequestedPermissions().get(i), newPackage.getPackageName(), 0); - if (permInfo == null || !STORAGE_PERMISSIONS.contains(permInfo.name)) { + if (permInfo == null) { + continue; + } + boolean isStorageOrMedia = STORAGE_PERMISSIONS.contains(permInfo.name) + || READ_MEDIA_AURAL_PERMISSIONS.contains(permInfo.name) + || READ_MEDIA_VISUAL_PERMISSIONS.contains(permInfo.name); + if (!isStorageOrMedia) { continue; } @@ -3144,7 +3155,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);