Update time format for the first timestamp on usage chartview.
- If usage data start from the time-change event rather than full-charged event [Before] https://screenshot.googleplex.com/BokAvKHXmt2Mmwn [After] https://screenshot.googleplex.com/8thpgVrVt8kqo37 Bug: 336423923 Test: atest SettingsRoboTests:com.android.settings.fuelgauge.batteryusage Change-Id: I66f8b384938f55852e28bd9f50d1a99c7fc9e41b
This commit is contained in:
@@ -649,9 +649,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
|
||||
private final class HourlyChartLabelTextGenerator extends BaseLabelTextGenerator
|
||||
implements BatteryChartViewModel.LabelTextGenerator {
|
||||
private static final int FULL_CHARGE_BATTERY_LEVEL = 100;
|
||||
|
||||
private boolean mIsFromFullCharge;
|
||||
private boolean mIsStartTimestamp;
|
||||
private long mFistTimestamp;
|
||||
private long mLatestTimestamp;
|
||||
|
||||
@@ -664,7 +662,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
long timestamp = timestamps.get(index);
|
||||
boolean showMinute = false;
|
||||
if (Objects.equal(timestamp, mFistTimestamp)) {
|
||||
if (mIsFromFullCharge) {
|
||||
if (mIsStartTimestamp) {
|
||||
showMinute = true;
|
||||
} else {
|
||||
// starts from 7 days ago
|
||||
@@ -699,8 +697,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
@NonNull final BatteryLevelData batteryLevelData) {
|
||||
BatteryLevelData.PeriodBatteryLevelData firstDayLevelData =
|
||||
batteryLevelData.getHourlyBatteryLevelsPerDay().get(0);
|
||||
this.mIsFromFullCharge =
|
||||
firstDayLevelData.getLevels().get(0) == FULL_CHARGE_BATTERY_LEVEL;
|
||||
this.mIsStartTimestamp = firstDayLevelData.isStartTimestamp();
|
||||
this.mFistTimestamp = firstDayLevelData.getTimestamps().get(0);
|
||||
this.mLatestTimestamp =
|
||||
getLast(
|
||||
|
||||
@@ -28,6 +28,7 @@ import androidx.annotation.VisibleForTesting;
|
||||
import androidx.core.util.Preconditions;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
@@ -39,17 +40,24 @@ public final class BatteryLevelData {
|
||||
private static final long MIN_SIZE = 2;
|
||||
private static final long TIME_SLOT = DateUtils.HOUR_IN_MILLIS * 2;
|
||||
|
||||
// For testing only.
|
||||
@VisibleForTesting @Nullable static Calendar sTestCalendar;
|
||||
|
||||
/** A container for the battery timestamp and level data. */
|
||||
public static final class PeriodBatteryLevelData {
|
||||
// The length of mTimestamps and mLevels must be the same. mLevels[index] might be null when
|
||||
// there is no level data for the corresponding timestamp.
|
||||
private final List<Long> mTimestamps;
|
||||
private final List<Integer> mLevels;
|
||||
private final boolean mIsStartTimestamp;
|
||||
|
||||
public PeriodBatteryLevelData(
|
||||
@NonNull Map<Long, Integer> batteryLevelMap, @NonNull List<Long> timestamps) {
|
||||
@NonNull Map<Long, Integer> batteryLevelMap,
|
||||
@NonNull List<Long> timestamps,
|
||||
boolean isStartTimestamp) {
|
||||
mTimestamps = timestamps;
|
||||
mLevels = new ArrayList<>(timestamps.size());
|
||||
mIsStartTimestamp = isStartTimestamp;
|
||||
for (Long timestamp : timestamps) {
|
||||
mLevels.add(
|
||||
batteryLevelMap.containsKey(timestamp)
|
||||
@@ -66,6 +74,10 @@ public final class BatteryLevelData {
|
||||
return mLevels;
|
||||
}
|
||||
|
||||
public boolean isStartTimestamp() {
|
||||
return mIsStartTimestamp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format(
|
||||
@@ -105,14 +117,21 @@ public final class BatteryLevelData {
|
||||
|
||||
final List<Long> timestampList = new ArrayList<>(batteryLevelMap.keySet());
|
||||
Collections.sort(timestampList);
|
||||
final long minTimestamp = timestampList.get(0);
|
||||
final long sixDaysAgoTimestamp =
|
||||
DatabaseUtils.getTimestampSixDaysAgo(sTestCalendar != null ? sTestCalendar : null);
|
||||
final boolean isStartTimestamp = minTimestamp > sixDaysAgoTimestamp;
|
||||
final List<Long> dailyTimestamps = getDailyTimestamps(timestampList);
|
||||
final List<List<Long>> hourlyTimestamps = getHourlyTimestamps(dailyTimestamps);
|
||||
|
||||
mDailyBatteryLevels = new PeriodBatteryLevelData(batteryLevelMap, dailyTimestamps);
|
||||
mDailyBatteryLevels =
|
||||
new PeriodBatteryLevelData(batteryLevelMap, dailyTimestamps, isStartTimestamp);
|
||||
mHourlyBatteryLevelsPerDay = new ArrayList<>(hourlyTimestamps.size());
|
||||
for (List<Long> hourlyTimestampsPerDay : hourlyTimestamps) {
|
||||
for (int i = 0; i < hourlyTimestamps.size(); i++) {
|
||||
final List<Long> hourlyTimestampsPerDay = hourlyTimestamps.get(i);
|
||||
mHourlyBatteryLevelsPerDay.add(
|
||||
new PeriodBatteryLevelData(batteryLevelMap, hourlyTimestampsPerDay));
|
||||
new PeriodBatteryLevelData(
|
||||
batteryLevelMap, hourlyTimestampsPerDay, isStartTimestamp && i == 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user