Calling method in DPMS after resolving userId

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
This commit is contained in:
Suprabh Shukla
2016-03-09 13:01:18 -08:00
parent 836202114a
commit 8bea73e5c1
2 changed files with 8 additions and 6 deletions

View 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.

View 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();