Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / view / ObservableWebView.java
diff --git a/Android/folioreader/src/main/java/com/folioreader/view/ObservableWebView.java b/Android/folioreader/src/main/java/com/folioreader/view/ObservableWebView.java
new file mode 100755 (executable)
index 0000000..afae6c3
--- /dev/null
@@ -0,0 +1,172 @@
+package com.folioreader.view;\r
+\r
+import android.annotation.TargetApi;\r
+import android.content.Context;\r
+import android.os.Build;\r
+import android.util.AttributeSet;\r
+import android.view.ActionMode;\r
+import android.view.Menu;\r
+import android.view.MenuInflater;\r
+import android.view.MotionEvent;\r
+import android.view.View;\r
+import android.webkit.WebView;\r
+\r
+/**\r
+ * Created by mahavir on 3/31/16.\r
+ */\r
+public class ObservableWebView extends WebView {\r
+\r
+    private float mDownPosX = 0;\r
+    private float mDownPosY = 0;\r
+\r
+    public interface ScrollListener {\r
+        void onScrollChange(int percent);\r
+    }\r
+\r
+    public interface SeekBarListener {\r
+        void fadeInSeekBarIfInvisible();\r
+    }\r
+\r
+    public interface ToolBarListener {\r
+        void hideOrshowToolBar();\r
+        void hideToolBarIfVisible();\r
+    }\r
+\r
+    private ScrollListener mScrollListener;\r
+    private SeekBarListener mSeekBarListener;\r
+    private ToolBarListener mToolBarListener;\r
+\r
+    public ObservableWebView(Context context) {\r
+        super(context);\r
+    }\r
+\r
+    public ObservableWebView(Context context, AttributeSet attrs) {\r
+        super(context, attrs);\r
+    }\r
+\r
+    public ObservableWebView(Context context, AttributeSet attrs, int defStyleAttr) {\r
+        super(context, attrs, defStyleAttr);\r
+    }\r
+\r
+    @TargetApi(Build.VERSION_CODES.LOLLIPOP)\r
+    public ObservableWebView(Context context, AttributeSet attrs,\r
+                             int defStyleAttr, int defStyleRes) {\r
+        super(context, attrs, defStyleAttr, defStyleRes);\r
+    }\r
+\r
+    public void setScrollListener(ScrollListener listener) {\r
+        mScrollListener = listener;\r
+    }\r
+\r
+    public void setSeekBarListener(SeekBarListener listener) {\r
+        mSeekBarListener = listener;\r
+    }\r
+\r
+    public void setToolBarListener(ToolBarListener listener) {\r
+        mToolBarListener = listener;\r
+    }\r
+\r
+    @Override\r
+    public boolean onTouchEvent(MotionEvent event) {\r
+        final int action = event.getAction();\r
+        float MOVE_THRESHOLD_DP = 20 * getResources().getDisplayMetrics().density;\r
+\r
+        switch (action) {\r
+            case MotionEvent.ACTION_DOWN:\r
+                mDownPosX = event.getX();\r
+                mDownPosY = event.getY();\r
+                if (mSeekBarListener != null) mSeekBarListener.fadeInSeekBarIfInvisible();\r
+                break;\r
+            case MotionEvent.ACTION_UP:\r
+                if (mToolBarListener != null &&\r
+                        (Math.abs(event.getX() - mDownPosX) < MOVE_THRESHOLD_DP\r
+                                || Math.abs(event.getY() - mDownPosY) < MOVE_THRESHOLD_DP)) {\r
+                    mToolBarListener.hideOrshowToolBar();\r
+                }\r
+                break;\r
+        }\r
+        return super.onTouchEvent(event);\r
+    }\r
+\r
+    @Override\r
+    protected void onScrollChanged(int l, int t, int oldl, int oldt) {\r
+        if (mToolBarListener != null) mToolBarListener.hideToolBarIfVisible();\r
+        if (mScrollListener != null) mScrollListener.onScrollChange(t);\r
+        super.onScrollChanged(l, t, oldl, oldt);\r
+    }\r
+\r
+    public int getContentHeightVal() {\r
+        return (int) Math.floor(this.getContentHeight() * this.getScale());\r
+    }\r
+\r
+    public int getWebViewHeight() {\r
+        return this.getMeasuredHeight();\r
+    }\r
+\r
+    @Override\r
+    public ActionMode startActionMode(ActionMode.Callback callback, int type) {\r
+        return this.dummyActionMode();\r
+    }\r
+\r
+    @Override\r
+    public ActionMode startActionMode(ActionMode.Callback callback) {\r
+        return this.dummyActionMode();\r
+    }\r
+\r
+    public ActionMode dummyActionMode() {\r
+        return new ActionMode() {\r
+            @Override\r
+            public void setTitle(CharSequence title) {\r
+            }\r
+\r
+            @Override\r
+            public void setTitle(int resId) {\r
+            }\r
+\r
+            @Override\r
+            public void setSubtitle(CharSequence subtitle) {\r
+            }\r
+\r
+            @Override\r
+            public void setSubtitle(int resId) {\r
+            }\r
+\r
+            @Override\r
+            public void setCustomView(View view) {\r
+            }\r
+\r
+            @Override\r
+            public void invalidate() {\r
+            }\r
+\r
+            @Override\r
+            public void finish() {\r
+            }\r
+\r
+            @Override\r
+            public Menu getMenu() {\r
+                return null;\r
+            }\r
+\r
+            @Override\r
+            public CharSequence getTitle() {\r
+                return null;\r
+            }\r
+\r
+            @Override\r
+            public CharSequence getSubtitle() {\r
+                return null;\r
+            }\r
+\r
+            @Override\r
+            public View getCustomView() {\r
+                return null;\r
+            }\r
+\r
+            @Override\r
+            public MenuInflater getMenuInflater() {\r
+                return null;\r
+            }\r
+        };\r
+    }\r
+}\r