Merge "Fix b/265632782: Battery usage app list changed when entering the app details page and back"
This commit is contained in:
committed by
Android (Google) Code Review
commit
b823e208aa
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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",
|
||||
|
@@ -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());
|
||||
|
Reference in New Issue
Block a user