From b7f175ccd9b2fb4485c84a91816a7750330fdc72 Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Mon, 24 Oct 2022 14:55:28 -0700 Subject: [PATCH] Add READ_MEDIA_VISUAL_USER_SELECTED permission and appop Bug: 25178384 Test: atest PermissionPolicyTest Change-Id: I4dadcad364d0a646619e50165c06d5b4be6d6726 --- core/api/current.txt | 1 + core/api/system-current.txt | 1 + core/java/android/app/AppOpsManager.java | 25 ++++++++++++++++++++++-- core/res/AndroidManifest.xml | 12 ++++++++++++ core/res/res/values/strings.xml | 5 +++++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index 218d7bd14ceb2..ec08af45eb65f 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -143,6 +143,7 @@ package android { field public static final String READ_MEDIA_AUDIO = "android.permission.READ_MEDIA_AUDIO"; field public static final String READ_MEDIA_IMAGES = "android.permission.READ_MEDIA_IMAGES"; field public static final String READ_MEDIA_VIDEO = "android.permission.READ_MEDIA_VIDEO"; + field public static final String READ_MEDIA_VISUAL_USER_SELECTED = "android.permission.READ_MEDIA_VISUAL_USER_SELECTED"; field public static final String READ_NEARBY_STREAMING_POLICY = "android.permission.READ_NEARBY_STREAMING_POLICY"; field public static final String READ_PHONE_NUMBERS = "android.permission.READ_PHONE_NUMBERS"; field public static final String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE"; diff --git a/core/api/system-current.txt b/core/api/system-current.txt index a382ecfc99d31..1d2d39cf8f3d7 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -585,6 +585,7 @@ package android.app { field public static final String OPSTR_READ_MEDIA_AUDIO = "android:read_media_audio"; field public static final String OPSTR_READ_MEDIA_IMAGES = "android:read_media_images"; field public static final String OPSTR_READ_MEDIA_VIDEO = "android:read_media_video"; + field public static final String OPSTR_READ_MEDIA_VISUAL_USER_SELECTED = "android:read_media_visual_user_selected"; field public static final String OPSTR_RECEIVE_AMBIENT_TRIGGER_AUDIO = "android:receive_ambient_trigger_audio"; field public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast"; field public static final String OPSTR_RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO = "android:receive_explicit_user_interaction_audio"; diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 1b972e0cb81ad..267e5b699241e 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -1360,9 +1360,17 @@ public class AppOpsManager { */ public static final int OP_RUN_LONG_JOBS = AppProtoEnums.APP_OP_RUN_LONG_JOBS; + /** + * Notify apps that they have been granted URI permission photos + * + * @hide + */ + public static final int OP_READ_MEDIA_VISUAL_USER_SELECTED = + AppProtoEnums.APP_OP_READ_MEDIA_VISUAL_USER_SELECTED; + /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) - public static final int _NUM_OP = 123; + public static final int _NUM_OP = 124; /** Access to coarse location information. */ public static final String OPSTR_COARSE_LOCATION = "android:coarse_location"; @@ -1833,6 +1841,14 @@ public class AppOpsManager { @SystemApi public static final String OPSTR_RECEIVE_AMBIENT_TRIGGER_AUDIO = "android:receive_ambient_trigger_audio"; + /** + * Notify apps that they have been granted URI permission photos + * + * @hide + */ + @SystemApi + public static final String OPSTR_READ_MEDIA_VISUAL_USER_SELECTED = + "android:read_media_visual_user_selected"; /** * Record audio from near-field microphone (ie. TV remote) @@ -1948,6 +1964,7 @@ public class AppOpsManager { OP_MANAGE_MEDIA, OP_TURN_SCREEN_ON, OP_RUN_LONG_JOBS, + OP_READ_MEDIA_VISUAL_USER_SELECTED, }; static final AppOpInfo[] sAppOpInfos = new AppOpInfo[]{ @@ -2329,7 +2346,11 @@ public class AppOpsManager { "RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO").setDefaultMode( AppOpsManager.MODE_ALLOWED).build(), new AppOpInfo.Builder(OP_RUN_LONG_JOBS, OPSTR_RUN_LONG_JOBS, "RUN_LONG_JOBS") - .setPermission(Manifest.permission.RUN_LONG_JOBS).build() + .setPermission(Manifest.permission.RUN_LONG_JOBS).build(), + new AppOpInfo.Builder(OP_READ_MEDIA_VISUAL_USER_SELECTED, + OPSTR_READ_MEDIA_VISUAL_USER_SELECTED, "READ_MEDIA_VISUAL_USER_SELECTED") + .setPermission(Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED) + .setDefaultMode(AppOpsManager.MODE_ALLOWED).build() }; /** diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 62c584847c0f2..fab7b288de6be 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1150,6 +1150,18 @@ android:description="@string/permdesc_readMediaImages" android:protectionLevel="dangerous" /> + + + Allows the app to read image files from your shared storage. + + read user selected image and video files from shared storage + + Allows the app to read image and video files that you select from your shared storage. + modify or delete the contents of your shared storage