Merge "Extends the touch area for the switch in Master Switch preference."

This commit is contained in:
TreeHugger Robot
2017-03-13 21:26:29 +00:00
committed by Android (Google) Code Review
4 changed files with 41 additions and 25 deletions

View File

@@ -21,7 +21,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight" android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical" android:gravity="center_vertical"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:clipToPadding="false"> android:clipToPadding="false">
@@ -85,6 +84,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="end|center_vertical" android:gravity="end|center_vertical"
android:orientation="vertical"/> android:orientation="vertical"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"/>
</LinearLayout> </LinearLayout>

View File

@@ -36,6 +36,7 @@
<Switch android:id="@+id/switchWidget" <Switch android:id="@+id/switchWidget"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center_vertical" /> android:gravity="center_vertical"
android:clickable="false"/>
</LinearLayout> </LinearLayout>

View File

@@ -20,7 +20,8 @@ import android.content.Context;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.PreferenceViewHolder;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.CompoundButton; import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Switch; import android.widget.Switch;
import android.widget.TextView; import android.widget.TextView;
@@ -61,21 +62,24 @@ public class MasterSwitchPreference extends Preference {
@Override @Override
public void onBindViewHolder(PreferenceViewHolder holder) { public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder); super.onBindViewHolder(holder);
mSwitch = (Switch) holder.itemView.findViewById(R.id.switchWidget); final View widgetView = holder.itemView.findViewById(android.R.id.widget_frame);
if (mSwitch != null) { if (widgetView != null) {
mSwitch.setChecked(mChecked); widgetView.setOnClickListener(new OnClickListener() {
mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton button, boolean isChecked) { public void onClick(View v) {
if (!callChangeListener(isChecked)) { setChecked(!mChecked);
button.setChecked(!isChecked); if (!callChangeListener(mChecked)) {
setChecked(!mChecked);
} else { } else {
persistBoolean(isChecked); persistBoolean(mChecked);
mChecked = isChecked;
} }
} }
}); });
} }
mSwitch = (Switch) holder.itemView.findViewById(R.id.switchWidget);
if (mSwitch != null) {
mSwitch.setChecked(mChecked);
}
if (mMultiLine) { if (mMultiLine) {
TextView textView = (TextView)holder.findViewById(android.R.id.title); TextView textView = (TextView)holder.findViewById(android.R.id.title);
if (textView != null) { if (textView != null) {

View File

@@ -21,7 +21,10 @@ import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.PreferenceViewHolder;
import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.LinearLayout;
import android.widget.Switch; import android.widget.Switch;
import com.android.settings.R; import com.android.settings.R;
@@ -92,31 +95,39 @@ public class MasterSwitchPreferenceTest {
} }
@Test @Test
public void toggleButtonOn_shouldNotifyChecked() { public void clickWidgetView_shouldToggleButton() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
final LayoutInflater inflater = LayoutInflater.from(mContext);
final PreferenceViewHolder holder = new PreferenceViewHolder( 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 Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget);
final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class);
preference.setOnPreferenceChangeListener(listener);
preference.onBindViewHolder(holder); preference.onBindViewHolder(holder);
toggle.setChecked(true); widgetView.performClick();
verify(listener).onPreferenceChange(preference, true); assertThat(toggle.isChecked()).isTrue();
widgetView.performClick();
assertThat(toggle.isChecked()).isFalse();
} }
@Test @Test
public void toggleButtonOff_shouldNotifyUnchecked() { public void clickWidgetView_shouldNotifyPreferenceChanged() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
final PreferenceViewHolder holder = new PreferenceViewHolder( final PreferenceViewHolder holder = new PreferenceViewHolder(
LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); LayoutInflater.from(mContext).inflate(R.layout.preference_master_switch, null));
final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); final View widgetView = holder.itemView.findViewById(android.R.id.widget_frame);
final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class);
preference.setChecked(true);
preference.setOnPreferenceChangeListener(listener); preference.setOnPreferenceChangeListener(listener);
preference.onBindViewHolder(holder); 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); verify(listener).onPreferenceChange(preference, false);
} }
@@ -134,7 +145,7 @@ public class MasterSwitchPreferenceTest {
} }
@Test @Test
public void setDisabledByAdmin_noEnforcedAdmin_shouldEnaableButton() { public void setDisabledByAdmin_noEnforcedAdmin_shouldEnableButton() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
final PreferenceViewHolder holder = new PreferenceViewHolder( final PreferenceViewHolder holder = new PreferenceViewHolder(
LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null));