Merge "Fix b/241872474 Battery usage page will crash when selecting the last hour chart bar, going to app detail page, and going back"
This commit is contained in:
committed by
Android (Google) Code Review
commit
aaaed2f0c1
@@ -284,7 +284,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
generateTimestampDayOfWeekTexts(
|
||||
mContext, batteryLevelData.getDailyBatteryLevels().getTimestamps(),
|
||||
/* isAbbreviation= */ true),
|
||||
mDailyChartIndex,
|
||||
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS);
|
||||
mHourlyViewModels = new ArrayList<>();
|
||||
for (BatteryLevelData.PeriodBatteryLevelData hourlyBatteryLevelsPerDay :
|
||||
@@ -293,7 +292,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
hourlyBatteryLevelsPerDay.getLevels(),
|
||||
generateTimestampHourTexts(
|
||||
mContext, hourlyBatteryLevelsPerDay.getTimestamps()),
|
||||
mHourlyChartIndex,
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
}
|
||||
refreshUi();
|
||||
|
@@ -41,22 +41,18 @@ class BatteryChartViewModel {
|
||||
private final List<Integer> mLevels;
|
||||
private final List<String> mTexts;
|
||||
private final AxisLabelPosition mAxisLabelPosition;
|
||||
private int mSelectedIndex;
|
||||
private int mSelectedIndex = SELECTED_INDEX_ALL;
|
||||
|
||||
BatteryChartViewModel(
|
||||
@NonNull List<Integer> levels, @NonNull List<String> texts, int selectedIndex,
|
||||
@NonNull List<Integer> levels, @NonNull List<String> texts,
|
||||
@NonNull AxisLabelPosition axisLabelPosition) {
|
||||
Preconditions.checkArgument(
|
||||
levels.size() == texts.size()
|
||||
&& levels.size() >= MIN_LEVELS_DATA_SIZE
|
||||
&& selectedIndex >= SELECTED_INDEX_ALL
|
||||
&& selectedIndex < levels.size(),
|
||||
String.format(Locale.ENGLISH, "Invalid BatteryChartViewModel"
|
||||
+ " levels.size: %d\ntexts.size: %d\nselectedIndex: %d.",
|
||||
levels.size(), texts.size(), selectedIndex));
|
||||
levels.size() == texts.size() && levels.size() >= MIN_LEVELS_DATA_SIZE,
|
||||
String.format(Locale.ENGLISH,
|
||||
"Invalid BatteryChartViewModel levels.size: %d, texts.size: %d.",
|
||||
levels.size(), texts.size()));
|
||||
mLevels = levels;
|
||||
mTexts = texts;
|
||||
mSelectedIndex = selectedIndex;
|
||||
mAxisLabelPosition = axisLabelPosition;
|
||||
}
|
||||
|
||||
@@ -72,6 +68,10 @@ class BatteryChartViewModel {
|
||||
return mTexts;
|
||||
}
|
||||
|
||||
public AxisLabelPosition axisLabelPosition() {
|
||||
return mAxisLabelPosition;
|
||||
}
|
||||
|
||||
public int selectedIndex() {
|
||||
return mSelectedIndex;
|
||||
}
|
||||
@@ -80,10 +80,6 @@ class BatteryChartViewModel {
|
||||
mSelectedIndex = index;
|
||||
}
|
||||
|
||||
public AxisLabelPosition axisLabelPosition() {
|
||||
return mAxisLabelPosition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(mLevels, mTexts, mSelectedIndex, mAxisLabelPosition);
|
||||
@@ -99,15 +95,15 @@ class BatteryChartViewModel {
|
||||
final BatteryChartViewModel batteryChartViewModel = (BatteryChartViewModel) other;
|
||||
return Objects.equals(mLevels, batteryChartViewModel.mLevels)
|
||||
&& Objects.equals(mTexts, batteryChartViewModel.mTexts)
|
||||
&& mSelectedIndex == batteryChartViewModel.mSelectedIndex
|
||||
&& mAxisLabelPosition == batteryChartViewModel.mAxisLabelPosition;
|
||||
&& mAxisLabelPosition == batteryChartViewModel.mAxisLabelPosition
|
||||
&& mSelectedIndex == batteryChartViewModel.mSelectedIndex;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format(Locale.ENGLISH,
|
||||
"levels: %s\ntexts: %s\nselectedIndex: %d, axisLabelPosition: %s",
|
||||
Objects.toString(mLevels), Objects.toString(mTexts), mSelectedIndex,
|
||||
mAxisLabelPosition);
|
||||
"levels: %s,\ntexts: %s,\naxisLabelPosition: %s, selectedIndex: %d",
|
||||
Objects.toString(mLevels), Objects.toString(mTexts), mAxisLabelPosition,
|
||||
mSelectedIndex);
|
||||
}
|
||||
}
|
||||
|
@@ -180,21 +180,21 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 97, 95),
|
||||
List.of("8 am", "10 am", "12 pm"),
|
||||
BatteryChartViewModel.SELECTED_INDEX_ALL,
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setBatteryChartViewModel_60Hours() {
|
||||
BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel(
|
||||
List.of(100, 83, 59, 41),
|
||||
List.of("Sat", "Sun", "Mon", "Mon"),
|
||||
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS);
|
||||
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
|
||||
|
||||
verify(mDailyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
|
||||
verify(mHourlyChartView, atLeastOnce()).setVisibility(View.GONE);
|
||||
verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 83, 59, 41),
|
||||
List.of("Sat", "Sun", "Mon", "Mon"),
|
||||
BatteryChartViewModel.SELECTED_INDEX_ALL,
|
||||
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
|
||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||
|
||||
reset(mDailyChartView);
|
||||
reset(mHourlyChartView);
|
||||
@@ -203,16 +203,13 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
mBatteryChartPreferenceController.refreshUi();
|
||||
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
||||
verify(mHourlyChartView).setVisibility(View.VISIBLE);
|
||||
verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 83, 59, 41),
|
||||
List.of("Sat", "Sun", "Mon", "Mon"),
|
||||
0,
|
||||
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
|
||||
|
||||
expectedDailyViewModel.setSelectedIndex(0);
|
||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 97, 95, 93, 91, 89, 87, 85, 83),
|
||||
List.of("8 am", "10 am", "12 pm", "2 pm", "4 pm", "6 pm", "8 pm", "10 pm",
|
||||
"12 am"),
|
||||
BatteryChartViewModel.SELECTED_INDEX_ALL,
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
|
||||
reset(mDailyChartView);
|
||||
@@ -223,17 +220,15 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
mBatteryChartPreferenceController.refreshUi();
|
||||
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
||||
verify(mHourlyChartView).setVisibility(View.VISIBLE);
|
||||
verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 83, 59, 41),
|
||||
List.of("Sat", "Sun", "Mon", "Mon"),
|
||||
1,
|
||||
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
|
||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
||||
expectedDailyViewModel.setSelectedIndex(1);
|
||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||
BatteryChartViewModel expectedHourlyViewModel = new BatteryChartViewModel(
|
||||
List.of(83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59),
|
||||
List.of("12 am", "2 am", "4 am", "6 am", "8 am", "10 am", "12 pm", "2 pm",
|
||||
"4 pm", "6 pm", "8 pm", "10 pm", "12 am"),
|
||||
6,
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS);
|
||||
expectedHourlyViewModel.setSelectedIndex(6);
|
||||
verify(mHourlyChartView).setViewModel(expectedHourlyViewModel);
|
||||
|
||||
reset(mDailyChartView);
|
||||
reset(mHourlyChartView);
|
||||
@@ -244,16 +239,12 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
mBatteryChartPreferenceController.refreshUi();
|
||||
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
||||
verify(mHourlyChartView).setVisibility(View.VISIBLE);
|
||||
verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 83, 59, 41),
|
||||
List.of("Sat", "Sun", "Mon", "Mon"),
|
||||
2,
|
||||
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
|
||||
expectedDailyViewModel.setSelectedIndex(2);
|
||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(59, 57, 55, 53, 51, 49, 47, 45, 43, 41),
|
||||
List.of("12 am", "2 am", "4 am", "6 am", "8 am", "10 am", "12 pm", "2 pm",
|
||||
"4 pm", "6 pm"),
|
||||
BatteryChartViewModel.SELECTED_INDEX_ALL,
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
}
|
||||
|
||||
|
@@ -102,10 +102,11 @@ public final class BatteryChartViewV2Test {
|
||||
@Test
|
||||
public void onClick_invokesCallback() {
|
||||
final int originalSelectedIndex = 2;
|
||||
mBatteryChartView.setViewModel(
|
||||
new BatteryChartViewModel(List.of(90, 80, 70, 60), List.of("", "", "", ""),
|
||||
originalSelectedIndex,
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
BatteryChartViewModel batteryChartViewModel = new BatteryChartViewModel(
|
||||
List.of(90, 80, 70, 60), List.of("", "", "", ""),
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS);
|
||||
batteryChartViewModel.setSelectedIndex(originalSelectedIndex);
|
||||
mBatteryChartView.setViewModel(batteryChartViewModel);
|
||||
for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) {
|
||||
mBatteryChartView.mTrapezoidSlots[i] = new BatteryChartViewV2.TrapezoidSlot();
|
||||
mBatteryChartView.mTrapezoidSlots[i].mLeft = i;
|
||||
@@ -192,8 +193,7 @@ public final class BatteryChartViewV2Test {
|
||||
levels.add(index + 1);
|
||||
texts.add("");
|
||||
}
|
||||
mBatteryChartView.setViewModel(new BatteryChartViewModel(
|
||||
levels, texts, BatteryChartViewModel.SELECTED_INDEX_ALL,
|
||||
mBatteryChartView.setViewModel(new BatteryChartViewModel(levels, texts,
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
mBatteryChartView.setClickableForce(true);
|
||||
when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
|
||||
|
Reference in New Issue
Block a user