OSDN Git Service

Calling method in DPMS after resolving userId
authorSuprabh Shukla <suprabh@google.com>
Wed, 9 Mar 2016 21:01:18 +0000 (13:01 -0800)
committerSuprabh Shukla <suprabh@google.com>
Wed, 9 Mar 2016 21:38:15 +0000 (13:38 -0800)
ActivityManagerService was calling
hasDeviceOwnerOrProfileOwner in DevicePolicyManagerService.LocalService
before resolving negative userIds to a real user. Moved the call to a point
when userId is already resolved.

bug: b/27538249
Change-Id: I760412978b3260523e9abcfe59d8e100ec4af12f

core/java/android/app/admin/DevicePolicyManagerInternal.java
services/core/java/com/android/server/am/ActivityManagerService.java

index 8cdfee5..61b40d4 100644 (file)
@@ -16,6 +16,8 @@
 
 package android.app.admin;
 
+import android.os.UserHandle;
+
 import java.util.List;
 
 /**
@@ -71,8 +73,8 @@ public abstract class DevicePolicyManagerInternal {
     public abstract boolean isActiveAdminWithPolicy(int uid, int reqPolicy);
 
     /**
-     * Checks if a given package has a device or a profile owner for the given user
-     *
+     * Checks if a given package has a device or a profile owner for the given user.
+     * </br><em>Does <b>not</b> support negative userIds like {@link UserHandle#USER_ALL}</em>
      * @param packageName The package to check
      * @param userId the userId to check for.
      * @return true if package has a device or profile owner, false otherwise.
index f07c1d0..7f30ae1 100644 (file)
@@ -5270,6 +5270,10 @@ public final class ActivityManagerService extends ActivityManagerNative
     public boolean clearApplicationUserData(final String packageName,
             final IPackageDataObserver observer, int userId) {
         enforceNotIsolatedCaller("clearApplicationUserData");
+        int uid = Binder.getCallingUid();
+        int pid = Binder.getCallingPid();
+        userId = mUserController.handleIncomingUser(pid, uid, userId, false,
+                ALLOW_FULL_ONLY, "clearApplicationUserData", null);
 
         final DevicePolicyManagerInternal dpmi = LocalServices
                 .getService(DevicePolicyManagerInternal.class);
@@ -5277,10 +5281,6 @@ public final class ActivityManagerService extends ActivityManagerNative
             throw new SecurityException("Cannot clear data for a device owner or a profile owner");
         }
 
-        int uid = Binder.getCallingUid();
-        int pid = Binder.getCallingPid();
-        userId = mUserController.handleIncomingUser(pid, uid, userId, false,
-                ALLOW_FULL_ONLY, "clearApplicationUserData", null);
         long callingId = Binder.clearCallingIdentity();
         try {
             IPackageManager pm = AppGlobals.getPackageManager();