Merge "Remove redundant battery usage slot in database." into main
This commit is contained in:
@@ -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),
|
||||
|
@@ -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(
|
||||
|
@@ -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));
|
||||
|
@@ -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 =
|
||||
|
Reference in New Issue
Block a user