diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java index a3c77deed1e..774e6d9b9c3 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java @@ -16,7 +16,6 @@ package com.android.settings.fuelgauge.batteryusage; -import android.app.Application; import android.content.Context; import androidx.annotation.NonNull; @@ -24,7 +23,6 @@ import androidx.annotation.NonNull; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.overlay.FeatureFactory; -import com.android.settingslib.applications.ApplicationsState; import java.util.Collections; import java.util.Iterator; @@ -41,6 +39,7 @@ public class BatteryDiffData { final Context context, final @NonNull List appDiffEntries, final @NonNull List systemDiffEntries, + final Set systemAppsSet, final boolean isAccumulated) { mAppEntries = appDiffEntries; mSystemEntries = systemDiffEntries; @@ -49,7 +48,7 @@ public class BatteryDiffData { final PowerUsageFeatureProvider featureProvider = FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context); purgeBatteryDiffData(featureProvider); - combineBatteryDiffEntry(context, featureProvider); + combineBatteryDiffEntry(context, featureProvider, systemAppsSet); } setTotalConsumePower(); @@ -71,9 +70,9 @@ public class BatteryDiffData { } /** Combines into SystemAppsBatteryDiffEntry and OthersBatteryDiffEntry. */ - private void combineBatteryDiffEntry( - final Context context, final PowerUsageFeatureProvider featureProvider) { - combineIntoSystemApps(context, featureProvider, mAppEntries); + private void combineBatteryDiffEntry(final Context context, + final PowerUsageFeatureProvider featureProvider, final Set systemAppsSet) { + combineIntoSystemApps(context, featureProvider, systemAppsSet, mAppEntries); combineSystemItemsIntoOthers(context, featureProvider, mSystemEntries); } @@ -119,17 +118,14 @@ public class BatteryDiffData { private static void combineIntoSystemApps( final Context context, final PowerUsageFeatureProvider featureProvider, + final Set systemAppsSet, final List appEntries) { final List systemAppsAllowlist = featureProvider.getSystemAppsAllowlist(); - final Application application = (Application) context.getApplicationContext(); - final ApplicationsState applicationsState = - application == null ? null : ApplicationsState.getInstance(application); - BatteryDiffEntry.SystemAppsBatteryDiffEntry systemAppsDiffEntry = null; final Iterator appListIterator = appEntries.iterator(); while (appListIterator.hasNext()) { final BatteryDiffEntry batteryDiffEntry = appListIterator.next(); - if (needsCombineInSystemApp(batteryDiffEntry, systemAppsAllowlist, applicationsState)) { + if (needsCombineInSystemApp(batteryDiffEntry, systemAppsAllowlist, systemAppsSet)) { if (systemAppsDiffEntry == null) { systemAppsDiffEntry = new BatteryDiffEntry.SystemAppsBatteryDiffEntry(context); } @@ -184,7 +180,7 @@ public class BatteryDiffData { @VisibleForTesting static boolean needsCombineInSystemApp(final BatteryDiffEntry batteryDiffEntry, - final List systemAppsAllowlist, final ApplicationsState applicationsState) { + final List systemAppsAllowlist, final Set systemAppsSet) { if (batteryDiffEntry.mBatteryHistEntry.mIsHidden) { return true; } @@ -198,15 +194,6 @@ public class BatteryDiffData { return true; } - if (applicationsState == null) { - return false; - } - final ApplicationsState.AppEntry appEntry = - applicationsState.getEntry(packageName, /* userId= */ 0); - if (appEntry == null || appEntry.info == null) { - return false; - } - return !ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER_AND_INSTANT.filterApp( - appEntry); + return systemAppsSet != null && systemAppsSet.contains(packageName); } } diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index b61b755404a..864f2e7d963 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -53,6 +53,8 @@ import com.android.settings.Utils; import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.fuelgauge.BatteryStatus; +import com.android.settingslib.spaprivileged.model.app.AppListConfig; +import com.android.settingslib.spaprivileged.model.app.AppListRepositoryUtil; import java.time.Duration; import java.util.ArrayList; @@ -94,11 +96,14 @@ public final class DataProcessor { @VisibleForTesting static final int SELECTED_INDEX_ALL = BatteryChartViewModel.SELECTED_INDEX_ALL; + @VisibleForTesting + static boolean sDebug = false; + @VisibleForTesting static long sFakeCurrentTimeMillis = 0; @VisibleForTesting - static boolean sDebug = false; + static Set sFakeSystemAppsSet; @VisibleForTesting static IUsageStatsManager sUsageStatsManager = @@ -633,10 +638,10 @@ public final class DataProcessor { return null; } final Map> resultMap = new HashMap<>(); + final Set systemAppsSet = getSystemAppsSet(context); // Insert diff data from [0][0] to [maxDailyIndex][maxHourlyIndex]. - insertHourlyUsageDiffData( - context, hourlyBatteryLevelsPerDay, batteryHistoryMap, appUsagePeriodMap, - resultMap); + insertHourlyUsageDiffData(context, systemAppsSet, hourlyBatteryLevelsPerDay, + batteryHistoryMap, appUsagePeriodMap, resultMap); // Insert diff data from [0][SELECTED_INDEX_ALL] to [maxDailyIndex][SELECTED_INDEX_ALL]. insertDailyUsageDiffData(context, hourlyBatteryLevelsPerDay, resultMap); // Insert diff data [SELECTED_INDEX_ALL][SELECTED_INDEX_ALL]. @@ -695,7 +700,9 @@ public final class DataProcessor { return null; } - return new BatteryDiffData(context, appEntries, systemEntries, /* isAccumulated= */ false); + final Set systemAppsSet = getSystemAppsSet(context); + return new BatteryDiffData( + context, appEntries, systemEntries, systemAppsSet, /* isAccumulated= */ false); } /** @@ -1363,6 +1370,7 @@ public final class DataProcessor { private static void insertHourlyUsageDiffData( Context context, + final Set systemAppsSet, final List hourlyBatteryLevelsPerDay, final Map> batteryHistoryMap, final Map>>>> @@ -1392,6 +1400,7 @@ public final class DataProcessor { workProfileUserId, hourlyIndex, timestamps, + systemAppsSet, appUsagePeriodMap == null || appUsagePeriodMap.get(dailyIndex) == null ? null @@ -1436,6 +1445,7 @@ public final class DataProcessor { final int workProfileUserId, final int currentIndex, final List timestamps, + final Set systemAppsSet, final Map>> appUsageMap, final Map> batteryHistoryMap) { final List appEntries = new ArrayList<>(); @@ -1589,7 +1599,8 @@ public final class DataProcessor { return null; } - return new BatteryDiffData(context, appEntries, systemEntries, /* isAccumulated= */ false); + return new BatteryDiffData( + context, appEntries, systemEntries, systemAppsSet, /* isAccumulated= */ false); } private static long getScreenOnTime(@Nullable final List appUsagePeriodList) { @@ -1672,8 +1683,8 @@ public final class DataProcessor { } } - return diffEntryList.isEmpty() ? null : new BatteryDiffData( - context, appEntries, systemEntries, /* isAccumulated= */ true); + return diffEntryList.isEmpty() ? null : new BatteryDiffData(context, appEntries, + systemEntries, /* systemAppsSet= */ null, /* isAccumulated= */ true); } private static void computeUsageDiffDataPerEntry( @@ -1889,6 +1900,12 @@ public final class DataProcessor { return null; } + private static Set getSystemAppsSet(Context context) { + return sFakeSystemAppsSet != null ? sFakeSystemAppsSet + : AppListRepositoryUtil.getSystemPackageNames(context, + new AppListConfig(context.getUserId(), false)); + } + private static long getCurrentTimeMillis() { return sFakeCurrentTimeMillis > 0 ? sFakeCurrentTimeMillis : System.currentTimeMillis(); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java index 1c653290924..9c922bbe6c0 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java @@ -88,6 +88,7 @@ public final class BatteryChartPreferenceControllerTest { Locale.setDefault(new Locale("en_US")); org.robolectric.shadows.ShadowSettings.set24HourTimeFormat(false); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); + DataProcessor.sFakeSystemAppsSet = Set.of(); mFeatureFactory = FakeFeatureFactory.setupForTest(); mContext = spy(RuntimeEnvironment.application); doReturn(mContext).when(mContext).getApplicationContext(); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java index 20c9bc52e42..48a6e72a2a1 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java @@ -38,6 +38,7 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import java.util.List; +import java.util.Set; @RunWith(RobolectricTestRunner.class) public class BatteryDiffDataTest { @@ -77,7 +78,7 @@ public class BatteryDiffDataTest { hiddenHistEntry); boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp( - hiddenDiffEntry, List.of(), mApplicationsState); + hiddenDiffEntry, List.of(), Set.of()); assertThat(needsCombineInSystemApp).isTrue(); } @@ -107,7 +108,7 @@ public class BatteryDiffDataTest { mApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM; boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp( - batteryDiffEntry, List.of(), mApplicationsState); + batteryDiffEntry, List.of(), Set.of(ConvertUtils.FAKE_PACKAGE_NAME)); assertThat(needsCombineInSystemApp).isTrue(); } @@ -137,7 +138,7 @@ public class BatteryDiffDataTest { mApplicationInfo.flags = 0; boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp( - batteryDiffEntry, List.of(), mApplicationsState); + batteryDiffEntry, List.of(), Set.of()); assertThat(needsCombineInSystemApp).isFalse(); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java index 9f067148ebb..840ab3431cf 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java @@ -105,8 +105,9 @@ public final class BatteryUsageBreakdownControllerTest { /*cachedUsageConsumePower=*/ 0, mBatteryHistEntry); mBatteryDiffEntry = spy(mBatteryDiffEntry); - mBatteryUsageBreakdownController.mBatteryDiffData = new BatteryDiffData(mContext, - Arrays.asList(mBatteryDiffEntry), Arrays.asList(), /* isAccumulated= */ false); + mBatteryUsageBreakdownController.mBatteryDiffData = + new BatteryDiffData(mContext, Arrays.asList(mBatteryDiffEntry), Arrays.asList(), + Set.of(), /* isAccumulated= */ false); // Adds fake testing data. BatteryDiffEntry.sResourceCache.put( "fakeBatteryDiffEntryKey", diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java index 576184de6d6..764b3a8486a 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java @@ -90,6 +90,7 @@ public final class DataProcessorTest { mFeatureFactory = FakeFeatureFactory.setupForTest(); mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider; + DataProcessor.sFakeSystemAppsSet = Set.of(); DataProcessor.sUsageStatsManager = mUsageStatsManager; doReturn(mIntent).when(mContext).registerReceiver(any(), any()); doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt());