diff --git a/res/layout/preference_master_switch.xml b/res/layout/preference_master_switch.xml index 9f46d76093f..c7dd6d69693 100644 --- a/res/layout/preference_master_switch.xml +++ b/res/layout/preference_master_switch.xml @@ -21,7 +21,6 @@ android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:background="@android:color/transparent" android:clipToPadding="false"> @@ -85,6 +84,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="end|center_vertical" - android:orientation="vertical"/> + android:orientation="vertical" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"/> diff --git a/res/layout/preference_widget_master_switch.xml b/res/layout/preference_widget_master_switch.xml index bc1cafd3a73..ee335f173b3 100644 --- a/res/layout/preference_widget_master_switch.xml +++ b/res/layout/preference_widget_master_switch.xml @@ -36,6 +36,7 @@ + android:gravity="center_vertical" + android:clickable="false"/> diff --git a/src/com/android/settings/widget/MasterSwitchPreference.java b/src/com/android/settings/widget/MasterSwitchPreference.java index ba3458aa4e4..84f1532dab8 100644 --- a/src/com/android/settings/widget/MasterSwitchPreference.java +++ b/src/com/android/settings/widget/MasterSwitchPreference.java @@ -20,7 +20,8 @@ import android.content.Context; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.util.AttributeSet; -import android.widget.CompoundButton; +import android.view.View; +import android.view.View.OnClickListener; import android.widget.Switch; import android.widget.TextView; @@ -61,21 +62,24 @@ public class MasterSwitchPreference extends Preference { @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); - mSwitch = (Switch) holder.itemView.findViewById(R.id.switchWidget); - if (mSwitch != null) { - mSwitch.setChecked(mChecked); - mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + final View widgetView = holder.itemView.findViewById(android.R.id.widget_frame); + if (widgetView != null) { + widgetView.setOnClickListener(new OnClickListener() { @Override - public void onCheckedChanged(CompoundButton button, boolean isChecked) { - if (!callChangeListener(isChecked)) { - button.setChecked(!isChecked); + public void onClick(View v) { + setChecked(!mChecked); + if (!callChangeListener(mChecked)) { + setChecked(!mChecked); } else { - persistBoolean(isChecked); - mChecked = isChecked; + persistBoolean(mChecked); } } }); } + mSwitch = (Switch) holder.itemView.findViewById(R.id.switchWidget); + if (mSwitch != null) { + mSwitch.setChecked(mChecked); + } if (mMultiLine) { TextView textView = (TextView)holder.findViewById(android.R.id.title); if (textView != null) { diff --git a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java index 8cf33899ec2..7d2e24061b3 100644 --- a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java @@ -21,7 +21,10 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.LinearLayout; import android.widget.Switch; import com.android.settings.R; @@ -92,31 +95,39 @@ public class MasterSwitchPreferenceTest { } @Test - public void toggleButtonOn_shouldNotifyChecked() { + public void clickWidgetView_shouldToggleButton() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); + final LayoutInflater inflater = LayoutInflater.from(mContext); final PreferenceViewHolder holder = new PreferenceViewHolder( - LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); + inflater.inflate(R.layout.preference_master_switch, null)); + 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.itemView.findViewById(R.id.switchWidget); - final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); - preference.setOnPreferenceChangeListener(listener); preference.onBindViewHolder(holder); - toggle.setChecked(true); - verify(listener).onPreferenceChange(preference, true); + widgetView.performClick(); + assertThat(toggle.isChecked()).isTrue(); + + widgetView.performClick(); + assertThat(toggle.isChecked()).isFalse(); } @Test - public void toggleButtonOff_shouldNotifyUnchecked() { + public void clickWidgetView_shouldNotifyPreferenceChanged() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); final PreferenceViewHolder holder = new PreferenceViewHolder( - LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); - final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); + LayoutInflater.from(mContext).inflate(R.layout.preference_master_switch, null)); + final View widgetView = holder.itemView.findViewById(android.R.id.widget_frame); final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); - preference.setChecked(true); preference.setOnPreferenceChangeListener(listener); preference.onBindViewHolder(holder); - toggle.setChecked(false); + preference.setChecked(false); + widgetView.performClick(); + verify(listener).onPreferenceChange(preference, true); + + preference.setChecked(true); + widgetView.performClick(); verify(listener).onPreferenceChange(preference, false); } @@ -134,7 +145,7 @@ public class MasterSwitchPreferenceTest { } @Test - public void setDisabledByAdmin_noEnforcedAdmin_shouldEnaableButton() { + public void setDisabledByAdmin_noEnforcedAdmin_shouldEnableButton() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); final PreferenceViewHolder holder = new PreferenceViewHolder( LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null));