From 56d1c2fa55860668f07ba65d224beecfbcc95bbb Mon Sep 17 00:00:00 2001 From: Kuan Wang Date: Fri, 23 Sep 2022 11:20:48 +0800 Subject: [PATCH] Extract the logic of loading battery usage data form BatteryUsageStats in DataProcessor to make it reusable by BatteryUsageLoaderService. Bug: 246233366 Test: make RunSettingsRoboTests + manually Change-Id: I5c721120cc4005044def63937506cc64339a3e6b --- .../fuelgauge/batteryusage/DataProcessor.java | 82 +++++++++++++------ .../batteryusage/DataProcessorTest.java | 40 ++++++--- 2 files changed, 86 insertions(+), 36 deletions(-) diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index 9c2c4d533ea..4bf429b446f 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -171,6 +171,56 @@ public final class DataProcessor { return false; } + /** + * Gets the {@link BatteryUsageStats} from system service. + */ + @Nullable + public static BatteryUsageStats getBatteryUsageStats(final Context context) { + final BatteryUsageStatsQuery batteryUsageStatsQuery = + new BatteryUsageStatsQuery.Builder().includeBatteryHistory().build(); + return context.getSystemService(BatteryStatsManager.class) + .getBatteryUsageStats(batteryUsageStatsQuery); + } + + /** + * Closes the {@link BatteryUsageStats} after using it. + */ + public static void closeBatteryUsageStats(BatteryUsageStats batteryUsageStats) { + if (batteryUsageStats != null) { + try { + batteryUsageStats.close(); + } catch (Exception e) { + Log.e(TAG, "BatteryUsageStats.close() failed", e); + } + } + } + + /** + * Generates the list of {@link BatteryEntry} from the supplied {@link BatteryUsageStats}. + */ + @Nullable + public static List generateBatteryEntryListFromBatteryUsageStats( + final Context context, + @Nullable final BatteryUsageStats batteryUsageStats, + @Nullable BatteryAppListPreferenceController batteryAppListPreferenceController) { + if (batteryUsageStats == null) { + Log.w(TAG, "batteryUsageStats is null content"); + return null; + } + // Loads the battery consuming data. + final BatteryAppListPreferenceController controller = + batteryAppListPreferenceController == null + ? new BatteryAppListPreferenceController( + context, + /*preferenceKey=*/ null, + /*lifecycle=*/ null, + /*activity*=*/ null, + /*fragment=*/ null) + : batteryAppListPreferenceController; + + return controller.getBatteryEntryList(batteryUsageStats, /*showAllApps=*/ true); + } + /** * @return Returns the processed history map which has interpolated to every hour data. * The start and end timestamp must be the even hours. @@ -477,20 +527,14 @@ public final class DataProcessor { final Context context) { BatteryDiffData batteryDiffData = null; try { - final BatteryUsageStatsQuery batteryUsageStatsQuery = - new BatteryUsageStatsQuery.Builder().includeBatteryHistory().build(); - final BatteryUsageStats batteryUsageStats = - context.getSystemService(BatteryStatsManager.class) - .getBatteryUsageStats(batteryUsageStatsQuery); - - if (batteryUsageStats == null) { - Log.w(TAG, "batteryUsageStats is null content"); - return null; - } - + final BatteryUsageStats batteryUsageStats = getBatteryUsageStats(context); final List batteryEntryList = - generateBatteryEntryListFromBatteryUsageStats(context, batteryUsageStats); + generateBatteryEntryListFromBatteryUsageStats( + context, + batteryUsageStats, + /*batteryAppListPreferenceController=*/ null); batteryDiffData = generateBatteryDiffData(context, batteryEntryList, batteryUsageStats); + closeBatteryUsageStats(batteryUsageStats); } catch (RuntimeException e) { Log.e(TAG, "load batteryUsageStats:" + e); } @@ -498,20 +542,6 @@ public final class DataProcessor { return batteryDiffData; } - @Nullable - private static List generateBatteryEntryListFromBatteryUsageStats( - final Context context, final BatteryUsageStats batteryUsageStats) { - // Loads the battery consuming data. - final BatteryAppListPreferenceController controller = - new BatteryAppListPreferenceController( - context, - /*preferenceKey=*/ null, - /*lifecycle=*/ null, - /*activity*=*/ null, - /*fragment=*/ null); - return controller.getBatteryEntryList(batteryUsageStats, /*showAllApps=*/ true); - } - @Nullable private static List convertToBatteryHistEntry( @Nullable final List batteryEntryList, 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 c4832041314..df9d8655109 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java @@ -579,9 +579,13 @@ public class DataProcessorTest { ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 25.0, /*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60); verify(mMetricsFeatureProvider) - .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 3); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, + 3); verify(mMetricsFeatureProvider) - .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, + 0); } @Test @@ -674,9 +678,13 @@ public class DataProcessorTest { 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); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, + 2); verify(mMetricsFeatureProvider) - .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, + 0); } @Test @@ -739,9 +747,13 @@ public class DataProcessorTest { 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); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, + 1); verify(mMetricsFeatureProvider) - .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, + 0); } @Test @@ -814,9 +826,13 @@ public class DataProcessorTest { ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0, /*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 20); verify(mMetricsFeatureProvider) - .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 1); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, + 1); verify(mMetricsFeatureProvider) - .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 1); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, + 1); } @Test @@ -889,9 +905,13 @@ public class DataProcessorTest { resultEntry = resultDiffData.getAppDiffEntryList().get(1); assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0); verify(mMetricsFeatureProvider) - .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 2); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, + 2); verify(mMetricsFeatureProvider) - .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0); + .action(mContext.getApplicationContext(), + SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, + 0); } @Test