From bce700f1db6171514a5176547bb4e4447b3ede6d Mon Sep 17 00:00:00 2001 From: Zaiyue Xue Date: Thu, 15 Dec 2022 17:48:12 +0800 Subject: [PATCH] Refactor getting allowlist set from feature provider. (1) Use Set for all the allowlists. (2) The contains() method of Set also works for String. No need an extra contains() util function. Bug: 262802531 Fix: 262802531 Test: presubmit Change-Id: Ib2aaf9a3b8db4618a8c46f138e8d35f15b77c104 --- .../fuelgauge/PowerUsageFeatureProvider.java | 4 +- .../PowerUsageFeatureProviderImpl.java | 4 +- .../fuelgauge/batteryusage/DataProcessor.java | 57 +++++-------------- .../BatteryChartPreferenceControllerTest.java | 5 +- .../BatteryUsageBreakdownControllerTest.java | 5 +- .../batteryusage/DataProcessorTest.java | 5 +- 6 files changed, 28 insertions(+), 52 deletions(-) diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index 802919408e5..959820a9e5d 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -146,9 +146,9 @@ public interface PowerUsageFeatureProvider { Set getHideBackgroundUsageTimeSet(Context context); /** - * Returns package names for hiding application in the usage screen. + * Returns {@link Set} for hiding application package names in the usage screen. */ - CharSequence[] getHideApplicationEntries(Context context); + Set getHideApplicationSet(Context context); /** * Returns {@link Set} for ignoring task root class names for screen on time. diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java index 53d87016354..94e4872d303 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -162,8 +162,8 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider } @Override - public CharSequence[] getHideApplicationEntries(Context context) { - return new CharSequence[0]; + public Set getHideApplicationSet(Context context) { + return new ArraySet<>(); } @Override diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index e3e1912ed00..e6b37505a93 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -280,9 +280,7 @@ public final class DataProcessor { case Event.DEVICE_SHUTDOWN: final String taskRootClassName = event.getTaskRootClassName(); if (!TextUtils.isEmpty(taskRootClassName) - && !ignoreScreenOnTimeTaskRootSet.isEmpty() - && contains( - taskRootClassName, ignoreScreenOnTimeTaskRootSet)) { + && ignoreScreenOnTimeTaskRootSet.contains(taskRootClassName)) { Log.w(TAG, String.format( "Ignoring a usage event with task root class name %s, " + "(timestamp=%d, type=%d)", @@ -1238,14 +1236,14 @@ public final class DataProcessor { private static void purgeFakeAndHiddenPackages( final Context context, final Map> resultMap) { - final Set backgroundUsageTimeHideList = + final Set hideBackgroundUsageTimeSet = FeatureFactory.getFactory(context) .getPowerUsageFeatureProvider(context) .getHideBackgroundUsageTimeSet(context); - final CharSequence[] notAllowShowEntryPackages = + final Set hideApplicationSet = FeatureFactory.getFactory(context) .getPowerUsageFeatureProvider(context) - .getHideApplicationEntries(context); + .getHideApplicationSet(context); resultMap.keySet().forEach(dailyKey -> { final Map dailyUsageMap = resultMap.get(dailyKey); dailyUsageMap.values().forEach(diffEntryLists -> { @@ -1253,30 +1251,31 @@ public final class DataProcessor { return; } purgeFakeAndHiddenPackages( - diffEntryLists.getAppDiffEntryList(), backgroundUsageTimeHideList, - notAllowShowEntryPackages); + diffEntryLists.getAppDiffEntryList(), hideBackgroundUsageTimeSet, + hideApplicationSet); purgeFakeAndHiddenPackages( - diffEntryLists.getSystemDiffEntryList(), backgroundUsageTimeHideList, - notAllowShowEntryPackages); + diffEntryLists.getSystemDiffEntryList(), hideBackgroundUsageTimeSet, + hideApplicationSet); }); }); } private static void purgeFakeAndHiddenPackages( final List entries, - final Set backgroundUsageTimeHideList, - final CharSequence[] notAllowShowEntryPackages) { + final Set hideBackgroundUsageTimeSet, + final Set hideApplicationSet) { final Iterator iterator = entries.iterator(); while (iterator.hasNext()) { final BatteryDiffEntry entry = iterator.next(); final String packageName = entry.getPackageName(); + if (packageName == null) { + continue; + } if (ConvertUtils.FAKE_PACKAGE_NAME.equals(packageName) - || contains(packageName, notAllowShowEntryPackages)) { + || hideApplicationSet.contains(packageName)) { iterator.remove(); } - if (packageName != null - && !backgroundUsageTimeHideList.isEmpty() - && contains(packageName, backgroundUsageTimeHideList)) { + if (hideBackgroundUsageTimeSet.contains(packageName)) { entry.mBackgroundUsageTimeInMs = 0; } } @@ -1465,18 +1464,6 @@ public final class DataProcessor { return calendar.getTimeInMillis(); } - /** Whether the Set contains the target. */ - private static boolean contains(String target, Set packageNames) { - if (target != null && packageNames != null) { - for (CharSequence packageName : packageNames) { - if (TextUtils.equals(target, packageName)) { - return true; - } - } - } - return false; - } - private static long getDiffValue(long v1, long v2, long v3) { return (v2 > v1 ? v2 - v1 : 0) + (v3 > v2 ? v3 - v2 : 0); } @@ -1521,20 +1508,6 @@ public final class DataProcessor { return sFakeCurrentTimeMillis > 0 ? sFakeCurrentTimeMillis : System.currentTimeMillis(); } - /** - * @return Returns whether the target is in the CharSequence array. - */ - private static boolean contains(String target, CharSequence[] packageNames) { - if (target != null && packageNames != null) { - for (CharSequence packageName : packageNames) { - if (TextUtils.equals(target, packageName)) { - return true; - } - } - } - return false; - } - private static void log(Context context, final String content, final long timestamp, final BatteryHistEntry entry) { if (DEBUG) { diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java index 95e3bad12b5..57963aaa111 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java @@ -57,6 +57,7 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import java.util.TimeZone; @RunWith(RobolectricTestRunner.class) @@ -92,9 +93,9 @@ public final class BatteryChartPreferenceControllerTest { final Resources resources = spy(mContext.getResources()); resources.getConfiguration().setLocales(new LocaleList(new Locale("en_US"))); doReturn(resources).when(mContext).getResources(); - doReturn(new String[]{"com.android.gms.persistent"}) + doReturn(Set.of("com.android.gms.persistent")) .when(mFeatureFactory.powerUsageFeatureProvider) - .getHideApplicationEntries(mContext); + .getHideApplicationSet(mContext); doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams(); doReturn(mIntent).when(mContext).registerReceiver(any(), any()); doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt()); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java index 0bc86932984..5c3da4aedff 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java @@ -48,6 +48,7 @@ import org.robolectric.RuntimeEnvironment; import java.util.Arrays; import java.util.Locale; +import java.util.Set; import java.util.TimeZone; @RunWith(RobolectricTestRunner.class) @@ -86,9 +87,9 @@ public final class BatteryUsageBreakdownControllerTest { final Resources resources = spy(mContext.getResources()); resources.getConfiguration().setLocales(new LocaleList(new Locale("en_US"))); doReturn(resources).when(mContext).getResources(); - doReturn(new String[]{"com.android.gms.persistent"}) + doReturn(Set.of("com.android.gms.persistent")) .when(mFeatureFactory.powerUsageFeatureProvider) - .getHideApplicationEntries(mContext); + .getHideApplicationSet(mContext); mBatteryUsageBreakdownController = createController(); mBatteryUsageBreakdownController.mAppListPreferenceGroup = mAppListPreferenceGroup; mBatteryDiffEntry = new BatteryDiffEntry( diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java index ce958c9eacc..a44768ee3bd 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java @@ -60,6 +60,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TimeZone; @RunWith(RobolectricTestRunner.class) @@ -1062,8 +1063,8 @@ public class DataProcessorTest { final List levels = List.of(100, 100); hourlyBatteryLevelsPerDay.add( new BatteryLevelData.PeriodBatteryLevelData(timestamps, levels)); - when(mPowerUsageFeatureProvider.getHideApplicationEntries(mContext)) - .thenReturn(new CharSequence[]{"package1"}); + when(mPowerUsageFeatureProvider.getHideApplicationSet(mContext)) + .thenReturn(Set.of("package1")); final Map> resultMap = DataProcessor.getBatteryUsageMap(