[A11Y] Fix MasterSwitchPreference onClick not callback after TalkBack is enabled
TalkBack service dispatches onClick event to the Switch component instead of the LinearLayout wrapping it. Do all the onClick tasks for the Switch component instead of the LinearLayout wrapping it. Bug: 142570671 Test: MasterSwitchPreferenceTest Manual click the toggle button for both TalkBack enabled case and disabled case. Change-Id: I4b2f9df309d03a477863445cd187384cdb61314b
This commit is contained in:
@@ -63,9 +63,9 @@ public class MasterSwitchPreference extends TwoTargetPreference {
|
||||
@Override
|
||||
public void onBindViewHolder(PreferenceViewHolder holder) {
|
||||
super.onBindViewHolder(holder);
|
||||
final View widgetView = holder.findViewById(android.R.id.widget_frame);
|
||||
if (widgetView != null) {
|
||||
widgetView.setOnClickListener(new OnClickListener() {
|
||||
final View switchWidget = holder.findViewById(R.id.switchWidget);
|
||||
if (switchWidget != null) {
|
||||
switchWidget.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mSwitch != null && !mSwitch.isEnabled()) {
|
||||
|
@@ -23,7 +23,6 @@ import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Switch;
|
||||
|
||||
@@ -115,10 +114,10 @@ public class MasterSwitchPreferenceTest {
|
||||
final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget);
|
||||
preference.onBindViewHolder(holder);
|
||||
|
||||
widgetView.performClick();
|
||||
toggle.performClick();
|
||||
assertThat(toggle.isChecked()).isTrue();
|
||||
|
||||
widgetView.performClick();
|
||||
toggle.performClick();
|
||||
assertThat(toggle.isChecked()).isFalse();
|
||||
}
|
||||
|
||||
@@ -143,19 +142,23 @@ public class MasterSwitchPreferenceTest {
|
||||
@Test
|
||||
public void clickWidgetView_shouldNotifyPreferenceChanged() {
|
||||
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
|
||||
final LayoutInflater inflater = LayoutInflater.from(mContext);
|
||||
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
|
||||
LayoutInflater.from(mContext).inflate(R.layout.preference_two_target, null));
|
||||
final View widgetView = holder.findViewById(android.R.id.widget_frame);
|
||||
final LinearLayout widgetView = holder.itemView.findViewById(android.R.id.widget_frame);
|
||||
inflater.inflate(R.layout.preference_widget_master_switch, widgetView, true);
|
||||
final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget);
|
||||
|
||||
final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class);
|
||||
preference.setOnPreferenceChangeListener(listener);
|
||||
preference.onBindViewHolder(holder);
|
||||
|
||||
preference.setChecked(false);
|
||||
widgetView.performClick();
|
||||
toggle.performClick();
|
||||
verify(listener).onPreferenceChange(preference, true);
|
||||
|
||||
preference.setChecked(true);
|
||||
widgetView.performClick();
|
||||
toggle.performClick();
|
||||
verify(listener).onPreferenceChange(preference, false);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user