Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b7656f1 authored by Esteban Talavera's avatar Esteban Talavera
Browse files

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
parent d697ceac
Loading
Loading
Loading
Loading
+9 −7
Original line number Original line Diff line number Diff line
@@ -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
     * Device owner can only be set on an unprovisioned device. However, if initiated via "adb",
     * which case we allow it if no account is associated with the device.
     * we also allow it if no accounts or additional users are present on the device.
     */
     */
    private boolean allowedToSetDeviceOwnerOnDevice() {
    private boolean allowedToSetDeviceOwnerOnDevice() {
        int callingId = Binder.getCallingUid();
        if (!hasUserSetupCompleted(UserHandle.USER_OWNER)) {
        if (callingId == Process.SHELL_UID || callingId == Process.ROOT_UID) {
            return true;
            return AccountManager.get(mContext).getAccounts().length == 0;
        } else {
            return !hasUserSetupCompleted(UserHandle.USER_OWNER);
        }
        }

        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) {
    private void enforceCrossUserPermission(int userHandle) {