Add content descriptions for Display size and text previews
Bug: 395882764
Test: manually
Test: atest TextReadingPreviewControllerTest
Test: atest TextReadingPreviewPreferenceTest
Flag: EXEMPT bugfix
Change-Id: Ia8702c3d0bdbbfdd554c945000777fcee6714abe
diff --git a/res/values/config.xml b/res/values/config.xml
index c20f080..9d2e43d 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -810,13 +810,23 @@
<!-- Allowed packages to show the confirmation dialog for a system locale suggestion -->
<string-array name="allowed_packages_for_locale_confirmation_diallog" translatable="false"/>
- <!-- Array of text reading preview layouts. Must contain at least 1 layout -->
+ <!-- Array of text reading preview layouts. Must contain at least 1 layout.
+ Add content descriptions in the config_text_reading_preview_content_descriptions together
+ if adding more sample layouts here -->
<array name="config_text_reading_preview_samples">
<item>@layout/accessibility_text_reading_preview_app_grid</item>
<item>@layout/screen_zoom_preview_1</item>
<item>@layout/accessibility_text_reading_preview_mail_content</item>
</array>
+ <!-- Array of text reading preview layouts' content descriptions.
+ The order should be the same as the layouts in config_text_reading_preview_samples -->
+ <array name="config_text_reading_preview_content_descriptions">
+ <item>@string/preview_pager_home_content_description</item>
+ <item>@string/preview_pager_message_content_description</item>
+ <item>@string/preview_pager_email_content_description</item>
+ </array>
+
<!-- Package responsible for updating Mainline Modules -->
<string name="config_mainline_module_update_package" translatable="false">com.android.vending</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2958559..b177185 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -78,6 +78,12 @@
<!-- Content description for preview pager. [CHAR LIMIT=NONE] -->
<string name="preview_pager_content_description">Preview</string>
+ <!-- Content description for home screen preview. [CHAR LIMIT=NONE] -->
+ <string name="preview_pager_home_content_description">Home screen preview</string>
+ <!-- Content description for message preview. [CHAR LIMIT=NONE] -->
+ <string name="preview_pager_message_content_description">Message preview</string>
+ <!-- Content description for email preview. [CHAR LIMIT=NONE] -->
+ <string name="preview_pager_email_content_description">Email preview</string>
<!-- Content description for qrcode image. [CHAR LIMIT=none]-->
<string name="qr_code_content_description">QR code</string>
<!-- Previous button for preview pager. [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/accessibility/TextReadingPreviewController.java b/src/com/android/settings/accessibility/TextReadingPreviewController.java
index 99f1f3f..e268aaa 100644
--- a/src/com/android/settings/accessibility/TextReadingPreviewController.java
+++ b/src/com/android/settings/accessibility/TextReadingPreviewController.java
@@ -104,11 +104,13 @@
final boolean isLayoutRtl =
origConfig.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
final int[] previewSamples = getPreviewSampleLayouts(mContext);
+ final int[] previewContentDescriptions = getPreviewSampleContentDescriptions(mContext);
final PreviewPagerAdapter pagerAdapter = new PreviewPagerAdapter(mContext, isLayoutRtl,
previewSamples, createConfig(origConfig));
mPreviewPreference.setPreviewAdapter(pagerAdapter);
mPreviewPreference.setCurrentItem(
isLayoutRtl ? previewSamples.length - 1 : FRAME_INITIAL_INDEX);
+ mPreviewPreference.setContentDescription(previewContentDescriptions);
final int initialPagerIndex =
mLastFontProgress * mDisplaySizeData.getValues().size() + mLastDisplayProgress;
@@ -188,6 +190,20 @@
return previewSamples;
}
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ static int[] getPreviewSampleContentDescriptions(Context context) {
+ TypedArray typedArray = context.getResources().obtainTypedArray(
+ R.array.config_text_reading_preview_content_descriptions);
+ int previewCount = typedArray.length();
+ int[] previewContentDescriptions = new int[previewCount];
+ for (int i = 0; i < previewCount; i++) {
+ previewContentDescriptions[i] =
+ typedArray.getResourceId(i, R.string.preview_pager_content_description);
+ }
+ typedArray.recycle();
+ return previewContentDescriptions;
+ }
+
private int getPagerIndex() {
final int displayDataSize = mDisplaySizeData.getValues().size();
final int fontSizeProgress = mFontSizePreference.getProgress();
diff --git a/src/com/android/settings/accessibility/TextReadingPreviewPreference.java b/src/com/android/settings/accessibility/TextReadingPreviewPreference.java
index 99e7125..513e247 100644
--- a/src/com/android/settings/accessibility/TextReadingPreviewPreference.java
+++ b/src/com/android/settings/accessibility/TextReadingPreviewPreference.java
@@ -43,28 +43,11 @@
private int mCurrentItem;
private int mLastLayerIndex;
private PreviewPagerAdapter mPreviewAdapter;
+ private int[] mContentDescriptions;
private int mLayoutMinHorizontalPadding = 0;
private int mBackgroundMinHorizontalPadding = 0;
- private final ViewPager.OnPageChangeListener mPageChangeListener =
- new ViewPager.OnPageChangeListener() {
- @Override
- public void onPageScrolled(int i, float v, int i1) {
- // Do nothing
- }
-
- @Override
- public void onPageSelected(int i) {
- mCurrentItem = i;
- }
-
- @Override
- public void onPageScrollStateChanged(int i) {
- // Do nothing
- }
- };
-
TextReadingPreviewPreference(Context context) {
super(context);
init();
@@ -95,7 +78,23 @@
adjustPaddings(previewLayout, backgroundView);
final ViewPager viewPager = (ViewPager) holder.findViewById(R.id.preview_pager);
- viewPager.addOnPageChangeListener(mPageChangeListener);
+ viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int i, float v, int i1) {
+ // Do nothing
+ }
+
+ @Override
+ public void onPageSelected(int i) {
+ mCurrentItem = i;
+ viewPager.setContentDescription(getContext().getString(mContentDescriptions[i]));
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int i) {
+ // Do nothing
+ }
+ });
final DotsPageIndicator pageIndicator =
(DotsPageIndicator) holder.findViewById(R.id.page_indicator);
updateAdapterIfNeeded(viewPager, pageIndicator, mPreviewAdapter);
@@ -122,6 +121,10 @@
viewPager.setCurrentItem(getCurrentItem() + 1));
previousButton.setContentDescription(getContext().getString(
R.string.preview_pager_next_button));
+
+ // Initialize the content description since the OnPageChangeListener#onPageSelected won't
+ // be called during setup.
+ viewPager.setContentDescription(getContext().getString(mContentDescriptions[0]));
}
@Override
@@ -170,6 +173,10 @@
);
}
+ void setContentDescription(int[] stringIds) {
+ mContentDescriptions = stringIds;
+ }
+
void setPreviewAdapter(PreviewPagerAdapter previewAdapter) {
if (previewAdapter != mPreviewAdapter) {
mPreviewAdapter = previewAdapter;
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
index 375952f..81c869d 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
@@ -16,6 +16,8 @@
package com.android.settings.accessibility;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -77,6 +79,15 @@
}
@Test
+ public void numberOfPreviewSamples_numberOfPreviewContentDescription_isEqual() {
+ int[] previewSamples = TextReadingPreviewController.getPreviewSampleLayouts(mContext);
+ int[] previewContentDescriptions =
+ TextReadingPreviewController.getPreviewSampleContentDescriptions(mContext);
+
+ assertThat(previewSamples.length).isEqualTo(previewContentDescriptions.length);
+ }
+
+ @Test
public void initPreviewerAdapter_verifyAction() {
when(mPreferenceScreen.findPreference(PREVIEW_KEY)).thenReturn(mPreviewPreference);
when(mPreferenceScreen.findPreference(FONT_SIZE_KEY)).thenReturn(mFontSizePreference);
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java
index 4ca1dca..9cd8fa2 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java
@@ -49,29 +49,48 @@
*/
@RunWith(RobolectricTestRunner.class)
public class TextReadingPreviewPreferenceTest {
-
+ private Context mContext;
private TextReadingPreviewPreference mTextReadingPreviewPreference;
private PreferenceViewHolder mHolder;
private ViewPager mViewPager;
private PreviewPagerAdapter mPreviewPagerAdapter;
private int mPreviewSampleCount;
+ private int[] mPreviewContentDescriptions;
@Before
public void setUp() {
- final Context context = ApplicationProvider.getApplicationContext();
- final int[] previewSamples = TextReadingPreviewController.getPreviewSampleLayouts(context);
+ mContext = ApplicationProvider.getApplicationContext();
+ mPreviewContentDescriptions =
+ TextReadingPreviewController.getPreviewSampleContentDescriptions(mContext);
+ final int[] previewSamples = TextReadingPreviewController.getPreviewSampleLayouts(mContext);
mPreviewSampleCount = previewSamples.length;
final Configuration[] configurations = createConfigurations(mPreviewSampleCount);
- mTextReadingPreviewPreference = new TextReadingPreviewPreference(context);
+ mTextReadingPreviewPreference = new TextReadingPreviewPreference(mContext);
mPreviewPagerAdapter =
- spy(new PreviewPagerAdapter(context, /* isLayoutRtl= */ false,
+ spy(new PreviewPagerAdapter(mContext, /* isLayoutRtl= */ false,
previewSamples, configurations));
- final LayoutInflater inflater = LayoutInflater.from(context);
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
final View view =
inflater.inflate(mTextReadingPreviewPreference.getLayoutResource(),
- new LinearLayout(context), false);
+ new LinearLayout(mContext), false);
mHolder = PreferenceViewHolder.createInstanceForTests(view);
mViewPager = view.findViewById(R.id.preview_pager);
+ mTextReadingPreviewPreference.setContentDescription(mPreviewContentDescriptions);
+ }
+
+ @Test
+ public void changePreviewPage_getExpectedContentDescription() {
+ mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
+ mTextReadingPreviewPreference.onBindViewHolder(mHolder);
+
+ // Verify the initial content description
+ assertThat(mViewPager.getContentDescription().toString())
+ .isEqualTo(mContext.getString(mPreviewContentDescriptions[0]));
+
+ // Change the preview page
+ mViewPager.setCurrentItem(1);
+ assertThat(mViewPager.getContentDescription().toString())
+ .isEqualTo(mContext.getString(mPreviewContentDescriptions[1]));
}
@Test