Allow setting a Device Owner via ADB on unprovisioned device with preinstalled account
Some devices come from carriers with a preinstalled account. This means that we couldn't set a device owner via "adb shell dpm" commands, while the regular device owner flow worked (as the latter just checked whether the device was provisioned). Bug: 18354022 Change-Id: I9a677de9d34d073e218b9179ec4b0f5b4b82adc9
This commit is contained in:
@@ -4053,16 +4053,18 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
|
||||
/**
|
||||
* Device owner can only be set on an unprovisioned device, unless it was initiated by "adb", in
|
||||
* which case we allow it if no account is associated with the device.
|
||||
* Device owner can only be set on an unprovisioned device. However, if initiated via "adb",
|
||||
* we also allow it if no accounts or additional users are present on the device.
|
||||
*/
|
||||
private boolean allowedToSetDeviceOwnerOnDevice() {
|
||||
int callingId = Binder.getCallingUid();
|
||||
if (callingId == Process.SHELL_UID || callingId == Process.ROOT_UID) {
|
||||
return AccountManager.get(mContext).getAccounts().length == 0;
|
||||
} else {
|
||||
return !hasUserSetupCompleted(UserHandle.USER_OWNER);
|
||||
if (!hasUserSetupCompleted(UserHandle.USER_OWNER)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int callingId = Binder.getCallingUid();
|
||||
return (callingId == Process.SHELL_UID || callingId == Process.ROOT_UID)
|
||||
&& mUserManager.getUserCount() == 1
|
||||
&& AccountManager.get(mContext).getAccounts().length == 0;
|
||||
}
|
||||
|
||||
private void enforceCrossUserPermission(int userHandle) {
|
||||
|
||||
Reference in New Issue
Block a user