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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java

Issue 810853003: Upstream FullscreenManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update comments Created 6 years 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/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8c27366584726cb27cbe75bcb6a6c535e795867
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java
@@ -0,0 +1,183 @@
+// 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.browser.fullscreen;
+
+import android.view.View;
+import android.view.Window;
+
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.FullscreenHtmlApiDelegate;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.content.browser.ContentVideoView;
+
+/**
+ * Manages the basic fullscreen functionality required by a Tab.
+ */
+// TODO(tedchoc): Remove Tab's requirement on the fullscreen tokens to slim down the API of this
+// class.
+public abstract class FullscreenManager {
+ public static final int INVALID_TOKEN = -1;
+
+ private final TabModelSelector mModelSelector;
+ private final FullscreenHtmlApiHandler mHtmlApiHandler;
+ private boolean mOverlayVideoMode;
+
+ /**
+ * Constructs the basic ChromeTab oriented FullscreenManager.
+ *
+ * @param window Top-level window to turn to fullscreen.
+ * @param modelSelector The model selector providing access to the current tab.
+ * @param enabled Whether fullscreen is globally enabled.
+ * @param persistentFullscreenSupported Whether persistent fullscreen via the HTML5 API is
+ * enabled.
+ */
+ public FullscreenManager(Window window, TabModelSelector modelSelector, boolean enabled,
+ boolean persistentFullscreenSupported) {
+ mModelSelector = modelSelector;
+ mHtmlApiHandler = new FullscreenHtmlApiHandler(
+ window, createApiDelegate(), enabled && persistentFullscreenSupported);
+ mOverlayVideoMode = false;
+ }
+
+ /**
+ * @return The delegate that will handle the embedder specific requirements of the
+ * fullscreen API handler.
+ */
+ protected abstract FullscreenHtmlApiDelegate createApiDelegate();
+
+ /**
+ * @return The handler for managing interactions with the HTML fullscreen API.
+ */
+ protected FullscreenHtmlApiHandler getHtmlApiHandler() {
+ return mHtmlApiHandler;
+ }
+
+ /**
+ * @return The selector for accessing the current Tab.
+ */
+ protected TabModelSelector getTabModelSelector() {
+ return mModelSelector;
+ }
+
+ /**
+ * Trigger a temporary showing of the top controls.
+ */
+ public abstract void showControlsTransient();
+
+ /**
+ * Trigger a permanent showing of the top controls until requested otherwise.
+ *
+ * @return The token that determines whether the requester still needs persistent controls to
+ * be present on the screen.
+ * @see #hideControlsPersistent(int)
+ */
+ public abstract int showControlsPersistent();
+
+ /**
+ * Same behavior as {@link #showControlsPersistent()} but also handles removing a previously
+ * requested token if necessary.
+ *
+ * @param oldToken The old fullscreen token to be cleared.
+ * @return The fullscreen token as defined in {@link #showControlsPersistent()}.
+ */
+ public abstract int showControlsPersistentAndClearOldToken(int oldToken);
+
+ /**
+ * Notify the manager that the top controls are no longer required for the given token.
+ *
+ * @param token The fullscreen token returned from {@link #showControlsPersistent()}.
+ */
+ public abstract void hideControlsPersistent(int token);
+
+ /**
+ * @return The offset of the content from the top of the screen.
+ */
+ public abstract float getContentOffset();
+
+ /**
+ * Tells the fullscreen manager a ContentVideoView is created below the contents.
+ * @param enabled Whether to enter or leave overlay video mode.
+ */
+ public void setOverlayVideoMode(boolean enabled) {
+ mOverlayVideoMode = enabled;
+ }
+
+ /**
+ * @return Check whether ContentVideoView is shown.
+ */
+ public boolean isOverlayVideoMode() {
+ return mOverlayVideoMode;
+ }
+
+ /**
+ * Updates the positions of the top controls and content to the default non fullscreen
+ * values.
+ */
+ public abstract void setPositionsForTabToNonFullscreen();
+
+ /**
+ * Updates the positions of the top controls and content based on the desired position of
+ * the current tab.
+ *
+ * @param controlsOffset The Y offset of the top controls.
+ * @param contentOffset The Y offset for the content.
+ */
+ public abstract void setPositionsForTab(float controlsOffset, float contentOffset);
+
+ /**
+ * Updates the current ContentView's children and any popups with the correct offsets based on
+ * the current fullscreen state.
+ */
+ public abstract void updateContentViewChildrenState();
+
+ /**
+ * Enters or exits persistent fullscreen mode. In this mode, the top controls will be
+ * permanently hidden until this mode is exited.
+ *
+ * @param enabled Whether to enable persistent fullscreen mode.
+ */
+ public void setPersistentFullscreenMode(boolean enabled) {
+ mHtmlApiHandler.setPersistentFullscreenMode(enabled);
+
+ Tab tab = mModelSelector.getCurrentTab();
+ if (!enabled && mOverlayVideoMode) {
+ ContentVideoView videoView = ContentVideoView.getContentVideoView();
+ if (videoView != null) videoView.exitFullscreen(false);
+ }
+ if (tab != null) {
+ tab.updateFullscreenEnabledState();
+ }
+ }
+
+ /**
+ * @return Whether the application is in persistent fullscreen mode.
+ * @see #setPersistentFullscreenMode(boolean)
+ */
+ public boolean getPersistentFullscreenMode() {
+ return mHtmlApiHandler.getPersistentFullscreenMode();
+ }
+
+ /**
+ * Notified when the system UI visibility for the current ContentView has changed.
+ * @param visibility The updated UI visibility.
+ * @see View#getSystemUiVisibility()
+ */
+ public void onContentViewSystemUiVisibilityChange(int visibility) {
+ mHtmlApiHandler.onContentViewSystemUiVisibilityChange(visibility);
+ }
+
+ /**
+ * Ensure the proper system UI flags are set after the window regains focus.
+ * @see android.app.Activity#onWindowFocusChanged(boolean)
+ */
+ public void onWindowFocusChanged(boolean hasWindowFocus) {
+ mHtmlApiHandler.onWindowFocusChanged(hasWindowFocus);
+ }
+
+ /**
+ * Called when scrolling state of the ContentView changed.
+ */
+ public void onContentViewScrollingStateChanged(boolean scrolling) {}
+}

Powered by Google App Engine
This is Rietveld 408576698