diff options
author | Tony Mak <tonymak@google.com> | 2015-06-19 16:57:39 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-19 16:57:41 +0000 |
commit | 92dfab8d96dc854b8ccc48e1b2805069997879d5 (patch) | |
tree | 8d66b5eee23b7dfe17f2858ff5569fb247397fc4 | |
parent | 1f98e79abd97e295d1e1f309102691c7e1c422c5 (diff) | |
parent | 8e33f63040db4f8326c1bf678645a42ab79c32f3 (diff) | |
download | frameworks_base-92dfab8d96dc854b8ccc48e1b2805069997879d5.zip frameworks_base-92dfab8d96dc854b8ccc48e1b2805069997879d5.tar.gz frameworks_base-92dfab8d96dc854b8ccc48e1b2805069997879d5.tar.bz2 |
Merge "Clear granted permission when app is uninstalled by one of the multiple users" into mnc-dev
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 709ae54..e7fddb9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -12500,6 +12500,8 @@ public class PackageManagerService extends IPackageManager.Stub { if (clearPackagePreferredActivitiesLPw(packageName, removeUser)) { scheduleWritePackageRestrictionsLocked(removeUser); } + revokeRuntimePermissionsAndClearAllFlagsLocked(ps.getPermissionsState(), + removeUser); } return true; } @@ -12706,13 +12708,37 @@ public class PackageManagerService extends IPackageManager.Stub { | PackageManager.FLAG_PERMISSION_USER_FIXED | PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE; + revokeRuntimePermissionsAndClearFlagsLocked(permissionsState, userId, userSetFlags); + } + + /** + * Revokes granted runtime permissions and clears all flags. + * + * @param permissionsState The permission state to reset. + * @param userId The device user for which to do a reset. + */ + private void revokeRuntimePermissionsAndClearAllFlagsLocked( + PermissionsState permissionsState, int userId) { + revokeRuntimePermissionsAndClearFlagsLocked(permissionsState, userId, + PackageManager.MASK_PERMISSION_FLAGS); + } + + /** + * Revokes granted runtime permissions and clears certain flags. + * + * @param permissionsState The permission state to reset. + * @param userId The device user for which to do a reset. + * @param flags The flags that is going to be reset. + */ + private void revokeRuntimePermissionsAndClearFlagsLocked( + PermissionsState permissionsState, int userId, int flags) { boolean needsWrite = false; for (PermissionState state : permissionsState.getRuntimePermissionStates(userId)) { BasePermission bp = mSettings.mPermissions.get(state.getName()); if (bp != null) { permissionsState.revokeRuntimePermission(bp, userId); - permissionsState.updatePermissionFlags(bp, userId, userSetFlags, 0); + permissionsState.updatePermissionFlags(bp, userId, flags, 0); needsWrite = true; } } |