| Index: chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
|
| index 3a47b204623e60c25abf09706fcbf5896f293ba3..7b9b6f0d6e6c9dff2d00c4f697c67465fcd27109 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
|
| @@ -35,6 +35,7 @@ import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.Fullscree
|
| import org.chromium.chrome.browser.tabmodel.TabModelSelector;
|
| import org.chromium.content.browser.ContentVideoView;
|
| import org.chromium.content.browser.ContentViewCore;
|
| +import org.chromium.content_public.common.TopControlsState;
|
|
|
| import java.lang.ref.WeakReference;
|
| import java.util.ArrayList;
|
| @@ -90,6 +91,7 @@ public class ChromeFullscreenManager
|
|
|
| private boolean mTopControlsPermanentlyHidden;
|
| private boolean mTopControlsAndroidViewHidden;
|
| + private final boolean mSupportsBrowserOverride;
|
|
|
| private final ArrayList<FullscreenListener> mListeners = new ArrayList<FullscreenListener>();
|
|
|
| @@ -185,11 +187,32 @@ public class ChromeFullscreenManager
|
| * @param activity The activity that supports fullscreen.
|
| * @param controlContainer Container holding the controls (Toolbar).
|
| * @param enabled Whether fullscreen is globally enabled.
|
| + * @param persistentFullscreenSupported Whether persistent fullscreen mode is supported.
|
| * @param modelSelector The model selector providing access to the current tab.
|
| + * @param resControlContainerHeight The dimension resource ID for the control container height.
|
| */
|
| + // TODO(changwan): remove
|
| public ChromeFullscreenManager(Activity activity, View controlContainer, boolean enabled,
|
| boolean persistentFullscreenSupported, TabModelSelector modelSelector,
|
| int resControlContainerHeight) {
|
| + this(activity, controlContainer, enabled, persistentFullscreenSupported,
|
| + modelSelector, resControlContainerHeight, true);
|
| + }
|
| +
|
| + /**
|
| + * Creates an instance of the fullscreen mode manager.
|
| + * @param activity The activity that supports fullscreen.
|
| + * @param controlContainer Container holding the controls (Toolbar).
|
| + * @param enabled Whether fullscreen is globally enabled.
|
| + * @param persistentFullscreenSupported Whether persistent fullscreen mode is supported.
|
| + * @param modelSelector The model selector providing access to the current tab.
|
| + * @param resControlContainerHeight The dimension resource ID for the control container height.
|
| + * @param supportsBrowserOverride Whether we want to disable the token system used by the
|
| + browser.
|
| + */
|
| + public ChromeFullscreenManager(Activity activity, View controlContainer, boolean enabled,
|
| + boolean persistentFullscreenSupported, TabModelSelector modelSelector,
|
| + int resControlContainerHeight, boolean supportsBrowserOverride) {
|
| super(activity.getWindow(), modelSelector, enabled, persistentFullscreenSupported);
|
|
|
| mActivity = activity;
|
| @@ -204,6 +227,7 @@ public class ChromeFullscreenManager
|
| mControlContainerHeight = resources.getDimensionPixelSize(resControlContainerHeight);
|
| mRendererContentOffset = mControlContainerHeight;
|
| mEnabled = enabled;
|
| + mSupportsBrowserOverride = supportsBrowserOverride;
|
| updateControlOffset();
|
| }
|
|
|
| @@ -267,7 +291,15 @@ public class ChromeFullscreenManager
|
|
|
| @Override
|
| public void onEnterFullscreen() {
|
| - mIsEnteringPersistentModeState = true;
|
| + Tab tab = getActiveTab();
|
| + if (getControlOffset() == -mControlContainerHeight) {
|
| + // The top controls are currently hidden.
|
| + getHtmlApiHandler().enterFullscreen(tab);
|
| + } else {
|
| + // We should hide top controls first.
|
| + mIsEnteringPersistentModeState = true;
|
| + tab.updateFullscreenEnabledState();
|
| + }
|
| }
|
|
|
| @Override
|
| @@ -278,9 +310,10 @@ public class ChromeFullscreenManager
|
| }
|
|
|
| @Override
|
| - public void onFullscreenExited(ContentViewCore contentViewCore) {
|
| - contentViewCore.getWebContents().updateTopControlsState(false, true, true);
|
| - contentViewCore.getWebContents().updateTopControlsState(true, true, false);
|
| + public void onFullscreenExited(Tab tab) {
|
| + // At this point, top controls are hidden. Show top controls only if it's
|
| + // permitted.
|
| + tab.updateTopControlsState(TopControlsState.SHOWN, true);
|
| }
|
|
|
| @Override
|
| @@ -320,11 +353,13 @@ public class ChromeFullscreenManager
|
|
|
| @Override
|
| public void showControlsTransient() {
|
| + if (!mSupportsBrowserOverride) return;
|
| if (mPersistentControlTokens.isEmpty()) update(true);
|
| }
|
|
|
| @Override
|
| public int showControlsPersistent() {
|
| + if (!mSupportsBrowserOverride) return INVALID_TOKEN;
|
| int token = mPersistentControlsCurrentToken++;
|
| mPersistentControlTokens.add(token);
|
| if (mPersistentControlTokens.size() == 1) update(true);
|
| @@ -333,12 +368,14 @@ public class ChromeFullscreenManager
|
|
|
| @Override
|
| public int showControlsPersistentAndClearOldToken(int oldToken) {
|
| + if (!mSupportsBrowserOverride) return INVALID_TOKEN;
|
| if (oldToken != INVALID_TOKEN) mPersistentControlTokens.remove(oldToken);
|
| return showControlsPersistent();
|
| }
|
|
|
| @Override
|
| public void hideControlsPersistent(int token) {
|
| + if (!mSupportsBrowserOverride) return;
|
| if (mPersistentControlTokens.remove(token) && mPersistentControlTokens.isEmpty()) {
|
| update(false);
|
| }
|
| @@ -526,10 +563,9 @@ public class ChromeFullscreenManager
|
| }
|
| }
|
|
|
| - final ContentViewCore contentViewCore = getActiveContentViewCore();
|
| - if (contentViewCore != null && offset == -mControlContainerHeight
|
| - && mIsEnteringPersistentModeState) {
|
| - getHtmlApiHandler().enterFullscreen(contentViewCore);
|
| + final Tab tab = getActiveTab();
|
| + if (tab != null && offset == -mControlContainerHeight && mIsEnteringPersistentModeState) {
|
| + getHtmlApiHandler().enterFullscreen(tab);
|
| mIsEnteringPersistentModeState = false;
|
| }
|
|
|
| @@ -612,14 +648,24 @@ public class ChromeFullscreenManager
|
| }
|
| }
|
|
|
| - private ContentViewCore getActiveContentViewCore() {
|
| + private Tab getActiveTab() {
|
| Tab tab = getTabModelSelector().getCurrentTab();
|
| + return tab;
|
| + }
|
| +
|
| + private ContentViewCore getActiveContentViewCore() {
|
| + Tab tab = getActiveTab();
|
| return tab != null ? tab.getContentViewCore() : null;
|
| }
|
|
|
| @Override
|
| public void setPositionsForTabToNonFullscreen() {
|
| - setPositionsForTab(0, mControlContainerHeight);
|
| + Tab tab = getActiveTab();
|
| + if (tab == null || tab.isShowingTopControlsEnabled()) {
|
| + setPositionsForTab(0, mControlContainerHeight);
|
| + } else {
|
| + setPositionsForTab(-mControlContainerHeight, 0);
|
| + }
|
| }
|
|
|
| @Override
|
|
|