[Wi-Fi][A11Y] Fix TalkBack lose focus in WifiSettings & WifiSettings2

Use stable ID feature of RecycleView to keep preference focus.

Bug: 126132618
Test: WifiSettingsTest
      WifiSettings2Test
      manual visual

Change-Id: Id73157b0935186c9a59d1ef68190d853f671ebc2
This commit is contained in:
Arc Wang
2019-10-31 14:39:27 +08:00
parent fe5b2d9624
commit f4d3ba1049
4 changed files with 40 additions and 0 deletions

View File

@@ -53,6 +53,8 @@ import android.widget.Toast;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.LinkifyUtils; import com.android.settings.LinkifyUtils;
import com.android.settings.R; import com.android.settings.R;
@@ -443,6 +445,13 @@ public class WifiSettings extends RestrictedSettingsFragment
} }
} }
@Override
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
final RecyclerView.Adapter adapter = super.onCreateAdapter(preferenceScreen);
adapter.setHasStableIds(true);
return adapter;
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return SettingsEnums.WIFI; return SettingsEnums.WIFI;

View File

@@ -48,6 +48,8 @@ import android.widget.Toast;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.LinkifyUtils; import com.android.settings.LinkifyUtils;
import com.android.settings.R; import com.android.settings.R;
@@ -367,6 +369,13 @@ public class WifiSettings2 extends RestrictedSettingsFragment
} }
} }
@Override
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
final RecyclerView.Adapter adapter = super.onCreateAdapter(preferenceScreen);
adapter.setHasStableIds(true);
return adapter;
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return SettingsEnums.WIFI; return SettingsEnums.WIFI;

View File

@@ -43,6 +43,8 @@ import android.provider.Settings;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.datausage.DataUsagePreference; import com.android.settings.datausage.DataUsagePreference;
@@ -263,6 +265,15 @@ public class WifiSettings2Test {
verify(mDataUsagePreference).setTemplate(any(), eq(0) /*subId*/, eq(null) /*service*/); verify(mDataUsagePreference).setTemplate(any(), eq(0) /*subId*/, eq(null) /*service*/);
} }
@Test
public void onCreateAdapter_hasStableIdsTrue() {
final PreferenceScreen preferenceScreen = mock(PreferenceScreen.class);
RecyclerView.Adapter adapter = mWifiSettings2.onCreateAdapter(preferenceScreen);
assertThat(adapter.hasStableIds()).isTrue();
}
// TODO(b/70983952): Add test for context menu // TODO(b/70983952): Add test for context menu
// @Test // @Test
// public void onCreateContextMenu_shouldHaveForgetMenuForConnectedAccessPreference() { // public void onCreateContextMenu_shouldHaveForgetMenuForConnectedAccessPreference() {

View File

@@ -45,6 +45,8 @@ import android.view.View;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.datausage.DataUsagePreference; import com.android.settings.datausage.DataUsagePreference;
@@ -291,4 +293,13 @@ public class WifiSettingsTest {
verify(menu).add(anyInt(), eq(WifiSettings.MENU_ID_FORGET), anyInt(), anyInt()); verify(menu).add(anyInt(), eq(WifiSettings.MENU_ID_FORGET), anyInt(), anyInt());
} }
@Test
public void onCreateAdapter_hasStableIdsTrue() {
final PreferenceScreen preferenceScreen = mock(PreferenceScreen.class);
RecyclerView.Adapter adapter = mWifiSettings.onCreateAdapter(preferenceScreen);
assertThat(adapter.hasStableIds()).isTrue();
}
} }