Remove the timestamps of last day for battery level chart if last day has less than 2 hours data.
Test: make RunSettingsRoboTests Bug: 256525782 Change-Id: I3f735f8f3ec10b2952b93111f0243e44117ff58a
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user