diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 27b2b2084f9c0..2647d9050b773 100755 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -107,6 +107,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 240d3aa88c52c..007cf6b421349 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 ed494b569e877..47bd47ec20c88 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; }