From 676bcedb856f1650b313a338c3c8d81a377a5bd0 Mon Sep 17 00:00:00 2001 From: Kuan Wang Date: Thu, 8 Sep 2022 12:13:27 +0800 Subject: [PATCH] Add logging for count of shown / hidden apps in Battery Usage page. Bug: 245455490 Test: manually Change-Id: I7342e822f00f9a0aedcef592cae9809251518812 --- .../fuelgauge/batteryusage/DataProcessor.java | 26 +++++++++++++ .../batteryusage/DataProcessorTest.java | 38 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index 125f879abff..f493eceb206 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batteryusage; import static com.android.settings.fuelgauge.batteryusage.ConvertUtils.utcToLocalTime; +import android.app.settings.SettingsEnums; import android.content.ContentValues; import android.content.Context; import android.os.AsyncTask; @@ -36,6 +37,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.settings.Utils; import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.fuelgauge.BatteryStatus; import java.time.Duration; @@ -354,10 +356,25 @@ public final class DataProcessor { insertDailyUsageDiffData(hourlyBatteryLevelsPerDay, resultMap); // Insert diff data [SELECTED_INDEX_ALL][SELECTED_INDEX_ALL]. insertAllUsageDiffData(resultMap); + // Compute the apps number before purge. Must put before purgeLowPercentageAndFakeData. + final int countOfAppBeforePurge = getCountOfApps(resultMap); purgeLowPercentageAndFakeData(context, resultMap); + // Compute the apps number after purge. Must put after purgeLowPercentageAndFakeData. + final int countOfAppAfterPurge = getCountOfApps(resultMap); if (!isUsageMapValid(resultMap, hourlyBatteryLevelsPerDay)) { return null; } + + final MetricsFeatureProvider metricsFeatureProvider = + FeatureFactory.getFactory(context).getMetricsFeatureProvider(); + metricsFeatureProvider.action( + context, + SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, + countOfAppAfterPurge); + metricsFeatureProvider.action( + context, + SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, + countOfAppBeforePurge - countOfAppAfterPurge); return resultMap; } @@ -933,6 +950,15 @@ public final class DataProcessor { return calendar.getTimeInMillis(); } + private static int getCountOfApps(final Map> resultMap) { + final BatteryDiffData diffDataList = + resultMap.get(SELECTED_INDEX_ALL).get(SELECTED_INDEX_ALL); + return diffDataList == null + ? 0 + : diffDataList.getAppDiffEntryList().size() + + diffDataList.getSystemDiffEntryList().size(); + } + private static boolean contains(String target, Set packageNames) { if (target != null && packageNames != null) { for (CharSequence packageName : packageNames) { 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 883b0e7db91..84f9310a28a 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java @@ -18,9 +18,12 @@ package com.android.settings.fuelgauge.batteryusage; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.settings.SettingsEnums; import android.content.ContentValues; import android.content.Context; import android.text.format.DateUtils; @@ -28,6 +31,7 @@ import android.text.format.DateUtils; import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.Before; import org.junit.Test; @@ -52,6 +56,7 @@ public class DataProcessorTest { private Context mContext; private FakeFeatureFactory mFeatureFactory; + private MetricsFeatureProvider mMetricsFeatureProvider; private PowerUsageFeatureProvider mPowerUsageFeatureProvider; @Before @@ -61,6 +66,7 @@ public class DataProcessorTest { mContext = spy(RuntimeEnvironment.application); mFeatureFactory = FakeFeatureFactory.setupForTest(); + mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider; } @@ -75,6 +81,10 @@ public class DataProcessorTest { assertThat(DataProcessor.getBatteryLevelData( mContext, /*handler=*/ null, new HashMap<>(), /*asyncResponseDelegate=*/ null)) .isNull(); + verify(mMetricsFeatureProvider, never()) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT); + verify(mMetricsFeatureProvider, never()) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT); } @Test @@ -88,6 +98,10 @@ public class DataProcessorTest { assertThat(DataProcessor.getBatteryLevelData( mContext, /*handler=*/ null, batteryHistoryMap, /*asyncResponseDelegate=*/ null)) .isNull(); + verify(mMetricsFeatureProvider, never()) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT); + verify(mMetricsFeatureProvider, never()) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT); } @Test @@ -421,6 +435,10 @@ public class DataProcessorTest { assertThat(DataProcessor.getBatteryUsageMap( mContext, hourlyBatteryLevelsPerDay, new HashMap<>())).isNull(); + verify(mMetricsFeatureProvider, never()) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT); + verify(mMetricsFeatureProvider, never()) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT); } @Test @@ -549,6 +567,10 @@ public class DataProcessorTest { resultDiffData.getSystemDiffEntryList().get(0), currentUserId, /*uid=*/ 3L, ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 25.0, /*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 3); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0); } @Test @@ -640,6 +662,10 @@ public class DataProcessorTest { /*backgroundUsageTimeInMs=*/ 0); assertThat(resultMap.get(0).get(0)).isNotNull(); assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull(); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 2); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0); } @Test @@ -701,6 +727,10 @@ public class DataProcessorTest { .isEqualTo(entry.mConsumePower * ratio); assertThat(resultMap.get(0).get(0)).isNotNull(); assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull(); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 1); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0); } @Test @@ -772,6 +802,10 @@ public class DataProcessorTest { resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 2L, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0, /*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 20); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 1); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 1); } @Test @@ -843,6 +877,10 @@ public class DataProcessorTest { assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(20); resultEntry = resultDiffData.getAppDiffEntryList().get(1); assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 2); + verify(mMetricsFeatureProvider) + .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0); } private static Map> createHistoryMap(