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

Delta Between Two Patch Sets: libadblockplus-android-webviewapp/src/org/adblockplus/libadblockplus/android/webviewapp/MainActivity.java

Issue 29351744: Issue 4399 - Add WebView inheritor with ad blocking (Closed)
Left Patch Set: removed gradlew.bat - it relates to issue-4324 Created Sept. 16, 2016, 11:27 a.m.
Right Patch Set: changed packages, now using AdblockEngine (original ABPEngine), improved demo app Created Oct. 25, 2016, 11:20 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « libadblockplus-android-webviewapp/res/values/strings.xml ('k') | libadblockplus-android/AndroidManifest.xml » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
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.webview.AdblockWebView;
21 import org.adblockplus.libadblockplus.android.AdblockEngine;
22
23 import android.app.Activity;
24 import android.graphics.Bitmap;
25 import android.os.Bundle;
26 import android.view.View;
27 import android.view.inputmethod.InputMethodManager;
28 import android.webkit.WebChromeClient;
29 import android.webkit.WebView;
30 import android.webkit.WebViewClient;
31 import android.widget.Button;
32 import android.widget.CheckBox;
33 import android.widget.CompoundButton;
34 import android.widget.EditText;
35 import android.widget.ProgressBar;
36
37 public class MainActivity extends Activity
38 {
39 private static final boolean DEVELOPMENT_BUILD = true;
40
41 // webView can create AdblockEngine instance itself if not passed with `webVie w.setAdblockEngine()`
42 private final boolean USE_EXTERNAL_ADBLOCKENGINE = true;
43
44 private ProgressBar progress;
45 private EditText url;
46 private Button ok;
47 private Button back;
48 private Button forward;
49 private CheckBox abpEnabled;
50 private CheckBox aaEnabled;
51
52 private AdblockEngine adblockEngine;
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 abpEnabled = (CheckBox) findViewById(R.id.main_abp_enabled);
72 aaEnabled = (CheckBox) findViewById(R.id.main_aa_enabled);
73 progress = (ProgressBar) findViewById(R.id.main_progress);
74 webView = (AdblockWebView) findViewById(R.id.main_webview);
75 }
76
77 private void setProgressVisible(boolean visible)
78 {
79 progress.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
80 }
81
82 private WebViewClient webViewClient = new WebViewClient()
83 {
84 @Override
85 public void onPageStarted(WebView view, String url, Bitmap favicon)
86 {
87 setProgressVisible(true);
88
89 // show updated URL (because of possible redirection)
90 MainActivity.this.url.setText(url);
91 }
92
93 @Override
94 public void onPageFinished(WebView view, String url)
95 {
96 setProgressVisible(false);
97 updateButtons();
98
99 if (!USE_EXTERNAL_ADBLOCKENGINE)
100 {
101 // as the page is finished internal adblockEngine is created and we can get actual AA value
102 aaEnabled.setChecked(webView.getAdblockEngine().isAcceptableAdsEnabled() );
103 }
104 }
105
106 @Override
107 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
108 {
109 updateButtons();
110 }
111 };
112
113 private void updateButtons()
114 {
115 back.setEnabled(webView.canGoBack());
116 forward.setEnabled(webView.canGoForward());
117 }
118
119 private WebChromeClient webChromeClient = new WebChromeClient()
120 {
121 @Override
122 public void onProgressChanged(WebView view, int newProgress)
123 {
124 progress.setProgress(newProgress);
125 }
126 };
127
128 private void initControls()
129 {
130 ok.setOnClickListener(new View.OnClickListener()
131 {
132 @Override
133 public void onClick(View view)
134 {
135 loadUrl();
136 }
137 });
138
139 back.setOnClickListener(new View.OnClickListener()
140 {
141 @Override
142 public void onClick(View v)
143 {
144 loadPrev();
145 }
146 });
147
148 forward.setOnClickListener(new View.OnClickListener()
149 {
150 @Override
151 public void onClick(View v)
152 {
153 loadForward();
154 }
155 });
156
157 initAdblockEngine();
158 initAbp();
159 initAcceptableAds();
160
161 setProgressVisible(false);
162 updateButtons();
163
164 // to get debug/warning log output
165 webView.setDebugMode(DEVELOPMENT_BUILD);
166
167 // render as fast as we can
168 webView.setAllowDrawDelay(0);
169
170 // to show that external WebViewClient is still working
171 webView.setWebViewClient(webViewClient);
172
173 // to show that external WebChromeClient is still working
174 webView.setWebChromeClient(webChromeClient);
175 }
176
177 private void initAdblockEngine()
178 {
179 if (USE_EXTERNAL_ADBLOCKENGINE)
180 {
181 adblockEngine = AdblockEngine.create(
182 this,
183 AdblockEngine.generateAppInfo(this, true),
184 getCacheDir().getAbsolutePath(),
185 true);
186 webView.setAdblockEngine(adblockEngine); // external (activity-owned) adbl ockEngine
187 }
188 }
189
190 private void initAbp()
191 {
192 abpEnabled.setChecked(webView.isAdblockEnabled());
193 abpEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeList ener()
194 {
195 @Override
196 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
197 {
198 webView.setAdblockEnabled(isChecked);
199 }
200 });
201 }
202
203 private void initAcceptableAds()
204 {
205 if (USE_EXTERNAL_ADBLOCKENGINE)
206 {
207 // we can't set this checkbox if not using external engine as internal one is not yet created
208 // (it will be created during the first load)
209 aaEnabled.setChecked(adblockEngine.isAcceptableAdsEnabled());
210 }
211 aaEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListe ner()
212 {
213 @Override
214 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
215 {
216 // not using this.adblockEngine as it can be internal webView engine
217 webView.getAdblockEngine().setAcceptableAdsEnabled(isChecked);
218 }
219 });
220 }
221
222 private void hideSoftwareKeyboard()
223 {
224 InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_S ERVICE);
225 imm.hideSoftInputFromWindow(url.getWindowToken(), 0);
226 }
227
228 private void loadPrev()
229 {
230 hideSoftwareKeyboard();
231 if (webView.canGoBack())
232 {
233 webView.goBack();
234 }
235 }
236
237 private void loadForward()
238 {
239 hideSoftwareKeyboard();
240 if (webView.canGoForward())
241 {
242 webView.goForward();
243 }
244 }
245
246 private String prepareUrl(String url)
247 {
248 if (!url.startsWith("http"))
249 url = "http://" + url;
250
251 // make sure url is valid URL
252 return url;
253 }
254
255 private void loadUrl()
256 {
257 hideSoftwareKeyboard();
258 webView.loadUrl(prepareUrl(url.getText().toString()));
259 }
260
261 @Override
262 protected void onDestroy()
263 {
264 webView.dispose(new Runnable()
265 {
266 @Override
267 public void run()
268 {
269 if (USE_EXTERNAL_ADBLOCKENGINE)
270 {
271 adblockEngine.dispose();
272 }
273 }
274 });
275 super.onDestroy();
276 }
277 }
LEFTRIGHT

Powered by Google App Engine
This is Rietveld