From b03de69d79ddabc5e638b8daaa2f3fd43f38795e Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Fri, 8 Mar 2024 11:27:30 +0800 Subject: [PATCH] Sort applications to avoid backup data change Bug: 328698829 Fix: 328698829 Test: Manual test (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:ea8ed47d070be8b74297f1ca330dfdf9b196ec29) Merged-In: I0e5bf1145d972db136bbd85571f015b4ab6fb171 Change-Id: I0e5bf1145d972db136bbd85571f015b4ab6fb171 --- .../fuelgauge/BatterySettingsStorage.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatterySettingsStorage.java b/src/com/android/settings/fuelgauge/BatterySettingsStorage.java index 36fa5bbd029..99edbecd617 100644 --- a/src/com/android/settings/fuelgauge/BatterySettingsStorage.java +++ b/src/com/android/settings/fuelgauge/BatterySettingsStorage.java @@ -52,6 +52,7 @@ import java.io.InputStream; 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 @@ public final class BatterySettingsStorage extends ObservableBackupRestoreStorage @NonNull BackupContext backupContext, @NonNull OutputStream outputStream) throws IOException { final long timestamp = System.currentTimeMillis(); - final ArraySet 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 @@ public final class BatterySettingsStorage extends ObservableBackupRestoreStorage 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 getInstalledApplications() { - return BatteryOptimizeUtils.getInstalledApplications( - mApplication, AppGlobals.getPackageManager()); + private ApplicationInfo[] getInstalledApplications() { + ArraySet 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) {