summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSvet Ganov <svetoslavganov@google.com>2015-08-20 08:17:59 -0700
committerJeff Sharkey <jsharkey@android.com>2015-08-21 11:38:21 -0700
commit8dcea3bf077e84eb0ad8e204981b4f20f8ca83ed (patch)
tree15697393e4cd63f52917438db4b659127de61571 /src
parent9b724fd6ddd5be3b21f9fea7977bd573659e7ecc (diff)
downloadandroid_packages_apps_PackageInstaller-8dcea3bf077e84eb0ad8e204981b4f20f8ca83ed.tar.gz
android_packages_apps_PackageInstaller-8dcea3bf077e84eb0ad8e204981b4f20f8ca83ed.tar.bz2
android_packages_apps_PackageInstaller-8dcea3bf077e84eb0ad8e204981b4f20f8ca83ed.zip
Show multi-permission UI in the requested order.
Apps can request several permissions at once but the UI was not shown in the request order. This is problematic since apps may show on board UI stating which permissions will be requested. Bug: 23314383 Change-Id: I0c59a741fb09e63bead0f76d4d337769d2dff387
Diffstat (limited to 'src')
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissions.java58
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java18
2 files changed, 40 insertions, 36 deletions
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissions.java b/src/com/android/packageinstaller/permission/model/AppPermissions.java
index bca06c0c..125a6bd8 100644
--- a/src/com/android/packageinstaller/permission/model/AppPermissions.java
+++ b/src/com/android/packageinstaller/permission/model/AppPermissions.java
@@ -19,18 +19,16 @@ package com.android.packageinstaller.permission.model;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
-import android.util.ArrayMap;
-
-import com.android.internal.util.ArrayUtils;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.List;
public final class AppPermissions {
private final ArrayList<AppPermissionGroup> mGroups = new ArrayList<>();
- private final ArrayMap<String, AppPermissionGroup> mNameToGroupMap = new ArrayMap<>();
+ private final LinkedHashMap<String, AppPermissionGroup> mNameToGroupMap = new LinkedHashMap<>();
private final Context mContext;
@@ -95,36 +93,40 @@ public final class AppPermissions {
return;
}
- for (int i = 0; i < mPackageInfo.requestedPermissions.length; i++) {
- String requestedPerm = mPackageInfo.requestedPermissions[i];
-
- if (hasGroupForPermission(requestedPerm)) {
- continue;
- }
-
- AppPermissionGroup group = AppPermissionGroup.create(mContext,
- mPackageInfo, requestedPerm);
- if (group == null) {
- continue;
- }
+ if (mFilterPermissions != null) {
+ for (String filterPermission : mFilterPermissions) {
+ for (String requestedPerm : mPackageInfo.requestedPermissions) {
+ if (!filterPermission.equals(requestedPerm)) {
+ continue;
+ }
- mGroups.add(group);
- }
+ if (hasGroupForPermission(requestedPerm)) {
+ break;
+ }
- if (!ArrayUtils.isEmpty(mFilterPermissions)) {
- final int groupCount = mGroups.size();
- for (int i = groupCount - 1; i >= 0; i--) {
- AppPermissionGroup group = mGroups.get(i);
- boolean groupHasPermission = false;
- for (String filterPerm : mFilterPermissions) {
- if (group.hasPermission(filterPerm)) {
- groupHasPermission = true;
+ AppPermissionGroup group = AppPermissionGroup.create(mContext,
+ mPackageInfo, requestedPerm);
+ if (group == null) {
break;
}
+
+ mGroups.add(group);
+ break;
}
- if (!groupHasPermission) {
- mGroups.remove(i);
+ }
+ } else {
+ for (String requestedPerm : mPackageInfo.requestedPermissions) {
+ if (hasGroupForPermission(requestedPerm)) {
+ continue;
}
+
+ AppPermissionGroup group = AppPermissionGroup.create(mContext,
+ mPackageInfo, requestedPerm);
+ if (group == null) {
+ continue;
+ }
+
+ mGroups.add(group);
}
}
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
index c451dd50..df98d690 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
@@ -31,7 +31,6 @@ import android.hardware.camera2.utils.ArrayUtils;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
-import android.util.ArrayMap;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -47,6 +46,7 @@ import com.android.packageinstaller.permission.utils.SafetyNetLogger;
import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
public class GrantPermissionsActivity extends OverlayTouchActivity
@@ -57,7 +57,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
private String[] mRequestedPermissions;
private int[] mGrantResults;
- private ArrayMap<String, GroupState> mRequestGrantPermissionGroups = new ArrayMap<>();
+ private LinkedHashMap<String, GroupState> mRequestGrantPermissionGroups = new LinkedHashMap<>();
private GrantPermissionsViewHandler mViewHandler;
private AppPermissions mAppPermissions;
@@ -178,8 +178,8 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
private boolean showNextPermissionGroupGrantRequest() {
final int groupCount = mRequestGrantPermissionGroups.size();
- for (int i = 0; i < groupCount; i++) {
- GroupState groupState = mRequestGrantPermissionGroups.valueAt(i);
+ int currentIndex = 0;
+ for (GroupState groupState : mRequestGrantPermissionGroups.values()) {
if (groupState.mState == GroupState.STATE_UNKNOWN) {
CharSequence appLabel = mAppPermissions.getAppLabel();
SpannableString message = new SpannableString(getString(
@@ -206,11 +206,13 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
}
int icon = groupState.mGroup.getIconResId();
- mViewHandler.updateUi(groupState.mGroup.getName(), groupCount, i,
+ mViewHandler.updateUi(groupState.mGroup.getName(), groupCount, currentIndex,
Icon.createWithResource(resources, icon), message,
groupState.mGroup.isUserSet());
- return true;
+ return true;
}
+
+ currentIndex++;
}
return false;
@@ -350,8 +352,8 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
final int groupCount = mRequestGrantPermissionGroups.size();
List<AppPermissionGroup> groups = new ArrayList<>(groupCount);
- for (int i = 0; i < groupCount; i++) {
- groups.add(mRequestGrantPermissionGroups.valueAt(i).mGroup);
+ for (GroupState groupState : mRequestGrantPermissionGroups.values()) {
+ groups.add(groupState.mGroup);
}
SafetyNetLogger.logPermissionsRequested(mAppPermissions.getPackageInfo(), groups);