From 0db66360d8319e301a79b1669efeb6d13196eb53 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sat, 11 May 2013 21:01:46 +0300 Subject: [PATCH] wpadebug: Add a simple WebView activity This provides a simple web browser that can be started and stopped from other apps or native applications. This activity can be started with the following command: am start -a android.action.MAIN -c android.intent.category.LAUNCHER \ -n w1.fi.wpadebug/.WpaWebViewActivity -e w1.fi.wpadebug.URL If is set to FINISH the activity is finished. Signed-hostap: Jouni Malinen --- wpadebug/AndroidManifest.xml | 9 ++ .../w1/fi/wpadebug/WpaWebViewActivity.java | 114 ++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 wpadebug/src/w1/fi/wpadebug/WpaWebViewActivity.java diff --git a/wpadebug/AndroidManifest.xml b/wpadebug/AndroidManifest.xml index 56f80aae4..e939d24a7 100644 --- a/wpadebug/AndroidManifest.xml +++ b/wpadebug/AndroidManifest.xml @@ -7,6 +7,7 @@ + @@ -44,5 +45,13 @@ android:label="Credential" android:parentActivityName="w1.fi.wpadebug.WpaCredActivity"> + + + + + diff --git a/wpadebug/src/w1/fi/wpadebug/WpaWebViewActivity.java b/wpadebug/src/w1/fi/wpadebug/WpaWebViewActivity.java new file mode 100644 index 000000000..70464393e --- /dev/null +++ b/wpadebug/src/w1/fi/wpadebug/WpaWebViewActivity.java @@ -0,0 +1,114 @@ +/* + * wpadebug - wpa_supplicant and Wi-Fi debugging app for Android + * Copyright (c) 2013, Jouni Malinen + * + * This software may be distributed under the terms of the BSD license. + * See README for more details. + */ + +package w1.fi.wpadebug; + +import android.app.Activity; +import android.content.Intent; +import android.content.res.Configuration; +import android.os.Bundle; +import android.util.Log; +import android.view.Window; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.Toast; + +public class WpaWebViewActivity extends Activity +{ + private static final String TAG = "wpadebug"; + private static final String EXTRA_MESSAGE = "w1.fi.wpadebug.URL"; + private WebView mWebView; + final Activity activity = this; + + @Override + public void onCreate(Bundle savedInstanceState) + { + Log.d(TAG, "WpaWebViewActivity::onCreate"); + super.onCreate(savedInstanceState); + + Intent intent = getIntent(); + String url = intent.getStringExtra(EXTRA_MESSAGE); + Log.d(TAG, "url=" + url); + if (url.equals("FINISH")) { + finish(); + return; + } + + mWebView = new WebView(this); + mWebView.getSettings().setJavaScriptEnabled(true); + mWebView.setWebViewClient(new WpaWebViewClient()); + + getWindow().requestFeature(Window.FEATURE_PROGRESS); + + mWebView.setWebChromeClient(new WebChromeClient() + { + public void onProgressChanged(WebView view, int progress) + { + Log.d(TAG, "progress=" + progress); + activity.setProgress(progress * 1000); + } + }); + + setContentView(mWebView); + + mWebView.loadUrl(url); + } + + @Override + public void onResume() + { + Log.d(TAG, "WpaWebViewActivity::onResume"); + super.onResume(); + } + + @Override + protected void onNewIntent(Intent intent) + { + Log.d(TAG, "WpaWebViewActivity::onNewIntent"); + super.onNewIntent(intent); + String url = intent.getStringExtra(EXTRA_MESSAGE); + Log.d(TAG, "url=" + url); + setIntent(intent); + if (url.equals("FINISH")) { + finish(); + return; + } + mWebView.loadUrl(url); + } + + private class WpaWebViewClient extends WebViewClient { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) + { + Log.d(TAG, "shouldOverrideUrlLoading: url=" + url); + Intent intent = getIntent(); + intent.putExtra(EXTRA_MESSAGE, url); + + view.loadUrl(url); + return true; + } + + @Override + public void onPageFinished(WebView view, String url) + { + Log.d(TAG, "onPageFinished: url=" + url); + } + + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) + { + Log.d(TAG, "Failed to load page: errorCode=" + + errorCode + " description=" + description + + " URL=" + failingUrl); + Toast.makeText(activity, "Failed to load page: " + + description + " (URL=" + failingUrl + ")", + Toast.LENGTH_LONG).show(); + } + } +}