| Index: android_webview/tools/WebViewShell/src/org/chromium/webview_shell/WebViewBrowserActivity.java
|
| diff --git a/android_webview/tools/WebViewShell/src/org/chromium/webview_shell/WebViewBrowserActivity.java b/android_webview/tools/WebViewShell/src/org/chromium/webview_shell/WebViewBrowserActivity.java
|
| index 047a87d9354287a10fd7244eadc3ad07828fda5c..b56d667980c2e31c8b2d0582c80f1501a32fed4a 100644
|
| --- a/android_webview/tools/WebViewShell/src/org/chromium/webview_shell/WebViewBrowserActivity.java
|
| +++ b/android_webview/tools/WebViewShell/src/org/chromium/webview_shell/WebViewBrowserActivity.java
|
| @@ -5,29 +5,47 @@
|
| package org.chromium.webview_shell;
|
|
|
| import android.app.Activity;
|
| +import android.app.AlertDialog;
|
| import android.content.Context;
|
| import android.content.Intent;
|
| import android.os.Bundle;
|
| +
|
| import android.view.KeyEvent;
|
| +import android.view.MenuItem;
|
| import android.view.View;
|
| import android.view.View.OnKeyListener;
|
| import android.view.inputmethod.InputMethodManager;
|
| +
|
| import android.webkit.GeolocationPermissions;
|
| import android.webkit.PermissionRequest;
|
| import android.webkit.WebChromeClient;
|
| +import android.webkit.WebSettings;
|
| import android.webkit.WebView;
|
| import android.webkit.WebViewClient;
|
| +
|
| import android.widget.EditText;
|
| +import android.widget.LinearLayout.LayoutParams;
|
| +import android.widget.PopupMenu;
|
| import android.widget.TextView;
|
|
|
| +import java.lang.reflect.InvocationTargetException;
|
| +import java.lang.reflect.Method;
|
| +
|
| +import java.util.regex.Matcher;
|
| +import java.util.regex.Pattern;
|
| +
|
| /**
|
| * This activity is designed for starting a "mini-browser" for manual testing of WebView.
|
| * It takes an optional URL as an argument, and displays the page. There is a URL bar
|
| * on top of the webview for manually specifying URLs to load.
|
| */
|
| -public class WebViewBrowserActivity extends Activity {
|
| +public class WebViewBrowserActivity extends Activity implements PopupMenu.OnMenuItemClickListener {
|
| private EditText mUrlBar;
|
| private WebView mWebView;
|
| + private String mWebViewVersion;
|
| +
|
| + private static final Pattern WEBVIEW_VERSION_PATTERN =
|
| + Pattern.compile("(Chrome/)([\\d\\.]+)\\s");
|
|
|
| private static final String[] AUTOMATICALLY_GRANT =
|
| { PermissionRequest.RESOURCE_VIDEO_CAPTURE, PermissionRequest.RESOURCE_AUDIO_CAPTURE };
|
| @@ -35,12 +53,18 @@ public class WebViewBrowserActivity extends Activity {
|
| @Override
|
| public void onCreate(Bundle savedInstanceState) {
|
| super.onCreate(savedInstanceState);
|
| - getWindow().setTitle(
|
| - getResources().getString(R.string.title_activity_browser));
|
| setContentView(R.layout.activity_webview_browser);
|
| mWebView = (WebView) findViewById(R.id.webview);
|
| - mWebView.getSettings().setJavaScriptEnabled(true);
|
| - mWebView.getSettings().setGeolocationEnabled(true);
|
| + WebSettings settings = mWebView.getSettings();
|
| + initializeSettings(settings);
|
| +
|
| + Matcher matcher = WEBVIEW_VERSION_PATTERN.matcher(settings.getUserAgentString());
|
| + if (matcher.find()) {
|
| + mWebViewVersion = matcher.group(2);
|
| + } else {
|
| + mWebViewVersion = "-";
|
| + }
|
| + setTitle(getResources().getString(R.string.title_activity_browser) + " " + mWebViewVersion);
|
|
|
| mWebView.setWebViewClient(new WebViewClient() {
|
| @Override
|
| @@ -85,6 +109,59 @@ public class WebViewBrowserActivity extends Activity {
|
| hideKeyboard(mUrlBar);
|
| }
|
|
|
| + public void showPopup(View v) {
|
| + PopupMenu popup = new PopupMenu(this, v);
|
| + popup.setOnMenuItemClickListener(this);
|
| + popup.inflate(R.menu.main_menu);
|
| + popup.show();
|
| + }
|
| +
|
| + @Override
|
| + public boolean onMenuItemClick(MenuItem item) {
|
| + switch(item.getItemId()) {
|
| + case R.id.menu_about:
|
| + about();
|
| + hideKeyboard(mUrlBar);
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| + }
|
| +
|
| + private void initializeSettings(WebSettings settings) {
|
| + settings.setJavaScriptEnabled(true);
|
| + settings.setGeolocationEnabled(true);
|
| + }
|
| +
|
| + private void about() {
|
| + WebSettings settings = mWebView.getSettings();
|
| + StringBuilder summary = new StringBuilder();
|
| + summary.append("WebView version : " + mWebViewVersion + "\n");
|
| +
|
| + for (Method method : settings.getClass().getMethods()) {
|
| + if (!methodIsSimpleInspector(method)) continue;
|
| + try {
|
| + summary.append(method.getName() + " : " + method.invoke(settings) + "\n");
|
| + } catch (IllegalAccessException e) {
|
| + } catch (InvocationTargetException e) { }
|
| + }
|
| +
|
| + AlertDialog dialog = new AlertDialog.Builder(this)
|
| + .setTitle(getResources().getString(R.string.menu_about))
|
| + .setMessage(summary)
|
| + .setPositiveButton("OK", null)
|
| + .create();
|
| + dialog.show();
|
| + dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
|
| + }
|
| +
|
| + // Returns true is a method has no arguments and returns either a boolean or a String.
|
| + private boolean methodIsSimpleInspector(Method method) {
|
| + Class<?> returnType = method.getReturnType();
|
| + return ((returnType.equals(boolean.class) || returnType.equals(String.class))
|
| + && method.getParameterTypes().length == 0);
|
| + }
|
| +
|
| private void loadUrl(String url) {
|
| mWebView.loadUrl(url);
|
| mWebView.requestFocus();
|
|
|