Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / android / shell / java / src / org / chromium / chrome / shell / ChromeShellActivity.java
index 54c920a..48627d2 100644 (file)
@@ -12,18 +12,22 @@ 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 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;
@@ -31,10 +35,11 @@ import org.chromium.chrome.shell.sync.SyncController;
 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;
@@ -44,7 +49,6 @@ 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.
@@ -66,6 +70,7 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
 
     private WindowAndroid mWindow;
     private TabManager mTabManager;
+    private ChromeShellToolbar mToolbar;
     private DevToolsServer mDevToolsServer;
     private SyncController mSyncController;
     private PrintingController mPrintingController;
@@ -130,18 +135,35 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
 
         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);
 
@@ -149,6 +171,7 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
         // 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
@@ -193,16 +216,18 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
     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();
@@ -229,11 +254,11 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
     }
 
     /**
-     * @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;
     }
 
     /**
@@ -252,21 +277,31 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
     @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:
@@ -277,9 +312,8 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
                 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:
@@ -295,7 +329,8 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
             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);
@@ -347,8 +382,7 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
         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);
@@ -363,7 +397,7 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
 
     @Override
     public int getMenuThemeResourceId() {
-        return android.R.style.Theme_Holo_Light;
+        return R.style.OverflowMenuTheme;
     }
 
     @VisibleForTesting