Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b823e208 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 35eb2974 16dfab6b
Loading
Loading
Loading
Loading
+9 −22
Original line number Diff line number Diff line
@@ -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);
    }
}
+25 −8
Original line number Diff line number Diff line
@@ -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();
    }
+1 −0
Original line number Diff line number Diff line
@@ -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();
+4 −3
Original line number Diff line number Diff line
@@ -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();
    }
+3 −2
Original line number Diff line number Diff line
@@ -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