1 package com.folioreader.view;
\r
3 import android.annotation.TargetApi;
\r
4 import android.content.Context;
\r
5 import android.os.Build;
\r
6 import android.util.AttributeSet;
\r
7 import android.view.ActionMode;
\r
8 import android.view.Menu;
\r
9 import android.view.MenuInflater;
\r
10 import android.view.MotionEvent;
\r
11 import android.view.View;
\r
12 import android.webkit.WebView;
\r
15 * Created by mahavir on 3/31/16.
\r
17 public class ObservableWebView extends WebView {
\r
19 private float mDownPosX = 0;
\r
20 private float mDownPosY = 0;
\r
22 public interface ScrollListener {
\r
23 void onScrollChange(int percent);
\r
26 public interface SeekBarListener {
\r
27 void fadeInSeekBarIfInvisible();
\r
30 public interface ToolBarListener {
\r
31 void hideOrshowToolBar();
\r
32 void hideToolBarIfVisible();
\r
35 private ScrollListener mScrollListener;
\r
36 private SeekBarListener mSeekBarListener;
\r
37 private ToolBarListener mToolBarListener;
\r
39 public ObservableWebView(Context context) {
\r
43 public ObservableWebView(Context context, AttributeSet attrs) {
\r
44 super(context, attrs);
\r
47 public ObservableWebView(Context context, AttributeSet attrs, int defStyleAttr) {
\r
48 super(context, attrs, defStyleAttr);
\r
51 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
\r
52 public ObservableWebView(Context context, AttributeSet attrs,
\r
53 int defStyleAttr, int defStyleRes) {
\r
54 super(context, attrs, defStyleAttr, defStyleRes);
\r
57 public void setScrollListener(ScrollListener listener) {
\r
58 mScrollListener = listener;
\r
61 public void setSeekBarListener(SeekBarListener listener) {
\r
62 mSeekBarListener = listener;
\r
65 public void setToolBarListener(ToolBarListener listener) {
\r
66 mToolBarListener = listener;
\r
70 public boolean onTouchEvent(MotionEvent event) {
\r
71 final int action = event.getAction();
\r
72 float MOVE_THRESHOLD_DP = 20 * getResources().getDisplayMetrics().density;
\r
75 case MotionEvent.ACTION_DOWN:
\r
76 mDownPosX = event.getX();
\r
77 mDownPosY = event.getY();
\r
78 if (mSeekBarListener != null) mSeekBarListener.fadeInSeekBarIfInvisible();
\r
80 case MotionEvent.ACTION_UP:
\r
81 if (mToolBarListener != null &&
\r
82 (Math.abs(event.getX() - mDownPosX) < MOVE_THRESHOLD_DP
\r
83 || Math.abs(event.getY() - mDownPosY) < MOVE_THRESHOLD_DP)) {
\r
84 mToolBarListener.hideOrshowToolBar();
\r
88 return super.onTouchEvent(event);
\r
92 protected void onScrollChanged(int l, int t, int oldl, int oldt) {
\r
93 if (mToolBarListener != null) mToolBarListener.hideToolBarIfVisible();
\r
94 if (mScrollListener != null) mScrollListener.onScrollChange(t);
\r
95 super.onScrollChanged(l, t, oldl, oldt);
\r
98 public int getContentHeightVal() {
\r
99 return (int) Math.floor(this.getContentHeight() * this.getScale());
\r
102 public int getWebViewHeight() {
\r
103 return this.getMeasuredHeight();
\r
107 public ActionMode startActionMode(ActionMode.Callback callback, int type) {
\r
108 return this.dummyActionMode();
\r
112 public ActionMode startActionMode(ActionMode.Callback callback) {
\r
113 return this.dummyActionMode();
\r
116 public ActionMode dummyActionMode() {
\r
117 return new ActionMode() {
\r
119 public void setTitle(CharSequence title) {
\r
123 public void setTitle(int resId) {
\r
127 public void setSubtitle(CharSequence subtitle) {
\r
131 public void setSubtitle(int resId) {
\r
135 public void setCustomView(View view) {
\r
139 public void invalidate() {
\r
143 public void finish() {
\r
147 public Menu getMenu() {
\r
152 public CharSequence getTitle() {
\r
157 public CharSequence getSubtitle() {
\r
162 public View getCustomView() {
\r
167 public MenuInflater getMenuInflater() {
\r