Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / view / VerticalSeekbar.java
diff --git a/Android/folioreader/src/main/java/com/folioreader/view/VerticalSeekbar.java b/Android/folioreader/src/main/java/com/folioreader/view/VerticalSeekbar.java
new file mode 100755 (executable)
index 0000000..62d1ab8
--- /dev/null
@@ -0,0 +1,123 @@
+package com.folioreader.view;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.support.v7.widget.AppCompatSeekBar;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+/**
+ * Created by priyank on 4/19/16.
+ */
+
+public class VerticalSeekbar extends AppCompatSeekBar {
+
+    public VerticalSeekbar(Context context) {
+        super(context);
+    }
+
+    public VerticalSeekbar(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public VerticalSeekbar(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(h, w, oldh, oldw);
+    }
+
+    @Override
+    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(heightMeasureSpec, widthMeasureSpec);
+        setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
+    }
+
+    protected void onDraw(Canvas c) {
+        c.rotate(90);
+        c.translate(0, -getWidth());
+
+        super.onDraw(c);
+    }
+
+    private OnSeekBarChangeListener mOnChangeListener;
+
+    @Override
+    public void setOnSeekBarChangeListener(OnSeekBarChangeListener mOnChangeListener) {
+        this.mOnChangeListener = mOnChangeListener;
+    }
+
+    private int mLastProgress = 0;
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (!isEnabled()) {
+            return false;
+        }
+
+        switch (event.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+                if (mOnChangeListener != null)
+                    mOnChangeListener.onStartTrackingTouch(this);
+                setPressed(true);
+                setSelected(true);
+                break;
+            case MotionEvent.ACTION_MOVE:
+                super.onTouchEvent(event);
+                int progress = getMax() - (int) (getMax() * event.getY() / getHeight());
+
+                // Ensure progress stays within boundaries
+                if (progress < 0) {
+                    progress = 0;
+                }
+                if (progress > getMax()) {
+                    progress = getMax();
+                }
+                setProgress(progress);  // Draw progress
+                if (progress != mLastProgress) {
+                    // Only enact listener if the progress has actually changed
+                    mLastProgress = progress;
+                    if (mOnChangeListener != null)
+                        mOnChangeListener.onProgressChanged(this, progress, true);
+                }
+
+                onSizeChanged(getWidth(), getHeight(), 0, 0);
+                setPressed(true);
+                setSelected(true);
+                break;
+            case MotionEvent.ACTION_UP:
+                if (mOnChangeListener != null)
+                    mOnChangeListener.onStopTrackingTouch(this);
+                setPressed(false);
+                setSelected(false);
+                break;
+            case MotionEvent.ACTION_CANCEL:
+                super.onTouchEvent(event);
+                setPressed(false);
+                setSelected(false);
+                break;
+        }
+        return true;
+    }
+
+    public synchronized void setProgressAndThumb(int progress) {
+        setProgress(progress);
+        onSizeChanged(getWidth(), getHeight(), 0, 0);
+        if (progress != mLastProgress) {
+            // Only enact listener if the progress has actually changed
+            mLastProgress = progress;
+            if (mOnChangeListener != null)
+                mOnChangeListener.onProgressChanged(this, progress, true);
+        }
+    }
+
+    public synchronized void setMaximum(int maximum) {
+        setMax(maximum);
+    }
+
+    public synchronized int getMaximum() {
+        return getMax();
+    }
+
+}