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))