Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: libadblockplus-android-webviewapp/src/org/adblockplus/libadblockplus/android/webviewapp/MainActivity.java

Issue 29361445: Issue 4399 - Add WebView inheritor with ad blocking (Closed)
Patch Set: renamings, updated README Created Dec. 19, 2016, 3:04 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2016 Eyeo GmbH
4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation.
8 *
9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 package org.adblockplus.libadblockplus.android.webviewapp;
19
20 import org.adblockplus.libadblockplus.android.settings.AdblockHelper;
21 import org.adblockplus.libadblockplus.android.webview.AdblockWebView;
22
23 import android.app.Activity;
24 import android.content.Intent;
25 import android.graphics.Bitmap;
26 import android.os.Bundle;
27 import android.view.View;
28 import android.view.inputmethod.InputMethodManager;
29 import android.webkit.WebChromeClient;
30 import android.webkit.WebView;
31 import android.webkit.WebViewClient;
32 import android.widget.Button;
33 import android.widget.EditText;
34 import android.widget.ProgressBar;
35
36 public class MainActivity extends Activity
37 {
38 public static final boolean DEVELOPMENT_BUILD = true;
39
40 // webView can create AdblockEngine instance itself if not passed with `webVie w.setAdblockEngine()`
41 public static final boolean USE_EXTERNAL_ADBLOCKENGINE = true;
42
43 // adblock retain() may be long-running, pass `true` to do it in background th read
44 public static final boolean ADBLOCKENGINE_RETAIN_ASYNC = true;
45
46 private ProgressBar progress;
47 private EditText url;
48 private Button ok;
49 private Button back;
50 private Button forward;
51 private Button settings;
52
53 private AdblockWebView webView;
54
55 @Override
56 protected void onCreate(Bundle savedInstanceState)
57 {
58 super.onCreate(savedInstanceState);
59 setContentView(R.layout.activity_main);
60
61 bindControls();
62 initControls();
63 }
64
65 private void bindControls()
66 {
67 url = (EditText) findViewById(R.id.main_url);
68 ok = (Button) findViewById(R.id.main_ok);
69 back = (Button) findViewById(R.id.main_back);
70 forward = (Button) findViewById(R.id.main_forward);
71 settings = (Button) findViewById(R.id.main_settings);
72 progress = (ProgressBar) findViewById(R.id.main_progress);
73 webView = (AdblockWebView) findViewById(R.id.main_webview);
74 }
75
76 private void setProgressVisible(boolean visible)
77 {
78 progress.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
79 }
80
81 private WebViewClient webViewClient = new WebViewClient()
82 {
83 @Override
84 public void onPageStarted(WebView view, String url, Bitmap favicon)
85 {
86 setProgressVisible(true);
87
88 // show updated URL (because of possible redirection)
89 MainActivity.this.url.setText(url);
90 }
91
92 @Override
93 public void onPageFinished(WebView view, String url)
94 {
95 setProgressVisible(false);
96 updateButtons();
97 }
98
99 @Override
100 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
101 {
102 updateButtons();
103 }
104 };
105
106 private void updateButtons()
107 {
108 back.setEnabled(webView.canGoBack());
109 forward.setEnabled(webView.canGoForward());
110 }
111
112 private WebChromeClient webChromeClient = new WebChromeClient()
113 {
114 @Override
115 public void onProgressChanged(WebView view, int newProgress)
116 {
117 progress.setProgress(newProgress);
118 }
119 };
120
121 private void initControls()
122 {
123 ok.setOnClickListener(new View.OnClickListener()
124 {
125 @Override
126 public void onClick(View view)
127 {
128 loadUrl();
129 }
130 });
131
132 back.setOnClickListener(new View.OnClickListener()
133 {
134 @Override
135 public void onClick(View v)
136 {
137 loadPrev();
138 }
139 });
140
141 forward.setOnClickListener(new View.OnClickListener()
142 {
143 @Override
144 public void onClick(View v)
145 {
146 loadForward();
147 }
148 });
149
150 if (USE_EXTERNAL_ADBLOCKENGINE)
151 {
152 settings.setOnClickListener(new View.OnClickListener()
153 {
154 @Override
155 public void onClick(View v)
156 {
157 navigateSettings();
158 }
159 });
160 }
161 else
162 {
163 /*
164 We're able to show settings if we're using AdblockHelper facade only.
165 Otherwise pass AdblockEngine instance to the fragments and not it's neithe r Serializable nor Parcelable.
166 */
167 settings.setVisibility(View.GONE);
168 }
169
170 initAdblockWebView();
171
172 setProgressVisible(false);
173 updateButtons();
174
175 // to get debug/warning log output
176 webView.setDebugMode(DEVELOPMENT_BUILD);
177
178 // render as fast as we can
179 webView.setAllowDrawDelay(0);
180
181 // to show that external WebViewClient is still working
182 webView.setWebViewClient(webViewClient);
183
184 // to show that external WebChromeClient is still working
185 webView.setWebChromeClient(webChromeClient);
186 }
187
188 private void navigateSettings()
189 {
190 startActivity(new Intent(this, SettingsActivity.class));
191 }
192
193 private void initAdblockWebView()
194 {
195 if (USE_EXTERNAL_ADBLOCKENGINE)
196 {
197 // external adblockEngine
198 AdblockHelper.get().retain(ADBLOCKENGINE_RETAIN_ASYNC);
199
200 if (!ADBLOCKENGINE_RETAIN_ASYNC)
201 {
202 webView.setAdblockEngine(AdblockHelper.get().getEngine());
203 }
204 }
205 else
206 {
207 // AdblockWebView will create internal AdblockEngine instance
208 }
209 }
210
211 private void hideSoftwareKeyboard()
212 {
213 InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_S ERVICE);
214 imm.hideSoftInputFromWindow(url.getWindowToken(), 0);
215 }
216
217 private void loadPrev()
218 {
219 hideSoftwareKeyboard();
220 if (webView.canGoBack())
221 {
222 webView.goBack();
223 }
224 }
225
226 private void loadForward()
227 {
228 hideSoftwareKeyboard();
229 if (webView.canGoForward())
230 {
231 webView.goForward();
232 }
233 }
234
235 private String prepareUrl(String url)
236 {
237 if (!url.startsWith("http"))
238 url = "http://" + url;
239
240 // make sure url is valid URL
241 return url;
242 }
243
244 private void loadUrl()
245 {
246 hideSoftwareKeyboard();
247
248 // if retained with `true` we need to make sure it's ready now
249 if (USE_EXTERNAL_ADBLOCKENGINE && ADBLOCKENGINE_RETAIN_ASYNC)
250 {
251 AdblockHelper.get().waitForReady();
252 webView.setAdblockEngine(AdblockHelper.get().getEngine());
253 }
254 webView.loadUrl(prepareUrl(url.getText().toString()));
255 }
256
257 @Override
258 protected void onDestroy()
259 {
260 webView.dispose(new Runnable()
261 {
262 @Override
263 public void run()
264 {
265 if (USE_EXTERNAL_ADBLOCKENGINE)
266 {
267 AdblockHelper.get().release();
268 }
269 }
270 });
271
272 super.onDestroy();
273 }
274 }
OLDNEW

Powered by Google App Engine
This is Rietveld