Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / view / VerticalSeekbar.java
1 package com.folioreader.view;
2
3 import android.content.Context;
4 import android.graphics.Canvas;
5 import android.support.v7.widget.AppCompatSeekBar;
6 import android.util.AttributeSet;
7 import android.view.MotionEvent;
8
9 /**
10  * Created by priyank on 4/19/16.
11  */
12
13 public class VerticalSeekbar extends AppCompatSeekBar {
14
15     public VerticalSeekbar(Context context) {
16         super(context);
17     }
18
19     public VerticalSeekbar(Context context, AttributeSet attrs, int defStyle) {
20         super(context, attrs, defStyle);
21     }
22
23     public VerticalSeekbar(Context context, AttributeSet attrs) {
24         super(context, attrs);
25     }
26
27     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
28         super.onSizeChanged(h, w, oldh, oldw);
29     }
30
31     @Override
32     protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
33         super.onMeasure(heightMeasureSpec, widthMeasureSpec);
34         setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
35     }
36
37     protected void onDraw(Canvas c) {
38         c.rotate(90);
39         c.translate(0, -getWidth());
40
41         super.onDraw(c);
42     }
43
44     private OnSeekBarChangeListener mOnChangeListener;
45
46     @Override
47     public void setOnSeekBarChangeListener(OnSeekBarChangeListener mOnChangeListener) {
48         this.mOnChangeListener = mOnChangeListener;
49     }
50
51     private int mLastProgress = 0;
52
53     @Override
54     public boolean onTouchEvent(MotionEvent event) {
55         if (!isEnabled()) {
56             return false;
57         }
58
59         switch (event.getAction()) {
60             case MotionEvent.ACTION_DOWN:
61                 if (mOnChangeListener != null)
62                     mOnChangeListener.onStartTrackingTouch(this);
63                 setPressed(true);
64                 setSelected(true);
65                 break;
66             case MotionEvent.ACTION_MOVE:
67                 super.onTouchEvent(event);
68                 int progress = getMax() - (int) (getMax() * event.getY() / getHeight());
69
70                 // Ensure progress stays within boundaries
71                 if (progress < 0) {
72                     progress = 0;
73                 }
74                 if (progress > getMax()) {
75                     progress = getMax();
76                 }
77                 setProgress(progress);  // Draw progress
78                 if (progress != mLastProgress) {
79                     // Only enact listener if the progress has actually changed
80                     mLastProgress = progress;
81                     if (mOnChangeListener != null)
82                         mOnChangeListener.onProgressChanged(this, progress, true);
83                 }
84
85                 onSizeChanged(getWidth(), getHeight(), 0, 0);
86                 setPressed(true);
87                 setSelected(true);
88                 break;
89             case MotionEvent.ACTION_UP:
90                 if (mOnChangeListener != null)
91                     mOnChangeListener.onStopTrackingTouch(this);
92                 setPressed(false);
93                 setSelected(false);
94                 break;
95             case MotionEvent.ACTION_CANCEL:
96                 super.onTouchEvent(event);
97                 setPressed(false);
98                 setSelected(false);
99                 break;
100         }
101         return true;
102     }
103
104     public synchronized void setProgressAndThumb(int progress) {
105         setProgress(progress);
106         onSizeChanged(getWidth(), getHeight(), 0, 0);
107         if (progress != mLastProgress) {
108             // Only enact listener if the progress has actually changed
109             mLastProgress = progress;
110             if (mOnChangeListener != null)
111                 mOnChangeListener.onProgressChanged(this, progress, true);
112         }
113     }
114
115     public synchronized void setMaximum(int maximum) {
116         setMax(maximum);
117     }
118
119     public synchronized int getMaximum() {
120         return getMax();
121     }
122
123 }