diff options
| -rw-r--r-- | core/java/android/app/admin/DevicePolicyManager.java | 2 | ||||
| -rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 66 |
2 files changed, 32 insertions, 36 deletions
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 4d1cff58714a..83e06d6c9805 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -4332,7 +4332,7 @@ public class DevicePolicyManager { * @param admin Which profile or device owner this request is associated with. * @return the current policy for future permission requests. */ - public int getPermissionPolicy(@NonNull ComponentName admin) { + public int getPermissionPolicy(ComponentName admin) { try { return mService.getPermissionPolicy(admin); } catch (RemoteException re) { diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index e44a7ab874eb..491b4120d544 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -4214,20 +4214,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { throw new SecurityException("clearDeviceOwner can only be called by the device owner"); } synchronized (this) { - long ident = Binder.clearCallingIdentity(); - try { - clearUserRestrictions(new UserHandle(UserHandle.USER_OWNER)); - AppGlobals.getPackageManager().updatePermissionFlagsForAllApps( - PackageManager.FLAG_PERMISSION_POLICY_FIXED, - 0, UserHandle.USER_OWNER); - if (mDeviceOwner != null) { - mDeviceOwner.clearDeviceOwner(); - mDeviceOwner.writeOwnerFile(); - updateDeviceOwnerLocked(); - } - } catch (RemoteException re) { - } finally { - Binder.restoreCallingIdentity(ident); + clearUserPoliciesLocked(new UserHandle(UserHandle.USER_OWNER)); + if (mDeviceOwner != null) { + mDeviceOwner.clearDeviceOwner(); + mDeviceOwner.writeOwnerFile(); + updateDeviceOwnerLocked(); } } } @@ -4378,34 +4369,39 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return; } UserHandle callingUser = Binder.getCallingUserHandle(); - int userId = callingUser.getIdentifier(); // Check if this is the profile owner who is calling getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); synchronized (this) { - // Reset some of the profile-owner policies - DevicePolicyData policy = getUserData(userId); - policy.mPermissionPolicy = DevicePolicyManager.PERMISSION_POLICY_PROMPT; - policy.mDelegatedCertInstallerPackage = null; - policy.mStatusBarDisabled = false; - saveSettingsLocked(userId); - - long ident = Binder.clearCallingIdentity(); - try { - clearUserRestrictions(callingUser); - AppGlobals.getPackageManager().updatePermissionFlagsForAllApps( - PackageManager.FLAG_PERMISSION_POLICY_FIXED, - 0, callingUser.getIdentifier()); - if (mDeviceOwner != null) { - mDeviceOwner.removeProfileOwner(userId); - mDeviceOwner.writeOwnerFile(); - } - } catch (RemoteException re) { - } finally { - Binder.restoreCallingIdentity(ident); + clearUserPoliciesLocked(callingUser); + if (mDeviceOwner != null) { + mDeviceOwner.removeProfileOwner(callingUser.getIdentifier()); + mDeviceOwner.writeOwnerFile(); } } } + private void clearUserPoliciesLocked(UserHandle userHandle) { + int userId = userHandle.getIdentifier(); + // Reset some of the user-specific policies + DevicePolicyData policy = getUserData(userId); + policy.mPermissionPolicy = DevicePolicyManager.PERMISSION_POLICY_PROMPT; + policy.mDelegatedCertInstallerPackage = null; + policy.mStatusBarDisabled = false; + saveSettingsLocked(userId); + + final long ident = Binder.clearCallingIdentity(); + try { + clearUserRestrictions(userHandle); + AppGlobals.getPackageManager().updatePermissionFlagsForAllApps( + PackageManager.FLAG_PERMISSION_POLICY_FIXED, + 0 /* flagValues */, userHandle.getIdentifier()); + } catch (RemoteException re) { + } finally { + Binder.restoreCallingIdentity(ident); + } + } + + private void clearUserRestrictions(UserHandle userHandle) { AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); |