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}