diff --git a/res/values/strings.xml b/res/values/strings.xml
index 96ffb8d3480..32bfa1c3308 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6372,8 +6372,8 @@
Battery usage
View usage for past 24 hours
-
- View usage from last full charge
+
+ View usage since last full charge
App battery usage
@@ -6748,50 +6748,50 @@
Manage battery usage
-
- ^1 total • ^2 background\nfrom last full charge
+
+ ^1 total • ^2 background\nsince last full charge
^1 total • ^2 background\nfor past 24 hr
^1 total • ^2 background\nfor ^3
-
- Total less than a minute from last full charge
+
+ Total less than a minute since last full charge
Total less than a minute for past 24 hr
Total less than a minute for ^1
-
- Background less than a minute from last full charge
+
+ Background less than a minute since last full charge
Background less than a minute for past 24 hr
Background less than a minute for ^1
-
- ^1 total from last full charge
+
+ ^1 total since last full charge
^1 total for past 24 hr
^1 total for ^2
-
- ^1 background from last full charge
+
+ ^1 background since last full charge
^1 background for past 24 hr
^1 background for ^2
-
- ^1 total • background less than a minute\nfrom last full charge
+
+ ^1 total • background less than a minute\nsince last full charge
^1 total • background less than a minute\nfor past 24 hr
^1 total • background less than a minute\nfor ^2
-
- No usage from last full charge
+
+ No usage since last full charge
No usage for past 24 hr
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
index b9c3a6ff7f3..86533ba07c3 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -67,6 +67,7 @@ public final class DataProcessor {
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 EMPTY_BATTERY_MAP = new HashMap<>();
private static final BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
new BatteryHistEntry(new ContentValues());
@@ -270,13 +271,31 @@ public final class DataProcessor {
}
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 @@ public final class DataProcessor {
final List 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/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 7c56ab393f0..6a1280f69e4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -467,7 +467,7 @@ public class AdvancedPowerUsageDetailTest {
ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("2 min background from last full charge");
+ .isEqualTo("2 min background since last full charge");
}
@Test
@@ -485,7 +485,7 @@ public class AdvancedPowerUsageDetailTest {
ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("Background less than a minute from last full charge");
+ .isEqualTo("Background less than a minute since last full charge");
}
@Test
@@ -504,7 +504,7 @@ public class AdvancedPowerUsageDetailTest {
ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("Total less than a minute from last full charge");
+ .isEqualTo("Total less than a minute since last full charge");
}
@Test
@@ -520,8 +520,8 @@ public class AdvancedPowerUsageDetailTest {
ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
- assertThat(captor.getValue().toString())
- .isEqualTo("1 min total • background less than a minute\nfrom last full charge");
+ assertThat(captor.getValue().toString()).isEqualTo(
+ "1 min total • background less than a minute\nsince last full charge");
}
@Test
@@ -538,7 +538,7 @@ public class AdvancedPowerUsageDetailTest {
ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("1 min total from last full charge");
+ .isEqualTo("1 min total since last full charge");
}
@Test
@@ -555,7 +555,7 @@ public class AdvancedPowerUsageDetailTest {
ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("6 min total • 4 min background\nfrom last full charge");
+ .isEqualTo("6 min total • 4 min background\nsince last full charge");
}
@Test
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 df9d8655109..7ac8fdeec58 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 class DataProcessorTest {
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 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 class DataProcessorTest {
public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
// Timezone GMT+8
final List 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 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 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 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
@@ -369,6 +400,44 @@ public class DataProcessorTest {
assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
}
+ @Test
+ public void getDailyTimestamps_LastDayNoData_returnExpectedList() {
+ // Timezone GMT+8
+ final List 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 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 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 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();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
index c0494972f35..fa049f8fa35 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
@@ -142,7 +142,7 @@ public class PowerUsageSummaryTest {
public void initPreference_hasCorrectSummary() {
mFragment.initPreference();
- verify(mBatteryUsagePreference).setSummary("View usage from last full charge");
+ verify(mBatteryUsagePreference).setSummary("View usage since last full charge");
}
@Test