From 466ee402bf93830b237cd24182279af0eac02046 Mon Sep 17 00:00:00 2001 From: menghanli Date: Fri, 11 Mar 2022 06:30:34 +0800 Subject: [PATCH] Fix no response after Talkback users double-tap on Learn more in Accessibility pages Root cause: The ag/16569955 to fix unknown items issue when using Switch Access by grouping of related content. The design change impacts AccessibilityFooterPreference#setLinkEnabled that call TextView#setMovementMethod to change components can be focusable to break the grouping relation. Solution: Reset summary view to nonFocusable after applied TextView#setMovementMethod. Bug: 221342261 Bug: 221339524 Bug: 223526982 Bug: 215792117 Bug: 215792876 Test: make RunSettingsRoboTests ROBOTEST_FILTER=AccessibilityFooterPreferenceControllerTest AccessibilityFooterPreferenceTest ToggleFeaturePreferenceFragmentTest Change-Id: I4a051ea036ded264ee7bf615375177db796f74c7 --- .../AccessibilityFooterPreference.java | 14 ++++++++------ .../AccessibilityFooterPreferenceController.java | 3 +++ ...ccessibilityFooterPreferenceControllerTest.java | 12 ++++++++++++ .../AccessibilityFooterPreferenceTest.java | 11 +++++++++++ .../ToggleFeaturePreferenceFragmentTest.java | 2 +- 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/accessibility/AccessibilityFooterPreference.java b/src/com/android/settings/accessibility/AccessibilityFooterPreference.java index 67b78273e3b..fd9b6f8bae8 100644 --- a/src/com/android/settings/accessibility/AccessibilityFooterPreference.java +++ b/src/com/android/settings/accessibility/AccessibilityFooterPreference.java @@ -25,9 +25,7 @@ import androidx.preference.PreferenceViewHolder; import com.android.settingslib.widget.FooterPreference; -/** - * A custom preference acting as footer of a page. Disables the movement method by default. - */ +/** A custom preference acting as footer of a page. Disables the movement method by default. */ public final class AccessibilityFooterPreference extends FooterPreference { private boolean mLinkEnabled; @@ -46,12 +44,16 @@ public final class AccessibilityFooterPreference extends FooterPreference { final TextView title = holder.itemView.findViewById(android.R.id.title); if (mLinkEnabled) { - // When a TextView has a movement method, it will set the view to clickable. This makes - // View.onTouchEvent always return true and consumes the touch event, essentially - // nullifying any return values of MovementMethod.onTouchEvent. + // When a TextView has a movement method, it will set the view to focusable and + // clickable. This makes View.onTouchEvent always return true and consumes the touch + // event, essentially nullifying any return values of MovementMethod.onTouchEvent. // To still allow propagating touch events to the parent when this view doesn't have // links, we only set the movement method here if the text contains links. title.setMovementMethod(LinkMovementMethod.getInstance()); + + // Groups of related title and link content by making the container focusable, + // then make all the children inside not focusable. + title.setFocusable(false); } else { title.setMovementMethod(/* movement= */ null); } diff --git a/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java index c22b11e725a..a422eb8fa9d 100644 --- a/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java +++ b/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java @@ -122,5 +122,8 @@ public class AccessibilityFooterPreferenceController extends BasePreferenceContr } else { footerPreference.setLinkEnabled(false); } + + // Grouping subcomponents to make more accessible. + footerPreference.setSelectable(false); } } diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java index cc8520b9745..cce240dfe61 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java @@ -121,4 +121,16 @@ public class AccessibilityFooterPreferenceControllerTest { assertThat(learnMoreView.getVisibility()).isEqualTo(View.GONE); assertThat(mPreference.isLinkEnabled()).isFalse(); } + + @Test + public void onBindViewHolder_setHelpResource_expectSummaryViewIsNonFocusable() { + mController.setupHelpLink(R.string.help_url_timeout, TEST_CONTENT_DESCRIPTION); + mController.displayPreference(mScreen); + + mPreference.onBindViewHolder(mPreferenceViewHolder); + + final TextView summaryView = (TextView) mPreferenceViewHolder + .findViewById(android.R.id.title); + assertThat(summaryView.isFocusable()).isFalse(); + } } diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceTest.java index 14c56e84726..0f83bc3a254 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceTest.java @@ -71,4 +71,15 @@ public final class AccessibilityFooterPreferenceTest { android.R.id.title); assertThat(summaryView.getMovementMethod()).isInstanceOf(MovementMethod.class); } + + @Test + public void onBindViewHolder_setLinkEnabled_expectSummaryViewIsNonFocusable() { + mAccessibilityFooterPreference.setLinkEnabled(true); + + mAccessibilityFooterPreference.onBindViewHolder(mPreferenceViewHolder); + + final TextView summaryView = (TextView) mPreferenceViewHolder.findViewById( + android.R.id.title); + assertThat(summaryView.isFocusable()).isFalse(); + } } diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java index 04018a6b6d7..114f96985cf 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java @@ -322,7 +322,7 @@ public class ToggleFeaturePreferenceFragmentTest { (AccessibilityFooterPreference) mFragment.getPreferenceScreen().getPreference( mFragment.getPreferenceScreen().getPreferenceCount() - 1); assertThat(accessibilityFooterPreference.getSummary()).isEqualTo(DEFAULT_SUMMARY); - assertThat(accessibilityFooterPreference.isSelectable()).isEqualTo(true); + assertThat(accessibilityFooterPreference.isSelectable()).isEqualTo(false); assertThat(accessibilityFooterPreference.getOrder()).isEqualTo(Integer.MAX_VALUE - 1); }