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
diff --git a/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java b/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java
index a64ec89..a93a986 100644
--- a/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java
+++ b/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java
@@ -122,6 +122,9 @@
                 && 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 00f2e19..d6d5abf 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 @@
         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);