Support battery usage chart start index label is the detailed last full charge time

https://screenshot.googleplex.com/5dYp7kJpNPMU6Jx.png
https://screenshot.googleplex.com/7ZSbWyCGRFSym6A.png
https://screenshot.googleplex.com/9GsPTa9zd2XttDX.png

Bug: 271214926
Fix: 271214926
Test: manual
Change-Id: Ic869653f66866964f34e111dd2ee8c052313e119
This commit is contained in:
Zaiyue Xue
2023-03-31 19:20:18 +08:00
parent be76ebdc5b
commit bcafd5dfda
8 changed files with 397 additions and 287 deletions

View File

@@ -251,8 +251,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
hourlyBatteryLevelsPerDay.getLevels(),
hourlyBatteryLevelsPerDay.getTimestamps(),
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
mHourlyChartLabelTextGenerator.setLatestTimestamp(getLast(getLast(
batteryLevelData.getHourlyBatteryLevelsPerDay()).getTimestamps()))));
mHourlyChartLabelTextGenerator.updateSpecialCaseContext(batteryLevelData)));
}
refreshUi();
}
@@ -640,7 +639,11 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
private final class HourlyChartLabelTextGenerator implements
BatteryChartViewModel.LabelTextGenerator {
private Long mLatestTimestamp;
private static final int FULL_CHARGE_BATTERY_LEVEL = 100;
private boolean mIsFromFullCharge;
private long mFistTimestamp;
private long mLatestTimestamp;
@Override
public String generateText(List<Long> timestamps, int index) {
@@ -648,24 +651,37 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
// Replaces the latest timestamp text to "now".
return mContext.getString(R.string.battery_usage_chart_label_now);
}
return ConvertUtils.utcToLocalTimeHour(mContext, timestamps.get(index),
mIs24HourFormat);
long timestamp = timestamps.get(index);
boolean showMinute = false;
if (Objects.equal(timestamp, mFistTimestamp)) {
if (mIsFromFullCharge) {
showMinute = true;
} else {
// starts from 7 days ago
timestamp = TimestampUtils.getLastEvenHourTimestamp(timestamp);
}
}
return ConvertUtils.utcToLocalTimeHour(
mContext, timestamp, mIs24HourFormat, showMinute);
}
@Override
public String generateFullText(List<Long> timestamps, int index) {
if (Objects.equal(timestamps.get(index), mLatestTimestamp)) {
// Replaces the latest timestamp text to "now".
return mContext.getString(R.string.battery_usage_chart_label_now);
}
return index == timestamps.size() - 1
? generateText(timestamps, index)
: mContext.getString(R.string.battery_usage_timestamps_hyphen,
generateText(timestamps, index), generateText(timestamps, index + 1));
}
public HourlyChartLabelTextGenerator setLatestTimestamp(Long latestTimestamp) {
this.mLatestTimestamp = latestTimestamp;
HourlyChartLabelTextGenerator updateSpecialCaseContext(
@NonNull final BatteryLevelData batteryLevelData) {
BatteryLevelData.PeriodBatteryLevelData firstDayLevelData =
batteryLevelData.getHourlyBatteryLevelsPerDay().get(0);
this.mIsFromFullCharge =
firstDayLevelData.getLevels().get(0) == FULL_CHARGE_BATTERY_LEVEL;
this.mFistTimestamp = firstDayLevelData.getTimestamps().get(0);
this.mLatestTimestamp = getLast(getLast(
batteryLevelData.getHourlyBatteryLevelsPerDay()).getTimestamps());
return this;
}
}