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
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
index b9c3a6f..86533ba 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -67,6 +67,7 @@
     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.
     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 BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
             new BatteryHistEntry(new ContentValues());
@@ -270,13 +271,31 @@
         }
         final long startTime = timestampList.get(0);
         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);
-        dailyTimestampList.add(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);
+        }
         while (nextDay < endTime) {
             dailyTimestampList.add(nextDay);
             nextDay += DateUtils.DAY_IN_MILLIS;
         }
-        dailyTimestampList.add(endTime);
+        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);
+        }
+        // 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;
     }
 
@@ -721,7 +740,7 @@
             final List<Long> hourlyTimestampsPerDay = new ArrayList<>();
             while (currentTimestamp <= dailyEndTimestamp) {
                 hourlyTimestampsPerDay.add(currentTimestamp);
-                currentTimestamp += 2 * DateUtils.HOUR_IN_MILLIS;
+                currentTimestamp += MIN_TIME_SLOT;
             }
             hourlyTimestamps.add(hourlyTimestampsPerDay);
         }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
index df9d865..7ac8fde 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
@@ -329,6 +329,18 @@
     public void getDailyTimestamps_notEnoughData_returnEmptyList() {
         assertThat(DataProcessor.getDailyTimestamps(new ArrayList<>())).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
@@ -353,14 +365,33 @@
     public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
         // Timezone GMT+8
         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
                 1641160800000L, // 2022-01-03 06:00:00
                 1641254400000L  // 2022-01-04 08: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
@@ -370,6 +401,44 @@
     }
 
     @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
     public void isFromFullCharge_emptyData_returnFalse() {
         assertThat(DataProcessor.isFromFullCharge(null)).isFalse();
         assertThat(DataProcessor.isFromFullCharge(new HashMap<>())).isFalse();