From 2401ec4235b635090ded3c327fa4e241fff141d7 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 --- .../settings/fuelgauge/ConvertUtils.java | 15 +++++- .../fuelgauge/PowerUsageFeatureProvider.java | 6 +++ .../PowerUsageFeatureProviderImpl.java | 7 +++ .../settings/fuelgauge/ConvertUtilsTest.java | 51 ++++++++++++++++--- 4 files changed, 70 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/fuelgauge/ConvertUtils.java b/src/com/android/settings/fuelgauge/ConvertUtils.java index 827ac920778..a5a58ad2597 100644 --- a/src/com/android/settings/fuelgauge/ConvertUtils.java +++ b/src/com/android/settings/fuelgauge/ConvertUtils.java @@ -25,6 +25,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.time.Duration; @@ -259,7 +261,7 @@ public final class ConvertUtils { } insert24HoursData(BatteryChartView.SELECTED_INDEX_ALL, resultMap); if (purgeLowPercentageAndFakeData) { - purgeLowPercentageAndFakeData(resultMap); + purgeLowPercentageAndFakeData(context, resultMap); } return resultMap; } @@ -298,7 +300,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()) { @@ -307,6 +314,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 d91482598e2..39d1f5a14bf 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -24,6 +24,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; /** @@ -147,4 +148,9 @@ public interface PowerUsageFeatureProvider { * Returns {@link Uri} to monitor battery history data is update. */ Uri getBatteryHistoryUri(); + + /** + * 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 895bbb2a454..83f54a42d93 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -27,6 +27,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 { @@ -173,4 +175,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider public Uri getBatteryHistoryUri() { 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 8ae50489216..a56a8231483 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java @@ -49,8 +49,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; @@ -64,7 +67,7 @@ public final class ConvertUtilsTest { } @Test - public void testConvert_returnsExpectedContentValues() { + public void convert_returnsExpectedContentValues() { final int expectedType = 3; when(mockBatteryEntry.getUid()).thenReturn(1001); when(mockBatteryEntry.getLabel()).thenReturn("Settings"); @@ -121,7 +124,7 @@ public final class ConvertUtilsTest { } @Test - public void testConvert_nullBatteryEntry_returnsExpectedContentValues() { + public void convert_nullBatteryEntry_returnsExpectedContentValues() { final ContentValues values = ConvertUtils.convert( /*entry=*/ null, @@ -148,7 +151,7 @@ public final class ConvertUtilsTest { } @Test - public void testGetIndexedUsageMap_nullOrEmptyHistoryMap_returnEmptyCollection() { + public void getIndexedUsageMap_nullOrEmptyHistoryMap_returnEmptyCollection() { final int timeSlotSize = 2; final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L, 104L, 105L}; @@ -163,7 +166,7 @@ public final class ConvertUtilsTest { .isEmpty(); } @Test - public void testGetIndexedUsageMap_returnsExpectedResult() { + public void getIndexedUsageMap_returnsExpectedResult() { // Creates the fake testing data. final int timeSlotSize = 2; final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L, 104L, 105L}; @@ -275,7 +278,7 @@ public final class ConvertUtilsTest { } @Test - public void testGetIndexedUsageMap_usageTimeExceed_returnsExpectedResult() { + public void getIndexedUsageMap_usageTimeExceed_returnsExpectedResult() { final int timeSlotSize = 1; final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L}; final Map> batteryHistoryMap = @@ -300,7 +303,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); @@ -316,6 +319,38 @@ public final class ConvertUtilsTest { .isEqualTo(entry.mConsumePower * ratio); } + @Test + public void getIndexedUsageMap_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))