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

Commit 3cdf60c0 authored by ykhung's avatar ykhung Committed by YUKAI HUNG
Browse files

Purge low percentage BatteryDiffEntry from indexed usage map

Bug: 184807417
Test: make SettingsRoboTests
Test: make SettingsGoogleRoboTests
Change-Id: I943e224147ccbfa80578511d6cb0d6adf6f8da0f
parent 976c6ac5
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -152,7 +152,8 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
        mBatteryIndexedMap =
            ConvertUtils.getIndexedUsageMap(
                mPrefContext, /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1,
                mBatteryHistoryKeys, batteryHistoryMap);
                mBatteryHistoryKeys, batteryHistoryMap,
                /*purgeLowPercentageData=*/ true);
        forceRefreshUi();

        Log.d(TAG, String.format(
+24 −1
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import android.os.UserBatteryConsumer;
import android.os.UserHandle;
import android.util.Log;

import androidx.annotation.VisibleForTesting;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.text.SimpleDateFormat;
@@ -31,6 +33,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -44,6 +47,9 @@ public final class ConvertUtils {
    private static final BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
        new BatteryHistEntry(new ContentValues());

    @VisibleForTesting
    static double PERCENTAGE_OF_TOTAL_THRESHOLD = 1f;

    /** Invalid system battery consumer drain type. */
    public static final int INVALID_DRAIN_TYPE = -1;
    /** A fake package name to represent no BatteryEntry data. */
@@ -142,7 +148,8 @@ public final class ConvertUtils {
            final Context context,
            final int timeSlotSize,
            final long[] batteryHistoryKeys,
            final Map<Long, List<BatteryHistEntry>> batteryHistoryMap) {
            final Map<Long, List<BatteryHistEntry>> batteryHistoryMap,
            final boolean purgeLowPercentageData) {
        final Map<Integer, List<BatteryDiffEntry>> resultMap = new HashMap<>();
        // Generates a temporary map to calculate diff usage data, which converts the inputted
        // List<BatteryDiffEntry> into Map<String, BatteryHistEntry> with the key comes from
@@ -248,6 +255,9 @@ public final class ConvertUtils {
            }
        }
        insert24HoursData(BatteryChartView.SELECTED_INDEX_ALL, resultMap);
        if (purgeLowPercentageData) {
            purgeLowPercentageData(resultMap);
        }
        return resultMap;
    }

@@ -283,6 +293,19 @@ public final class ConvertUtils {
        indexedUsageMap.put(Integer.valueOf(desiredIndex), resultList);
    }

    private static void purgeLowPercentageData(
            final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
        for (List<BatteryDiffEntry> entries : indexedUsageMap.values()) {
            final Iterator<BatteryDiffEntry> iterator = entries.iterator();
            while (iterator.hasNext()) {
                final BatteryDiffEntry entry = iterator.next();
                if (entry.getPercentOfTotal() < PERCENTAGE_OF_TOTAL_THRESHOLD) {
                    iterator.remove();
                }
            }
        }
    }

    private static long getDiffValue(long v1, long v2, long v3) {
        return (v2 > v1 ? v2 - v1 : 0) + (v3 > v2 ? v3 - v2 : 0);
    }
+22 −1
Original line number Diff line number Diff line
@@ -212,7 +212,8 @@ public final class ConvertUtilsTest {

        final Map<Integer, List<BatteryDiffEntry>> resultMap =
            ConvertUtils.getIndexedUsageMap(
                mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap);
                mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
                /*purgeLowPercentageData=*/ false);

        assertThat(resultMap).hasSize(3);
        // Verifies the first timestamp result.
@@ -231,6 +232,26 @@ public final class ConvertUtilsTest {
        assertBatteryDiffEntry(entryList.get(1), 4, 5L, 5L);
        assertBatteryDiffEntry(entryList.get(2), 68, 40L, 50L);
        assertBatteryDiffEntry(entryList.get(0), 27, 30L, 40L);

        // Test getIndexedUsageMap() with purged data.
        ConvertUtils.PERCENTAGE_OF_TOTAL_THRESHOLD = 50;
        final Map<Integer, List<BatteryDiffEntry>> purgedResultMap =
            ConvertUtils.getIndexedUsageMap(
                mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
                 /*purgeLowPercentageData=*/ true);

        assertThat(purgedResultMap).hasSize(3);
        // Verifies the first timestamp result.
        entryList = purgedResultMap.get(Integer.valueOf(0));
        assertThat(entryList).hasSize(1);
        // Verifies the second timestamp result.
        entryList = purgedResultMap.get(Integer.valueOf(1));
        assertThat(entryList).hasSize(1);
        assertBatteryDiffEntry(entryList.get(0), 75, 40L, 50L);
        // Verifies the last 24 hours aggregate result.
        entryList = purgedResultMap.get(Integer.valueOf(-1));
        assertThat(entryList).hasSize(1);
        assertBatteryDiffEntry(entryList.get(0), 68, 40L, 50L);
    }

    private static BatteryHistEntry createBatteryHistEntry(