diff --git a/res/values/strings.xml b/res/values/strings.xml index 4ee7c0e8971..dea6b60821e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6080,6 +6080,8 @@ now %1$s - %2$s + + %1$s to %2$s %1$s %2$s diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java index cf4f67fec25..b938c72e4b2 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java @@ -404,7 +404,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll } } - String getSlotInformation() { + String getSlotInformation(boolean isAccessibilityText) { if (mDailyViewModel == null || mHourlyViewModels == null) { // No data return null; @@ -413,13 +413,20 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll 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 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll } private String getAccessibilityAnnounceMessage() { - final String slotInformation = getSlotInformation(); + final String slotInformation = getSlotInformation(/* isAccessibilityText= */ true); final String slotInformationMessage = slotInformation == null ? mPrefContext.getString( @@ -600,6 +607,11 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll private abstract class BaseLabelTextGenerator implements BatteryChartViewModel.LabelTextGenerator { + @Override + public String generateContentDescription(List timestamps, int index) { + return generateFullText(timestamps, index); + } + @Override public String generateSlotBatteryLevelText(List levels, int index) { final int fromBatteryLevelIndex = @@ -673,6 +685,16 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll generateText(timestamps, index + 1)); } + @Override + public String generateContentDescription(List 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 111a5a1c677..37d2fceece2 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java @@ -784,7 +784,7 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick } 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 86890d5926e..dfd15c322fc 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java @@ -43,9 +43,12 @@ class BatteryChartViewModel { /** Generates the label text. The text may be abbreviated to save space. */ String generateText(List timestamps, int index); - /** Generates the full text for accessibility. */ + /** Generates the full text for slot information. */ String generateFullText(List timestamps, int index); + /** Generates the full text for accessibility. */ + String generateContentDescription(List timestamps, int index); + /** Generates the battery level text of a slot for accessibility.*/ String generateSlotBatteryLevelText(List levels, int index); } @@ -56,6 +59,7 @@ class BatteryChartViewModel { 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 @@ class BatteryChartViewModel { 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 @@ class BatteryChartViewModel { 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 45091f65466..ad29f28d426 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java +++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java @@ -239,7 +239,9 @@ public class PowerUsageAdvanced extends PowerUsageBase { } 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 6fb021cbdae..f62fdb8ce6f 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 @@ public final class BatteryChartPreferenceControllerTest { 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 @@ public final class BatteryChartPreferenceControllerTest { 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 @@ public final class BatteryChartPreferenceControllerTest { 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 @@ public final class BatteryChartPreferenceControllerTest { 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 @@ public final class BatteryChartPreferenceControllerTest { 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 @@ public final class BatteryChartPreferenceControllerTest { 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 @@ public final class BatteryChartPreferenceControllerTest { 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 @@ public final class BatteryChartPreferenceControllerTest { 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 282ec9e65b5..4bac42a4fee 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 @@ public final class ScreenOnTimeControllerTest { @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 @@ public final class ScreenOnTimeControllerTest { @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); }