Use unique preference key.

The UI code was wrongly using UID as the key - it is not
unique - resulting in keeping only one app per UID in the
UI and not showing permission controls for the other apps
in this UID. This change uses the unique package plus UID
as the preference key.

bug:23937944

Change-Id: I859afcf3ec8efdcb62d0e9dacd19f771436da084
diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java
index 73fc708..9365bf1 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionApps.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java
@@ -301,7 +301,7 @@
         }
 
         public String getKey() {
-            return Integer.toString(getUid());
+            return mPackageName + getUid();
         }
 
         public String getLabel() {
@@ -357,7 +357,7 @@
             final int result = mLabel.compareTo(another.mLabel);
             if (result == 0) {
                 // Unbadged before badged.
-                return getUid() - another.getUid();
+                return getKey().compareTo(another.getKey());
             }
             return result;
         }
diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
index 7bae18f..2a46f1a 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
@@ -21,8 +21,8 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.util.ArrayMap;
 import android.util.ArraySet;
-import android.util.SparseArray;
 
 import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
 import com.android.packageinstaller.permission.utils.Utils;
@@ -108,22 +108,22 @@
     public boolean getAppsWithPermissionsCount(Context context, int[] counts) {
         ArraySet<String> launcherPkgs = Utils.getLauncherPackages(context);
         // Indexed by uid.
-        SparseArray<Boolean> grantedApps = new SparseArray<>();
-        SparseArray<Boolean> allApps = new SparseArray<>();
+        ArrayMap<String, Boolean> grantedApps = new ArrayMap<>();
+        ArrayMap<String, Boolean> allApps = new ArrayMap<>();
         for (String group : Utils.MODERN_PERMISSION_GROUPS) {
             PermissionApps permissionApps = new PermissionApps(context,
                     group, null);
             permissionApps.loadNowWithoutUi();
             for (PermissionApp app : permissionApps.getApps()) {
-                int uid = app.getUid();
+                String key = app.getKey();
                 if (Utils.isSystem(app, launcherPkgs)) {
                     // We default to not showing system apps, so hide them from count.
                     continue;
                 }
                 if (app.areRuntimePermissionsGranted()) {
-                    grantedApps.put(uid, true);
+                    grantedApps.put(key, true);
                 }
-                allApps.put(uid, true);
+                allApps.put(key, true);
             }
         }
         counts[0] = grantedApps.size();