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

Commit 28bdf84b authored by Kuan Wang's avatar Kuan Wang Committed by Automerger Merge Worker
Browse files

Remove the timestamps of last day for battery level chart if last day has less...

Remove the timestamps of last day for battery level chart if last day has less than 2 hours data. am: 57cb7642

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/20309948



Change-Id: Ifd9c932a870117e278c59af45c6a57132831de5f
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 240ff568 57cb7642
Loading
Loading
Loading
Loading
+22 −3
Original line number Original line Diff line number Diff line
@@ -67,6 +67,7 @@ public final class DataProcessor {
    private static final int MAX_DIFF_SECONDS_OF_UPPER_TIMESTAMP = 5;
    private static final int MAX_DIFF_SECONDS_OF_UPPER_TIMESTAMP = 5;
    // Maximum total time value for each hourly slot cumulative data at most 2 hours.
    // Maximum total time value for each hourly slot cumulative data at most 2 hours.
    private static final float TOTAL_HOURLY_TIME_THRESHOLD = DateUtils.HOUR_IN_MILLIS * 2;
    private static final float TOTAL_HOURLY_TIME_THRESHOLD = DateUtils.HOUR_IN_MILLIS * 2;
    private static final long MIN_TIME_SLOT = DateUtils.HOUR_IN_MILLIS * 2;
    private static final Map<String, BatteryHistEntry> EMPTY_BATTERY_MAP = new HashMap<>();
    private static final Map<String, BatteryHistEntry> EMPTY_BATTERY_MAP = new HashMap<>();
    private static final BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
    private static final BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
            new BatteryHistEntry(new ContentValues());
            new BatteryHistEntry(new ContentValues());
@@ -270,13 +271,31 @@ public final class DataProcessor {
        }
        }
        final long startTime = timestampList.get(0);
        final long startTime = timestampList.get(0);
        final long endTime = timestampList.get(timestampList.size() - 1);
        final long endTime = timestampList.get(timestampList.size() - 1);
        // If the timestamp diff is smaller than MIN_TIME_SLOT, returns the empty list directly.
        if (endTime - startTime < MIN_TIME_SLOT) {
            return dailyTimestampList;
        }
        long nextDay = getTimestampOfNextDay(startTime);
        long nextDay = getTimestampOfNextDay(startTime);
        // Only if the timestamp diff in the first day is bigger than MIN_TIME_SLOT, start from the
        // first day. Otherwise, start from the second day.
        if (nextDay - startTime >= MIN_TIME_SLOT) {
            dailyTimestampList.add(startTime);
            dailyTimestampList.add(startTime);
        }
        while (nextDay < endTime) {
        while (nextDay < endTime) {
            dailyTimestampList.add(nextDay);
            dailyTimestampList.add(nextDay);
            nextDay += DateUtils.DAY_IN_MILLIS;
            nextDay += DateUtils.DAY_IN_MILLIS;
        }
        }
        final long lastDailyTimestamp = dailyTimestampList.get(dailyTimestampList.size() - 1);
        // Only if the timestamp diff in the last day is bigger than MIN_TIME_SLOT, add the
        // last day.
        if (endTime - lastDailyTimestamp >= MIN_TIME_SLOT) {
            dailyTimestampList.add(endTime);
            dailyTimestampList.add(endTime);
        }
        // The dailyTimestampList must have the start and end timestamp, otherwise, return an empty
        // list.
        if (dailyTimestampList.size() < MIN_TIMESTAMP_DATA_SIZE) {
            return new ArrayList<>();
        }
        return dailyTimestampList;
        return dailyTimestampList;
    }
    }


@@ -721,7 +740,7 @@ public final class DataProcessor {
            final List<Long> hourlyTimestampsPerDay = new ArrayList<>();
            final List<Long> hourlyTimestampsPerDay = new ArrayList<>();
            while (currentTimestamp <= dailyEndTimestamp) {
            while (currentTimestamp <= dailyEndTimestamp) {
                hourlyTimestampsPerDay.add(currentTimestamp);
                hourlyTimestampsPerDay.add(currentTimestamp);
                currentTimestamp += 2 * DateUtils.HOUR_IN_MILLIS;
                currentTimestamp += MIN_TIME_SLOT;
            }
            }
            hourlyTimestamps.add(hourlyTimestampsPerDay);
            hourlyTimestamps.add(hourlyTimestampsPerDay);
        }
        }
+71 −2
Original line number Original line Diff line number Diff line
@@ -329,6 +329,18 @@ public class DataProcessorTest {
    public void getDailyTimestamps_notEnoughData_returnEmptyList() {
    public void getDailyTimestamps_notEnoughData_returnEmptyList() {
        assertThat(DataProcessor.getDailyTimestamps(new ArrayList<>())).isEmpty();
        assertThat(DataProcessor.getDailyTimestamps(new ArrayList<>())).isEmpty();
        assertThat(DataProcessor.getDailyTimestamps(List.of(100L))).isEmpty();
        assertThat(DataProcessor.getDailyTimestamps(List.of(100L))).isEmpty();
        assertThat(DataProcessor.getDailyTimestamps(List.of(100L, 5400000L))).isEmpty();
    }

    @Test
    public void getDailyTimestamps_OneHourDataPerDay_returnEmptyList() {
        // Timezone GMT+8
        final List<Long> timestamps = List.of(
                1641049200000L, // 2022-01-01 23:00:00
                1641052800000L, // 2022-01-02 00:00:00
                1641056400000L  // 2022-01-02 01:00:00
        );
        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEmpty();
    }
    }


    @Test
    @Test
@@ -353,14 +365,33 @@ public class DataProcessorTest {
    public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
    public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
        // Timezone GMT+8
        // Timezone GMT+8
        final List<Long> timestamps = List.of(
        final List<Long> timestamps = List.of(
                1640988000000L, // 2022-01-01 06:00:00
                1641045600000L, // 2022-01-01 22:00:00
                1641060000000L, // 2022-01-02 02:00:00
                1641160800000L, // 2022-01-03 06:00:00
                1641232800000L  // 2022-01-04 02:00:00
        );

        final List<Long> expectedTimestamps = List.of(
                1641045600000L, // 2022-01-01 22:00:00
                1641052800000L, // 2022-01-02 00:00:00
                1641139200000L, // 2022-01-03 00:00:00
                1641225600000L, // 2022-01-04 00:00:00
                1641232800000L  // 2022-01-04 02:00:00
        );
        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
    }

    @Test
    public void getDailyTimestamps_FirstDayOneHourData_returnExpectedList() {
        // Timezone GMT+8
        final List<Long> timestamps = List.of(
                1641049200000L, // 2022-01-01 23:00:00
                1641060000000L, // 2022-01-02 02:00:00
                1641060000000L, // 2022-01-02 02:00:00
                1641160800000L, // 2022-01-03 06:00:00
                1641160800000L, // 2022-01-03 06:00:00
                1641254400000L  // 2022-01-04 08:00:00
                1641254400000L  // 2022-01-04 08:00:00
        );
        );


        final List<Long> expectedTimestamps = List.of(
        final List<Long> expectedTimestamps = List.of(
                1640988000000L, // 2022-01-01 06:00:00
                1641052800000L, // 2022-01-02 00:00:00
                1641052800000L, // 2022-01-02 00:00:00
                1641139200000L, // 2022-01-03 00:00:00
                1641139200000L, // 2022-01-03 00:00:00
                1641225600000L, // 2022-01-04 00:00:00
                1641225600000L, // 2022-01-04 00:00:00
@@ -369,6 +400,44 @@ public class DataProcessorTest {
        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
    }
    }


    @Test
    public void getDailyTimestamps_LastDayNoData_returnExpectedList() {
        // Timezone GMT+8
        final List<Long> timestamps = List.of(
                1640988000000L, // 2022-01-01 06:00:00
                1641060000000L, // 2022-01-02 02:00:00
                1641160800000L, // 2022-01-03 06:00:00
                1641225600000L  // 2022-01-04 00:00:00
        );

        final List<Long> expectedTimestamps = List.of(
                1640988000000L, // 2022-01-01 06:00:00
                1641052800000L, // 2022-01-02 00:00:00
                1641139200000L, // 2022-01-03 00:00:00
                1641225600000L  // 2022-01-04 00:00:00
        );
        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
    }

    @Test
    public void getDailyTimestamps_LastDayOneHourData_returnExpectedList() {
        // Timezone GMT+8
        final List<Long> timestamps = List.of(
                1640988000000L, // 2022-01-01 06:00:00
                1641060000000L, // 2022-01-02 02:00:00
                1641160800000L, // 2022-01-03 06:00:00
                1641229200000L  // 2022-01-04 01:00:00
        );

        final List<Long> expectedTimestamps = List.of(
                1640988000000L, // 2022-01-01 06:00:00
                1641052800000L, // 2022-01-02 00:00:00
                1641139200000L, // 2022-01-03 00:00:00
                1641225600000L  // 2022-01-04 00:00:00
        );
        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
    }

    @Test
    @Test
    public void isFromFullCharge_emptyData_returnFalse() {
    public void isFromFullCharge_emptyData_returnFalse() {
        assertThat(DataProcessor.isFromFullCharge(null)).isFalse();
        assertThat(DataProcessor.isFromFullCharge(null)).isFalse();