diff options
| author | 2017-11-25 23:05:39 -0600 | |
|---|---|---|
| committer | 2017-11-25 23:05:39 -0600 | |
| commit | 283340f5dcd74f8a6fc3545f567cf1c2f6256318 (patch) | |
| tree | a5edae07c32d0c946ad82230a80102a7cc87e338 /app/src/main/java/com/wireguard/android/widgets/ToggleSwitch.java | |
| parent | widgets: Import ToggleSwitch from the AOSP Settings app (diff) | |
| download | wireguard-android-283340f5dcd74f8a6fc3545f567cf1c2f6256318.tar.xz wireguard-android-283340f5dcd74f8a6fc3545f567cf1c2f6256318.zip | |
ConfigList: A better toggle switch
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'app/src/main/java/com/wireguard/android/widgets/ToggleSwitch.java')
| -rw-r--r-- | app/src/main/java/com/wireguard/android/widgets/ToggleSwitch.java | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/app/src/main/java/com/wireguard/android/widgets/ToggleSwitch.java b/app/src/main/java/com/wireguard/android/widgets/ToggleSwitch.java index 25bb1092..667cfe53 100644 --- a/app/src/main/java/com/wireguard/android/widgets/ToggleSwitch.java +++ b/app/src/main/java/com/wireguard/android/widgets/ToggleSwitch.java @@ -21,43 +21,52 @@ import android.util.AttributeSet; import android.widget.Switch; public class ToggleSwitch extends Switch { + private boolean hasPendingStateChange; + private OnBeforeCheckedChangeListener listener; - private ToggleSwitch.OnBeforeCheckedChangeListener mOnBeforeListener; - - public static interface OnBeforeCheckedChangeListener { - public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked); + public interface OnBeforeCheckedChangeListener { + void onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked); } - public ToggleSwitch(Context context) { + public ToggleSwitch(final Context context) { super(context); } - public ToggleSwitch(Context context, AttributeSet attrs) { + public ToggleSwitch(final Context context, final AttributeSet attrs) { super(context, attrs); } - public ToggleSwitch(Context context, AttributeSet attrs, int defStyleAttr) { + public ToggleSwitch(final Context context, final AttributeSet attrs, final int defStyleAttr) { super(context, attrs, defStyleAttr); } - public ToggleSwitch(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + public ToggleSwitch(final Context context, final AttributeSet attrs, final int defStyleAttr, + final int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } - public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) { - mOnBeforeListener = listener; + public void setOnBeforeCheckedChangeListener(final OnBeforeCheckedChangeListener listener) { + this.listener = listener; } @Override - public void setChecked(boolean checked) { - if (mOnBeforeListener != null - && mOnBeforeListener.onBeforeCheckedChanged(this, checked)) { - return; + public void setChecked(final boolean checked) { + if (listener != null) { + if (!isEnabled()) + return; + setEnabled(false); + hasPendingStateChange = true; + listener.onBeforeCheckedChanged(this, checked); + } else { + super.setChecked(checked); } - super.setChecked(checked); } - public void setCheckedInternal(boolean checked) { + public void setCheckedInternal(final boolean checked) { + if (hasPendingStateChange) { + setEnabled(true); + hasPendingStateChange = false; + } super.setChecked(checked); } } |
