diff --git a/core/api/system-current.txt b/core/api/system-current.txt index f92c36d488ad2..539aee825666d 100755 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -105,6 +105,7 @@ package android { field public static final String FORCE_BACK = "android.permission.FORCE_BACK"; field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES"; field public static final String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS"; + field public static final String GET_HISTORICAL_APP_OPS_STATS = "android.permission.GET_HISTORICAL_APP_OPS_STATS"; field public static final String GET_PROCESS_STATE_AND_OOM_SCORE = "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE"; field public static final String GET_RUNTIME_PERMISSIONS = "android.permission.GET_RUNTIME_PERMISSIONS"; field public static final String GET_TOP_ACTIVITY_INFO = "android.permission.GET_TOP_ACTIVITY_INFO"; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 329f02a74cb02..153b77b6aedc2 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -3578,6 +3578,13 @@ + + + diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 587b5d2ce59e4..66613ce85c415 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -2375,7 +2375,13 @@ public class AppOpsService extends IAppOpsService.Stub { return; } - if (!isCallerSystem && !isCallerInstrumented && !isCallerPermissionController) { + boolean doesCallerHavePermission = mContext.checkPermission( + android.Manifest.permission.GET_HISTORICAL_APP_OPS_STATS, + Binder.getCallingPid(), Binder.getCallingUid()) + == PackageManager.PERMISSION_GRANTED; + + if (!isCallerSystem && !isCallerInstrumented && !isCallerPermissionController + && !doesCallerHavePermission) { mHandler.post(() -> callback.sendResult(new Bundle())); return; }