From 72705675270600dcfe59cc197f7f66f6a6f39c47 Mon Sep 17 00:00:00 2001 From: Candice Date: Thu, 6 Mar 2025 07:11:19 +0000 Subject: [PATCH] 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 --- res/values/config.xml | 12 ++++- res/values/strings.xml | 6 +++ .../TextReadingPreviewController.java | 16 +++++++ .../TextReadingPreviewPreference.java | 45 +++++++++++-------- .../TextReadingPreviewControllerTest.java | 11 +++++ .../TextReadingPreviewPreferenceTest.java | 33 +++++++++++--- 6 files changed, 96 insertions(+), 27 deletions(-) diff --git a/res/values/config.xml b/res/values/config.xml index c20f08035c2..9d2e43df985 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -810,13 +810,23 @@ - + @layout/accessibility_text_reading_preview_app_grid @layout/screen_zoom_preview_1 @layout/accessibility_text_reading_preview_mail_content + + + @string/preview_pager_home_content_description + @string/preview_pager_message_content_description + @string/preview_pager_email_content_description + + com.android.vending diff --git a/res/values/strings.xml b/res/values/strings.xml index 2958559101a..b1771853929 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -78,6 +78,12 @@ Preview + + Home screen preview + + Message preview + + Email preview QR code diff --git a/src/com/android/settings/accessibility/TextReadingPreviewController.java b/src/com/android/settings/accessibility/TextReadingPreviewController.java index 99f1f3fa0c3..e268aaa981f 100644 --- a/src/com/android/settings/accessibility/TextReadingPreviewController.java +++ b/src/com/android/settings/accessibility/TextReadingPreviewController.java @@ -104,11 +104,13 @@ class TextReadingPreviewController extends BasePreferenceController implements 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 @@ class TextReadingPreviewController extends BasePreferenceController implements 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 99e71258b6f..513e2473647 100644 --- a/src/com/android/settings/accessibility/TextReadingPreviewPreference.java +++ b/src/com/android/settings/accessibility/TextReadingPreviewPreference.java @@ -43,28 +43,11 @@ public class TextReadingPreviewPreference extends Preference { 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 @@ public class TextReadingPreviewPreference extends Preference { 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 @@ public class TextReadingPreviewPreference extends Preference { 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 @@ public class TextReadingPreviewPreference extends Preference { ); } + 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 375952f725c..81c869d5063 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; @@ -76,6 +78,15 @@ public class TextReadingPreviewControllerTest { mDisplaySizePreference = new AccessibilitySeekBarPreference(mContext, /* attr= */ null); } + @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); diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewPreferenceTest.java index 4ca1dca3de5..9cd8fa232c5 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 @@ import org.robolectric.RobolectricTestRunner; */ @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