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

Commit 7cfa402c authored by YK Hung's avatar YK Hung Committed by Android (Google) Code Review
Browse files

Merge "Remove redundant battery usage slot in database." into main

parents ed1789a0 740f3482
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -321,8 +321,17 @@ public final class ConvertUtils {
        final List<BatteryEvent> batteryEventList = new ArrayList<>();
        final List<BatteryLevelData.PeriodBatteryLevelData> levelDataList =
                batteryLevelData.getHourlyBatteryLevelsPerDay();
        for (BatteryLevelData.PeriodBatteryLevelData oneDayData : levelDataList) {
            for (int hourIndex = 0; hourIndex < oneDayData.getLevels().size() - 1; hourIndex++) {
        final int dailyDataSize = levelDataList.size();
        for (int dailyIndex = 0; dailyIndex < dailyDataSize; dailyIndex++) {
            final BatteryLevelData.PeriodBatteryLevelData oneDayData =
                    levelDataList.get(dailyIndex);
            final int hourDataSize = oneDayData.getLevels().size();
            for (int hourIndex = 0; hourIndex < hourDataSize; hourIndex++) {
                // For timestamp data on adjacent days, the last data (24:00) of the previous day is
                // equal to the first data (00:00) of the next day, so skip sending EVEN_HOUR event.
                if (dailyIndex < dailyDataSize - 1 && hourIndex == hourDataSize - 1) {
                    continue;
                }
                batteryEventList.add(
                        convertToBatteryEvent(
                                oneDayData.getTimestamps().get(hourIndex),
+17 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.internal.annotations.VisibleForTesting;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -649,6 +650,22 @@ public class DataProcessManager {
        // Process raw history map data into hourly timestamps.
        final Map<Long, Map<String, BatteryHistEntry>> processedBatteryHistoryMap =
                DataProcessor.getHistoryMapWithExpectedTimestamps(context, batteryHistoryMap);
        if (isFromPeriodJob && !processedBatteryHistoryMap.isEmpty()) {
            // For periodic job, only generate battery usage data between even-hour timestamps.
            // Remove the timestamps:
            // 1) earlier than the latest completed period job (startTimestamp)
            // 2) later than current scheduled even-hour job (lastEvenHourTimestamp).
            final long lastEvenHourTimestamp = TimestampUtils.getLastEvenHourTimestamp(currentTime);
            final Set<Long> batteryHistMapKeySet = processedBatteryHistoryMap.keySet();
            final long minTimestamp = Collections.min(batteryHistMapKeySet);
            final long maxTimestamp = Collections.max(batteryHistMapKeySet);
            if (minTimestamp < startTimestamp) {
                processedBatteryHistoryMap.remove(minTimestamp);
            }
            if (maxTimestamp > lastEvenHourTimestamp) {
                processedBatteryHistoryMap.remove(maxTimestamp);
            }
        }
        // Wrap and processed history map into easy-to-use format for UI rendering.
        final BatteryLevelData batteryLevelData =
                DataProcessor.getLevelDataThroughProcessedHistoryMap(
+2 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import java.io.PrintWriter;
import java.time.Clock;
import java.time.Duration;
import java.util.List;
import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;

@@ -97,6 +98,7 @@ public final class LogUtils {
    static void dumpBatteryUsageSlotDatabaseHist(Context context, PrintWriter writer) {
        final BatteryUsageSlotDao dao =
                BatteryStateDatabase.getInstance(context).batteryUsageSlotDao();
        writer.println("\n\tBattery Usage Slot TimeZone ID: " + TimeZone.getDefault().getID());
        writer.println("\n\tBattery Usage Slot DatabaseHistory:");
        final List<BatteryUsageSlotEntity> entities =
                dao.getAllAfterForLog(getLastFullChargeTimestamp(context));
+28 −1
Original line number Diff line number Diff line
@@ -565,7 +565,9 @@ public final class ConvertUtilsTest {
    public void convertToBatteryEventList_normalCase_returnsExpectedResult() {
        final BatteryLevelData batteryLevelData =
                new BatteryLevelData(
                        Map.of(1691589600000L, 98, 1691596800000L, 90, 1691596812345L, 80));
                        // 2023-08-09 14:00:00 UTC
                        // 2023-08-09 16:00:00 UTC
                        Map.of(1691589600000L, 98, 1691596800000L, 90));

        final List<BatteryEvent> batteryEventList =
                ConvertUtils.convertToBatteryEventList(batteryLevelData);
@@ -579,6 +581,31 @@ public final class ConvertUtilsTest {
        assertThat(batteryEventList.get(1).getBatteryLevel()).isEqualTo(90);
    }

    @Test
    public void convertToBatteryEventList_multipleDays_returnsExpectedResult() {
        final BatteryLevelData batteryLevelData =
                new BatteryLevelData(
                        // 2024-04-23 22:00:00 UTC
                        // 2024-04-24 00:00:00 UTC
                        // 2024-04-24 02:00:00 UTC
                        Map.of(1713909600000L, 98, 1713916800000L, 90, 1713924000000L, 83));

        final List<BatteryEvent> batteryEventList =
                ConvertUtils.convertToBatteryEventList(batteryLevelData);

        assertThat(batteryEventList).hasSize(3);
        assertThat(batteryEventList.get(0).getTimestamp()).isEqualTo(1713909600000L);
        assertThat(batteryEventList.get(0).getType()).isEqualTo(BatteryEventType.EVEN_HOUR);
        assertThat(batteryEventList.get(0).getBatteryLevel()).isEqualTo(98);
        assertThat(batteryEventList.get(1).getTimestamp()).isEqualTo(1713916800000L);
        assertThat(batteryEventList.get(1).getType()).isEqualTo(BatteryEventType.EVEN_HOUR);
        assertThat(batteryEventList.get(1).getBatteryLevel()).isEqualTo(90);
        assertThat(batteryEventList.get(2).getTimestamp()).isEqualTo(1713924000000L);
        assertThat(batteryEventList.get(2).getType()).isEqualTo(BatteryEventType.EVEN_HOUR);
        assertThat(batteryEventList.get(2).getBatteryLevel()).isEqualTo(83);
    }


    @Test
    public void convertToBatteryUsageSlotList_normalCase_returnsExpectedResult() {
        BatteryDiffData batteryDiffData1 =