summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java40
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/Owners.java11
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 762aeaffb00b..dd4c2db7b4fe 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -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
- 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);
@@ -11889,15 +11891,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);