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