diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2016-04-29 21:40:17 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-04-29 21:40:17 +0000 |
commit | 9154c12ce75af52ecf7b260600d62d64918105ff (patch) | |
tree | 8479f3ba8a45fc26b2dce9bba9d4a5b855a097eb /src/com | |
parent | c9cf85cbdc0099c94e51bf88ec848cb294bce52c (diff) | |
parent | 294b6406798c59e9db5ffa99d042f9b8c6ca6f90 (diff) | |
download | android_packages_apps_PackageInstaller-9154c12ce75af52ecf7b260600d62d64918105ff.tar.gz android_packages_apps_PackageInstaller-9154c12ce75af52ecf7b260600d62d64918105ff.tar.bz2 android_packages_apps_PackageInstaller-9154c12ce75af52ecf7b260600d62d64918105ff.zip |
Merge "Grant only the requested permissions" into nyc-dev
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java | 50 | ||||
-rw-r--r-- | src/com/android/packageinstaller/permission/utils/ArrayUtils.java | 18 |
2 files changed, 59 insertions, 9 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index 78d33d23..807d3a3b 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -29,7 +29,6 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Typeface; import android.graphics.drawable.Icon; -import android.hardware.camera2.utils.ArrayUtils; import android.os.Build; import android.os.Bundle; import android.text.SpannableString; @@ -47,6 +46,7 @@ import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; import com.android.packageinstaller.permission.model.Permission; import com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewHandlerImpl; +import com.android.packageinstaller.permission.utils.ArrayUtils; import com.android.packageinstaller.permission.utils.SafetyNetLogger; import java.util.ArrayList; @@ -147,24 +147,36 @@ public class GrantPermissionsActivity extends OverlayTouchActivity switch (permissionPolicy) { case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: { if (!group.areRuntimePermissionsGranted()) { - group.grantRuntimePermissions(false); + group.grantRuntimePermissions(false, computeAffectedPermissions( + callingPackageInfo, requestedPermission)); } group.setPolicyFixed(); } break; case DevicePolicyManager.PERMISSION_POLICY_AUTO_DENY: { if (group.areRuntimePermissionsGranted()) { - group.revokeRuntimePermissions(false); + group.revokeRuntimePermissions(false, computeAffectedPermissions( + callingPackageInfo, requestedPermission)); } group.setPolicyFixed(); } break; default: { if (!group.areRuntimePermissionsGranted()) { - mRequestGrantPermissionGroups.put(group.getName(), - new GroupState(group)); + GroupState state = mRequestGrantPermissionGroups.get(group.getName()); + if (state == null) { + state = new GroupState(group); + mRequestGrantPermissionGroups.put(group.getName(), state); + } + String affectedPermission = computeAffectedPermission( + callingPackageInfo, requestedPermission); + if (affectedPermission != null) { + state.affectedPermissions = ArrayUtils.appendString( + state.affectedPermissions, affectedPermission); + } } else { - group.grantRuntimePermissions(false); + group.grantRuntimePermissions(false, computeAffectedPermissions( + callingPackageInfo, requestedPermission)); updateGrantResults(group); } } break; @@ -271,10 +283,12 @@ public class GrantPermissionsActivity extends OverlayTouchActivity GroupState groupState = mRequestGrantPermissionGroups.get(name); if (groupState.mGroup != null) { if (granted) { - groupState.mGroup.grantRuntimePermissions(doNotAskAgain); + groupState.mGroup.grantRuntimePermissions(doNotAskAgain, + groupState.affectedPermissions); groupState.mState = GroupState.STATE_ALLOWED; } else { - groupState.mGroup.revokeRuntimePermissions(doNotAskAgain); + groupState.mGroup.revokeRuntimePermissions(doNotAskAgain, + groupState.affectedPermissions); groupState.mState = GroupState.STATE_DENIED; } updateGrantResults(groupState.mGroup); @@ -286,7 +300,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity private void updateGrantResults(AppPermissionGroup group) { for (Permission permission : group.getPermissions()) { - final int index = ArrayUtils.getArrayIndex( + final int index = ArrayUtils.indexOf( mRequestedPermissions, permission.getName()); if (index >= 0) { mGrantResults[index] = permission.isGranted() ? PackageManager.PERMISSION_GRANTED @@ -402,6 +416,23 @@ public class GrantPermissionsActivity extends OverlayTouchActivity SafetyNetLogger.logPermissionsRequested(mAppPermissions.getPackageInfo(), groups); } + private static String[] computeAffectedPermissions(PackageInfo callingPackageInfo, + String permission) { + String affectedPermission = computeAffectedPermission(callingPackageInfo, permission); + if (affectedPermission != null) { + return new String[] {permission}; + } + return null; + } + + private static String computeAffectedPermission(PackageInfo callingPackageInfo, + String permission) { + if (callingPackageInfo.applicationInfo.targetSdkVersion > Build.VERSION_CODES.M) { + return permission; + } + return null; + } + private static final class GroupState { static final int STATE_UNKNOWN = 0; static final int STATE_ALLOWED = 1; @@ -409,6 +440,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity final AppPermissionGroup mGroup; int mState = STATE_UNKNOWN; + String[] affectedPermissions; GroupState(AppPermissionGroup group) { mGroup = group; diff --git a/src/com/android/packageinstaller/permission/utils/ArrayUtils.java b/src/com/android/packageinstaller/permission/utils/ArrayUtils.java index 4b7a3947..2af641bc 100644 --- a/src/com/android/packageinstaller/permission/utils/ArrayUtils.java +++ b/src/com/android/packageinstaller/permission/utils/ArrayUtils.java @@ -16,6 +16,8 @@ package com.android.packageinstaller.permission.utils; +import android.text.TextUtils; + import java.util.Objects; public final class ArrayUtils { @@ -42,4 +44,20 @@ public final class ArrayUtils { } return -1; } + + public static String[] appendString(String[] cur, String val) { + if (cur == null) { + return new String[] { val }; + } + final int N = cur.length; + for (int i = 0; i < N; i++) { + if (TextUtils.equals(cur[i], val)) { + return cur; + } + } + String[] ret = new String[N + 1]; + System.arraycopy(cur, 0, ret, 0, N); + ret[N] = val; + return ret; + } } |