Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(631)

Side by Side Diff: chrome/android/testshell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java

Issue 186843002: Move ChromeShell files from chrome/android/testshell to chrome/android/shell. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.shell;
6
7 import android.app.Activity;
8 import android.content.Intent;
9 import android.content.res.TypedArray;
10 import android.os.Bundle;
11 import android.text.TextUtils;
12 import android.util.Log;
13 import android.view.KeyEvent;
14 import android.view.Menu;
15 import android.view.MenuItem;
16 import android.widget.Toast;
17
18 import com.google.common.annotations.VisibleForTesting;
19
20 import org.chromium.base.ApiCompatibilityUtils;
21 import org.chromium.base.BaseSwitches;
22 import org.chromium.base.CommandLine;
23 import org.chromium.base.MemoryPressureListener;
24 import org.chromium.base.library_loader.ProcessInitException;
25 import org.chromium.chrome.browser.DevToolsServer;
26 import org.chromium.chrome.browser.appmenu.AppMenuHandler;
27 import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate;
28 import org.chromium.chrome.browser.printing.PrintingControllerFactory;
29 import org.chromium.chrome.browser.printing.TabPrinter;
30 import org.chromium.chrome.shell.sync.SyncController;
31 import org.chromium.content.browser.ActivityContentVideoViewClient;
32 import org.chromium.content.browser.BrowserStartupController;
33 import org.chromium.content.browser.ContentView;
34 import org.chromium.content.browser.DeviceUtils;
35 import org.chromium.printing.PrintingController;
36 import org.chromium.sync.signin.ChromeSigninController;
37 import org.chromium.ui.base.ActivityWindowAndroid;
38 import org.chromium.ui.base.WindowAndroid;
39
40 /**
41 * The {@link android.app.Activity} component of a basic test shell to test Chro me features.
42 */
43 public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe legate {
44 private static final String TAG = "ChromeShellActivity";
45
46 private WindowAndroid mWindow;
47 private TabManager mTabManager;
48 private DevToolsServer mDevToolsServer;
49 private SyncController mSyncController;
50 private PrintingController mPrintingController;
51
52 private AppMenuHandler mAppMenuHandler;
53
54 @Override
55 protected void onCreate(final Bundle savedInstanceState) {
56 super.onCreate(savedInstanceState);
57
58 ChromeShellApplication.initCommandLine();
59 waitForDebuggerIfNeeded();
60
61 DeviceUtils.addDeviceSpecificUserAgentSwitch(this);
62
63 BrowserStartupController.StartupCallback callback =
64 new BrowserStartupController.StartupCallback() {
65 @Override
66 public void onSuccess(boolean alreadyStarted) {
67 finishInitialization(savedInstanceState);
68 }
69
70 @Override
71 public void onFailure() {
72 Toast.makeText(ChromeShellActivity.this,
73 R.string.browser_process_initialization_f ailed,
74 Toast.LENGTH_SHORT).show();
75 Log.e(TAG, "Chromium browser process initialization fail ed");
76 finish();
77 }
78 };
79 try {
80 BrowserStartupController.get(this).startBrowserProcessesAsync(callba ck);
81 }
82 catch (ProcessInitException e) {
83 Log.e(TAG, "Unable to load native library.", e);
84 System.exit(-1);
85 }
86 }
87
88 private void finishInitialization(final Bundle savedInstanceState) {
89 setContentView(R.layout.testshell_activity);
90 mTabManager = (TabManager) findViewById(R.id.tab_manager);
91
92 mWindow = new ActivityWindowAndroid(this);
93 mWindow.restoreInstanceState(savedInstanceState);
94 mTabManager.initialize(mWindow, new ActivityContentVideoViewClient(this) );
95
96 String startupUrl = getUrlFromIntent(getIntent());
97 if (!TextUtils.isEmpty(startupUrl)) {
98 mTabManager.setStartupUrl(startupUrl);
99 }
100 TestShellToolbar mToolbar = (TestShellToolbar) findViewById(R.id.toolbar );
101 mAppMenuHandler = new AppMenuHandler(this, this, R.menu.main_menu);
102 mToolbar.setMenuHandler(mAppMenuHandler);
103
104 mDevToolsServer = new DevToolsServer("chromium_testshell");
105 mDevToolsServer.setRemoteDebuggingEnabled(true);
106
107 mPrintingController = PrintingControllerFactory.create(this);
108
109 mSyncController = SyncController.get(this);
110 // In case this method is called after the first onStart(), we need to i nform the
111 // SyncController that we have started.
112 mSyncController.onStart();
113 }
114
115 @Override
116 protected void onDestroy() {
117 super.onDestroy();
118
119 if (mDevToolsServer != null) mDevToolsServer.destroy();
120 mDevToolsServer = null;
121 }
122
123 @Override
124 protected void onSaveInstanceState(Bundle outState) {
125 // TODO(dtrainor): Save/restore the tab state.
126 if (mWindow != null) mWindow.saveInstanceState(outState);
127 }
128
129 @Override
130 public boolean onKeyUp(int keyCode, KeyEvent event) {
131 if (keyCode == KeyEvent.KEYCODE_BACK) {
132 TestShellTab tab = getActiveTab();
133 if (tab != null && tab.getContentView().canGoBack()) {
134 tab.getContentView().goBack();
135 return true;
136 }
137 }
138
139 return super.onKeyUp(keyCode, event);
140 }
141
142 @Override
143 protected void onNewIntent(Intent intent) {
144 if (MemoryPressureListener.handleDebugIntent(this, intent.getAction())) return;
145
146 String url = getUrlFromIntent(intent);
147 if (!TextUtils.isEmpty(url)) {
148 TestShellTab tab = getActiveTab();
149 if (tab != null) tab.loadUrlWithSanitization(url);
150 }
151 }
152
153 @Override
154 protected void onStop() {
155 super.onStop();
156
157 ContentView view = getActiveContentView();
158 if (view != null) view.onHide();
159 }
160
161 @Override
162 protected void onStart() {
163 super.onStart();
164
165 ContentView view = getActiveContentView();
166 if (view != null) view.onShow();
167
168 if (mSyncController != null) {
169 mSyncController.onStart();
170 }
171 }
172
173 @Override
174 public void onActivityResult(int requestCode, int resultCode, Intent data) {
175 mWindow.onActivityResult(requestCode, resultCode, data);
176 }
177
178 /**
179 * @return The {@link WindowAndroid} associated with this activity.
180 */
181 public WindowAndroid getWindowAndroid() {
182 return mWindow;
183 }
184
185 /**
186 * @return The {@link TestShellTab} that is currently visible.
187 */
188 public TestShellTab getActiveTab() {
189 return mTabManager != null ? mTabManager.getCurrentTab() : null;
190 }
191
192 /**
193 * @return The ContentView of the active tab.
194 */
195 public ContentView getActiveContentView() {
196 TestShellTab tab = getActiveTab();
197 return tab != null ? tab.getContentView() : null;
198 }
199
200 /**
201 * Creates a {@link TestShellTab} with a URL specified by {@code url}.
202 *
203 * @param url The URL the new {@link TestShellTab} should start with.
204 */
205 @VisibleForTesting
206 public void createTab(String url) {
207 mTabManager.createTab(url);
208 }
209
210 /**
211 * Override the menu key event to show AppMenu.
212 */
213 @Override
214 public boolean onKeyDown(int keyCode, KeyEvent event) {
215 if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {
216 mAppMenuHandler.showAppMenu(findViewById(R.id.menu_button), true, fa lse);
217 return true;
218 }
219 return super.onKeyDown(keyCode, event);
220 }
221
222 @Override
223 public boolean onOptionsItemSelected(MenuItem item) {
224 switch (item.getItemId()) {
225 case R.id.signin:
226 if (ChromeSigninController.get(this).isSignedIn())
227 SyncController.openSignOutDialog(getFragmentManager());
228 else
229 SyncController.openSigninDialog(getFragmentManager());
230 return true;
231 case R.id.print:
232 if (getActiveTab() != null) {
233 mPrintingController.startPrint(new TabPrinter(getActiveTab() ));
234 }
235 return true;
236 case R.id.back_menu_id:
237 if (getActiveTab().canGoBack()) getActiveTab().goBack();
238 return true;
239 case R.id.forward_menu_id:
240 if (getActiveTab().canGoForward()) getActiveTab().goForward();
241 return true;
242 default:
243 return super.onOptionsItemSelected(item);
244 }
245 }
246
247 private void waitForDebuggerIfNeeded() {
248 if (CommandLine.getInstance().hasSwitch(BaseSwitches.WAIT_FOR_JAVA_DEBUG GER)) {
249 Log.e(TAG, "Waiting for Java debugger to connect...");
250 android.os.Debug.waitForDebugger();
251 Log.e(TAG, "Java debugger connected. Resuming execution.");
252 }
253 }
254
255 private static String getUrlFromIntent(Intent intent) {
256 return intent != null ? intent.getDataString() : null;
257 }
258
259 @Override
260 public boolean shouldShowAppMenu() {
261 return true;
262 }
263
264 @Override
265 public void prepareMenu(Menu menu) {
266 // Disable the "Back" menu item if there is no page to go to.
267 MenuItem backMenuItem = menu.findItem(R.id.back_menu_id);
268 backMenuItem.setEnabled(getActiveTab().canGoBack());
269
270 // Disable the "Forward" menu item if there is no page to go to.
271 MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id);
272 forwardMenuItem.setEnabled(getActiveTab().canGoForward());
273
274 // ChromeShell does not know about bookmarks yet
275 menu.findItem(R.id.bookmark_this_page_id).setEnabled(false);
276
277 MenuItem signinItem = menu.findItem(R.id.signin);
278 if (ChromeSigninController.get(this).isSignedIn()) {
279 signinItem.setTitle(ChromeSigninController.get(this).getSignedInAcco untName());
280 } else {
281 signinItem.setTitle(R.string.signin_sign_in);
282 }
283
284 menu.findItem(R.id.print).setVisible(ApiCompatibilityUtils.isPrintingSup ported());
285
286 menu.setGroupVisible(R.id.MAIN_MENU, true);
287 }
288
289 @Override
290 public boolean shouldShowIconRow() {
291 return true;
292 }
293
294 @Override
295 public int getMenuThemeResourceId() {
296 return android.R.style.Theme_Holo_Light;
297 }
298
299 @Override
300 public int getItemRowHeight() {
301 TypedArray a = obtainStyledAttributes(
302 new int[] {android.R.attr.listPreferredItemHeightSmall});
303 int itemRowHeight = a.getDimensionPixelSize(0, 0);
304 a.recycle();
305 return itemRowHeight;
306 }
307 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698