Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56d1c2fa authored by Kuan Wang's avatar Kuan Wang
Browse files

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
parent 4c5fb86e
Loading
Loading
Loading
Loading
+56 −26
Original line number Diff line number Diff line
@@ -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<BatteryEntry> 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<BatteryEntry> 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<BatteryEntry> 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<BatteryHistEntry> convertToBatteryHistEntry(
            @Nullable final List<BatteryEntry> batteryEntryList,
+30 −10
Original line number Diff line number Diff line
@@ -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