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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/FullScreenActivity.java

Issue 2636833003: Support "display": "fullscreen" for sites added to the home screen. (Closed)
Patch Set: Fix incorrect indentation. Created 3 years, 11 months 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/webapps/FullScreenActivity.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/FullScreenActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/FullScreenActivity.java
index 901b62b51f70f11bef575b192284684282548dd1..81ad6d55d2c0b05429f62a5a593df61d4125eaa2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/FullScreenActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/FullScreenActivity.java
@@ -5,8 +5,10 @@
package org.chromium.chrome.browser.webapps;
import android.content.Intent;
+import android.os.Build;
import android.util.Pair;
import android.view.View;
+import android.view.View.OnSystemUiVisibilityChangeListener;
import android.view.ViewGroup;
import org.chromium.base.annotations.SuppressFBWarnings;
@@ -46,6 +48,20 @@ public abstract class FullScreenActivity extends ChromeActivity {
protected static final String BUNDLE_TAB_URL = "tabUrl";
private static final String TAG = "FullScreenActivity";
+ private static final int ENTER_IMMERSIVE_MODE_DELAY_MILLIS = 300;
+ private static final int RESTORE_IMMERSIVE_MODE_DELAY_MILLIS = 3000;
+ private static final int IMMERSIVE_MODE_UI_FLAGS =
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
+ | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
+ | View.SYSTEM_UI_FLAG_LOW_PROFILE
+ | View.SYSTEM_UI_FLAG_IMMERSIVE;
+
+ private boolean mEnableImmersive;
+ private boolean mEnteredImmersive;
+
private Tab mTab;
private WebContents mWebContents;
@@ -179,6 +195,50 @@ public abstract class FullScreenActivity extends ChromeActivity {
};
}
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+
+ if (hasFocus && mEnableImmersive) {
+ enterImmersiveMode(getWindow().getDecorView());
+ }
+ }
+
+ /**
+ * Ensure the given {@link View} is in fullscreen immersion if this device supports.
+ */
+ protected void enterImmersiveMode(final View decor) {
+ if (!supportsImmersiveMode()) {
+ return;
+ }
+ mEnableImmersive = true;
+
+ // Register a SystemUiVisibilityChangeListener to restore immersive mode.
dominickn 2017/01/16 22:49:01 Can these comments be a little more descriptive? S
+ if (!mEnteredImmersive) {
+ decor.setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() {
+ @Override
+ public void onSystemUiVisibilityChange(int newFlags) {
+ delaySetImmersive(decor, newFlags, RESTORE_IMMERSIVE_MODE_DELAY_MILLIS);
+ }
+ });
+ }
+ // Set Immersive mode on demand.
dominickn 2017/01/16 22:49:01 Nit: add a newline above this comment, and explain
Leo 2017/01/18 05:09:40 Actually I just follow the sample codes created by
dominickn 2017/01/18 05:56:17 Ah, I see, that makes sense.
+ delaySetImmersive(decor, decor.getSystemUiVisibility(), ENTER_IMMERSIVE_MODE_DELAY_MILLIS);
+ mEnteredImmersive = true;
+ }
+
+ private void delaySetImmersive(final View decor, final int flags, int delayInMills) {
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ int desiredFlags = flags | IMMERSIVE_MODE_UI_FLAGS;
+ if (flags != desiredFlags) {
+ decor.setSystemUiVisibility(desiredFlags);
+ }
+ }
+ }, delayInMills);
+ }
+
/**
* @return {@link TabDelegateFactory} to be used while creating the associated {@link Tab}.
*/
@@ -206,4 +266,11 @@ public abstract class FullScreenActivity extends ChromeActivity {
@Override
public void onCheckForUpdate(boolean updateAvailable) {
}
+
+ /**
+ ** @return true if this device supports immersive mode functionality.
+ **/
+ public static boolean supportsImmersiveMode() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
+ }
}

Powered by Google App Engine
This is Rietveld 408576698