1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package org.chromium.android_webview.shell;
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.app.Activity;
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.content.Context;
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.content.Intent;
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.content.SharedPreferences;
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.os.Bundle;
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.text.TextUtils;
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.view.Gravity;
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.KeyEvent;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.View;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.View.OnClickListener;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.View.OnFocusChangeListener;
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.view.ViewGroup;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.ViewGroup.LayoutParams;
20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.view.WindowManager;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.inputmethod.EditorInfo;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.inputmethod.InputMethodManager;
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.webkit.WebChromeClient;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.widget.EditText;
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.widget.FrameLayout;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.widget.ImageButton;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.widget.LinearLayout;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.widget.TextView;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.widget.TextView.OnEditorActionListener;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.android_webview.AwBrowserContext;
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.android_webview.AwBrowserProcess;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.android_webview.AwContents;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.android_webview.AwContentsClient;
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)import org.chromium.android_webview.AwDevToolsServer;
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.chromium.android_webview.AwSettings;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.android_webview.test.AwTestContainerView;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.android_webview.test.NullContentsClient;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.content_public.browser.LoadUrlParams;
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.content_public.browser.NavigationController;
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.content_public.browser.WebContents;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/**
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This is a lightweight activity for tests that only require WebView functionality.
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public class AwShellActivity extends Activity {
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private static final String PREFERENCES_NAME = "AwShellPrefs";
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private static final String INITIAL_URL = "about:blank";
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    private AwBrowserContext mBrowserContext;
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private AwDevToolsServer mDevToolsServer;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private AwTestContainerView mAwTestContainerView;
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private WebContents mWebContents;
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private NavigationController mNavigationController;
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private EditText mUrlTextView;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private ImageButton mPrevButton;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private ImageButton mNextButton;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    @Override
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void onCreate(Bundle savedInstanceState) {
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        super.onCreate(savedInstanceState);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        setContentView(R.layout.testshell_activity);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mAwTestContainerView = createAwTestContainerView();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        mWebContents = mAwTestContainerView.getContentViewCore().getWebContents();
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        mNavigationController = mWebContents.getNavigationController();
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        LinearLayout contentContainer = (LinearLayout) findViewById(R.id.content_container);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mAwTestContainerView.setLayoutParams(new LinearLayout.LayoutParams(
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1f));
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        contentContainer.addView(mAwTestContainerView);
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mAwTestContainerView.requestFocus();
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        initializeUrlField();
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        initializeNavigationButtons();
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        String startupUrl = getUrlFromIntent(getIntent());
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (TextUtils.isEmpty(startupUrl)) {
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            startupUrl = INITIAL_URL;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mAwTestContainerView.getAwContents().loadUrl(new LoadUrlParams(startupUrl));
835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        AwContents.setShouldDownloadFavicons();
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mUrlTextView.setText(startupUrl);
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private AwTestContainerView createAwTestContainerView() {
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        AwBrowserProcess.start(this);
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        AwTestContainerView testContainerView = new AwTestContainerView(this, true);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        AwContentsClient awContentsClient = new NullContentsClient() {
91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            private View mCustomView;
92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            @Override
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            public void onPageStarted(String url) {
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                if (mUrlTextView != null) {
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    mUrlTextView.setText(url);
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                }
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            @Override
101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                getWindow().setFlags(
103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        WindowManager.LayoutParams.FLAG_FULLSCREEN,
104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
106c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                getWindow().addContentView(view,
107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        new FrameLayout.LayoutParams(
108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                ViewGroup.LayoutParams.MATCH_PARENT,
109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                ViewGroup.LayoutParams.MATCH_PARENT,
110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                Gravity.CENTER));
111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                mCustomView = view;
112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            }
113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            @Override
115c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            public void onHideCustomView() {
116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                decorView.removeView(mCustomView);
119c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                mCustomView = null;
120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            }
121a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
122a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            @Override
123a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            public boolean shouldOverrideKeyEvent(KeyEvent event) {
124a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
125a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                    return true;
126a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                }
127a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                return false;
128a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            }
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        };
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        SharedPreferences sharedPreferences =
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        if (mBrowserContext == null) {
1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            mBrowserContext = new AwBrowserContext(sharedPreferences);
1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        }
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        final AwSettings awSettings = new AwSettings(this /*context*/,
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                false /*isAccessFromFileURLsGrantedByDefault*/, true /*supportsLegacyQuirks*/);
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Required for WebGL conformance tests.
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        awSettings.setMediaPlaybackRequiresUserGesture(false);
1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        testContainerView.initialize(new AwContents(mBrowserContext, testContainerView,
141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                testContainerView.getContext(), testContainerView.getInternalAccessDelegate(),
142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                testContainerView.getNativeGLDelegate(), awContentsClient, awSettings));
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        testContainerView.getAwContents().getSettings().setJavaScriptEnabled(true);
1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        if (mDevToolsServer == null) {
1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            mDevToolsServer = new AwDevToolsServer();
1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            mDevToolsServer.setRemoteDebuggingEnabled(true);
1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        }
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return testContainerView;
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private static String getUrlFromIntent(Intent intent) {
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return intent != null ? intent.getDataString() : null;
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private void setKeyboardVisibilityForUrl(boolean visible) {
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        InputMethodManager imm = (InputMethodManager) getSystemService(
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                Context.INPUT_METHOD_SERVICE);
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (visible) {
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            imm.showSoftInput(mUrlTextView, InputMethodManager.SHOW_IMPLICIT);
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        } else {
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            imm.hideSoftInputFromWindow(mUrlTextView.getWindowToken(), 0);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private void initializeUrlField() {
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mUrlTextView = (EditText) findViewById(R.id.url);
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mUrlTextView.setOnEditorActionListener(new OnEditorActionListener() {
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            @Override
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                if ((actionId != EditorInfo.IME_ACTION_GO) && (event == null ||
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        event.getKeyCode() != KeyEvent.KEYCODE_ENTER ||
172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        event.getAction() != KeyEvent.ACTION_DOWN)) {
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    return false;
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                }
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mAwTestContainerView.getAwContents().loadUrl(
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        new LoadUrlParams(mUrlTextView.getText().toString()));
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mUrlTextView.clearFocus();
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                setKeyboardVisibilityForUrl(false);
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mAwTestContainerView.requestFocus();
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                return true;
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        });
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mUrlTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            @Override
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            public void onFocusChange(View v, boolean hasFocus) {
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                setKeyboardVisibilityForUrl(hasFocus);
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mNextButton.setVisibility(hasFocus ? View.GONE : View.VISIBLE);
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mPrevButton.setVisibility(hasFocus ? View.GONE : View.VISIBLE);
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                if (!hasFocus) {
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    mUrlTextView.setText(mWebContents.getUrl());
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                }
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        });
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private void initializeNavigationButtons() {
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mPrevButton = (ImageButton) findViewById(R.id.prev);
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mPrevButton.setOnClickListener(new OnClickListener() {
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            @Override
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            public void onClick(View v) {
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                if (mNavigationController.canGoBack()) {
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    mNavigationController.goBack();
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                }
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        });
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mNextButton = (ImageButton) findViewById(R.id.next);
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mNextButton.setOnClickListener(new OnClickListener() {
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            @Override
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            public void onClick(View v) {
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                if (mNavigationController.canGoForward()) {
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    mNavigationController.goForward();
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                }
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        });
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    @Override
220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    public boolean onKeyUp(int keyCode, KeyEvent event) {
221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        if (keyCode == KeyEvent.KEYCODE_BACK) {
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            if (mNavigationController.canGoBack()) {
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                mNavigationController.goBack();
224c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                return true;
225c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            }
226c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        }
227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        return super.onKeyUp(keyCode, event);
229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    }
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
231