From 7549d613e633777bd2c65069c16b52db98e42521 Mon Sep 17 00:00:00 2001 From: Behnam Heydarshahi Date: Fri, 15 Sep 2023 19:18:43 +0000 Subject: [PATCH] Set a11y focus for selected Settings item When a Settings preference item is selected via a settings panel or settings search, the system takes user to its corresponding subsettings activity. There, in the past, the selected preference was highlighted but the a11y focus was set on the back button. This code sets the a11y focus on the selected preference. Bug: b/285512439 Test: atest HighlightablePreferenceGroupAdapterTest Change-Id: I7edc697e2e3870b1822279c115230add14e82df0 --- .../HighlightablePreferenceGroupAdapter.java | 3 +++ .../HighlightablePreferenceGroupAdapterTest.java | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java b/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java index a64ec89e332..a93a986ea2a 100644 --- a/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java +++ b/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java @@ -122,6 +122,9 @@ public class HighlightablePreferenceGroupAdapter extends PreferenceGroupAdapter && TextUtils.equals(mHighlightKey, getItem(position).getKey()))) { // This position should be highlighted. If it's highlighted before - skip animation. addHighlightBackground(holder, !mFadeInAnimated); + if (v != null) { + v.requestAccessibilityFocus(); + } } else if (Boolean.TRUE.equals(v.getTag(R.id.preference_highlighted))) { // View with highlight is reused for a view that should not have highlight removeHighlightBackground(holder, false /* animate */); diff --git a/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java b/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java index 00f2e19c28b..d6d5abf4cf5 100644 --- a/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java +++ b/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java @@ -174,6 +174,20 @@ public class HighlightablePreferenceGroupAdapterTest { assertThat(mViewHolder.itemView.getTag(R.id.preference_highlighted)).isNull(); } + /** + * When background is being updated, we also request the a11y focus on the preference + */ + @Test + public void updateBackground_shouldRequestAccessibilityFocus() { + View viewItem = mock(View.class); + mViewHolder = PreferenceViewHolder.createInstanceForTests(viewItem); + ReflectionHelpers.setField(mAdapter, "mHighlightPosition", 10); + + mAdapter.updateBackground(mViewHolder, 10); + + verify(viewItem).requestAccessibilityFocus(); + } + @Test public void updateBackground_highlight_shouldAnimateBackgroundAndSetHighlightedTag() { ReflectionHelpers.setField(mAdapter, "mHighlightPosition", 10);