Switch.java

 1package eu.siacs.conversations.ui.widget;
 2
 3import android.content.Context;
 4import android.util.AttributeSet;
 5import android.view.MotionEvent;
 6import android.view.ViewConfiguration;
 7
 8import com.kyleduo.switchbutton.SwitchButton;
 9
10public class Switch extends SwitchButton {
11
12	private int mTouchSlop;
13	private int mClickTimeout;
14	private float mStartX;
15	private float mStartY;
16	private OnClickListener mOnClickListener;
17
18	public Switch(Context context) {
19		super(context);
20		mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
21		mClickTimeout = ViewConfiguration.getPressedStateDuration() + ViewConfiguration.getTapTimeout();
22	}
23
24	public Switch(Context context, AttributeSet attrs) {
25		super(context, attrs);
26		mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
27		mClickTimeout = ViewConfiguration.getPressedStateDuration() + ViewConfiguration.getTapTimeout();
28	}
29
30	public Switch(Context context, AttributeSet attrs, int defStyle) {
31		super(context, attrs, defStyle);
32		mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
33		mClickTimeout = ViewConfiguration.getPressedStateDuration() + ViewConfiguration.getTapTimeout();
34	}
35
36	@Override
37	public void setOnClickListener(OnClickListener onClickListener) {
38		this.mOnClickListener = onClickListener;
39	}
40
41	@Override
42	public boolean onTouchEvent(MotionEvent event) {
43		if (!isEnabled()) {
44			float deltaX = event.getX() - mStartX;
45			float deltaY = event.getY() - mStartY;
46			int action = event.getAction();
47			switch (action) {
48				case MotionEvent.ACTION_DOWN:
49					mStartX = event.getX();
50					mStartY = event.getY();
51					break;
52				case MotionEvent.ACTION_CANCEL:
53				case MotionEvent.ACTION_UP:
54					float time = event.getEventTime() - event.getDownTime();
55					if (deltaX < mTouchSlop && deltaY < mTouchSlop && time < mClickTimeout) {
56						if (mOnClickListener != null) {
57							this.mOnClickListener.onClick(this);
58						}
59					}
60					break;
61				default:
62					break;
63			}
64			return true;
65		}
66		return super.onTouchEvent(event);
67	}
68}