--- /dev/null
+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