Loading src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java +9 −22 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.settings.fuelgauge.batteryusage; import android.app.Application; import android.content.Context; import androidx.annotation.NonNull; Loading @@ -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; Loading @@ -41,6 +39,7 @@ public class BatteryDiffData { final Context context, final @NonNull List<BatteryDiffEntry> appDiffEntries, final @NonNull List<BatteryDiffEntry> systemDiffEntries, final Set<String> systemAppsSet, final boolean isAccumulated) { mAppEntries = appDiffEntries; mSystemEntries = systemDiffEntries; Loading @@ -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(); Loading @@ -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<String> systemAppsSet) { combineIntoSystemApps(context, featureProvider, systemAppsSet, mAppEntries); combineSystemItemsIntoOthers(context, featureProvider, mSystemEntries); } Loading Loading @@ -119,17 +118,14 @@ public class BatteryDiffData { private static void combineIntoSystemApps( final Context context, final PowerUsageFeatureProvider featureProvider, final Set<String> systemAppsSet, final List<BatteryDiffEntry> appEntries) { final List<String> systemAppsAllowlist = featureProvider.getSystemAppsAllowlist(); final Application application = (Application) context.getApplicationContext(); final ApplicationsState applicationsState = application == null ? null : ApplicationsState.getInstance(application); BatteryDiffEntry.SystemAppsBatteryDiffEntry systemAppsDiffEntry = null; final Iterator<BatteryDiffEntry> 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); } Loading Loading @@ -184,7 +180,7 @@ public class BatteryDiffData { @VisibleForTesting static boolean needsCombineInSystemApp(final BatteryDiffEntry batteryDiffEntry, final List<String> systemAppsAllowlist, final ApplicationsState applicationsState) { final List<String> systemAppsAllowlist, final Set<String> systemAppsSet) { if (batteryDiffEntry.mBatteryHistEntry.mIsHidden) { return true; } Loading @@ -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); } } src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +25 −8 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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<String> sFakeSystemAppsSet; @VisibleForTesting static IUsageStatsManager sUsageStatsManager = Loading Loading @@ -633,10 +638,10 @@ public final class DataProcessor { return null; } final Map<Integer, Map<Integer, BatteryDiffData>> resultMap = new HashMap<>(); final Set<String> 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]. Loading Loading @@ -695,7 +700,9 @@ public final class DataProcessor { return null; } return new BatteryDiffData(context, appEntries, systemEntries, /* isAccumulated= */ false); final Set<String> systemAppsSet = getSystemAppsSet(context); return new BatteryDiffData( context, appEntries, systemEntries, systemAppsSet, /* isAccumulated= */ false); } /** Loading Loading @@ -1363,6 +1370,7 @@ public final class DataProcessor { private static void insertHourlyUsageDiffData( Context context, final Set<String> systemAppsSet, final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay, final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap, final Map<Integer, Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>>> Loading Loading @@ -1392,6 +1400,7 @@ public final class DataProcessor { workProfileUserId, hourlyIndex, timestamps, systemAppsSet, appUsagePeriodMap == null || appUsagePeriodMap.get(dailyIndex) == null ? null Loading Loading @@ -1436,6 +1445,7 @@ public final class DataProcessor { final int workProfileUserId, final int currentIndex, final List<Long> timestamps, final Set<String> systemAppsSet, final Map<Long, Map<String, List<AppUsagePeriod>>> appUsageMap, final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) { final List<BatteryDiffEntry> appEntries = new ArrayList<>(); Loading Loading @@ -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<AppUsagePeriod> appUsagePeriodList) { Loading Loading @@ -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( Loading Loading @@ -1889,6 +1900,12 @@ public final class DataProcessor { return null; } private static Set<String> 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(); } Loading tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java +4 −3 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -77,7 +78,7 @@ public class BatteryDiffDataTest { hiddenHistEntry); boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp( hiddenDiffEntry, List.of(), mApplicationsState); hiddenDiffEntry, List.of(), Set.of()); assertThat(needsCombineInSystemApp).isTrue(); } Loading Loading @@ -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(); } Loading Loading @@ -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(); } Loading tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java +3 −2 Original line number Diff line number Diff line Loading @@ -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", Loading Loading
src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java +9 −22 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.settings.fuelgauge.batteryusage; import android.app.Application; import android.content.Context; import androidx.annotation.NonNull; Loading @@ -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; Loading @@ -41,6 +39,7 @@ public class BatteryDiffData { final Context context, final @NonNull List<BatteryDiffEntry> appDiffEntries, final @NonNull List<BatteryDiffEntry> systemDiffEntries, final Set<String> systemAppsSet, final boolean isAccumulated) { mAppEntries = appDiffEntries; mSystemEntries = systemDiffEntries; Loading @@ -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(); Loading @@ -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<String> systemAppsSet) { combineIntoSystemApps(context, featureProvider, systemAppsSet, mAppEntries); combineSystemItemsIntoOthers(context, featureProvider, mSystemEntries); } Loading Loading @@ -119,17 +118,14 @@ public class BatteryDiffData { private static void combineIntoSystemApps( final Context context, final PowerUsageFeatureProvider featureProvider, final Set<String> systemAppsSet, final List<BatteryDiffEntry> appEntries) { final List<String> systemAppsAllowlist = featureProvider.getSystemAppsAllowlist(); final Application application = (Application) context.getApplicationContext(); final ApplicationsState applicationsState = application == null ? null : ApplicationsState.getInstance(application); BatteryDiffEntry.SystemAppsBatteryDiffEntry systemAppsDiffEntry = null; final Iterator<BatteryDiffEntry> 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); } Loading Loading @@ -184,7 +180,7 @@ public class BatteryDiffData { @VisibleForTesting static boolean needsCombineInSystemApp(final BatteryDiffEntry batteryDiffEntry, final List<String> systemAppsAllowlist, final ApplicationsState applicationsState) { final List<String> systemAppsAllowlist, final Set<String> systemAppsSet) { if (batteryDiffEntry.mBatteryHistEntry.mIsHidden) { return true; } Loading @@ -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); } }
src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +25 −8 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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<String> sFakeSystemAppsSet; @VisibleForTesting static IUsageStatsManager sUsageStatsManager = Loading Loading @@ -633,10 +638,10 @@ public final class DataProcessor { return null; } final Map<Integer, Map<Integer, BatteryDiffData>> resultMap = new HashMap<>(); final Set<String> 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]. Loading Loading @@ -695,7 +700,9 @@ public final class DataProcessor { return null; } return new BatteryDiffData(context, appEntries, systemEntries, /* isAccumulated= */ false); final Set<String> systemAppsSet = getSystemAppsSet(context); return new BatteryDiffData( context, appEntries, systemEntries, systemAppsSet, /* isAccumulated= */ false); } /** Loading Loading @@ -1363,6 +1370,7 @@ public final class DataProcessor { private static void insertHourlyUsageDiffData( Context context, final Set<String> systemAppsSet, final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay, final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap, final Map<Integer, Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>>> Loading Loading @@ -1392,6 +1400,7 @@ public final class DataProcessor { workProfileUserId, hourlyIndex, timestamps, systemAppsSet, appUsagePeriodMap == null || appUsagePeriodMap.get(dailyIndex) == null ? null Loading Loading @@ -1436,6 +1445,7 @@ public final class DataProcessor { final int workProfileUserId, final int currentIndex, final List<Long> timestamps, final Set<String> systemAppsSet, final Map<Long, Map<String, List<AppUsagePeriod>>> appUsageMap, final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) { final List<BatteryDiffEntry> appEntries = new ArrayList<>(); Loading Loading @@ -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<AppUsagePeriod> appUsagePeriodList) { Loading Loading @@ -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( Loading Loading @@ -1889,6 +1900,12 @@ public final class DataProcessor { return null; } private static Set<String> 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(); } Loading
tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading
tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java +4 −3 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -77,7 +78,7 @@ public class BatteryDiffDataTest { hiddenHistEntry); boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp( hiddenDiffEntry, List.of(), mApplicationsState); hiddenDiffEntry, List.of(), Set.of()); assertThat(needsCombineInSystemApp).isTrue(); } Loading Loading @@ -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(); } Loading Loading @@ -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(); } Loading
tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java +3 −2 Original line number Diff line number Diff line Loading @@ -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", Loading