import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
import android.widget.Toast;
-import com.google.common.annotations.VisibleForTesting;
-
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.library_loader.ProcessInitException;
import org.chromium.chrome.browser.DevToolsServer;
+import org.chromium.chrome.browser.FileProviderHelper;
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.printing.PrintingControllerFactory;
import org.chromium.chrome.browser.printing.TabPrinter;
import org.chromium.chrome.browser.share.ShareHelper;
import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
import org.chromium.content.browser.ActivityContentVideoViewClient;
import org.chromium.content.browser.BrowserStartupController;
-import org.chromium.content.browser.ContentView;
+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;
*/
public class ChromeShellActivity extends Activity implements AppMenuPropertiesDelegate {
private static final String TAG = "ChromeShellActivity";
- private static final String CHROME_DISTILLER_SCHEME = "chrome-distiller";
/**
* Factory used to set up a mock ActivityWindowAndroid for testing.
private WindowAndroid mWindow;
private TabManager mTabManager;
+ private ChromeShellToolbar mToolbar;
private DevToolsServer mDevToolsServer;
private SyncController mSyncController;
private PrintingController mPrintingController;
mWindow = sWindowAndroidFactory.getActivityWindowAndroid(this);
mWindow.restoreInstanceState(savedInstanceState);
- mTabManager.initialize(mWindow, new ActivityContentVideoViewClient(this));
+ mTabManager.initialize(mWindow, new ActivityContentVideoViewClient(this) {
+ @Override
+ public boolean onShowCustomView(View view) {
+ if (mTabManager == null) return false;
+ boolean success = super.onShowCustomView(view);
+ mTabManager.setOverlayVideoMode(true);
+ return success;
+ }
+
+ @Override
+ public void onDestroyContentVideoView() {
+ super.onDestroyContentVideoView();
+ if (mTabManager != null) {
+ mTabManager.setOverlayVideoMode(false);
+ }
+ }
+ });
String startupUrl = getUrlFromIntent(getIntent());
if (!TextUtils.isEmpty(startupUrl)) {
mTabManager.setStartupUrl(startupUrl);
}
- ChromeShellToolbar mToolbar = (ChromeShellToolbar) findViewById(R.id.toolbar);
+ mToolbar = (ChromeShellToolbar) findViewById(R.id.toolbar);
mAppMenuHandler = sAppMenuHandlerFactory.getAppMenuHandler(this, this, R.menu.main_menu);
mToolbar.setMenuHandler(mAppMenuHandler);
mDevToolsServer = new DevToolsServer("chrome_shell");
- mDevToolsServer.setRemoteDebuggingEnabled(true);
+ mDevToolsServer.setRemoteDebuggingEnabled(
+ true, DevToolsServer.Security.ALLOW_DEBUG_PERMISSION);
mPrintingController = PrintingControllerFactory.create(this);
// In case this method is called after the first onStart(), we need to inform the
// SyncController that we have started.
mSyncController.onStart();
+ ContentUriUtils.setFileProviderUtil(new FileProviderHelper());
}
@Override
protected void onStop() {
super.onStop();
- ContentView view = getActiveContentView();
- if (view != null) view.onHide();
+ if (mToolbar != null) mToolbar.hideSuggestions();
+
+ ContentViewCore viewCore = getActiveContentViewCore();
+ if (viewCore != null) viewCore.onHide();
}
@Override
protected void onStart() {
super.onStart();
- ContentView view = getActiveContentView();
- if (view != null) view.onShow();
+ ContentViewCore viewCore = getActiveContentViewCore();
+ if (viewCore != null) viewCore.onShow();
if (mSyncController != null) {
mSyncController.onStart();
}
/**
- * @return The ContentView of the active tab.
+ * @return The ContentViewCore of the active tab.
*/
- public ContentView getActiveContentView() {
+ public ContentViewCore getActiveContentViewCore() {
ChromeShellTab tab = getActiveTab();
- return tab != null ? tab.getContentView() : null;
+ return tab != null ? tab.getContentViewCore() : null;
}
/**
@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), true, 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();
+ }
+ }
switch (item.getItemId()) {
case R.id.signin:
if (ChromeSigninController.get(this).isSignedIn()) {
SyncController.openSignOutDialog(getFragmentManager());
- } else {
+ } else if (AccountManagerHelper.get(this).hasGoogleAccounts()) {
SyncController.openSigninDialog(getFragmentManager());
+ } else {
+ Toast.makeText(this, R.string.signin_no_account, Toast.LENGTH_SHORT).show();
}
return true;
case R.id.print:
return true;
case R.id.distill_page:
if (activeTab != null) {
- String viewUrl = DomDistillerUrlUtils.getDistillerViewUrlFromUrl(
- CHROME_DISTILLER_SCHEME, activeTab.getUrl());
- activeTab.loadUrlWithSanitization(viewUrl);
+ DomDistillerTabUtils.distillCurrentPageAndView(
+ activeTab.getContentViewCore().getWebContents());
}
return true;
case R.id.back_menu_id:
case R.id.share_menu_id:
case R.id.direct_share_menu_id:
ShareHelper.share(item.getItemId() == R.id.direct_share_menu_id, this,
- activeTab.getTitle(), activeTab.getUrl(), null);
+ activeTab.getTitle(), activeTab.getUrl(), null,
+ Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
return true;
default:
return super.onOptionsItemSelected(item);
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(!TextUtils.isEmpty(url) &&
- !url.startsWith(CHROME_DISTILLER_SCHEME));
+ distillPageItem.setEnabled(!DomDistillerUrlUtils.isDistilledPage(url));
distillPageItem.setVisible(true);
} else {
distillPageItem.setVisible(false);
@Override
public int getMenuThemeResourceId() {
- return android.R.style.Theme_Holo_Light;
+ return R.style.OverflowMenuTheme;
}
@VisibleForTesting