diff options
| -rw-r--r-- | core/java/android/preference/SwitchPreference.java | 20 | ||||
| -rw-r--r-- | core/res/res/layout/preference_widget_switch.xml | 3 |
2 files changed, 9 insertions, 14 deletions
diff --git a/core/java/android/preference/SwitchPreference.java b/core/java/android/preference/SwitchPreference.java index 17f0c1bf7d5b..8bac6bddc8ec 100644 --- a/core/java/android/preference/SwitchPreference.java +++ b/core/java/android/preference/SwitchPreference.java @@ -41,14 +41,16 @@ public class SwitchPreference extends TwoStatePreference { private CharSequence mSwitchOff; private final Listener mListener = new Listener(); - private class Listener implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { - @Override - public void onClick(View v) { - SwitchPreference.this.onClick(); - } - + private class Listener implements CompoundButton.OnCheckedChangeListener { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (!callChangeListener(isChecked)) { + // Listener didn't like it, change it back. + // CompoundButton will make sure we don't recurse. + buttonView.setChecked(!isChecked); + return; + } + SwitchPreference.this.setChecked(isChecked); } } @@ -111,12 +113,6 @@ public class SwitchPreference extends TwoStatePreference { switchView.setTextOff(mSwitchOff); switchView.setOnCheckedChangeListener(mListener); } - - if (checkableView.hasFocusable()) { - // This is a focusable list item. Attach a click handler to toggle the button - // for the rest of the item. - view.setOnClickListener(mListener); - } } syncSummaryView(view); diff --git a/core/res/res/layout/preference_widget_switch.xml b/core/res/res/layout/preference_widget_switch.xml index ed4ed57c54c0..83ef0975bcf4 100644 --- a/core/res/res/layout/preference_widget_switch.xml +++ b/core/res/res/layout/preference_widget_switch.xml @@ -22,5 +22,4 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:padding="16dip" - android:focusable="false" - android:clickable="false" /> + android:focusable="false" /> |