Merge "Update the selected period message in battery chart"
This commit is contained in:
committed by
Android (Google) Code Review
commit
85b03538d0
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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. */
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user