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}