diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml index 1eee0cb8a77..30a57a24bb7 100644 --- a/res/xml/app_notification_settings.xml +++ b/res/xml/app_notification_settings.xml @@ -21,7 +21,8 @@ + android:layout="@layout/settings_entity_header" + android:selectable="false" /> diff --git a/src/com/android/settings/widget/SettingsMainSwitchPreference.java b/src/com/android/settings/widget/SettingsMainSwitchPreference.java index 5e0a5a722e7..046320fe376 100644 --- a/src/com/android/settings/widget/SettingsMainSwitchPreference.java +++ b/src/com/android/settings/widget/SettingsMainSwitchPreference.java @@ -240,6 +240,11 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements if (mMainSwitchBar != null) { mMainSwitchBar.setTitle(getTitle()); mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin); + + // Disable the focusability of the switch bar. The parent FrameLayout + // will be the only focusable view for the Main Switch Bar to avoid + // duplicate a11y focus. + mMainSwitchBar.setFocusable(false); } } diff --git a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java index a5ebdade033..498a2c2b9df 100644 --- a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java @@ -41,6 +41,7 @@ public class SettingsMainSwitchPreferenceTest { private EnforcedAdmin mEnforcedAdmin; private SettingsMainSwitchPreference mPreference; private PreferenceViewHolder mHolder; + private View mRootView; @Before public void setUp() { @@ -50,9 +51,9 @@ public class SettingsMainSwitchPreferenceTest { mPreference = new SettingsMainSwitchPreference(context); ReflectionHelpers.setField(mPreference, "mEnforcedAdmin", mEnforcedAdmin); ReflectionHelpers.setField(mPreference, "mMainSwitchBar", switchBar); - final View rootView = View.inflate(context, com.android.settings.R.layout.preference_widget_main_switch, + mRootView = View.inflate(context, com.android.settings.R.layout.preference_widget_main_switch, null /* parent */); - mHolder = PreferenceViewHolder.createInstanceForTests(rootView); + mHolder = PreferenceViewHolder.createInstanceForTests(mRootView); } @Test @@ -74,4 +75,22 @@ public class SettingsMainSwitchPreferenceTest { assertThat(mPreference.isShowing()).isFalse(); assertThat(mPreference.isVisible()).isFalse(); } + + @Test + public void focusability_mainSwitchBarIsNotFocusable() { + mPreference.show(); + + mPreference.onBindViewHolder(mHolder); + + assertThat(mPreference.getSwitchBar().isFocusable()).isFalse(); + } + + @Test + public void focusability_mainSwitchBarFrameLayoutIsFocusable() { + mPreference.show(); + + mPreference.onBindViewHolder(mHolder); + + assertThat(mRootView.isFocusable()).isTrue(); + } }