Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / view / ObservableWebView.java
1 package com.folioreader.view;\r
2 \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
13 \r
14 /**\r
15  * Created by mahavir on 3/31/16.\r
16  */\r
17 public class ObservableWebView extends WebView {\r
18 \r
19     private float mDownPosX = 0;\r
20     private float mDownPosY = 0;\r
21 \r
22     public interface ScrollListener {\r
23         void onScrollChange(int percent);\r
24     }\r
25 \r
26     public interface SeekBarListener {\r
27         void fadeInSeekBarIfInvisible();\r
28     }\r
29 \r
30     public interface ToolBarListener {\r
31         void hideOrshowToolBar();\r
32         void hideToolBarIfVisible();\r
33     }\r
34 \r
35     private ScrollListener mScrollListener;\r
36     private SeekBarListener mSeekBarListener;\r
37     private ToolBarListener mToolBarListener;\r
38 \r
39     public ObservableWebView(Context context) {\r
40         super(context);\r
41     }\r
42 \r
43     public ObservableWebView(Context context, AttributeSet attrs) {\r
44         super(context, attrs);\r
45     }\r
46 \r
47     public ObservableWebView(Context context, AttributeSet attrs, int defStyleAttr) {\r
48         super(context, attrs, defStyleAttr);\r
49     }\r
50 \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
55     }\r
56 \r
57     public void setScrollListener(ScrollListener listener) {\r
58         mScrollListener = listener;\r
59     }\r
60 \r
61     public void setSeekBarListener(SeekBarListener listener) {\r
62         mSeekBarListener = listener;\r
63     }\r
64 \r
65     public void setToolBarListener(ToolBarListener listener) {\r
66         mToolBarListener = listener;\r
67     }\r
68 \r
69     @Override\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
73 \r
74         switch (action) {\r
75             case MotionEvent.ACTION_DOWN:\r
76                 mDownPosX = event.getX();\r
77                 mDownPosY = event.getY();\r
78                 if (mSeekBarListener != null) mSeekBarListener.fadeInSeekBarIfInvisible();\r
79                 break;\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
85                 }\r
86                 break;\r
87         }\r
88         return super.onTouchEvent(event);\r
89     }\r
90 \r
91     @Override\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
96     }\r
97 \r
98     public int getContentHeightVal() {\r
99         return (int) Math.floor(this.getContentHeight() * this.getScale());\r
100     }\r
101 \r
102     public int getWebViewHeight() {\r
103         return this.getMeasuredHeight();\r
104     }\r
105 \r
106     @Override\r
107     public ActionMode startActionMode(ActionMode.Callback callback, int type) {\r
108         return this.dummyActionMode();\r
109     }\r
110 \r
111     @Override\r
112     public ActionMode startActionMode(ActionMode.Callback callback) {\r
113         return this.dummyActionMode();\r
114     }\r
115 \r
116     public ActionMode dummyActionMode() {\r
117         return new ActionMode() {\r
118             @Override\r
119             public void setTitle(CharSequence title) {\r
120             }\r
121 \r
122             @Override\r
123             public void setTitle(int resId) {\r
124             }\r
125 \r
126             @Override\r
127             public void setSubtitle(CharSequence subtitle) {\r
128             }\r
129 \r
130             @Override\r
131             public void setSubtitle(int resId) {\r
132             }\r
133 \r
134             @Override\r
135             public void setCustomView(View view) {\r
136             }\r
137 \r
138             @Override\r
139             public void invalidate() {\r
140             }\r
141 \r
142             @Override\r
143             public void finish() {\r
144             }\r
145 \r
146             @Override\r
147             public Menu getMenu() {\r
148                 return null;\r
149             }\r
150 \r
151             @Override\r
152             public CharSequence getTitle() {\r
153                 return null;\r
154             }\r
155 \r
156             @Override\r
157             public CharSequence getSubtitle() {\r
158                 return null;\r
159             }\r
160 \r
161             @Override\r
162             public View getCustomView() {\r
163                 return null;\r
164             }\r
165 \r
166             @Override\r
167             public MenuInflater getMenuInflater() {\r
168                 return null;\r
169             }\r
170         };\r
171     }\r
172 }\r