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();
