blob: 1c151539243b96fbcdf4f7c99ea7d1e12af58c61 [file] [log] [blame]
The Android Open Source Project0c908882009-03-03 19:32:16 -08001/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.browser;
18
John Reck41554852010-12-01 12:53:37 -080019import com.google.common.annotations.VisibleForTesting;
20
The Android Open Source Project0c908882009-03-03 19:32:16 -080021import android.app.Activity;
The Android Open Source Project0c908882009-03-03 19:32:16 -080022import android.content.Intent;
The Android Open Source Project0c908882009-03-03 19:32:16 -080023import android.content.res.Configuration;
The Android Open Source Project0c908882009-03-03 19:32:16 -080024import android.graphics.Bitmap;
Andrei Popescu540035d2009-09-18 18:59:20 +010025import android.graphics.BitmapFactory;
Leon Scroggins3bbb6ca2009-09-09 12:51:10 -040026import android.graphics.PixelFormat;
The Android Open Source Project0c908882009-03-03 19:32:16 -080027import android.os.Bundle;
The Android Open Source Project0c908882009-03-03 19:32:16 -080028import android.util.Log;
Leon Scroggins III8e4fbf12010-08-17 16:58:15 -040029import android.view.ActionMode;
The Android Open Source Project0c908882009-03-03 19:32:16 -080030import android.view.ContextMenu;
Michael Kolba2b2ba82010-08-04 17:54:03 -070031import android.view.ContextMenu.ContextMenuInfo;
The Android Open Source Project0c908882009-03-03 19:32:16 -080032import android.view.KeyEvent;
The Android Open Source Project0c908882009-03-03 19:32:16 -080033import android.view.Menu;
The Android Open Source Project0c908882009-03-03 19:32:16 -080034import android.view.MenuItem;
35import android.view.View;
The Android Open Source Project0c908882009-03-03 19:32:16 -080036import android.view.Window;
37import android.view.WindowManager;
Svetoslav Ganov2b345992010-05-06 06:13:54 -070038import android.view.accessibility.AccessibilityManager;
The Android Open Source Project0c908882009-03-03 19:32:16 -080039
Michael Kolb8233fac2010-10-26 16:08:53 -070040public class BrowserActivity extends Activity {
The Android Open Source Project0c908882009-03-03 19:32:16 -080041
John Reck63bb6872010-12-01 19:29:32 -080042 public static final String ACTION_RESTART = "--restart--";
43 private static final String EXTRA_STATE = "state";
44
Michael Kolb8233fac2010-10-26 16:08:53 -070045 private final static String LOGTAG = "browser";
The Android Open Source Project0c908882009-03-03 19:32:16 -080046
Michael Kolb8233fac2010-10-26 16:08:53 -070047 private final static boolean LOGV_ENABLED =
48 com.android.browser.Browser.LOGV_ENABLED;
Dave Bort31a6d1c2009-04-13 15:56:49 -070049
Michael Kolb8233fac2010-10-26 16:08:53 -070050 private Controller mController;
51 private UI mUi;
Jeff Davidson43610292010-07-16 16:03:58 -070052
Grace Kloba22ac16e2009-10-07 18:00:23 -070053 @Override
54 public void onCreate(Bundle icicle) {
Dave Bort31a6d1c2009-04-13 15:56:49 -070055 if (LOGV_ENABLED) {
The Android Open Source Project0c908882009-03-03 19:32:16 -080056 Log.v(LOGTAG, this + " onStart");
57 }
58 super.onCreate(icicle);
Derek Sollenbergerffa561e2010-11-16 14:19:01 -050059
Ben Murdochef671652010-11-25 17:17:58 +000060 // We load the first set of BrowserSettings from the db asynchronously
61 // but if it has not completed at this point, we have no choice but
62 // to block waiting for them to finish loading. :(
63 BrowserSettings.getInstance().waitForLoadFromDbToComplete();
64
Derek Sollenbergerffa561e2010-11-16 14:19:01 -050065 // render the browser in OpenGL
Michael Kolb8233fac2010-10-26 16:08:53 -070066 if (BrowserSettings.getInstance().isHardwareAccelerated()) {
Derek Sollenbergerffa561e2010-11-16 14:19:01 -050067 // Set the flag in the activity's window
68 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
69 WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
70 } else {
71 // Clear the flag in the activity's window
72 this.getWindow().setFlags(0, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
73 }
The Android Open Source Project0c908882009-03-03 19:32:16 -080074
Mike Reedd334bf52010-01-26 15:21:44 -050075 // enable this to test the browser in 32bit
76 if (false) {
77 getWindow().setFormat(PixelFormat.RGBX_8888);
78 BitmapFactory.setDefaultConfig(Bitmap.Config.ARGB_8888);
79 }
80
Michael Kolb8233fac2010-10-26 16:08:53 -070081 // If this was a web search request, pass it on to the default web
82 // search provider and finish this activity.
83 if (IntentHandler.handleWebSearchIntent(this, null, getIntent())) {
84 finish();
85 return;
86 }
87
88 if (((AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE))
89 .isEnabled()) {
Svetoslav Ganov2b345992010-05-06 06:13:54 -070090 setDefaultKeyMode(DEFAULT_KEYS_DISABLE);
91 } else {
92 setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
93 }
The Android Open Source Project0c908882009-03-03 19:32:16 -080094
Michael Kolb8233fac2010-10-26 16:08:53 -070095 mController = new Controller(this);
96 mUi = new BaseUi(this, mController);
97 mController.setUi(mUi);
98 mController.setWebViewFactory((BaseUi) mUi);
The Android Open Source Project0c908882009-03-03 19:32:16 -080099
John Reck63bb6872010-12-01 19:29:32 -0800100 Bundle state = getIntent().getBundleExtra(EXTRA_STATE);
101 if (state != null && icicle == null) {
102 icicle = state;
103 }
Michael Kolb8233fac2010-10-26 16:08:53 -0700104 mController.start(icicle, getIntent());
The Android Open Source Project0c908882009-03-03 19:32:16 -0800105 }
106
John Reck41554852010-12-01 12:53:37 -0800107 @VisibleForTesting
Michael Kolb8233fac2010-10-26 16:08:53 -0700108 Controller getController() {
109 return mController;
Michael Kolba2b2ba82010-08-04 17:54:03 -0700110 }
111
The Android Open Source Project0c908882009-03-03 19:32:16 -0800112 @Override
113 protected void onNewIntent(Intent intent) {
John Reck63bb6872010-12-01 19:29:32 -0800114 if (ACTION_RESTART.equals(intent.getAction())) {
115 Bundle outState = new Bundle();
116 mController.onSaveInstanceState(outState);
117 finish();
118 getApplicationContext().startActivity(
119 new Intent(getApplicationContext(), BrowserActivity.class)
120 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
121 .putExtra(EXTRA_STATE, outState));
122 return;
123 }
Michael Kolb8233fac2010-10-26 16:08:53 -0700124 mController.handleNewIntent(intent);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800125 }
126
Grace Kloba22ac16e2009-10-07 18:00:23 -0700127 @Override
128 protected void onResume() {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800129 super.onResume();
Dave Bort31a6d1c2009-04-13 15:56:49 -0700130 if (LOGV_ENABLED) {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800131 Log.v(LOGTAG, "BrowserActivity.onResume: this=" + this);
132 }
Michael Kolb8233fac2010-10-26 16:08:53 -0700133 mController.onResume();
The Android Open Source Project0c908882009-03-03 19:32:16 -0800134 }
135
Leon Scrogginsa81a7642009-08-31 17:05:41 -0400136 @Override
137 public boolean onMenuOpened(int featureId, Menu menu) {
Leon Scroggins3bbb6ca2009-09-09 12:51:10 -0400138 if (Window.FEATURE_OPTIONS_PANEL == featureId) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700139 mController.onMenuOpened(featureId, menu);
Leon Scroggins3bbb6ca2009-09-09 12:51:10 -0400140 }
Leon Scrogginsa81a7642009-08-31 17:05:41 -0400141 return true;
142 }
143
Leon Scroggins3bbb6ca2009-09-09 12:51:10 -0400144 @Override
145 public void onOptionsMenuClosed(Menu menu) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700146 mController.onOptionsMenuClosed(menu);
Leon Scrogginsc6fa1102009-09-21 10:40:01 -0400147 }
148
Leon Scrogginsb2b19f52009-10-09 16:10:00 -0400149 @Override
150 public void onContextMenuClosed(Menu menu) {
151 super.onContextMenuClosed(menu);
Michael Kolb8233fac2010-10-26 16:08:53 -0700152 mController.onContextMenuClosed(menu);
Leon Scrogginsb2b19f52009-10-09 16:10:00 -0400153 }
154
Leon Scrogginsc6fa1102009-09-21 10:40:01 -0400155 /**
The Android Open Source Project0c908882009-03-03 19:32:16 -0800156 * onSaveInstanceState(Bundle map)
157 * onSaveInstanceState is called right before onStop(). The map contains
158 * the saved state.
159 */
Grace Kloba22ac16e2009-10-07 18:00:23 -0700160 @Override
161 protected void onSaveInstanceState(Bundle outState) {
Dave Bort31a6d1c2009-04-13 15:56:49 -0700162 if (LOGV_ENABLED) {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800163 Log.v(LOGTAG, "BrowserActivity.onSaveInstanceState: this=" + this);
164 }
Michael Kolb8233fac2010-10-26 16:08:53 -0700165 mController.onSaveInstanceState(outState);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800166 }
167
Grace Kloba22ac16e2009-10-07 18:00:23 -0700168 @Override
169 protected void onPause() {
Michael Kolb8233fac2010-10-26 16:08:53 -0700170 mController.onPause();
The Android Open Source Project0c908882009-03-03 19:32:16 -0800171 super.onPause();
The Android Open Source Project0c908882009-03-03 19:32:16 -0800172 }
173
Grace Kloba22ac16e2009-10-07 18:00:23 -0700174 @Override
175 protected void onDestroy() {
Dave Bort31a6d1c2009-04-13 15:56:49 -0700176 if (LOGV_ENABLED) {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800177 Log.v(LOGTAG, "BrowserActivity.onDestroy: this=" + this);
178 }
179 super.onDestroy();
Michael Kolb8233fac2010-10-26 16:08:53 -0700180 mController.onDestroy();
181 mUi = null;
182 mController = null;
The Android Open Source Project0c908882009-03-03 19:32:16 -0800183 }
184
185 @Override
186 public void onConfigurationChanged(Configuration newConfig) {
187 super.onConfigurationChanged(newConfig);
Michael Kolb8233fac2010-10-26 16:08:53 -0700188 mController.onConfgurationChanged(newConfig);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800189 }
190
Grace Kloba22ac16e2009-10-07 18:00:23 -0700191 @Override
192 public void onLowMemory() {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800193 super.onLowMemory();
Michael Kolb8233fac2010-10-26 16:08:53 -0700194 mController.onLowMemory();
Grace Kloba22ac16e2009-10-07 18:00:23 -0700195 }
196
The Android Open Source Project0c908882009-03-03 19:32:16 -0800197 @Override
198 public boolean onCreateOptionsMenu(Menu menu) {
199 super.onCreateOptionsMenu(menu);
Michael Kolb8233fac2010-10-26 16:08:53 -0700200 return mController.onCreateOptionsMenu(menu);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800201 }
202
203 @Override
Michael Kolb8233fac2010-10-26 16:08:53 -0700204 public boolean onPrepareOptionsMenu(Menu menu) {
205 super.onPrepareOptionsMenu(menu);
206 return mController.prepareOptionsMenu(menu);
Cary Clark01cfcdd2010-06-04 16:36:45 -0400207 }
208
The Android Open Source Project0c908882009-03-03 19:32:16 -0800209 @Override
210 public boolean onOptionsItemSelected(MenuItem item) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700211 if (!mController.onOptionsItemSelected(item)) {
212 return super.onOptionsItemSelected(item);
Michael Kolb370a4f32010-10-06 10:45:32 -0700213 }
The Android Open Source Project0c908882009-03-03 19:32:16 -0800214 return true;
215 }
216
217 @Override
218 public void onCreateContextMenu(ContextMenu menu, View v,
219 ContextMenuInfo menuInfo) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700220 mController.onCreateContextMenu(menu, v, menuInfo);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800221 }
222
Michael Kolb8233fac2010-10-26 16:08:53 -0700223 @Override
224 public boolean onContextItemSelected(MenuItem item) {
225 return mController.onContextItemSelected(item);
Grace Kloba22ac16e2009-10-07 18:00:23 -0700226 }
227
Grace Kloba5942df02009-09-18 11:48:29 -0700228 @Override
229 public boolean onKeyDown(int keyCode, KeyEvent event) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700230 return mController.onKeyDown(keyCode, event) ||
231 super.onKeyDown(keyCode, event);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800232 }
233
Grace Kloba5942df02009-09-18 11:48:29 -0700234 @Override
235 public boolean onKeyUp(int keyCode, KeyEvent event) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700236 return mController.onKeyUp(keyCode, event) ||
237 super.onKeyUp(keyCode, event);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800238 }
239
Michael Kolbe421c242010-10-04 19:29:01 -0700240 @Override
Michael Kolb8233fac2010-10-26 16:08:53 -0700241 public void onActionModeStarted(ActionMode mode) {
242 super.onActionModeStarted(mode);
243 mController.onActionModeStarted(mode);
Michael Kolbe421c242010-10-04 19:29:01 -0700244 }
245
Michael Kolbe421c242010-10-04 19:29:01 -0700246 @Override
Michael Kolb8233fac2010-10-26 16:08:53 -0700247 public void onActionModeFinished(ActionMode mode) {
248 super.onActionModeFinished(mode);
249 mController.onActionModeFinished(mode);
Michael Kolbe421c242010-10-04 19:29:01 -0700250 }
251
The Android Open Source Project0c908882009-03-03 19:32:16 -0800252 @Override
253 protected void onActivityResult(int requestCode, int resultCode,
Michael Kolb8233fac2010-10-26 16:08:53 -0700254 Intent intent) {
255 mController.onActivityResult(requestCode, resultCode, intent);
Andrei Popescu163ab742009-10-20 17:58:23 +0100256 }
257
Andrei Popescu56199cc2010-01-12 22:39:16 +0000258
The Android Open Source Project0c908882009-03-03 19:32:16 -0800259}