blob: 4bb8107d403a37c434324a285122f0206af6da03 [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
The Android Open Source Project0c908882009-03-03 19:32:16 -080019import android.app.Activity;
John Reck7878f222012-04-18 16:23:14 -070020import android.app.KeyguardManager;
John Reck9d27ff52011-02-11 17:47:54 -080021import android.content.Context;
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.os.Bundle;
John Reck7878f222012-04-18 16:23:14 -070025import android.os.PowerManager;
The Android Open Source Project0c908882009-03-03 19:32:16 -080026import android.util.Log;
Leon Scroggins III8e4fbf12010-08-17 16:58:15 -040027import android.view.ActionMode;
The Android Open Source Project0c908882009-03-03 19:32:16 -080028import android.view.ContextMenu;
Michael Kolba2b2ba82010-08-04 17:54:03 -070029import android.view.ContextMenu.ContextMenuInfo;
The Android Open Source Project0c908882009-03-03 19:32:16 -080030import android.view.KeyEvent;
The Android Open Source Project0c908882009-03-03 19:32:16 -080031import android.view.Menu;
The Android Open Source Project0c908882009-03-03 19:32:16 -080032import android.view.MenuItem;
Michael Kolbc3af0672011-08-09 10:24:41 -070033import android.view.MotionEvent;
The Android Open Source Project0c908882009-03-03 19:32:16 -080034import android.view.View;
The Android Open Source Project0c908882009-03-03 19:32:16 -080035import android.view.Window;
The Android Open Source Project0c908882009-03-03 19:32:16 -080036
John Reckd3e4d5b2011-07-13 15:48:43 -070037import com.google.common.annotations.VisibleForTesting;
38
Michael Kolb8233fac2010-10-26 16:08:53 -070039public class BrowserActivity extends Activity {
The Android Open Source Project0c908882009-03-03 19:32:16 -080040
John Reck439c9a52010-12-14 10:04:39 -080041 public static final String ACTION_SHOW_BOOKMARKS = "show_bookmarks";
42 public static final String ACTION_SHOW_BROWSER = "show_browser";
John Reck63bb6872010-12-01 19:29:32 -080043 public static final String ACTION_RESTART = "--restart--";
44 private static final String EXTRA_STATE = "state";
45
Michael Kolb8233fac2010-10-26 16:08:53 -070046 private final static String LOGTAG = "browser";
The Android Open Source Project0c908882009-03-03 19:32:16 -080047
John Reck6c2e2f32011-08-22 13:41:23 -070048 private final static boolean LOGV_ENABLED = 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) {
John Reck6c2e2f32011-08-22 13:41:23 -070056 Log.v(LOGTAG, this + " onStart, has state: "
57 + (icicle == null ? "false" : "true"));
The Android Open Source Project0c908882009-03-03 19:32:16 -080058 }
59 super.onCreate(icicle);
Derek Sollenbergerffa561e2010-11-16 14:19:01 -050060
John Reck7878f222012-04-18 16:23:14 -070061 if (shouldIgnoreIntents()) {
62 finish();
63 return;
64 }
65
John Reckf57c0292011-07-21 18:15:39 -070066 // If this was a web search request, pass it on to the default web
67 // search provider and finish this activity.
68 if (IntentHandler.handleWebSearchIntent(this, null, getIntent())) {
69 finish();
70 return;
71 }
George Mount3636d0a2011-11-21 09:08:21 -080072 mController = new Controller(this);
John Recka5176f32011-05-17 12:35:37 -070073 boolean xlarge = isTablet(this);
Michael Kolb66706532010-12-12 19:50:22 -080074 if (xlarge) {
75 mUi = new XLargeUi(this, mController);
76 } else {
77 mUi = new PhoneUi(this, mController);
78 }
Michael Kolb8233fac2010-10-26 16:08:53 -070079 mController.setUi(mUi);
The Android Open Source Project0c908882009-03-03 19:32:16 -080080
George Mount3636d0a2011-11-21 09:08:21 -080081 Intent intent = (icicle == null) ? getIntent() : null;
82 mController.start(intent);
The Android Open Source Project0c908882009-03-03 19:32:16 -080083 }
84
John Recka5176f32011-05-17 12:35:37 -070085 public static boolean isTablet(Context context) {
86 return context.getResources().getBoolean(R.bool.isTablet);
John Reck9d27ff52011-02-11 17:47:54 -080087 }
88
John Reck41554852010-12-01 12:53:37 -080089 @VisibleForTesting
Michael Kolb8233fac2010-10-26 16:08:53 -070090 Controller getController() {
91 return mController;
Michael Kolba2b2ba82010-08-04 17:54:03 -070092 }
93
The Android Open Source Project0c908882009-03-03 19:32:16 -080094 @Override
95 protected void onNewIntent(Intent intent) {
John Reck7878f222012-04-18 16:23:14 -070096 if (shouldIgnoreIntents()) return;
John Reck63bb6872010-12-01 19:29:32 -080097 if (ACTION_RESTART.equals(intent.getAction())) {
98 Bundle outState = new Bundle();
John Reck1cf4b792011-07-26 10:22:22 -070099 mController.onSaveInstanceState(outState);
John Reck63bb6872010-12-01 19:29:32 -0800100 finish();
101 getApplicationContext().startActivity(
102 new Intent(getApplicationContext(), BrowserActivity.class)
103 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
104 .putExtra(EXTRA_STATE, outState));
105 return;
106 }
Michael Kolb8233fac2010-10-26 16:08:53 -0700107 mController.handleNewIntent(intent);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800108 }
109
John Reck7878f222012-04-18 16:23:14 -0700110 private KeyguardManager mKeyguardManager;
111 private PowerManager mPowerManager;
112 private boolean shouldIgnoreIntents() {
113 // Only process intents if the screen is on and the device is unlocked
114 // aka, if we will be user-visible
115 if (mKeyguardManager == null) {
116 mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
117 }
118 if (mPowerManager == null) {
119 mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
120 }
121 boolean ignore = !mPowerManager.isScreenOn();
122 ignore |= mKeyguardManager.inKeyguardRestrictedInputMode();
123 if (LOGV_ENABLED) {
124 Log.v(LOGTAG, "ignore intents: " + ignore);
125 }
126 return ignore;
127 }
128
Grace Kloba22ac16e2009-10-07 18:00:23 -0700129 @Override
130 protected void onResume() {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800131 super.onResume();
Dave Bort31a6d1c2009-04-13 15:56:49 -0700132 if (LOGV_ENABLED) {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800133 Log.v(LOGTAG, "BrowserActivity.onResume: this=" + this);
134 }
Michael Kolb06f03e42010-12-06 10:18:26 -0800135 if (mController != null) {
136 mController.onResume();
137 }
The Android Open Source Project0c908882009-03-03 19:32:16 -0800138 }
139
Leon Scrogginsa81a7642009-08-31 17:05:41 -0400140 @Override
141 public boolean onMenuOpened(int featureId, Menu menu) {
Leon Scroggins3bbb6ca2009-09-09 12:51:10 -0400142 if (Window.FEATURE_OPTIONS_PANEL == featureId) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700143 mController.onMenuOpened(featureId, menu);
Leon Scroggins3bbb6ca2009-09-09 12:51:10 -0400144 }
Leon Scrogginsa81a7642009-08-31 17:05:41 -0400145 return true;
146 }
147
Leon Scroggins3bbb6ca2009-09-09 12:51:10 -0400148 @Override
149 public void onOptionsMenuClosed(Menu menu) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700150 mController.onOptionsMenuClosed(menu);
Leon Scrogginsc6fa1102009-09-21 10:40:01 -0400151 }
152
Leon Scrogginsb2b19f52009-10-09 16:10:00 -0400153 @Override
154 public void onContextMenuClosed(Menu menu) {
155 super.onContextMenuClosed(menu);
Michael Kolb8233fac2010-10-26 16:08:53 -0700156 mController.onContextMenuClosed(menu);
Leon Scrogginsb2b19f52009-10-09 16:10:00 -0400157 }
158
Leon Scrogginsc6fa1102009-09-21 10:40:01 -0400159 /**
The Android Open Source Project0c908882009-03-03 19:32:16 -0800160 * onSaveInstanceState(Bundle map)
161 * onSaveInstanceState is called right before onStop(). The map contains
162 * the saved state.
163 */
Grace Kloba22ac16e2009-10-07 18:00:23 -0700164 @Override
165 protected void onSaveInstanceState(Bundle outState) {
Dave Bort31a6d1c2009-04-13 15:56:49 -0700166 if (LOGV_ENABLED) {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800167 Log.v(LOGTAG, "BrowserActivity.onSaveInstanceState: this=" + this);
168 }
John Reck1cf4b792011-07-26 10:22:22 -0700169 mController.onSaveInstanceState(outState);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800170 }
171
Grace Kloba22ac16e2009-10-07 18:00:23 -0700172 @Override
173 protected void onPause() {
Michael Kolb06f03e42010-12-06 10:18:26 -0800174 if (mController != null) {
175 mController.onPause();
176 }
The Android Open Source Project0c908882009-03-03 19:32:16 -0800177 super.onPause();
The Android Open Source Project0c908882009-03-03 19:32:16 -0800178 }
179
Grace Kloba22ac16e2009-10-07 18:00:23 -0700180 @Override
181 protected void onDestroy() {
Dave Bort31a6d1c2009-04-13 15:56:49 -0700182 if (LOGV_ENABLED) {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800183 Log.v(LOGTAG, "BrowserActivity.onDestroy: this=" + this);
184 }
185 super.onDestroy();
Michael Kolb06f03e42010-12-06 10:18:26 -0800186 if (mController != null) {
187 mController.onDestroy();
188 }
Michael Kolb8233fac2010-10-26 16:08:53 -0700189 mUi = null;
190 mController = null;
The Android Open Source Project0c908882009-03-03 19:32:16 -0800191 }
192
193 @Override
194 public void onConfigurationChanged(Configuration newConfig) {
195 super.onConfigurationChanged(newConfig);
John Reck40e7f352012-05-09 10:49:28 -0700196 if (mController != null) {
197 mController.onConfgurationChanged(newConfig);
198 }
The Android Open Source Project0c908882009-03-03 19:32:16 -0800199 }
200
Grace Kloba22ac16e2009-10-07 18:00:23 -0700201 @Override
202 public void onLowMemory() {
The Android Open Source Project0c908882009-03-03 19:32:16 -0800203 super.onLowMemory();
Michael Kolb8233fac2010-10-26 16:08:53 -0700204 mController.onLowMemory();
Grace Kloba22ac16e2009-10-07 18:00:23 -0700205 }
206
The Android Open Source Project0c908882009-03-03 19:32:16 -0800207 @Override
208 public boolean onCreateOptionsMenu(Menu menu) {
209 super.onCreateOptionsMenu(menu);
Michael Kolb2b552f52012-05-14 08:31:04 -0700210 return (mController != null) && mController.onCreateOptionsMenu(menu);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800211 }
212
213 @Override
Michael Kolb8233fac2010-10-26 16:08:53 -0700214 public boolean onPrepareOptionsMenu(Menu menu) {
215 super.onPrepareOptionsMenu(menu);
John Reckb3417f02011-01-14 11:01:05 -0800216 return mController.onPrepareOptionsMenu(menu);
Cary Clark01cfcdd2010-06-04 16:36:45 -0400217 }
218
The Android Open Source Project0c908882009-03-03 19:32:16 -0800219 @Override
220 public boolean onOptionsItemSelected(MenuItem item) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700221 if (!mController.onOptionsItemSelected(item)) {
222 return super.onOptionsItemSelected(item);
Michael Kolb370a4f32010-10-06 10:45:32 -0700223 }
The Android Open Source Project0c908882009-03-03 19:32:16 -0800224 return true;
225 }
226
227 @Override
228 public void onCreateContextMenu(ContextMenu menu, View v,
229 ContextMenuInfo menuInfo) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700230 mController.onCreateContextMenu(menu, v, menuInfo);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800231 }
232
Michael Kolb8233fac2010-10-26 16:08:53 -0700233 @Override
234 public boolean onContextItemSelected(MenuItem item) {
235 return mController.onContextItemSelected(item);
Grace Kloba22ac16e2009-10-07 18:00:23 -0700236 }
237
Grace Kloba5942df02009-09-18 11:48:29 -0700238 @Override
239 public boolean onKeyDown(int keyCode, KeyEvent event) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700240 return mController.onKeyDown(keyCode, event) ||
241 super.onKeyDown(keyCode, event);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800242 }
243
Grace Kloba5942df02009-09-18 11:48:29 -0700244 @Override
John Recke6bf4ab2011-02-24 15:48:05 -0800245 public boolean onKeyLongPress(int keyCode, KeyEvent event) {
246 return mController.onKeyLongPress(keyCode, event) ||
247 super.onKeyLongPress(keyCode, event);
248 }
249
250 @Override
Grace Kloba5942df02009-09-18 11:48:29 -0700251 public boolean onKeyUp(int keyCode, KeyEvent event) {
Michael Kolb8233fac2010-10-26 16:08:53 -0700252 return mController.onKeyUp(keyCode, event) ||
253 super.onKeyUp(keyCode, event);
The Android Open Source Project0c908882009-03-03 19:32:16 -0800254 }
255
Michael Kolbe421c242010-10-04 19:29:01 -0700256 @Override
Michael Kolb8233fac2010-10-26 16:08:53 -0700257 public void onActionModeStarted(ActionMode mode) {
258 super.onActionModeStarted(mode);
259 mController.onActionModeStarted(mode);
Michael Kolbe421c242010-10-04 19:29:01 -0700260 }
261
Michael Kolbe421c242010-10-04 19:29:01 -0700262 @Override
Michael Kolb8233fac2010-10-26 16:08:53 -0700263 public void onActionModeFinished(ActionMode mode) {
264 super.onActionModeFinished(mode);
265 mController.onActionModeFinished(mode);
Michael Kolbe421c242010-10-04 19:29:01 -0700266 }
267
The Android Open Source Project0c908882009-03-03 19:32:16 -0800268 @Override
269 protected void onActivityResult(int requestCode, int resultCode,
Michael Kolb8233fac2010-10-26 16:08:53 -0700270 Intent intent) {
271 mController.onActivityResult(requestCode, resultCode, intent);
Andrei Popescu163ab742009-10-20 17:58:23 +0100272 }
273
Michael Kolbfbc579a2011-07-07 15:59:33 -0700274 @Override
275 public boolean onSearchRequested() {
276 return mController.onSearchRequested();
277 }
278
Michael Kolbc3af0672011-08-09 10:24:41 -0700279 @Override
280 public boolean dispatchKeyEvent(KeyEvent event) {
281 return mController.dispatchKeyEvent(event)
282 || super.dispatchKeyEvent(event);
283 }
284
285 @Override
286 public boolean dispatchKeyShortcutEvent(KeyEvent event) {
287 return mController.dispatchKeyShortcutEvent(event)
288 || super.dispatchKeyShortcutEvent(event);
289 }
290
291 @Override
292 public boolean dispatchTouchEvent(MotionEvent ev) {
293 return mController.dispatchTouchEvent(ev)
294 || super.dispatchTouchEvent(ev);
295 }
296
297 @Override
298 public boolean dispatchTrackballEvent(MotionEvent ev) {
299 return mController.dispatchTrackballEvent(ev)
300 || super.dispatchTrackballEvent(ev);
301 }
302
303 @Override
304 public boolean dispatchGenericMotionEvent(MotionEvent ev) {
305 return mController.dispatchGenericMotionEvent(ev) ||
306 super.dispatchGenericMotionEvent(ev);
307 }
308
The Android Open Source Project0c908882009-03-03 19:32:16 -0800309}