Merge "Update the selected period message in battery chart"

This commit is contained in:
TreeHugger Robot
2022-08-04 09:51:07 +00:00
committed by Android (Google) Code Review
3 changed files with 118 additions and 19 deletions

View File

@@ -106,6 +106,10 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
private boolean mIsFooterPrefAdded = false; private boolean mIsFooterPrefAdded = false;
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;
private FooterPreference mFooterPreference; private FooterPreference mFooterPreference;
// Daily view model only saves abbreviated day of week texts (e.g. MON). This field saves the
// full day of week texts (e.g. Monday), which is used in category title and battery detail
// page.
private List<String> mDailyTimestampFullTexts;
private BatteryChartViewModel mDailyViewModel; private BatteryChartViewModel mDailyViewModel;
private List<BatteryChartViewModel> mHourlyViewModels; private List<BatteryChartViewModel> mHourlyViewModels;
@@ -266,15 +270,20 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
}); });
Log.d(TAG, "getBatteryLevelData: " + batteryLevelData); Log.d(TAG, "getBatteryLevelData: " + batteryLevelData);
if (batteryLevelData == null) { if (batteryLevelData == null) {
mDailyTimestampFullTexts = null;
mDailyViewModel = null; mDailyViewModel = null;
mHourlyViewModels = null; mHourlyViewModels = null;
addFooterPreferenceIfNeeded(false); addFooterPreferenceIfNeeded(false);
return; return;
} }
mDailyTimestampFullTexts = generateTimestampDayOfWeekTexts(
mContext, batteryLevelData.getDailyBatteryLevels().getTimestamps(),
/* isAbbreviation= */ false);
mDailyViewModel = new BatteryChartViewModel( mDailyViewModel = new BatteryChartViewModel(
batteryLevelData.getDailyBatteryLevels().getLevels(), batteryLevelData.getDailyBatteryLevels().getLevels(),
generateTimestampDayOfWeekTexts( generateTimestampDayOfWeekTexts(
mContext, batteryLevelData.getDailyBatteryLevels().getTimestamps()), mContext, batteryLevelData.getDailyBatteryLevels().getTimestamps(),
/* isAbbreviation= */ true),
mDailyChartIndex, mDailyChartIndex,
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS); BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS);
mHourlyViewModels = new ArrayList<>(); mHourlyViewModels = new ArrayList<>();
@@ -506,9 +515,33 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
} }
} }
private String getSlotInformation() { @VisibleForTesting
// TODO: Generate the right slot information from daily and hourly chart selection. String getSlotInformation() {
return null; if (mDailyTimestampFullTexts == null || mDailyViewModel == null
|| mHourlyViewModels == null) {
// No data
return null;
}
if (isAllSelected()) {
return null;
}
final String selectedDayText = mDailyTimestampFullTexts.get(mDailyChartIndex);
if (mHourlyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL) {
return selectedDayText;
}
final String fromHourText = mHourlyViewModels.get(mDailyChartIndex).texts().get(
mHourlyChartIndex);
final String toHourText = mHourlyViewModels.get(mDailyChartIndex).texts().get(
mHourlyChartIndex + 1);
final String selectedHourText =
String.format("%s%s%s", fromHourText, mIs24HourFormat ? "-" : " - ", toHourText);
if (isBatteryLevelDataInOneDay()) {
return selectedHourText;
}
return String.format("%s %s", selectedDayText, selectedHourText);
} }
@VisibleForTesting @VisibleForTesting
@@ -578,14 +611,20 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
} }
private boolean isBatteryLevelDataInOneDay() { private boolean isBatteryLevelDataInOneDay() {
return mHourlyViewModels.size() == 1; return mHourlyViewModels != null && mHourlyViewModels.size() == 1;
} }
private static List<String> generateTimestampDayOfWeekTexts( private boolean isAllSelected() {
@NonNull final Context context, @NonNull final List<Long> timestamps) { return (isBatteryLevelDataInOneDay()
|| mDailyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL)
&& mHourlyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL;
}
private static List<String> generateTimestampDayOfWeekTexts(@NonNull final Context context,
@NonNull final List<Long> timestamps, final boolean isAbbreviation) {
final ArrayList<String> texts = new ArrayList<>(); final ArrayList<String> texts = new ArrayList<>();
for (Long timestamp : timestamps) { for (Long timestamp : timestamps) {
texts.add(ConvertUtils.utcToLocalTimeDayOfWeek(context, timestamp)); texts.add(ConvertUtils.utcToLocalTimeDayOfWeek(context, timestamp, isAbbreviation));
} }
return texts; return texts;
} }

View File

@@ -150,10 +150,12 @@ public final class ConvertUtils {
} }
/** Converts UTC timestamp to local time day of week data. */ /** Converts UTC timestamp to local time day of week data. */
public static String utcToLocalTimeDayOfWeek(final Context context, final long timestamp) { public static String utcToLocalTimeDayOfWeek(
final Context context, final long timestamp, final boolean isAbbreviation) {
final Locale locale = getLocale(context); final Locale locale = getLocale(context);
final String pattern = DateFormat.getBestDateTimePattern(locale, "E"); final String pattern = DateFormat.getBestDateTimePattern(locale,
return DateFormat.format(pattern, timestamp).toString().toUpperCase(locale); isAbbreviation ? "E" : "EEEE");
return DateFormat.format(pattern, timestamp).toString();
} }
/** Gets indexed battery usage data for each corresponding time slot. */ /** Gets indexed battery usage data for each corresponding time slot. */

View File

@@ -188,7 +188,7 @@ public final class BatteryChartPreferenceControllerV2Test {
verify(mHourlyChartView, atLeastOnce()).setVisibility(View.GONE); verify(mHourlyChartView, atLeastOnce()).setVisibility(View.GONE);
verify(mDailyChartView).setViewModel(new BatteryChartViewModel( verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
List.of(100, 83, 59, 41), List.of(100, 83, 59, 41),
List.of("SAT", "SUN", "MON", "MON"), List.of("Sat", "Sun", "Mon", "Mon"),
BatteryChartViewModel.SELECTED_INDEX_ALL, BatteryChartViewModel.SELECTED_INDEX_ALL,
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS)); BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
@@ -200,7 +200,7 @@ public final class BatteryChartPreferenceControllerV2Test {
verify(mHourlyChartView).setVisibility(View.VISIBLE); verify(mHourlyChartView).setVisibility(View.VISIBLE);
verify(mDailyChartView).setViewModel(new BatteryChartViewModel( verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
List.of(100, 83, 59, 41), List.of(100, 83, 59, 41),
List.of("SAT", "SUN", "MON", "MON"), List.of("Sat", "Sun", "Mon", "Mon"),
0, 0,
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS)); BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel( verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
@@ -219,7 +219,7 @@ public final class BatteryChartPreferenceControllerV2Test {
verify(mHourlyChartView).setVisibility(View.VISIBLE); verify(mHourlyChartView).setVisibility(View.VISIBLE);
verify(mDailyChartView).setViewModel(new BatteryChartViewModel( verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
List.of(100, 83, 59, 41), List.of(100, 83, 59, 41),
List.of("SAT", "SUN", "MON", "MON"), List.of("Sat", "Sun", "Mon", "Mon"),
1, 1,
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS)); BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel( verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
@@ -239,7 +239,7 @@ public final class BatteryChartPreferenceControllerV2Test {
verify(mHourlyChartView).setVisibility(View.VISIBLE); verify(mHourlyChartView).setVisibility(View.VISIBLE);
verify(mDailyChartView).setViewModel(new BatteryChartViewModel( verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
List.of(100, 83, 59, 41), List.of(100, 83, 59, 41),
List.of("SAT", "SUN", "MON", "MON"), List.of("Sat", "Sun", "Mon", "Mon"),
2, 2,
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS)); BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel( verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
@@ -355,7 +355,7 @@ public final class BatteryChartPreferenceControllerV2Test {
} }
@Test @Test
public void handlePreferenceTreeiClick_notPowerGaugePreference_returnFalse() { public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(mAppListGroup)) assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(mAppListGroup))
.isFalse(); .isFalse();
@@ -523,6 +523,8 @@ public final class BatteryChartPreferenceControllerV2Test {
mBatteryChartPreferenceController.mExpandDividerPreference = mBatteryChartPreferenceController.mExpandDividerPreference =
spy(new ExpandDividerPreference(mContext)); spy(new ExpandDividerPreference(mContext));
// Simulates select all condition. // Simulates select all condition.
mBatteryChartPreferenceController.mDailyChartIndex =
BatteryChartViewModel.SELECTED_INDEX_ALL;
mBatteryChartPreferenceController.mHourlyChartIndex = mBatteryChartPreferenceController.mHourlyChartIndex =
BatteryChartViewModel.SELECTED_INDEX_ALL; BatteryChartViewModel.SELECTED_INDEX_ALL;
@@ -542,23 +544,79 @@ public final class BatteryChartPreferenceControllerV2Test {
.isEqualTo("System usage since last full charge"); .isEqualTo("System usage since last full charge");
} }
@Test
public void selectedSlotText_selectAllDaysAllHours_returnNull() {
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
mBatteryChartPreferenceController.mDailyChartIndex =
BatteryChartViewModel.SELECTED_INDEX_ALL;
mBatteryChartPreferenceController.mHourlyChartIndex =
BatteryChartViewModel.SELECTED_INDEX_ALL;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(null);
}
@Test
public void selectedSlotText_onlyOneDayDataSelectAllHours_returnNull() {
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex =
BatteryChartViewModel.SELECTED_INDEX_ALL;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(null);
}
@Test
public void selectedSlotText_selectADayAllHours_onlyDayText() {
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
mBatteryChartPreferenceController.mDailyChartIndex = 1;
mBatteryChartPreferenceController.mHourlyChartIndex =
BatteryChartViewModel.SELECTED_INDEX_ALL;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("Sunday");
}
@Test
public void selectedSlotText_onlyOneDayDataSelectAnHour_onlyHourText() {
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 1;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
"10 am - 12 pm");
}
@Test
public void selectedSlotText_SelectADayAnHour_dayAndHourText() {
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
mBatteryChartPreferenceController.mDailyChartIndex = 1;
mBatteryChartPreferenceController.mHourlyChartIndex = 8;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
"Sunday 4 pm - 6 pm");
}
@Test @Test
public void onSaveInstanceState_restoreSelectedIndexAndExpandState() { public void onSaveInstanceState_restoreSelectedIndexAndExpandState() {
final int expectedIndex = 1; final int expectedDailyIndex = 1;
final int expectedHourlyIndex = 2;
final boolean isExpanded = true; final boolean isExpanded = true;
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
mBatteryChartPreferenceController.mHourlyChartIndex = expectedIndex; mBatteryChartPreferenceController.mDailyChartIndex = expectedDailyIndex;
mBatteryChartPreferenceController.mHourlyChartIndex = expectedHourlyIndex;
mBatteryChartPreferenceController.mIsExpanded = isExpanded; mBatteryChartPreferenceController.mIsExpanded = isExpanded;
mBatteryChartPreferenceController.onSaveInstanceState(bundle); mBatteryChartPreferenceController.onSaveInstanceState(bundle);
// Replaces the original controller with other values. // Replaces the original controller with other values.
mBatteryChartPreferenceController.mDailyChartIndex = -1;
mBatteryChartPreferenceController.mHourlyChartIndex = -1; mBatteryChartPreferenceController.mHourlyChartIndex = -1;
mBatteryChartPreferenceController.mIsExpanded = false; mBatteryChartPreferenceController.mIsExpanded = false;
mBatteryChartPreferenceController.onCreate(bundle); mBatteryChartPreferenceController.onCreate(bundle);
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(25)); mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(25));
assertThat(mBatteryChartPreferenceController.mDailyChartIndex)
.isEqualTo(expectedDailyIndex);
assertThat(mBatteryChartPreferenceController.mHourlyChartIndex) assertThat(mBatteryChartPreferenceController.mHourlyChartIndex)
.isEqualTo(expectedIndex); .isEqualTo(expectedHourlyIndex);
assertThat(mBatteryChartPreferenceController.mIsExpanded).isTrue(); assertThat(mBatteryChartPreferenceController.mIsExpanded).isTrue();
} }