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

Unified Diff: chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java

Issue 1314413004: Cast ChromeShell into the fiery pit of Mount Doom. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
diff --git a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
deleted file mode 100644
index 75feed0d4d4c4e7a79afb572030b100816ef4afd..0000000000000000000000000000000000000000
--- a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
+++ /dev/null
@@ -1,497 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.shell;
-
-import android.app.Activity;
-import android.app.FragmentManager;
-import android.app.Notification;
-import android.content.Intent;
-import android.os.Bundle;
-import android.provider.Browser;
-import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-
-import org.chromium.base.ApiCompatibilityUtils;
-import org.chromium.base.BaseSwitches;
-import org.chromium.base.CommandLine;
-import org.chromium.base.ContentUriUtils;
-import org.chromium.base.MemoryPressureListener;
-import org.chromium.base.VisibleForTesting;
-import org.chromium.base.annotations.SuppressFBWarnings;
-import org.chromium.base.library_loader.LibraryProcessType;
-import org.chromium.base.library_loader.ProcessInitException;
-import org.chromium.chrome.browser.DevToolsServer;
-import org.chromium.chrome.browser.FileProviderHelper;
-import org.chromium.chrome.browser.WarmupManager;
-import org.chromium.chrome.browser.WebsiteSettingsPopup;
-import org.chromium.chrome.browser.appmenu.AppMenuHandler;
-import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate;
-import org.chromium.chrome.browser.dom_distiller.DomDistillerTabUtils;
-import org.chromium.chrome.browser.nfc.BeamController;
-import org.chromium.chrome.browser.nfc.BeamProvider;
-import org.chromium.chrome.browser.notifications.NotificationUIManager;
-import org.chromium.chrome.browser.preferences.PreferencesLauncher;
-import org.chromium.chrome.browser.printing.PrintingControllerFactory;
-import org.chromium.chrome.browser.printing.TabPrinter;
-import org.chromium.chrome.browser.share.ShareHelper;
-import org.chromium.chrome.browser.sync.SyncController;
-import org.chromium.chrome.browser.tab.Tab;
-import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
-import org.chromium.chrome.browser.tabmodel.TabModelSelector;
-import org.chromium.chrome.shell.signin.AccountChooserFragment;
-import org.chromium.chrome.shell.signin.SignoutFragment;
-import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
-import org.chromium.components.service_tab_launcher.ServiceTabLauncher;
-import org.chromium.content.app.ContentApplication;
-import org.chromium.content.browser.ActivityContentVideoViewClient;
-import org.chromium.content.browser.BrowserStartupController;
-import org.chromium.content.browser.ContentViewCore;
-import org.chromium.content.browser.DeviceUtils;
-import org.chromium.printing.PrintManagerDelegateImpl;
-import org.chromium.printing.PrintingController;
-import org.chromium.sync.signin.AccountManagerHelper;
-import org.chromium.sync.signin.ChromeSigninController;
-import org.chromium.ui.base.ActivityWindowAndroid;
-import org.chromium.ui.base.WindowAndroid;
-import org.chromium.ui.widget.Toast;
-
-/**
- * The {@link android.app.Activity} component of a basic test shell to test Chrome features.
- */
-public class ChromeShellActivity extends AppCompatActivity implements AppMenuPropertiesDelegate {
- private static final String TAG = "ChromeShellActivity";
-
- /**
- * Factory used to set up a mock ActivityWindowAndroid for testing.
- */
- public interface ActivityWindowAndroidFactory {
- /**
- * @return ActivityWindowAndroid for the given activity.
- */
- public ActivityWindowAndroid getActivityWindowAndroid(Activity activity);
- }
-
- private static ActivityWindowAndroidFactory sWindowAndroidFactory =
- new ActivityWindowAndroidFactory() {
- @Override
- public ActivityWindowAndroid getActivityWindowAndroid(Activity activity) {
- final boolean listenToActivityState = true;
- return new ActivityWindowAndroid(activity, listenToActivityState);
- }
- };
-
- private ActivityWindowAndroid mWindow;
- private TabManager mTabManager;
- private ChromeShellToolbar mToolbar;
- private DevToolsServer mDevToolsServer;
- private SyncController mSyncController;
- private PrintingController mPrintingController;
-
- /**
- * Factory used to set up a mock AppMenuHandler for testing.
- */
- public interface AppMenuHandlerFactory {
- /**
- * @return AppMenuHandler for the given activity and menu resource id.
- */
- public AppMenuHandler getAppMenuHandler(Activity activity,
- AppMenuPropertiesDelegate delegate, int menuResourceId);
- }
-
- private AppMenuHandler mAppMenuHandler;
-
- @Override
- @SuppressFBWarnings("DM_EXIT")
- protected void onCreate(final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- ContentApplication.initCommandLine(this);
- waitForDebuggerIfNeeded();
-
- DeviceUtils.addDeviceSpecificUserAgentSwitch(this);
-
- String url = getUrlFromIntent(getIntent());
- if (url != null) {
- WarmupManager.getInstance().maybePrefetchDnsForUrlInBackground(this, url);
- }
-
- BrowserStartupController.StartupCallback callback =
- new BrowserStartupController.StartupCallback() {
- @Override
- public void onSuccess(boolean alreadyStarted) {
- finishInitialization(savedInstanceState);
- }
-
- @Override
- public void onFailure() {
- Toast.makeText(ChromeShellActivity.this,
- R.string.browser_process_initialization_failed,
- Toast.LENGTH_SHORT).show();
- Log.e(TAG, "Chromium browser process initialization failed");
- finish();
- }
- };
- try {
- BrowserStartupController.get(this, LibraryProcessType.PROCESS_BROWSER)
- .startBrowserProcessesAsync(callback);
- } catch (ProcessInitException e) {
- Log.e(TAG, "Unable to load native library.", e);
- System.exit(-1);
- }
- }
-
- private void finishInitialization(final Bundle savedInstanceState) {
- setContentView(R.layout.chrome_shell_activity);
- mTabManager = (TabManager) findViewById(R.id.tab_manager);
-
- mWindow = sWindowAndroidFactory.getActivityWindowAndroid(this);
- mWindow.restoreInstanceState(savedInstanceState);
- mTabManager.initialize(mWindow, new ActivityContentVideoViewClient(this) {
- @Override
- public void enterFullscreenVideo(View view) {
- super.enterFullscreenVideo(view);
- if (mTabManager != null) {
- mTabManager.setOverlayVideoMode(true);
- }
- }
-
- @Override
- public void exitFullscreenVideo() {
- super.exitFullscreenVideo();
- if (mTabManager != null) {
- mTabManager.setOverlayVideoMode(false);
- }
- }
- });
- // Set up the animation placeholder to be the SurfaceView. This disables the
- // SurfaceView's 'hole' clipping during animations that are notified to the window.
- mWindow.setAnimationPlaceholderView(
- mTabManager.getContentViewRenderView().getSurfaceView());
-
- String startupUrl = getUrlFromIntent(getIntent());
- if (!TextUtils.isEmpty(startupUrl)) {
- mTabManager.setStartupUrl(startupUrl);
- }
- mToolbar = (ChromeShellToolbar) findViewById(R.id.toolbar);
- mAppMenuHandler = new AppMenuHandler(this, this, R.menu.chrome_shell_main_menu);
- mToolbar.setMenuHandler(mAppMenuHandler);
-
- mDevToolsServer = new DevToolsServer("chrome_shell");
- mDevToolsServer.setRemoteDebuggingEnabled(
- true, DevToolsServer.Security.ALLOW_DEBUG_PERMISSION);
-
- mPrintingController = PrintingControllerFactory.create(this);
-
- mSyncController = SyncController.get(this);
- // In case this method is called after the first onStart(), we need to inform the
- // SyncController that we have started.
- mSyncController.updateSyncStateFromAndroid();
- ContentUriUtils.setFileProviderUtil(new FileProviderHelper());
-
- BeamController.registerForBeam(this, new BeamProvider() {
- @Override
- public String getTabUrlForBeam() {
- ChromeShellTab tab = getActiveTab();
- if (tab == null) return null;
- return tab.getUrl();
- }
- });
-
- // The notification settings cog on the flipped side of Notifications and in the Android
- // Settings "App Notifications" view will open us with a specific category.
- if (getIntent().hasCategory(Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES)) {
- NotificationUIManager.launchNotificationPreferences(this, getIntent());
- }
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
-
- if (mDevToolsServer != null) mDevToolsServer.destroy();
- mDevToolsServer = null;
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- // TODO(dtrainor): Save/restore the tab state.
- if (mWindow != null) mWindow.saveInstanceState(outState);
- }
-
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- if (mTabManager.isTabSwitcherVisible()) {
- mTabManager.hideTabSwitcher();
- return true;
- }
- ChromeShellTab tab = getActiveTab();
- if (tab != null && tab.canGoBack()) {
- tab.goBack();
- return true;
- }
- }
- return super.onKeyUp(keyCode, event);
- }
-
- @Override
- protected void onNewIntent(Intent intent) {
- if (MemoryPressureListener.handleDebugIntent(this, intent.getAction())) return;
-
- String url = getUrlFromIntent(intent);
- if (TextUtils.isEmpty(url)) return;
-
- if (intent.getBooleanExtra(Browser.EXTRA_CREATE_NEW_TAB, false)) {
- if (mTabManager == null) return;
-
- Tab newTab = mTabManager.createTab(url, TabLaunchType.FROM_LINK);
- if (newTab != null && intent.hasExtra(ServiceTabLauncher.LAUNCH_REQUEST_ID_EXTRA)) {
- ServiceTabLauncher.onWebContentsForRequestAvailable(
- intent.getIntExtra(ServiceTabLauncher.LAUNCH_REQUEST_ID_EXTRA, 0),
- newTab.getWebContents());
- }
-
- return;
- }
-
- ChromeShellTab tab = getActiveTab();
- if (tab != null) tab.loadUrlWithSanitization(url);
- }
-
- @Override
- protected void onStop() {
- super.onStop();
-
- if (mToolbar != null) mToolbar.hideSuggestions();
- }
-
- @Override
- protected void onStart() {
- super.onStart();
-
- Tab activeTab = getActiveTab();
- if (activeTab != null) activeTab.onActivityStart();
-
- if (mSyncController != null) {
- mSyncController.updateSyncStateFromAndroid();
- }
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- mWindow.onActivityResult(requestCode, resultCode, data);
- }
-
- /**
- * @return The {@link WindowAndroid} associated with this activity.
- */
- public WindowAndroid getWindowAndroid() {
- return mWindow;
- }
-
- /**
- * @return The {@link ChromeShellTab} that is currently visible.
- */
- public ChromeShellTab getActiveTab() {
- return mTabManager != null ? mTabManager.getCurrentTab() : null;
- }
-
- /**
- * @return The ContentViewCore of the active tab.
- */
- public ContentViewCore getActiveContentViewCore() {
- ChromeShellTab tab = getActiveTab();
- return tab != null ? tab.getContentViewCore() : null;
- }
-
- /**
- * Creates a {@link ChromeShellTab} with a URL specified by {@code url}.
- *
- * @param url The URL the new {@link ChromeShellTab} should start with.
- */
- @VisibleForTesting
- public void createTab(String url) {
- mTabManager.createTab(url, TabLaunchType.FROM_EXTERNAL_APP);
- }
-
- /**
- * Closes all current tabs.
- */
- public void closeAllTabs() {
- mTabManager.closeAllTabs();
- }
-
- @VisibleForTesting
- public void closeTab() {
- mTabManager.closeTab();
- }
-
- /**
- * Override the menu key event to show AppMenu.
- */
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {
- if (mToolbar != null) mToolbar.hideSuggestions();
- mAppMenuHandler.showAppMenu(findViewById(R.id.menu_button), false);
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
-
- @SuppressWarnings("deprecation")
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- ChromeShellTab activeTab = getActiveTab();
- if (activeTab != null) {
- ViewGroup containerView = activeTab.getContentViewCore().getContainerView();
- if (containerView.isFocusable() && containerView.isFocusableInTouchMode()) {
- containerView.requestFocus();
- }
- }
- int id = item.getItemId();
- if (id == R.id.signin) {
- if (ChromeSigninController.get(this).isSignedIn()) {
- openSignOutDialog(getFragmentManager());
- } else if (AccountManagerHelper.get(this).hasGoogleAccounts()) {
- openSigninDialog(getFragmentManager());
- } else {
- Toast.makeText(this, R.string.signin_no_account, Toast.LENGTH_SHORT).show();
- }
- return true;
- } else if (id == R.id.print) {
- if (activeTab != null) {
- mPrintingController.startPrint(new TabPrinter(activeTab),
- new PrintManagerDelegateImpl(this));
- }
- return true;
- } else if (id == R.id.distill_page) {
- if (activeTab != null) {
- DomDistillerTabUtils.distillCurrentPageAndView(
- activeTab.getContentViewCore().getWebContents());
- }
- return true;
- } else if (id == R.id.back_menu_id) {
- if (activeTab != null && activeTab.canGoBack()) {
- activeTab.goBack();
- }
- return true;
- } else if (id == R.id.forward_menu_id) {
- if (activeTab != null && activeTab.canGoForward()) {
- activeTab.goForward();
- }
- return true;
- } else if (id == R.id.info_menu_id) {
- WebsiteSettingsPopup.show(this, activeTab.getProfile(), activeTab.getWebContents());
- return true;
- } else if (id == R.id.new_tab_menu_id) {
- mTabManager.createNewTab();
- return true;
- } else if (id == R.id.share_menu_id || id == R.id.direct_share_menu_id) {
- ShareHelper.share(item.getItemId() == R.id.direct_share_menu_id, this,
- activeTab.getTitle(), activeTab.getUrl(), null);
- return true;
- } else if (id == R.id.preferences) {
- PreferencesLauncher.launchSettingsPage(this, null);
- return true;
- } else {
- return super.onOptionsItemSelected(item);
- }
- }
-
- private void waitForDebuggerIfNeeded() {
- if (CommandLine.getInstance().hasSwitch(BaseSwitches.WAIT_FOR_JAVA_DEBUGGER)) {
- Log.e(TAG, "Waiting for Java debugger to connect...");
- android.os.Debug.waitForDebugger();
- Log.e(TAG, "Java debugger connected. Resuming execution.");
- }
- }
-
- private static String getUrlFromIntent(Intent intent) {
- return intent != null ? intent.getDataString() : null;
- }
-
- @Override
- public boolean shouldShowAppMenu() {
- return true;
- }
-
- @Override
- public int getFooterResourceId() {
- return 0;
- }
-
- @Override
- public void prepareMenu(Menu menu) {
- menu.setGroupVisible(R.id.MAIN_MENU, true);
- ChromeShellTab activeTab = getActiveTab();
-
- // Disable the "Back" menu item if there is no page to go to.
- MenuItem backMenuItem = menu.findItem(R.id.back_menu_id);
- backMenuItem.setEnabled(activeTab != null ? activeTab.canGoBack() : false);
-
- // Disable the "Forward" menu item if there is no page to go to.
- MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id);
- forwardMenuItem.setEnabled(activeTab != null ? activeTab.canGoForward() : false);
-
- // ChromeShell does not know about bookmarks yet
- menu.findItem(R.id.bookmark_this_page_id).setEnabled(true);
-
- MenuItem signinItem = menu.findItem(R.id.signin);
- if (ChromeSigninController.get(this).isSignedIn()) {
- signinItem.setTitle(ChromeSigninController.get(this).getSignedInAccountName());
- } else {
- signinItem.setTitle(R.string.signin_sign_in);
- }
-
- menu.findItem(R.id.print).setVisible(ApiCompatibilityUtils.isPrintingSupported());
-
- MenuItem distillPageItem = menu.findItem(R.id.distill_page);
- if (CommandLine.getInstance().hasSwitch(ChromeShellSwitches.ENABLE_DOM_DISTILLER)) {
- String url = activeTab != null ? activeTab.getUrl() : null;
- distillPageItem.setEnabled(!DomDistillerUrlUtils.isDistilledPage(url));
- distillPageItem.setVisible(true);
- } else {
- distillPageItem.setVisible(false);
- }
- ShareHelper.configureDirectShareMenuItem(this, menu.findItem(R.id.direct_share_menu_id));
- }
-
- @VisibleForTesting
- public AppMenuHandler getAppMenuHandler() {
- return mAppMenuHandler;
- }
-
- @VisibleForTesting
- public TabModelSelector getTabModelSelector() {
- return mTabManager.getTabModelSelector();
- }
-
- /**
- * Open a dialog that gives the user the option to sign in from a list of available accounts.
- *
- * @param fragmentManager the FragmentManager.
- */
- private static void openSigninDialog(FragmentManager fragmentManager) {
- AccountChooserFragment chooserFragment = new AccountChooserFragment();
- chooserFragment.show(fragmentManager, null);
- }
-
- /**
- * Open a dialog that gives the user the option to sign out.
- *
- * @param fragmentManager the FragmentManager.
- */
- private static void openSignOutDialog(FragmentManager fragmentManager) {
- SignoutFragment signoutFragment = new SignoutFragment();
- signoutFragment.show(fragmentManager, null);
- }
-}

Powered by Google App Engine
This is Rietveld 408576698