Merge "Fix DPMS NPE on admin ComponentDetails"
This commit is contained in:
committed by
Android (Google) Code Review
commit
c05c55cdf5
@@ -7119,11 +7119,20 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
* @param factoryReset null: legacy behaviour, false: attempt to remove user, true: attempt to
|
||||
* factory reset
|
||||
*/
|
||||
private void wipeDataNoLock(ComponentName admin, int flags, String internalReason,
|
||||
@NonNull String wipeReasonForUser, int userId, boolean calledOnParentInstance,
|
||||
private void wipeDataNoLock(@Nullable ComponentName admin, int flags, String internalReason,
|
||||
String wipeReasonForUser, int userId, boolean calledOnParentInstance,
|
||||
@Nullable Boolean factoryReset) {
|
||||
wtfIfInLock();
|
||||
|
||||
final String adminPackage;
|
||||
if (admin != null) {
|
||||
adminPackage = admin.getPackageName();
|
||||
} else {
|
||||
int callerId = mInjector.binderGetCallingUid();
|
||||
String[] adminPackages = mInjector.getPackageManager().getPackagesForUid(callerId);
|
||||
Preconditions.checkState(adminPackages.length > 0,
|
||||
"Caller %s does not have any associated packages", callerId);
|
||||
adminPackage = adminPackages[0];
|
||||
}
|
||||
mInjector.binderWithCleanCallingIdentity(() -> {
|
||||
// First check whether the admin is allowed to wipe the device/user/profile.
|
||||
final String restriction;
|
||||
@@ -7142,7 +7151,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
boolean isSystemUser = userId == UserHandle.USER_SYSTEM;
|
||||
boolean wipeDevice;
|
||||
if (factoryReset == null || !mInjector.isChangeEnabled(EXPLICIT_WIPE_BEHAVIOUR,
|
||||
admin.getPackageName(),
|
||||
adminPackage,
|
||||
userId)) {
|
||||
// Legacy mode
|
||||
wipeDevice = isSystemUser;
|
||||
@@ -8788,9 +8797,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
@Override
|
||||
public boolean hasDeviceOwner() {
|
||||
final CallerIdentity caller = getCallerIdentity();
|
||||
Preconditions.checkCallAuthorization(isDefaultDeviceOwner(caller)
|
||||
|| canManageUsers(caller) || isFinancedDeviceOwner(caller)
|
||||
|| hasCallingOrSelfPermission(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS));
|
||||
Preconditions.checkCallAuthorization(
|
||||
isDefaultDeviceOwner(caller) || canManageUsers(caller) || isFinancedDeviceOwner(
|
||||
caller) || hasCallingOrSelfPermission(
|
||||
permission.MANAGE_PROFILE_AND_DEVICE_OWNERS));
|
||||
return mOwners.hasDeviceOwner();
|
||||
}
|
||||
|
||||
@@ -8798,10 +8808,16 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
return isDeviceOwner(admin.info.getComponent(), admin.getUserHandle().getIdentifier());
|
||||
}
|
||||
|
||||
public boolean isDeviceOwner(ComponentName who, int userId) {
|
||||
/**
|
||||
* Check if the user is a Device Owner
|
||||
*
|
||||
* @param who component to check against
|
||||
* @param userId user to check
|
||||
* @return if the user is a Device Owner
|
||||
*/
|
||||
public boolean isDeviceOwner(@Nullable ComponentName who, int userId) {
|
||||
synchronized (getLockObject()) {
|
||||
return mOwners.hasDeviceOwner()
|
||||
&& mOwners.getDeviceOwnerUserId() == userId
|
||||
return mOwners.hasDeviceOwner() && mOwners.getDeviceOwnerUserId() == userId
|
||||
&& mOwners.getDeviceOwnerComponent().equals(who);
|
||||
}
|
||||
}
|
||||
@@ -8850,9 +8866,16 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isProfileOwner(ComponentName who, int userId) {
|
||||
final ComponentName profileOwner = mInjector.binderWithCleanCallingIdentity(() ->
|
||||
getProfileOwnerAsUser(userId));
|
||||
/**
|
||||
* Check if {@link userId} is a Profile Owner
|
||||
*
|
||||
* @param who component to check against
|
||||
* @param userId user to check
|
||||
* @return if the user is a Profile Owner
|
||||
*/
|
||||
public boolean isProfileOwner(@Nullable ComponentName who, int userId) {
|
||||
final ComponentName profileOwner = mInjector.binderWithCleanCallingIdentity(
|
||||
() -> getProfileOwnerAsUser(userId));
|
||||
return who != null && who.equals(profileOwner);
|
||||
}
|
||||
|
||||
@@ -11416,8 +11439,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
|
||||
private boolean isAdminAffectedByRestriction(
|
||||
ComponentName admin, String userRestriction, int userId) {
|
||||
switch(mUserManager.getUserRestrictionSource(userRestriction, UserHandle.of(userId))) {
|
||||
@Nullable ComponentName admin, String userRestriction, int userId) {
|
||||
switch (mUserManager.getUserRestrictionSource(userRestriction, UserHandle.of(userId))) {
|
||||
case UserManager.RESTRICTION_NOT_SET:
|
||||
return false;
|
||||
case UserManager.RESTRICTION_SOURCE_DEVICE_OWNER:
|
||||
|
||||
Reference in New Issue
Block a user