From 4e3f6921644889c0ea524c44d1052f73aefe515e Mon Sep 17 00:00:00 2001 From: ykhung Date: Mon, 30 Aug 2021 17:07:53 +0800 Subject: [PATCH] Hide Camera background running time in the battery usage screen hide camera background running time in the battery usage screen to avoid users confuse about it, since it will standby in the backgound to sspeed up launching time, not always running in the background Bug: 196744910 Test: make SettingsRoboTests Change-Id: Ia391d661bca44435fc5a68b1c86e5ca32dd0fcfe Merged-In: Ia391d661bca44435fc5a68b1c86e5ca32dd0fcfe --- .../settings/fuelgauge/ConvertUtils.java | 15 ++++++- .../fuelgauge/PowerUsageFeatureProvider.java | 6 +++ .../PowerUsageFeatureProviderImpl.java | 7 ++++ .../settings/fuelgauge/ConvertUtilsTest.java | 41 +++++++++++++++++-- 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/fuelgauge/ConvertUtils.java b/src/com/android/settings/fuelgauge/ConvertUtils.java index 001e9e912a4..da846318b9b 100644 --- a/src/com/android/settings/fuelgauge/ConvertUtils.java +++ b/src/com/android/settings/fuelgauge/ConvertUtils.java @@ -24,6 +24,8 @@ import android.util.Log; import androidx.annotation.VisibleForTesting; +import com.android.settings.overlay.FeatureFactory; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.text.SimpleDateFormat; @@ -288,7 +290,7 @@ public final class ConvertUtils { } insert24HoursData(BatteryChartView.SELECTED_INDEX_ALL, resultMap); if (purgeLowPercentageAndFakeData) { - purgeLowPercentageAndFakeData(resultMap); + purgeLowPercentageAndFakeData(context, resultMap); } return resultMap; } @@ -327,7 +329,12 @@ public final class ConvertUtils { // Removes low percentage data and fake usage data, which will be zero value. private static void purgeLowPercentageAndFakeData( + final Context context, final Map> indexedUsageMap) { + final List backgroundUsageTimeHideList = + FeatureFactory.getFactory(context) + .getPowerUsageFeatureProvider(context) + .getHideBackgroundUsageTimeList(context); for (List entries : indexedUsageMap.values()) { final Iterator iterator = entries.iterator(); while (iterator.hasNext()) { @@ -336,6 +343,12 @@ public final class ConvertUtils { || FAKE_PACKAGE_NAME.equals(entry.getPackageName())) { iterator.remove(); } + final String packageName = entry.getPackageName(); + if (packageName != null + && !backgroundUsageTimeHideList.isEmpty() + && backgroundUsageTimeHideList.contains(packageName)) { + entry.mBackgroundUsageTimeInMs = 0; + } } } } diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index 61abe6b1fbf..eff538fa644 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -23,6 +23,7 @@ import android.util.SparseIntArray; import com.android.internal.os.BatterySipper; import com.android.settingslib.fuelgauge.Estimate; +import java.util.List; import java.util.Map; /** @@ -141,4 +142,9 @@ public interface PowerUsageFeatureProvider { * Returns battery history data with corresponding timestamp key. */ Map> getBatteryHistory(Context context); + + /** + * Returns {@link List} for hidding applications background usage time. + */ + List getHideBackgroundUsageTimeList(Context context); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java index 1dcdab08be5..7f1bef0ae23 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -26,6 +26,8 @@ import com.android.internal.os.BatterySipper; import com.android.internal.util.ArrayUtils; import com.android.settingslib.fuelgauge.Estimate; +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider { @@ -167,4 +169,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider public Map> getBatteryHistory(Context context) { return null; } + + @Override + public List getHideBackgroundUsageTimeList(Context context) { + return new ArrayList<>(); + } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java index 0b1a1e31642..1b9e05b63b6 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java @@ -50,8 +50,11 @@ import java.util.TimeZone; public final class ConvertUtilsTest { private Context mContext; - @Mock private BatteryUsageStats mBatteryUsageStats; - @Mock private BatteryEntry mockBatteryEntry; + + @Mock + private BatteryUsageStats mBatteryUsageStats; + @Mock + private BatteryEntry mockBatteryEntry; private FakeFeatureFactory mFeatureFactory; private PowerUsageFeatureProvider mPowerUsageFeatureProvider; @@ -301,7 +304,7 @@ public final class ConvertUtilsTest { final Map> purgedResultMap = ConvertUtils.getIndexedUsageMap( mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap, - /*purgeLowPercentageAndFakeData=*/ true); + /*purgeLowPercentageAndFakeData=*/ true); assertThat(purgedResultMap).hasSize(2); final List entryList = purgedResultMap.get(0); @@ -382,6 +385,38 @@ public final class ConvertUtilsTest { assertThat(ConvertUtils.sLocaleForHour).isEqualTo(new Locale("en_US")); } + @Test + public void testGetIndexedUsageMap_hideBackgroundUsageTime_returnsExpectedResult() { + final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L}; + final Map> batteryHistoryMap = new HashMap<>(); + final BatteryHistEntry fakeEntry = createBatteryHistEntry( + ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", 0, 0L, 0L, 0L); + // Adds the index = 0 data. + Map entryMap = new HashMap<>(); + entryMap.put(fakeEntry.getKey(), fakeEntry); + batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[0]), entryMap); + // Adds the index = 1 data. + entryMap = new HashMap<>(); + entryMap.put(fakeEntry.getKey(), fakeEntry); + batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[1]), entryMap); + // Adds the index = 2 data. + entryMap = new HashMap<>(); + final BatteryHistEntry entry = createBatteryHistEntry( + "package3", "label3", 500, 5L, 3600000L, 7200000L); + entryMap.put(entry.getKey(), entry); + batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[2]), entryMap); + when(mPowerUsageFeatureProvider.getHideBackgroundUsageTimeList(mContext)) + .thenReturn(Arrays.asList((CharSequence) "package3")); + + final Map> purgedResultMap = + ConvertUtils.getIndexedUsageMap( + mContext, /*timeSlotSize=*/ 1, batteryHistoryKeys, batteryHistoryMap, + /*purgeLowPercentageAndFakeData=*/ true); + + final BatteryDiffEntry resultEntry = purgedResultMap.get(0).get(0); + assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0); + } + @Test public void getLocale_nullContext_returnDefaultLocale() { assertThat(ConvertUtils.getLocale(/*context=*/ null))