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

Commit 7e11cc11 authored by Antoan Angelov's avatar Antoan Angelov Committed by Android (Google) Code Review
Browse files

Merge "Add device owner transfer functionality."

parents 8612b376 8c586ec4
Loading
Loading
Loading
Loading
+26 −14
Original line number Diff line number Diff line
@@ -154,7 +154,6 @@ import android.provider.ContactsContract.QuickContact;
import android.provider.ContactsInternal;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.security.Credentials;
import android.security.IKeyChainAliasCallback;
import android.security.IKeyChainService;
import android.security.KeyChain;
@@ -163,7 +162,6 @@ import android.security.keymaster.KeymasterCertificateChain;
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.ParcelableKeyGenParameterSpec;
import android.security.KeyStore;
import android.security.keystore.AttestationUtils;
import android.service.persistentdata.PersistentDataBlockManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -11876,10 +11874,14 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {

        final long id = mInjector.binderClearCallingIdentity();
        try {
            //STOPSHIP add support for COMP, DO, edge cases when device is rebooted/work mode off,
            //STOPSHIP add support for COMP, edge cases when device is rebooted/work mode off,
            //transfer callbacks and broadcast
            synchronized (this) {
                if (isProfileOwner(admin, callingUserId)) {
                transferProfileOwner(admin, target, callingUserId);
                    transferProfileOwnerLocked(admin, target, callingUserId);
                } else if (isDeviceOwner(admin, callingUserId)) {
                    transferDeviceOwnerLocked(admin, target, callingUserId);
                }
            }
        } finally {
            mInjector.binderRestoreCallingIdentity(id);
@@ -11889,9 +11891,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    /**
     * Transfers the profile owner for user with id profileOwnerUserId from admin to target.
     */
    private void transferProfileOwner(ComponentName admin, ComponentName target,
    private void transferProfileOwnerLocked(ComponentName admin, ComponentName target,
            int profileOwnerUserId) {
        synchronized (this) {
        transferActiveAdminUncheckedLocked(target, admin, profileOwnerUserId);
        mOwners.transferProfileOwner(target, profileOwnerUserId);
        Slog.i(LOG_TAG, "Profile owner set: " + target + " on user " + profileOwnerUserId);
@@ -11899,5 +11900,16 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        mDeviceAdminServiceController.startServiceForOwner(
                target.getPackageName(), profileOwnerUserId, "transfer-profile-owner");
    }

    /**
     * Transfers the device owner for user with id userId from admin to target.
     */
    private void transferDeviceOwnerLocked(ComponentName admin, ComponentName target, int userId) {
        transferActiveAdminUncheckedLocked(target, admin, userId);
        mOwners.transferDeviceOwner(target);
        Slog.i(LOG_TAG, "Device owner set: " + target + " on user " + userId);
        mOwners.writeDeviceOwner();
        mDeviceAdminServiceController.startServiceForOwner(
                target.getPackageName(), userId, "transfer-device-owner");
    }
}
+11 −0
Original line number Diff line number Diff line
@@ -288,6 +288,17 @@ class Owners {
        }
    }

    void transferDeviceOwner(ComponentName target) {
        synchronized (mLock) {
            // We don't set a name because it's not used anyway.
            // See DevicePolicyManagerService#getDeviceOwnerName
            mDeviceOwner = new OwnerInfo(null, target,
                    mDeviceOwner.userRestrictionsMigrated, mDeviceOwner.remoteBugreportUri,
                    mDeviceOwner.remoteBugreportHash);
            pushToPackageManagerLocked();
        }
    }

    ComponentName getProfileOwnerComponent(int userId) {
        synchronized (mLock) {
            OwnerInfo profileOwner = mProfileOwners.get(userId);