diff options
-rw-r--r-- | src/com/android/packageinstaller/permission/model/AppPermissions.java | 58 | ||||
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java | 18 |
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 a61432e3..0c087350 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; @@ -187,8 +187,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( @@ -215,11 +215,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; @@ -359,8 +361,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); |