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