From 5bf68027cf502c2835ad258aec05544958fcd354 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Wed, 27 Jan 2016 13:49:19 -0800 Subject: [PATCH] Make DPM.clearProfileOwner() public. Bug 26827204 Change-Id: Ib32e5370b493aa3e36b869d9ed3d78782df4c895 --- api/current.txt | 1 + api/test-current.txt | 1 + core/java/android/app/admin/DevicePolicyManager.java | 5 ++--- .../server/devicepolicy/DevicePolicyManagerService.java | 5 +++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/api/current.txt b/api/current.txt index da45517e715b6..1c68813f593e3 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5788,6 +5788,7 @@ package android.app.admin { method public void clearCrossProfileIntentFilters(android.content.ComponentName); method public void clearDeviceOwnerApp(java.lang.String); method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); + method public void clearProfileOwner(android.content.ComponentName); method public void clearUserRestriction(android.content.ComponentName, java.lang.String); method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); method public android.os.UserHandle createAndManageUser(android.content.ComponentName, java.lang.String, android.content.ComponentName, android.os.PersistableBundle, int); diff --git a/api/test-current.txt b/api/test-current.txt index 050caa016ece4..464ce59555d34 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -5790,6 +5790,7 @@ package android.app.admin { method public void clearCrossProfileIntentFilters(android.content.ComponentName); method public void clearDeviceOwnerApp(java.lang.String); method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); + method public void clearProfileOwner(android.content.ComponentName); method public void clearUserRestriction(android.content.ComponentName, java.lang.String); method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); method public android.os.UserHandle createAndManageUser(android.content.ComponentName, java.lang.String, android.content.ComponentName, android.os.PersistableBundle, int); diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 879d6636bb7b4..86011c45ae00d 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -3185,15 +3185,14 @@ public class DevicePolicyManager { } /** - * @hide * Clears the active profile owner and removes all user restrictions. The caller must * be from the same package as the active profile owner for this user, otherwise a * SecurityException will be thrown. * + *

This doesn't work for managed profile owners. + * * @param admin The component to remove as the profile owner. - * @return */ - @SystemApi public void clearProfileOwner(@NonNull ComponentName admin) { if (mService != null) { try { diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 04820a10072c8..d2c3328235dad 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -5343,7 +5343,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { if (!mHasFeature) { return; } - UserHandle callingUser = mInjector.binderGetCallingUserHandle(); + final UserHandle callingUser = mInjector.binderGetCallingUserHandle(); + final int userId = callingUser.getIdentifier(); + enforceNotManagedProfile(userId, "clear profile owner"); // Check if this is the profile owner who is calling final ActiveAdmin admin = getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); @@ -5351,7 +5353,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { admin.disableCamera = false; admin.userRestrictions = null; clearUserPoliciesLocked(callingUser); - final int userId = callingUser.getIdentifier(); mOwners.removeProfileOwner(userId); mOwners.writeProfileOwner(userId); }