diff options
author | Svet Ganov <svetoslavganov@google.com> | 2015-08-20 01:56:39 -0700 |
---|---|---|
committer | Svet Ganov <svetoslavganov@google.com> | 2015-08-20 02:10:17 -0700 |
commit | e899d8d48558a6d4a8f0498c38a623115aad2205 (patch) | |
tree | 3322ac32863fdf14f83cd5bab6c4a2b3263c2d59 /src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java | |
parent | a9ec5bcd3c2cbbaceece4a6380efc0f04199de48 (diff) | |
download | android_packages_apps_PackageInstaller-e899d8d48558a6d4a8f0498c38a623115aad2205.tar.gz android_packages_apps_PackageInstaller-e899d8d48558a6d4a8f0498c38a623115aad2205.tar.bz2 android_packages_apps_PackageInstaller-e899d8d48558a6d4a8f0498c38a623115aad2205.zip |
Grant only requested permissions not the whole group.
The policy for an app requesting permissions is that only the requested permissions
are granted not the whole groups to which these permissions belong. There was a
regression where we granted the whole group not only the requested permissions. If
an app has a permission in a group already granted, now per policy a subsequent
request from the same group is followed by an auto grant.
bug:23370436
Change-Id: Icce6377d60187f6f153d10d646cd8c9878dd6fab
Diffstat (limited to 'src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java')
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index c451dd50..a61432e3 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -118,21 +118,30 @@ public class GrantPermissionsActivity extends OverlayTouchActivity if (!group.isUserFixed() && !group.isPolicyFixed()) { switch (permissionPolicy) { case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: { - if (!group.areRuntimePermissionsGranted()) { - group.grantRuntimePermissions(false); + if (!group.areRuntimePermissionsGranted(mRequestedPermissions)) { + group.grantRuntimePermissions(false, mRequestedPermissions); group.setPolicyFixed(); } } break; case DevicePolicyManager.PERMISSION_POLICY_AUTO_DENY: { - if (!group.areRuntimePermissionsGranted()) { - group.revokeRuntimePermissions(false); + if (group.areRuntimePermissionsGranted(mRequestedPermissions)) { + group.revokeRuntimePermissions(false, mRequestedPermissions); group.setPolicyFixed(); } } break; default: { - mRequestGrantPermissionGroups.put(group.getName(), new GroupState(group)); + if (group.areRuntimePermissionsGranted(null) + && !group.areRuntimePermissionsGranted(mRequestedPermissions)) { + // If the group is granted but requested permissions + // in it not we auto grant the these permissions. + group.grantRuntimePermissions(group.isUserFixed(), + mRequestedPermissions); + } else { + mRequestGrantPermissionGroups.put(group.getName(), + new GroupState(group)); + } } break; } } else { @@ -226,10 +235,10 @@ public class GrantPermissionsActivity extends OverlayTouchActivity GroupState groupState = mRequestGrantPermissionGroups.get(name); if (groupState.mGroup != null) { if (granted) { - groupState.mGroup.grantRuntimePermissions(doNotAskAgain); + groupState.mGroup.grantRuntimePermissions(doNotAskAgain, mRequestedPermissions); groupState.mState = GroupState.STATE_ALLOWED; } else { - groupState.mGroup.revokeRuntimePermissions(doNotAskAgain); + groupState.mGroup.revokeRuntimePermissions(doNotAskAgain, mRequestedPermissions); groupState.mState = GroupState.STATE_DENIED; } updateGrantResults(groupState.mGroup); |