From 64d3812bca7c1121a767e8436b433e8b293e0110 Mon Sep 17 00:00:00 2001 From: Arthur Shuai Date: Thu, 20 Oct 2016 15:50:44 +0800 Subject: Disable permission auto enable in case only disable it under group permission The permission of dial out will be auto enabled if only disable it under call group permission. This change disable auto enable permission in this case. Change-Id: Ibe8c9064fcd4fdfd33da69d68c145a5108a484d2 CRs-Fixed:1079155 --- .../permission/model/AppPermissionGroup.java | 22 ++++++++++++++++++++ .../permission/ui/GrantPermissionsActivity.java | 24 ++++++++++++++++------ 2 files changed, 40 insertions(+), 6 deletions(-) mode change 100755 => 100644 src/com/android/packageinstaller/permission/model/AppPermissionGroup.java diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java old mode 100755 new mode 100644 index 2bdae425..aa68959e --- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java +++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java @@ -286,6 +286,28 @@ public final class AppPermissionGroup implements Comparable return mPermissions.get(permission) != null; } + public boolean checkRuntimePermission(String[] filterPermissions) { + if (LocationUtils.isLocationGroupAndProvider(mName, mPackageInfo.packageName)) { + return LocationUtils.isLocationEnabled(mContext); + } + final int permissionCount = mPermissions.size(); + for (int i = 0; i < permissionCount; i++) { + Permission permission = mPermissions.valueAt(i); + if (filterPermissions != null + && !ArrayUtils.contains(filterPermissions, permission.getName())) { + continue; + } + if (mAppSupportsRuntimePermissions) { + if (!permission.isGranted()) { + return false; + } + } else if (permission.isGranted() && (permission.getAppOp() == null + || permission.isAppOpAllowed())) { + return true; + } + } + return false; + } public boolean areRuntimePermissionsGranted() { return areRuntimePermissionsGranted(null); } diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index 4a4b7558..fdb16484 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -161,12 +161,22 @@ public class GrantPermissionsActivity extends OverlayTouchActivity break; default: { - if (!group.areRuntimePermissionsGranted()) { - mRequestGrantPermissionGroups.put(group.getName(), - new GroupState(group)); + if (AppPermissionGroup.isStrictOpEnable()) { + if (!group.checkRuntimePermission(null)) { + mRequestGrantPermissionGroups.put(group.getName(), + new GroupState(group)); + } else { + group.grantRuntimePermissions(false); + updateGrantResults(group); + } } else { - group.grantRuntimePermissions(false); - updateGrantResults(group); + if (!group.areRuntimePermissionsGranted()) { + mRequestGrantPermissionGroups.put(group.getName(), + new GroupState(group)); + } else { + group.grantRuntimePermissions(false); + updateGrantResults(group); + } } } break; @@ -297,7 +307,9 @@ public class GrantPermissionsActivity extends OverlayTouchActivity groupState.mGroup.grantRuntimePermissions(doNotAskAgain); groupState.mState = GroupState.STATE_ALLOWED; } else { - groupState.mGroup.revokeRuntimePermissions(doNotAskAgain); + if(!AppPermissionGroup.isStrictOpEnable()){ + groupState.mGroup.revokeRuntimePermissions(doNotAskAgain); + } groupState.mState = GroupState.STATE_DENIED; } updateGrantResults(groupState.mGroup); -- cgit v1.2.3