From 70b59c872d11b5999ce8b21b03a4b68bf39292fb Mon Sep 17 00:00:00 2001 From: Jordan Jozwiak Date: Tue, 30 Nov 2021 15:19:37 -0800 Subject: [PATCH] Intent action to review permission decisions Action will open the PermissionController screen to review recent permission decisions. Currently only supported on Auto. Bug: 194240664 Test: adb shell am start -a android.permission.action.REVIEW_PERMISSION_DECISIONS Change-Id: Ic37e0b69632d38596b707cd7b1a17fbb89bfa547 --- core/api/system-current.txt | 2 ++ .../android/permission/PermissionManager.java | 22 +++++++++++++++++++ core/res/AndroidManifest.xml | 10 +++++++++ core/res/res/values/strings.xml | 5 +++++ 4 files changed, 39 insertions(+) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 99e47b1c6b90c..91cc19c2940e4 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -297,6 +297,7 @@ package android { field public static final String SIGNAL_REBOOT_READINESS = "android.permission.SIGNAL_REBOOT_READINESS"; field public static final String SOUND_TRIGGER_RUN_IN_BATTERY_SAVER = "android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER"; field public static final String START_ACTIVITIES_FROM_BACKGROUND = "android.permission.START_ACTIVITIES_FROM_BACKGROUND"; + field public static final String START_REVIEW_PERMISSION_DECISIONS = "android.permission.START_REVIEW_PERMISSION_DECISIONS"; field public static final String STATUS_BAR_SERVICE = "android.permission.STATUS_BAR_SERVICE"; field public static final String STOP_APP_SWITCHES = "android.permission.STOP_APP_SWITCHES"; field public static final String SUBSTITUTE_NOTIFICATION_APP_NAME = "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME"; @@ -9554,6 +9555,7 @@ package android.permission { method @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public void setRuntimePermissionsVersion(@IntRange(from=0) int); method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void startOneTimePermissionSession(@NonNull String, long, int, int); method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void stopOneTimePermissionSession(@NonNull String); + field @RequiresPermission(android.Manifest.permission.START_REVIEW_PERMISSION_DECISIONS) public static final String ACTION_REVIEW_PERMISSION_DECISIONS = "android.permission.action.REVIEW_PERMISSION_DECISIONS"; field public static final int PERMISSION_GRANTED = 0; // 0x0 field public static final int PERMISSION_HARD_DENIED = 2; // 0x2 field public static final int PERMISSION_SOFT_DENIED = 1; // 0x1 diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java index e2f59082c1f7a..8b3dc14abc9a8 100644 --- a/core/java/android/permission/PermissionManager.java +++ b/core/java/android/permission/PermissionManager.java @@ -24,6 +24,8 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; +import android.annotation.SdkConstant; +import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; @@ -101,6 +103,26 @@ public final class PermissionManager { */ public static final int PERMISSION_HARD_DENIED = 2; + /** + * Activity action: Launch UI to review permission decisions. + *

+ * Important:You must protect the activity that handles this action with the + * {@link android.Manifest.permission#START_REVIEW_PERMISSION_DECISIONS} permission to ensure + * that only the system can launch this activity. The system will not launch activities that are + * not properly protected. + *

+ * Input: Nothing. + *

+ *

+ * Output: Nothing. + *

+ */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + @RequiresPermission(android.Manifest.permission.START_REVIEW_PERMISSION_DECISIONS) + public static final String ACTION_REVIEW_PERMISSION_DECISIONS = + "android.permission.action.REVIEW_PERMISSION_DECISIONS"; + + /** @hide */ public static final String LOG_TAG_TRACE_GRANTS = "PermissionGrantTrace"; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index e2a2ac64e780e..a052eb0105764 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -5460,6 +5460,16 @@ android:description="@string/permdesc_startViewPermissionUsage" android:protectionLevel="signature|installer" /> + + + Allows the holder to start the permission usage for an app. Should never be needed for normal apps. + + start view permission decisions + + Allows the holder to start screen to review permission decisions. Should never be needed for normal apps. + start view app features