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