Revert "Show multi-permission UI in the requested order."

This reverts commit dda78230999da573318594c7cfcdbc738bab864e.

Bug: 23314383
Bug: 23397858
Change-Id: I8d06936ad8a51299148f0a311da81d8868840e78
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissions.java b/src/com/android/packageinstaller/permission/model/AppPermissions.java
index 125a6bd..bca06c0 100644
--- a/src/com/android/packageinstaller/permission/model/AppPermissions.java
+++ b/src/com/android/packageinstaller/permission/model/AppPermissions.java
@@ -19,16 +19,18 @@
 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 LinkedHashMap<String, AppPermissionGroup> mNameToGroupMap = new LinkedHashMap<>();
+    private final ArrayMap<String, AppPermissionGroup> mNameToGroupMap = new ArrayMap<>();
 
     private final Context mContext;
 
@@ -93,40 +95,36 @@
             return;
         }
 
-        if (mFilterPermissions != null) {
-            for (String filterPermission : mFilterPermissions) {
-                for (String requestedPerm : mPackageInfo.requestedPermissions) {
-                    if (!filterPermission.equals(requestedPerm)) {
-                        continue;
-                    }
+        for (int i = 0; i < mPackageInfo.requestedPermissions.length; i++) {
+            String requestedPerm = mPackageInfo.requestedPermissions[i];
 
-                    if (hasGroupForPermission(requestedPerm)) {
-                        break;
-                    }
-
-                    AppPermissionGroup group = AppPermissionGroup.create(mContext,
-                            mPackageInfo, requestedPerm);
-                    if (group == null) {
-                        break;
-                    }
-
-                    mGroups.add(group);
-                    break;
-                }
+            if (hasGroupForPermission(requestedPerm)) {
+                continue;
             }
-        } else {
-            for (String requestedPerm : mPackageInfo.requestedPermissions) {
-                if (hasGroupForPermission(requestedPerm)) {
-                    continue;
-                }
 
-                AppPermissionGroup group = AppPermissionGroup.create(mContext,
-                        mPackageInfo, requestedPerm);
-                if (group == null) {
-                    continue;
-                }
+            AppPermissionGroup group = AppPermissionGroup.create(mContext,
+                    mPackageInfo, requestedPerm);
+            if (group == null) {
+                continue;
+            }
 
-                mGroups.add(group);
+            mGroups.add(group);
+        }
+
+        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;
+                        break;
+                    }
+                }
+                if (!groupHasPermission) {
+                    mGroups.remove(i);
+                }
             }
         }
 
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
index 0c08735..a61432e 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
@@ -31,6 +31,7 @@
 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;
@@ -46,7 +47,6 @@
 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 @@
     private String[] mRequestedPermissions;
     private int[] mGrantResults;
 
-    private LinkedHashMap<String, GroupState> mRequestGrantPermissionGroups = new LinkedHashMap<>();
+    private ArrayMap<String, GroupState> mRequestGrantPermissionGroups = new ArrayMap<>();
 
     private GrantPermissionsViewHandler mViewHandler;
     private AppPermissions mAppPermissions;
@@ -187,8 +187,8 @@
     private boolean showNextPermissionGroupGrantRequest() {
         final int groupCount = mRequestGrantPermissionGroups.size();
 
-        int currentIndex = 0;
-        for (GroupState groupState : mRequestGrantPermissionGroups.values()) {
+        for (int i = 0; i < groupCount; i++) {
+            GroupState groupState = mRequestGrantPermissionGroups.valueAt(i);
             if (groupState.mState == GroupState.STATE_UNKNOWN) {
                 CharSequence appLabel = mAppPermissions.getAppLabel();
                 SpannableString message = new SpannableString(getString(
@@ -215,13 +215,11 @@
                 }
                 int icon = groupState.mGroup.getIconResId();
 
-                mViewHandler.updateUi(groupState.mGroup.getName(), groupCount, currentIndex,
+                mViewHandler.updateUi(groupState.mGroup.getName(), groupCount, i,
                         Icon.createWithResource(resources, icon), message,
                         groupState.mGroup.isUserSet());
-                return true;
+                return  true;
             }
-
-            currentIndex++;
         }
 
         return false;
@@ -361,8 +359,8 @@
 
         final int groupCount = mRequestGrantPermissionGroups.size();
         List<AppPermissionGroup> groups = new ArrayList<>(groupCount);
-        for (GroupState groupState : mRequestGrantPermissionGroups.values()) {
-            groups.add(groupState.mGroup);
+        for (int i = 0; i < groupCount; i++) {
+            groups.add(mRequestGrantPermissionGroups.valueAt(i).mGroup);
         }
 
         SafetyNetLogger.logPermissionsRequested(mAppPermissions.getPackageInfo(), groups);