| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.android_webview.shell; |
| |
| import android.app.Activity; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.content.SharedPreferences; |
| import android.os.Bundle; |
| import android.text.TextUtils; |
| import android.view.KeyEvent; |
| import android.view.View; |
| import android.view.View.OnClickListener; |
| import android.view.View.OnFocusChangeListener; |
| import android.view.ViewGroup.LayoutParams; |
| import android.view.inputmethod.EditorInfo; |
| import android.view.inputmethod.InputMethodManager; |
| import android.widget.EditText; |
| import android.widget.ImageButton; |
| import android.widget.LinearLayout; |
| import android.widget.TextView; |
| import android.widget.TextView.OnEditorActionListener; |
| |
| import org.chromium.android_webview.AwBrowserContext; |
| import org.chromium.android_webview.AwBrowserProcess; |
| import org.chromium.android_webview.AwContents; |
| import org.chromium.android_webview.AwContentsClient; |
| import org.chromium.android_webview.AwDevToolsServer; |
| import org.chromium.android_webview.AwLayoutSizer; |
| import org.chromium.android_webview.AwSettings; |
| import org.chromium.android_webview.test.AwTestContainerView; |
| import org.chromium.android_webview.test.NullContentsClient; |
| import org.chromium.content.browser.LoadUrlParams; |
| |
| /** |
| * This is a lightweight activity for tests that only require WebView functionality. |
| */ |
| public class AwShellActivity extends Activity { |
| private static final String PREFERENCES_NAME = "AwShellPrefs"; |
| private static final String INITIAL_URL = "about:blank"; |
| private AwBrowserContext mBrowserContext; |
| private AwDevToolsServer mDevToolsServer; |
| private AwTestContainerView mAwTestContainerView; |
| private EditText mUrlTextView; |
| private ImageButton mPrevButton; |
| private ImageButton mNextButton; |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| setContentView(R.layout.testshell_activity); |
| |
| mAwTestContainerView = createAwTestContainerView(); |
| |
| LinearLayout contentContainer = (LinearLayout) findViewById(R.id.content_container); |
| mAwTestContainerView.setLayoutParams(new LinearLayout.LayoutParams( |
| LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1f)); |
| contentContainer.addView(mAwTestContainerView); |
| mAwTestContainerView.requestFocus(); |
| |
| initializeUrlField(); |
| initializeNavigationButtons(); |
| |
| String startupUrl = getUrlFromIntent(getIntent()); |
| if (TextUtils.isEmpty(startupUrl)) { |
| startupUrl = INITIAL_URL; |
| } |
| |
| mAwTestContainerView.getAwContents().loadUrl(new LoadUrlParams(startupUrl)); |
| mUrlTextView.setText(startupUrl); |
| } |
| |
| private AwTestContainerView createAwTestContainerView() { |
| AwBrowserProcess.start(this); |
| AwTestContainerView testContainerView = new AwTestContainerView(this); |
| AwContentsClient awContentsClient = new NullContentsClient() { |
| @Override |
| public void onPageStarted(String url) { |
| if (mUrlTextView != null) { |
| mUrlTextView.setText(url); |
| } |
| } |
| }; |
| |
| SharedPreferences sharedPreferences = |
| getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); |
| if (mBrowserContext == null) { |
| mBrowserContext = new AwBrowserContext(sharedPreferences); |
| } |
| final AwSettings awSettings = new AwSettings(this /*context*/, |
| false /*isAccessFromFileURLsGrantedByDefault*/, true /*supportsLegacyQuirks*/); |
| testContainerView.initialize(new AwContents(mBrowserContext, testContainerView, |
| testContainerView.getInternalAccessDelegate(), |
| awContentsClient, awSettings, new AwLayoutSizer())); |
| testContainerView.getAwContents().getSettings().setJavaScriptEnabled(true); |
| if (mDevToolsServer == null) { |
| mDevToolsServer = new AwDevToolsServer(); |
| mDevToolsServer.setRemoteDebuggingEnabled(true); |
| } |
| return testContainerView; |
| } |
| |
| private static String getUrlFromIntent(Intent intent) { |
| return intent != null ? intent.getDataString() : null; |
| } |
| |
| private void setKeyboardVisibilityForUrl(boolean visible) { |
| InputMethodManager imm = (InputMethodManager) getSystemService( |
| Context.INPUT_METHOD_SERVICE); |
| if (visible) { |
| imm.showSoftInput(mUrlTextView, InputMethodManager.SHOW_IMPLICIT); |
| } else { |
| imm.hideSoftInputFromWindow(mUrlTextView.getWindowToken(), 0); |
| } |
| } |
| |
| private void initializeUrlField() { |
| mUrlTextView = (EditText) findViewById(R.id.url); |
| mUrlTextView.setOnEditorActionListener(new OnEditorActionListener() { |
| @Override |
| public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { |
| if ((actionId != EditorInfo.IME_ACTION_GO) && (event == null || |
| event.getKeyCode() != KeyEvent.KEYCODE_ENTER || |
| event.getKeyCode() != KeyEvent.ACTION_DOWN)) { |
| return false; |
| } |
| |
| mAwTestContainerView.getAwContents().loadUrl( |
| new LoadUrlParams(mUrlTextView.getText().toString())); |
| mUrlTextView.clearFocus(); |
| setKeyboardVisibilityForUrl(false); |
| mAwTestContainerView.requestFocus(); |
| return true; |
| } |
| }); |
| mUrlTextView.setOnFocusChangeListener(new OnFocusChangeListener() { |
| @Override |
| public void onFocusChange(View v, boolean hasFocus) { |
| setKeyboardVisibilityForUrl(hasFocus); |
| mNextButton.setVisibility(hasFocus ? View.GONE : View.VISIBLE); |
| mPrevButton.setVisibility(hasFocus ? View.GONE : View.VISIBLE); |
| if (!hasFocus) { |
| mUrlTextView.setText(mAwTestContainerView.getContentViewCore().getUrl()); |
| } |
| } |
| }); |
| } |
| |
| private void initializeNavigationButtons() { |
| mPrevButton = (ImageButton) findViewById(R.id.prev); |
| mPrevButton.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| if (mAwTestContainerView.getContentViewCore().canGoBack()) { |
| mAwTestContainerView.getContentViewCore().goBack(); |
| } |
| } |
| }); |
| |
| mNextButton = (ImageButton) findViewById(R.id.next); |
| mNextButton.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| if (mAwTestContainerView.getContentViewCore().canGoForward()) { |
| mAwTestContainerView.getContentViewCore().goForward(); |
| } |
| } |
| }); |
| } |
| } |