| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/webapps/FullScreenActivityTab.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/webapps/FullScreenActivityTab.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/webapps/FullScreenActivityTab.java
|
| deleted file mode 100644
|
| index 259f7d4817f5b7243d49ad817687651c41f41e75..0000000000000000000000000000000000000000
|
| --- a/chrome/android/java_staging/src/org/chromium/chrome/browser/webapps/FullScreenActivityTab.java
|
| +++ /dev/null
|
| @@ -1,365 +0,0 @@
|
| -// Copyright 2015 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.browser.webapps;
|
| -
|
| -import android.content.Context;
|
| -import android.content.Intent;
|
| -import android.graphics.Rect;
|
| -import android.net.Uri;
|
| -import android.os.Bundle;
|
| -import android.text.TextUtils;
|
| -import android.util.Log;
|
| -import android.view.ContextMenu;
|
| -import android.view.Menu;
|
| -
|
| -import org.chromium.base.annotations.SuppressFBWarnings;
|
| -import org.chromium.chrome.R;
|
| -import org.chromium.chrome.browser.ChromeActivity;
|
| -import org.chromium.chrome.browser.IntentHandler;
|
| -import org.chromium.chrome.browser.ShortcutHelper;
|
| -import org.chromium.chrome.browser.Tab;
|
| -import org.chromium.chrome.browser.TabState;
|
| -import org.chromium.chrome.browser.TabUma.TabCreationState;
|
| -import org.chromium.chrome.browser.UrlUtilities;
|
| -import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
|
| -import org.chromium.chrome.browser.contextmenu.ContextMenuHelper;
|
| -import org.chromium.chrome.browser.contextmenu.ContextMenuParams;
|
| -import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator;
|
| -import org.chromium.chrome.browser.document.ChromeLauncherActivity;
|
| -import org.chromium.chrome.browser.document.DocumentWebContentsDelegate;
|
| -import org.chromium.chrome.browser.tab.ChromeTab;
|
| -import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
|
| -import org.chromium.chrome.browser.util.FeatureUtilities;
|
| -import org.chromium.chrome.browser.util.StreamUtil;
|
| -import org.chromium.content_public.browser.LoadUrlParams;
|
| -import org.chromium.content_public.browser.WebContents;
|
| -import org.chromium.content_public.browser.WebContentsObserver;
|
| -import org.chromium.ui.base.Clipboard;
|
| -import org.chromium.ui.base.PageTransition;
|
| -import org.chromium.ui.base.WindowAndroid;
|
| -
|
| -import java.io.File;
|
| -import java.io.FileInputStream;
|
| -import java.io.FileNotFoundException;
|
| -import java.io.FileOutputStream;
|
| -import java.io.IOException;
|
| -import java.net.URI;
|
| -
|
| -/**
|
| - * A tab that will be used for FullScreenActivity. See {@link FullScreenActivity} for more.
|
| - */
|
| -@SuppressFBWarnings("URF_UNREAD_FIELD")
|
| -public class FullScreenActivityTab extends ChromeTab {
|
| - private static final String TAG = "FullScreenActivityTab";
|
| -
|
| - /**
|
| - * A delegate to determine top controls visibility.
|
| - */
|
| - public interface TopControlsVisibilityDelegate {
|
| - /**
|
| - * Determines whether top controls should be shown.
|
| - *
|
| - * @param uri The URI to display.
|
| - * @param securityLevel Security level of the Tab.
|
| - * @return Whether the URL bar should be visible or not.
|
| - */
|
| - boolean shouldShowTopControls(String uri, int securityLevel);
|
| - }
|
| -
|
| - static final String BUNDLE_TAB_ID = "tabId";
|
| - static final String BUNDLE_TAB_URL = "tabUrl";
|
| -
|
| - private WebContentsObserver mObserver;
|
| - private TopControlsVisibilityDelegate mTopControlsVisibilityDelegate;
|
| -
|
| - private FullScreenActivityTab(ChromeActivity activity, WindowAndroid window,
|
| - TopControlsVisibilityDelegate topControlsVisibilityDelegate) {
|
| - super(INVALID_TAB_ID, activity, false, window, TabLaunchType.FROM_MENU_OR_OVERVIEW,
|
| - INVALID_TAB_ID, null, null);
|
| - initializeFullScreenActivityTab(
|
| - activity.getTabContentManager(), false, topControlsVisibilityDelegate);
|
| - }
|
| -
|
| - private FullScreenActivityTab(int id, ChromeActivity activity, WindowAndroid window,
|
| - TabState state, TopControlsVisibilityDelegate topControlsVisibilityDelegate) {
|
| - super(id, activity, false, window, TabLaunchType.FROM_RESTORE, Tab.INVALID_TAB_ID,
|
| - TabCreationState.FROZEN_ON_RESTORE, state);
|
| - initializeFullScreenActivityTab(
|
| - activity.getTabContentManager(), true, topControlsVisibilityDelegate);
|
| - }
|
| -
|
| - private void initializeFullScreenActivityTab(TabContentManager tabContentManager,
|
| - boolean unfreeze, TopControlsVisibilityDelegate topControlsVisibilityDelegate) {
|
| - initialize(null, tabContentManager, false);
|
| - if (unfreeze) unfreezeContents();
|
| - mObserver = createWebContentsObserver();
|
| - mTopControlsVisibilityDelegate = topControlsVisibilityDelegate;
|
| - }
|
| -
|
| - /**
|
| - * Saves the state of the tab out to the {@link Bundle}.
|
| - */
|
| - void saveInstanceState(Bundle outState) {
|
| - outState.putInt(BUNDLE_TAB_ID, getId());
|
| - outState.putString(BUNDLE_TAB_URL, getUrl());
|
| - }
|
| -
|
| - /**
|
| - * @return WebContentsObserver that watches for changes.
|
| - */
|
| - private WebContentsObserver createWebContentsObserver() {
|
| - return new WebContentsObserver(getWebContents()) {
|
| - @Override
|
| - public void didCommitProvisionalLoadForFrame(
|
| - long frameId, boolean isMainFrame, String url, int transitionType) {
|
| - if (isMainFrame) {
|
| - // Notify the renderer to permanently hide the top controls since they do
|
| - // not apply to fullscreen content views.
|
| - updateTopControlsState(getTopControlsStateConstraints(),
|
| - getTopControlsStateConstraints(), true);
|
| - }
|
| - }
|
| - };
|
| - }
|
| -
|
| - @Override
|
| - protected void initContentViewCore(WebContents webContents) {
|
| - super.initContentViewCore(webContents);
|
| - getContentViewCore().setFullscreenRequiredForOrientationLock(false);
|
| - }
|
| -
|
| - /**
|
| - * Loads the given {@code url}.
|
| - * @param url URL to load.
|
| - */
|
| - public void loadUrl(String url) {
|
| - loadUrl(new LoadUrlParams(url, PageTransition.AUTO_TOPLEVEL));
|
| - }
|
| -
|
| - /**
|
| - * Saves the tab data out to a file.
|
| - */
|
| - void saveState(File activityDirectory) {
|
| - File tabFile = getTabFile(activityDirectory, getId());
|
| -
|
| - FileOutputStream foutput = null;
|
| - try {
|
| - foutput = new FileOutputStream(tabFile);
|
| - TabState.saveState(foutput, getState(), false);
|
| - } catch (FileNotFoundException exception) {
|
| - Log.e(TAG, "Failed to save out tab state.", exception);
|
| - } catch (IOException exception) {
|
| - Log.e(TAG, "Failed to save out tab state.", exception);
|
| - } finally {
|
| - StreamUtil.closeQuietly(foutput);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * @return {@link File} pointing at the tab state for this Activity.
|
| - */
|
| - private static File getTabFile(File activityDirectory, int tabId) {
|
| - return new File(activityDirectory, TabState.getTabStateFilename(tabId, false));
|
| - }
|
| -
|
| - /**
|
| - * Creates the {@link FullScreenActivityTab} used by the FullScreenActivity.
|
| - * If the {@code savedInstanceState} exists, then the user did not intentionally close the app
|
| - * by swiping it away in the recent tasks list. In that case, we try to restore the tab from
|
| - * disk.
|
| - * @param activity Activity that will own the Tab.
|
| - * @param directory Directory associated with the Activity. Null implies tab state isn't saved.
|
| - * @param savedInstanceState Bundle saved out when the app was killed by Android. May be null.
|
| - * @param topControlsVisibilityDelegate Delegate to determine top controls visibility.
|
| - * @return {@link FullScreenActivityTab} for the Activity.
|
| - */
|
| - public static FullScreenActivityTab create(ChromeActivity activity, WindowAndroid window,
|
| - File directory, Bundle savedInstanceState,
|
| - TopControlsVisibilityDelegate topControlsVisibilityDelegate) {
|
| - FullScreenActivityTab tab = null;
|
| -
|
| - int tabId = Tab.INVALID_TAB_ID;
|
| - String tabUrl = null;
|
| - if (savedInstanceState != null) {
|
| - tabId = savedInstanceState.getInt(BUNDLE_TAB_ID, INVALID_TAB_ID);
|
| - tabUrl = savedInstanceState.getString(BUNDLE_TAB_URL);
|
| - }
|
| -
|
| - if (tabId != Tab.INVALID_TAB_ID && tabUrl != null && directory != null) {
|
| - FileInputStream stream = null;
|
| - try {
|
| - // Restore the tab.
|
| - stream = new FileInputStream(getTabFile(directory, tabId));
|
| - TabState tabState = TabState.readState(stream, false);
|
| - tab = new FullScreenActivityTab(
|
| - tabId, activity, window, tabState, topControlsVisibilityDelegate);
|
| - } catch (FileNotFoundException exception) {
|
| - Log.e(TAG, "Failed to restore tab state.", exception);
|
| - } catch (IOException exception) {
|
| - Log.e(TAG, "Failed to restore tab state.", exception);
|
| - } finally {
|
| - StreamUtil.closeQuietly(stream);
|
| - }
|
| - }
|
| -
|
| - if (tab == null) {
|
| - // Create a new tab.
|
| - tab = new FullScreenActivityTab(activity, window, topControlsVisibilityDelegate);
|
| - }
|
| -
|
| - return tab;
|
| - }
|
| -
|
| - @Override
|
| - protected ContextMenuPopulator createContextMenuPopulator() {
|
| - return new ContextMenuPopulator() {
|
| - private final Clipboard mClipboard;
|
| -
|
| - // public ContextMenuPopulator()
|
| - {
|
| - mClipboard = new Clipboard(getApplicationContext());
|
| - }
|
| -
|
| - @Override
|
| - public boolean shouldShowContextMenu(ContextMenuParams params) {
|
| - return params != null && params.isAnchor();
|
| - }
|
| -
|
| - @Override
|
| - public boolean onItemSelected(ContextMenuHelper helper, ContextMenuParams params,
|
| - int itemId) {
|
| - if (itemId == org.chromium.chrome.R.id.contextmenu_copy_link_address_text) {
|
| - String url = params.getUnfilteredLinkUrl();
|
| - mClipboard.setText(url, url);
|
| - return true;
|
| - } else if (itemId == org.chromium.chrome.R.id.contextmenu_copy_link_text) {
|
| - String text = params.getLinkText();
|
| - mClipboard.setText(text, text);
|
| - return true;
|
| - } else if (itemId == R.id.menu_id_open_in_chrome) {
|
| - Intent chromeIntent =
|
| - new Intent(Intent.ACTION_VIEW, Uri.parse(params.getLinkUrl()));
|
| - chromeIntent.setPackage(getApplicationContext().getPackageName());
|
| - chromeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
| -
|
| - boolean activityStarted = false;
|
| - if (params.getPageUrl() != null) {
|
| - try {
|
| - URI pageUri = URI.create(params.getPageUrl());
|
| - if (UrlUtilities.isInternalScheme(pageUri)) {
|
| - IntentHandler.startChromeLauncherActivityForTrustedIntent(
|
| - chromeIntent, getApplicationContext());
|
| - activityStarted = true;
|
| - }
|
| - } catch (IllegalArgumentException ex) {
|
| - // Ignore the exception for creating the URI and launch the intent
|
| - // without the trusted intent extras.
|
| - }
|
| - }
|
| -
|
| - if (!activityStarted) {
|
| - getApplicationContext().startActivity(chromeIntent);
|
| - activityStarted = true;
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public void buildContextMenu(ContextMenu menu, Context context,
|
| - ContextMenuParams params) {
|
| - menu.add(Menu.NONE, org.chromium.chrome.R.id.contextmenu_copy_link_address_text,
|
| - Menu.NONE, org.chromium.chrome.R.string.contextmenu_copy_link_address);
|
| -
|
| - String linkText = params.getLinkText();
|
| - if (linkText != null) linkText = linkText.trim();
|
| -
|
| - if (!TextUtils.isEmpty(linkText)) {
|
| - menu.add(Menu.NONE, org.chromium.chrome.R.id.contextmenu_copy_link_text,
|
| - Menu.NONE, org.chromium.chrome.R.string.contextmenu_copy_link_text);
|
| - }
|
| -
|
| - menu.add(Menu.NONE, R.id.menu_id_open_in_chrome, Menu.NONE,
|
| - R.string.menu_open_in_chrome);
|
| - }
|
| - };
|
| - }
|
| -
|
| - @Override
|
| - protected boolean isHidingTopControlsEnabled() {
|
| - if (getFullscreenManager() == null) return true;
|
| - if (getFullscreenManager().getPersistentFullscreenMode()) return true;
|
| - if (mTopControlsVisibilityDelegate == null) return false;
|
| - return !mTopControlsVisibilityDelegate.shouldShowTopControls(getUrl(), getSecurityLevel());
|
| - }
|
| -
|
| - @Override
|
| - public boolean isShowingTopControlsEnabled() {
|
| - // On webapp activity and embedd content view activity, it's either hiding or showing.
|
| - // Users cannot change the visibility state by sliding it in or out.
|
| - return !isHidingTopControlsEnabled();
|
| - }
|
| -
|
| - @Override
|
| - protected FullScreenTabWebContentsDelegateAndroid createWebContentsDelegate() {
|
| - return new FullScreenTabWebContentsDelegateAndroid();
|
| - }
|
| -
|
| - /**
|
| - * A FullScreenActivityTab is meant to be used for WebappActivities which
|
| - * behave slightly differently from tabs. The main difference being that
|
| - * it doesn't have a notion of active tab. Thus, some WebContentsDelegate
|
| - * method have to be redefined.
|
| - */
|
| - public class FullScreenTabWebContentsDelegateAndroid
|
| - extends TabChromeWebContentsDelegateAndroidImpl {
|
| - @Override
|
| - public void activateContents() {
|
| - if (!(mActivity instanceof WebappActivity)) return;
|
| -
|
| - WebappInfo webAppInfo = ((WebappActivity) mActivity).getWebappInfo();
|
| - String url = webAppInfo.uri().toString();
|
| -
|
| - Intent intent = new Intent();
|
| - intent.setAction(Intent.ACTION_MAIN);
|
| - intent.setPackage(mActivity.getPackageName());
|
| - intent.putExtra(ChromeLauncherActivity.EXTRA_BRING_WEBAPP_TO_FRONT, true);
|
| -
|
| - intent.putExtra(ShortcutHelper.EXTRA_ICON, webAppInfo.getEncodedIcon());
|
| - intent.putExtra(ShortcutHelper.EXTRA_ID, webAppInfo.id());
|
| - intent.putExtra(ShortcutHelper.EXTRA_URL, url);
|
| - intent.putExtra(ShortcutHelper.EXTRA_TITLE, webAppInfo.title());
|
| - intent.putExtra(ShortcutHelper.EXTRA_ORIENTATION, webAppInfo.orientation());
|
| - intent.putExtra(ShortcutHelper.EXTRA_MAC, ShortcutHelper.getEncodedMac(mActivity, url));
|
| - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
| -
|
| - getApplicationContext().startActivity(intent);
|
| - }
|
| -
|
| - @Override
|
| - public void webContentsCreated(WebContents sourceWebContents, long openerRenderFrameId,
|
| - String frameName, String targetUrl, WebContents newWebContents) {
|
| - super.webContentsCreated(sourceWebContents, openerRenderFrameId, frameName,
|
| - targetUrl, newWebContents);
|
| - if (FeatureUtilities.isDocumentMode(mActivity)) {
|
| - DocumentWebContentsDelegate.getInstance().attachDelegate(newWebContents);
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public boolean addNewContents(WebContents sourceWebContents, WebContents webContents,
|
| - int disposition, Rect initialPosition, boolean userGesture) {
|
| - if (isClosing() || !FeatureUtilities.isDocumentMode(mActivity)) return false;
|
| -
|
| - mActivity.getTabCreator(isIncognito()).createTabWithWebContents(
|
| - webContents, getId(), TabLaunchType.FROM_LONGPRESS_FOREGROUND);
|
| -
|
| - // Returns true because Tabs are created asynchronously.
|
| - return true;
|
| - }
|
| - }
|
| -}
|
|
|