• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 package com.android.browser;
18 
19 import android.app.Activity;
20 import android.app.KeyguardManager;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.content.res.Configuration;
24 import android.os.Bundle;
25 import android.os.PowerManager;
26 import android.util.Log;
27 import android.view.ActionMode;
28 import android.view.ContextMenu;
29 import android.view.ContextMenu.ContextMenuInfo;
30 import android.view.KeyEvent;
31 import android.view.Menu;
32 import android.view.MenuItem;
33 import android.view.MotionEvent;
34 import android.view.View;
35 import android.view.Window;
36 
37 import com.android.browser.stub.NullController;
38 import com.google.common.annotations.VisibleForTesting;
39 
40 public class BrowserActivity extends Activity {
41 
42     public static final String ACTION_SHOW_BOOKMARKS = "show_bookmarks";
43     public static final String ACTION_SHOW_BROWSER = "show_browser";
44     public static final String ACTION_RESTART = "--restart--";
45     private static final String EXTRA_STATE = "state";
46 
47     private final static String LOGTAG = "browser";
48 
49     private final static boolean LOGV_ENABLED = Browser.LOGV_ENABLED;
50 
51     private ActivityController mController = NullController.INSTANCE;
52 
53     @Override
onCreate(Bundle icicle)54     public void onCreate(Bundle icicle) {
55         if (LOGV_ENABLED) {
56             Log.v(LOGTAG, this + " onStart, has state: "
57                     + (icicle == null ? "false" : "true"));
58         }
59         super.onCreate(icicle);
60 
61         if (shouldIgnoreIntents()) {
62             finish();
63             return;
64         }
65 
66         // 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         }
72         mController = createController();
73 
74         Intent intent = (icicle == null) ? getIntent() : null;
75         mController.start(intent);
76     }
77 
isTablet(Context context)78     public static boolean isTablet(Context context) {
79         return context.getResources().getBoolean(R.bool.isTablet);
80     }
81 
createController()82     private Controller createController() {
83         Controller controller = new Controller(this);
84         boolean xlarge = isTablet(this);
85         UI ui = null;
86         if (xlarge) {
87             ui = new XLargeUi(this, controller);
88         } else {
89             ui = new PhoneUi(this, controller);
90         }
91         controller.setUi(ui);
92         return controller;
93     }
94 
95     @VisibleForTesting
getController()96     Controller getController() {
97         return (Controller) mController;
98     }
99 
100     @Override
onNewIntent(Intent intent)101     protected void onNewIntent(Intent intent) {
102         if (shouldIgnoreIntents()) return;
103         if (ACTION_RESTART.equals(intent.getAction())) {
104             Bundle outState = new Bundle();
105             mController.onSaveInstanceState(outState);
106             finish();
107             getApplicationContext().startActivity(
108                     new Intent(getApplicationContext(), BrowserActivity.class)
109                     .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
110                     .putExtra(EXTRA_STATE, outState));
111             return;
112         }
113         mController.handleNewIntent(intent);
114     }
115 
116     private KeyguardManager mKeyguardManager;
117     private PowerManager mPowerManager;
shouldIgnoreIntents()118     private boolean shouldIgnoreIntents() {
119         // Only process intents if the screen is on and the device is unlocked
120         // aka, if we will be user-visible
121         if (mKeyguardManager == null) {
122             mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
123         }
124         if (mPowerManager == null) {
125             mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
126         }
127         boolean ignore = !mPowerManager.isScreenOn();
128         ignore |= mKeyguardManager.inKeyguardRestrictedInputMode();
129         if (LOGV_ENABLED) {
130             Log.v(LOGTAG, "ignore intents: " + ignore);
131         }
132         return ignore;
133     }
134 
135     @Override
onResume()136     protected void onResume() {
137         super.onResume();
138         if (LOGV_ENABLED) {
139             Log.v(LOGTAG, "BrowserActivity.onResume: this=" + this);
140         }
141         mController.onResume();
142     }
143 
144     @Override
onMenuOpened(int featureId, Menu menu)145     public boolean onMenuOpened(int featureId, Menu menu) {
146         if (Window.FEATURE_OPTIONS_PANEL == featureId) {
147             mController.onMenuOpened(featureId, menu);
148         }
149         return true;
150     }
151 
152     @Override
onOptionsMenuClosed(Menu menu)153     public void onOptionsMenuClosed(Menu menu) {
154         mController.onOptionsMenuClosed(menu);
155     }
156 
157     @Override
onContextMenuClosed(Menu menu)158     public void onContextMenuClosed(Menu menu) {
159         super.onContextMenuClosed(menu);
160         mController.onContextMenuClosed(menu);
161     }
162 
163     /**
164      *  onSaveInstanceState(Bundle map)
165      *  onSaveInstanceState is called right before onStop(). The map contains
166      *  the saved state.
167      */
168     @Override
onSaveInstanceState(Bundle outState)169     protected void onSaveInstanceState(Bundle outState) {
170         if (LOGV_ENABLED) {
171             Log.v(LOGTAG, "BrowserActivity.onSaveInstanceState: this=" + this);
172         }
173         mController.onSaveInstanceState(outState);
174     }
175 
176     @Override
onPause()177     protected void onPause() {
178         mController.onPause();
179         super.onPause();
180     }
181 
182     @Override
onDestroy()183     protected void onDestroy() {
184         if (LOGV_ENABLED) {
185             Log.v(LOGTAG, "BrowserActivity.onDestroy: this=" + this);
186         }
187         super.onDestroy();
188         mController.onDestroy();
189         mController = NullController.INSTANCE;
190     }
191 
192     @Override
onConfigurationChanged(Configuration newConfig)193     public void onConfigurationChanged(Configuration newConfig) {
194         super.onConfigurationChanged(newConfig);
195         mController.onConfgurationChanged(newConfig);
196     }
197 
198     @Override
onLowMemory()199     public void onLowMemory() {
200         super.onLowMemory();
201         mController.onLowMemory();
202     }
203 
204     @Override
onCreateOptionsMenu(Menu menu)205     public boolean onCreateOptionsMenu(Menu menu) {
206         super.onCreateOptionsMenu(menu);
207         return mController.onCreateOptionsMenu(menu);
208     }
209 
210     @Override
onPrepareOptionsMenu(Menu menu)211     public boolean onPrepareOptionsMenu(Menu menu) {
212         super.onPrepareOptionsMenu(menu);
213         return mController.onPrepareOptionsMenu(menu);
214     }
215 
216     @Override
onOptionsItemSelected(MenuItem item)217     public boolean onOptionsItemSelected(MenuItem item) {
218         if (!mController.onOptionsItemSelected(item)) {
219             return super.onOptionsItemSelected(item);
220         }
221         return true;
222     }
223 
224     @Override
onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)225     public void onCreateContextMenu(ContextMenu menu, View v,
226             ContextMenuInfo menuInfo) {
227         mController.onCreateContextMenu(menu, v, menuInfo);
228     }
229 
230     @Override
onContextItemSelected(MenuItem item)231     public boolean onContextItemSelected(MenuItem item) {
232         return mController.onContextItemSelected(item);
233     }
234 
235     @Override
onKeyDown(int keyCode, KeyEvent event)236     public boolean onKeyDown(int keyCode, KeyEvent event) {
237         return mController.onKeyDown(keyCode, event) ||
238             super.onKeyDown(keyCode, event);
239     }
240 
241     @Override
onKeyLongPress(int keyCode, KeyEvent event)242     public boolean onKeyLongPress(int keyCode, KeyEvent event) {
243         return mController.onKeyLongPress(keyCode, event) ||
244             super.onKeyLongPress(keyCode, event);
245     }
246 
247     @Override
onKeyUp(int keyCode, KeyEvent event)248     public boolean onKeyUp(int keyCode, KeyEvent event) {
249         return mController.onKeyUp(keyCode, event) ||
250             super.onKeyUp(keyCode, event);
251     }
252 
253     @Override
onActionModeStarted(ActionMode mode)254     public void onActionModeStarted(ActionMode mode) {
255         super.onActionModeStarted(mode);
256         mController.onActionModeStarted(mode);
257     }
258 
259     @Override
onActionModeFinished(ActionMode mode)260     public void onActionModeFinished(ActionMode mode) {
261         super.onActionModeFinished(mode);
262         mController.onActionModeFinished(mode);
263     }
264 
265     @Override
onActivityResult(int requestCode, int resultCode, Intent intent)266     protected void onActivityResult(int requestCode, int resultCode,
267             Intent intent) {
268         mController.onActivityResult(requestCode, resultCode, intent);
269     }
270 
271     @Override
onSearchRequested()272     public boolean onSearchRequested() {
273         return mController.onSearchRequested();
274     }
275 
276     @Override
dispatchKeyEvent(KeyEvent event)277     public boolean dispatchKeyEvent(KeyEvent event) {
278         return mController.dispatchKeyEvent(event)
279                 || super.dispatchKeyEvent(event);
280     }
281 
282     @Override
dispatchKeyShortcutEvent(KeyEvent event)283     public boolean dispatchKeyShortcutEvent(KeyEvent event) {
284         return mController.dispatchKeyShortcutEvent(event)
285                 || super.dispatchKeyShortcutEvent(event);
286     }
287 
288     @Override
dispatchTouchEvent(MotionEvent ev)289     public boolean dispatchTouchEvent(MotionEvent ev) {
290         return mController.dispatchTouchEvent(ev)
291                 || super.dispatchTouchEvent(ev);
292     }
293 
294     @Override
dispatchTrackballEvent(MotionEvent ev)295     public boolean dispatchTrackballEvent(MotionEvent ev) {
296         return mController.dispatchTrackballEvent(ev)
297                 || super.dispatchTrackballEvent(ev);
298     }
299 
300     @Override
dispatchGenericMotionEvent(MotionEvent ev)301     public boolean dispatchGenericMotionEvent(MotionEvent ev) {
302         return mController.dispatchGenericMotionEvent(ev) ||
303                 super.dispatchGenericMotionEvent(ev);
304     }
305 
306 }
307