Merge "ActivityManagerService: UID frozen API should check permissions" into udc-dev
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 415c859..32c9a09 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -182,6 +182,7 @@
 import android.annotation.Nullable;
 import android.annotation.PermissionMethod;
 import android.annotation.PermissionName;
+import android.annotation.RequiresPermission;
 import android.annotation.UserIdInt;
 import android.app.Activity;
 import android.app.ActivityClient;
@@ -7925,10 +7926,15 @@
      *
      * @param callback remote callback object to be registered
      */
+    @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
+    @Override
     public void registerUidFrozenStateChangedCallback(
             @NonNull IUidFrozenStateChangedCallback callback) {
+        enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
+                "registerUidFrozenStateChangedCallback()");
+        Preconditions.checkNotNull(callback, "callback cannot be null");
         synchronized (mUidFrozenStateChangedCallbackList) {
-            boolean registered = mUidFrozenStateChangedCallbackList.register(callback);
+            final boolean registered = mUidFrozenStateChangedCallbackList.register(callback);
             if (!registered) {
                 Slog.w(TAG, "Failed to register with RemoteCallbackList!");
             }
@@ -7940,8 +7946,13 @@
      *
      * @param callback remote callback object to be unregistered
      */
+    @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
+    @Override
     public void unregisterUidFrozenStateChangedCallback(
             @NonNull IUidFrozenStateChangedCallback callback) {
+        enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
+                "unregisterUidFrozenStateChangedCallback()");
+        Preconditions.checkNotNull(callback, "callback cannot be null");
         synchronized (mUidFrozenStateChangedCallbackList) {
             mUidFrozenStateChangedCallbackList.unregister(callback);
         }