diff options
| author | 2017-12-11 20:10:11 +0000 | |
|---|---|---|
| committer | 2018-01-03 13:16:58 +0000 | |
| commit | 8c586ec4819c8a0cbd5a56a78e8f5cf869f565b0 (patch) | |
| tree | 75107c2a71db7cbb37401c6a00f825046312bef3 | |
| parent | 26b8722de6fcab8a3b127450bae1534a61918178 (diff) | |
Add device owner transfer functionality.
Test: cts-tradefed run cts-dev --module DevicePolicyManager --test com.android.cts.devicepolicy.MixedDeviceOwnerTransferTest
Test: bit FrameworksServicesTests:com.android.server.devicepolicy.DevicePolicyManagerTest
Bug: 69542799
Change-Id: I2119aebc1554c804c8dd41383fd10e8354e77620
| -rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 40 | ||||
| -rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/Owners.java | 11 |
2 files changed, 37 insertions, 14 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index bead31fc675e..1d96d5a72ff2 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -150,7 +150,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; @@ -159,7 +158,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; @@ -11641,10 +11639,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 - if (isProfileOwner(admin, callingUserId)) { - transferProfileOwner(admin, target, callingUserId); + synchronized (this) { + if (isProfileOwner(admin, callingUserId)) { + transferProfileOwnerLocked(admin, target, callingUserId); + } else if (isDeviceOwner(admin, callingUserId)) { + transferDeviceOwnerLocked(admin, target, callingUserId); + } } } finally { mInjector.binderRestoreCallingIdentity(id); @@ -11654,15 +11656,25 @@ 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); - mOwners.writeProfileOwner(profileOwnerUserId); - mDeviceAdminServiceController.startServiceForOwner( - target.getPackageName(), profileOwnerUserId, "transfer-profile-owner"); - } + transferActiveAdminUncheckedLocked(target, admin, profileOwnerUserId); + mOwners.transferProfileOwner(target, profileOwnerUserId); + Slog.i(LOG_TAG, "Profile owner set: " + target + " on user " + profileOwnerUserId); + mOwners.writeProfileOwner(profileOwnerUserId); + 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"); } } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java index 9042a8d8b305..2a23888b875c 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java @@ -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); |