Help talkback to read the hyphen of time frame '{day}{time}-{time}'
Talkback Hover: https://screenshot.googleplex.com/6Z5KMhXRPRWrqh9
Talkback Click: https://screenshot.googleplex.com/5iYVWXE95rgH98D
Bug: 322855775
Test: atest SettingsRoboTests:com.android.settings.fuelgauge.batteryusage
Change-Id: I54b78e9e29c67d514c0346ddae8331450bf53f01
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4ee7c0e..dea6b60 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6080,6 +6080,8 @@
<string name="battery_usage_chart_label_now">now</string>
<!-- [CHAR_LIMIT=NONE] A hyphen for two timestamps. For example, "6 AM - 8 AM", which means "from 6 AM to 8 AM". Please notice the spaces around the hyphen -->
<string name="battery_usage_timestamps_hyphen"><xliff:g id="from_timestamp">%1$s</xliff:g> - <xliff:g id="to_timestamp">%2$s</xliff:g></string>
+ <!-- [CHAR_LIMIT=NONE] Accessibility content description for two timestamps. For example, Battery usage for "6 AM to 8 PM" -->
+ <string name="battery_usage_timestamps_content_description"><xliff:g id="from_timestamp">%1$s</xliff:g> to <xliff:g id="to_timestamp">%2$s</xliff:g></string>
<!-- [CHAR_LIMIT=NONE] The first slot is a week day (e.g. "Monday"); the second slot is a hourly time span (e.g. "6 AM - 8 AM"). -->
<string name="battery_usage_day_and_hour"><xliff:g id="day">%1$s</xliff:g> <xliff:g id="hour">%2$s</xliff:g></string>
<!-- [CHAR_LIMIT=NONE] Accessibility content description for each slot in battery chart view. -->
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
index cf4f67f..b938c72 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
@@ -404,7 +404,7 @@
}
}
- String getSlotInformation() {
+ String getSlotInformation(boolean isAccessibilityText) {
if (mDailyViewModel == null || mHourlyViewModels == null) {
// No data
return null;
@@ -413,13 +413,20 @@
return null;
}
- final String selectedDayText = mDailyViewModel.getFullText(mDailyChartIndex);
+ final String selectedDayText =
+ isAccessibilityText
+ ? mDailyViewModel.getContentDescription(mDailyChartIndex)
+ : mDailyViewModel.getFullText(mDailyChartIndex);
if (mHourlyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL) {
return selectedDayText;
}
final String selectedHourText =
- mHourlyViewModels.get(mDailyChartIndex).getFullText(mHourlyChartIndex);
+ isAccessibilityText
+ ? mHourlyViewModels
+ .get(mDailyChartIndex)
+ .getContentDescription(mHourlyChartIndex)
+ : mHourlyViewModels.get(mDailyChartIndex).getFullText(mHourlyChartIndex);
if (isBatteryLevelDataInOneDay()) {
return selectedHourText;
}
@@ -444,7 +451,7 @@
}
private String getAccessibilityAnnounceMessage() {
- final String slotInformation = getSlotInformation();
+ final String slotInformation = getSlotInformation(/* isAccessibilityText= */ true);
final String slotInformationMessage =
slotInformation == null
? mPrefContext.getString(
@@ -601,6 +608,11 @@
private abstract class BaseLabelTextGenerator
implements BatteryChartViewModel.LabelTextGenerator {
@Override
+ public String generateContentDescription(List<Long> timestamps, int index) {
+ return generateFullText(timestamps, index);
+ }
+
+ @Override
public String generateSlotBatteryLevelText(List<Integer> levels, int index) {
final int fromBatteryLevelIndex =
index == BatteryChartViewModel.SELECTED_INDEX_ALL ? 0 : index;
@@ -673,6 +685,16 @@
generateText(timestamps, index + 1));
}
+ @Override
+ public String generateContentDescription(List<Long> timestamps, int index) {
+ return index == timestamps.size() - 1
+ ? generateText(timestamps, index)
+ : mContext.getString(
+ R.string.battery_usage_timestamps_content_description,
+ generateText(timestamps, index),
+ generateText(timestamps, index + 1));
+ }
+
HourlyChartLabelTextGenerator updateSpecialCaseContext(
@NonNull final BatteryLevelData batteryLevelData) {
BatteryLevelData.PeriodBatteryLevelData firstDayLevelData =
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
index 111a5a1..37d2fce 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
@@ -784,7 +784,7 @@
}
final AccessibilityNodeInfo childInfo =
new AccessibilityNodeInfo(BatteryChartView.this, index);
- final String slotTimeInfo = mViewModel.getFullText(index);
+ final String slotTimeInfo = mViewModel.getContentDescription(index);
final String batteryLevelInfo = mViewModel.getSlotBatteryLevelText(index);
onInitializeAccessibilityNodeInfo(childInfo);
childInfo.setClickable(isValidToDraw(mViewModel, index));
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java
index 86890d5..dfd15c3 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java
@@ -43,9 +43,12 @@
/** Generates the label text. The text may be abbreviated to save space. */
String generateText(List<Long> timestamps, int index);
- /** Generates the full text for accessibility. */
+ /** Generates the full text for slot information. */
String generateFullText(List<Long> timestamps, int index);
+ /** Generates the full text for accessibility. */
+ String generateContentDescription(List<Long> timestamps, int index);
+
/** Generates the battery level text of a slot for accessibility.*/
String generateSlotBatteryLevelText(List<Integer> levels, int index);
}
@@ -56,6 +59,7 @@
private final LabelTextGenerator mLabelTextGenerator;
private final String[] mTexts;
private final String[] mFullTexts;
+ private final String[] mContentDescription;
private final String[] mBatteryLevelTexts;
private int mSelectedIndex = SELECTED_INDEX_ALL;
@@ -79,6 +83,7 @@
mLabelTextGenerator = labelTextGenerator;
mTexts = new String[size()];
mFullTexts = new String[size()];
+ mContentDescription = new String[size()];
// Last one for SELECTED_INDEX_ALL
mBatteryLevelTexts = new String[size() + 1];
}
@@ -105,6 +110,14 @@
return mFullTexts[index];
}
+ public String getContentDescription(int index) {
+ if (mContentDescription[index] == null) {
+ mContentDescription[index] =
+ mLabelTextGenerator.generateContentDescription(mTimestamps, index);
+ }
+ return mContentDescription[index];
+ }
+
public String getSlotBatteryLevelText(int index) {
final int textIndex = index != SELECTED_INDEX_ALL ? index : size();
if (mBatteryLevelTexts[textIndex] == null) {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
index 45091f6..ad29f28 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
@@ -239,7 +239,9 @@
}
final int dailyIndex = mBatteryChartPreferenceController.getDailyChartIndex();
final int hourlyIndex = mBatteryChartPreferenceController.getHourlyChartIndex();
- final String slotInformation = mBatteryChartPreferenceController.getSlotInformation();
+ final String slotInformation =
+ mBatteryChartPreferenceController.getSlotInformation(
+ /* isAccessibilityText= */ false);
final BatteryDiffData slotUsageData = mBatteryUsageMap.get(dailyIndex).get(hourlyIndex);
mScreenOnTimeController.handleSceenOnTimeUpdated(
slotUsageData != null ? slotUsageData.getScreenOnTime() : 0L, slotInformation);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
index 6fb021c..f62fdb8 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
@@ -383,7 +383,7 @@
mBatteryChartPreferenceController.mDailyChartIndex = SELECTED_INDEX_ALL;
mBatteryChartPreferenceController.mHourlyChartIndex = SELECTED_INDEX_ALL;
- assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(null);
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(false)).isEqualTo(null);
assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
.isEqualTo("Battery level percentage from 100% to 66%");
}
@@ -394,7 +394,7 @@
mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = SELECTED_INDEX_ALL;
- assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(null);
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(false)).isEqualTo(null);
assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
.isEqualTo("Battery level percentage from 100% to 66%");
}
@@ -405,7 +405,7 @@
mBatteryChartPreferenceController.mDailyChartIndex = 1;
mBatteryChartPreferenceController.mHourlyChartIndex = SELECTED_INDEX_ALL;
- assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("Sunday");
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(false)).isEqualTo("Sunday");
assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
.isEqualTo("Battery level percentage from 83% to 59%");
}
@@ -416,8 +416,10 @@
mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 2;
- assertThat(mBatteryChartPreferenceController.getSlotInformation())
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(false))
.isEqualTo("10 AM - 12 PM");
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(true))
+ .isEqualTo("10 AM to 12 PM");
assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
.isEqualTo("Battery level percentage from 97% to 95%");
}
@@ -428,8 +430,10 @@
mBatteryChartPreferenceController.mDailyChartIndex = 1;
mBatteryChartPreferenceController.mHourlyChartIndex = 8;
- assertThat(mBatteryChartPreferenceController.getSlotInformation())
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(false))
.isEqualTo("Sunday 4 PM - 6 PM");
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(true))
+ .isEqualTo("Sunday 4 PM to 6 PM");
assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
.isEqualTo("Battery level percentage from 67% to 65%");
}
@@ -440,8 +444,10 @@
mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
- assertThat(mBatteryChartPreferenceController.getSlotInformation())
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(false))
.isEqualTo("7:01 AM - 8 AM");
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(true))
+ .isEqualTo("7:01 AM to 8 AM");
assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
.isEqualTo("Battery level percentage from 100% to 99%");
}
@@ -452,7 +458,10 @@
mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 3;
- assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("12 PM - now");
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(false))
+ .isEqualTo("12 PM - now");
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(true))
+ .isEqualTo("12 PM to now");
assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
.isEqualTo("Battery level percentage from 95% to 66%");
}
@@ -463,8 +472,10 @@
mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
- assertThat(mBatteryChartPreferenceController.getSlotInformation())
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(false))
.isEqualTo("7:01 AM - now");
+ assertThat(mBatteryChartPreferenceController.getSlotInformation(true))
+ .isEqualTo("7:01 AM to now");
assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
.isEqualTo("Battery level percentage from 100% to 66%");
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ScreenOnTimeControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ScreenOnTimeControllerTest.java
index 282ec9e..4bac42a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ScreenOnTimeControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ScreenOnTimeControllerTest.java
@@ -68,7 +68,7 @@
@Test
public void handleSceenOnTimeUpdated_nullScreenOnTime_hideAllPreference() {
mScreenOnTimeController.handleSceenOnTimeUpdated(
- /* screenOnTime= */ null, "Friday 12:00-now");
+ /* screenOnTime= */ null, "Friday 12:00 to now");
verify(mRootPreference).setVisible(false);
verify(mScreenOnTimeTextPreference).setVisible(false);
@@ -84,9 +84,9 @@
@Test
public void showCategoryTitle_notNull_slotTimestamp() {
- mScreenOnTimeController.showCategoryTitle("Friday 12:00-now");
+ mScreenOnTimeController.showCategoryTitle("Friday 12:00 to now");
- verify(mRootPreference).setTitle("Screen time for Friday 12:00-now");
+ verify(mRootPreference).setTitle("Screen time for Friday 12:00 to now");
verify(mRootPreference).setVisible(true);
}