Sort applications to avoid backup data change

Bug: 328698829
Fix: 328698829
Test: Manual test
Change-Id: I0e5bf1145d972db136bbd85571f015b4ab6fb171
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsStorage.java b/src/com/android/settings/fuelgauge/BatterySettingsStorage.java
index 36fa5bb..99edbec 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsStorage.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsStorage.java
@@ -52,6 +52,7 @@
 import java.io.OutputStream;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 /** An implementation to backup and restore battery configurations. */
@@ -321,8 +322,8 @@
                 @NonNull BackupContext backupContext, @NonNull OutputStream outputStream)
                 throws IOException {
             final long timestamp = System.currentTimeMillis();
-            final ArraySet<ApplicationInfo> applications = getInstalledApplications();
-            if (applications == null || applications.isEmpty()) {
+            final ApplicationInfo[] applications = getInstalledApplications();
+            if (applications.length == 0) {
                 Log.w(TAG, "no data found in the getInstalledApplications()");
                 return EntityBackupResult.DELETE;
             }
@@ -360,15 +361,24 @@
                     TAG,
                     String.format(
                             "backup getInstalledApplications():%d count=%d in %d/ms",
-                            applications.size(),
+                            applications.length,
                             backupCount,
                             (System.currentTimeMillis() - timestamp)));
             return EntityBackupResult.UPDATE;
         }
 
-        private @Nullable ArraySet<ApplicationInfo> getInstalledApplications() {
-            return BatteryOptimizeUtils.getInstalledApplications(
-                    mApplication, AppGlobals.getPackageManager());
+        private ApplicationInfo[] getInstalledApplications() {
+            ArraySet<ApplicationInfo> installedApplications =
+                    BatteryOptimizeUtils.getInstalledApplications(
+                            mApplication, AppGlobals.getPackageManager());
+            ApplicationInfo[] applicationInfos = new ApplicationInfo[0];
+            if (installedApplications == null || installedApplications.isEmpty()) {
+                return applicationInfos;
+            }
+            applicationInfos = installedApplications.toArray(applicationInfos);
+            // sort the list to ensure backup data is stable
+            Arrays.sort(applicationInfos, Comparator.comparing(info -> info.packageName));
+            return applicationInfos;
         }
 
         static @NonNull SharedPreferences getSharedPreferences(Context context) {