Merge "Fix b/265632782: Battery usage app list changed when entering the app details page and back"

This commit is contained in:
TreeHugger Robot
2023-01-17 03:44:51 +00:00
committed by Android (Google) Code Review
6 changed files with 43 additions and 35 deletions

View File

@@ -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<BatteryDiffEntry> appDiffEntries,
final @NonNull List<BatteryDiffEntry> systemDiffEntries,
final Set<String> 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<String> 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<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);
}
@@ -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;
}
@@ -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);
}
}

View File

@@ -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<String> sFakeSystemAppsSet;
@VisibleForTesting
static IUsageStatsManager sUsageStatsManager =
@@ -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].
@@ -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);
}
/**
@@ -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>>>>>
@@ -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<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<>();
@@ -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) {
@@ -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<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();
}

View File

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

View File

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

View File

@@ -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",

View File

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