summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSagar Dhawan <sdhawan@codeaurora.org>2015-09-03 15:33:02 -0700
committerjrizzoli <joey@cyanogenmoditalia.it>2015-09-26 21:51:35 +0200
commit04159bfcadbd17467ffaead590239cc0121dbfae (patch)
treee4d628c7c8b69d73e3e2ca662fcab6fbfcb642f3
parentac62d0dfad31b31384d6a47722eb31ad689dd986 (diff)
downloadandroid_packages_apps_Gello-04159bfcadbd17467ffaead590239cc0121dbfae.tar.gz
android_packages_apps_Gello-04159bfcadbd17467ffaead590239cc0121dbfae.tar.bz2
android_packages_apps_Gello-04159bfcadbd17467ffaead590239cc0121dbfae.zip
Fix system navigationbar covering UI in Immersive Mode
Immersive mode appears to be buggy on android L and below. Added a runnable to re-apply immersive mode. Change-Id: I97d0dd7c93ce0713ef39f49862087f329db3ea06
-rw-r--r--src/src/com/android/browser/BaseUi.java35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/src/com/android/browser/BaseUi.java b/src/src/com/android/browser/BaseUi.java
index f4e7d164..4de34b64 100644
--- a/src/src/com/android/browser/BaseUi.java
+++ b/src/src/com/android/browser/BaseUi.java
@@ -102,10 +102,29 @@ public abstract class BaseUi implements UI {
private NavigationBarBase mNavigationBar;
private boolean mBlockFocusAnimations;
private boolean mFullscreenModeLocked;
+ private final static int mFullScreenImmersiveSetting =
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_FULLSCREEN |
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
private EdgeSwipeController mEdgeSwipeController;
private EdgeSwipeSettings mEdgeSwipeSettings;
+ // This Runnable is used to re-set fullscreen mode after resume.
+ // The immersive mode API on android <6.0 is buggy and will more
+ // often then not glitch out. Using a runnable really helps reduce
+ // the repeatability of this framework bug, however some corner cases
+ // remain. Specifically when interacting with pop-up windows(menu).
+ private Runnable mFullScreenModeRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (BrowserSettings.getInstance() != null)
+ setFullscreen(BrowserSettings.getInstance().useFullscreen());
+ }
+ };
+
public BaseUi(Activity browser, UiController controller) {
mActivity = browser;
mUiController = controller;
@@ -138,7 +157,7 @@ public abstract class BaseUi implements UI {
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visFlags) {
- final boolean lostFullscreen = (visFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0;
+ final boolean lostFullscreen = (visFlags & mFullScreenImmersiveSetting) == 0;
if (lostFullscreen)
setFullscreen(BrowserSettings.getInstance().useFullscreen());
}
@@ -176,6 +195,10 @@ public abstract class BaseUi implements UI {
// check if we exited without setting active tab
// b: 5188145
setFullscreen(BrowserSettings.getInstance().useFullscreen());
+ //Work around for < Android M
+ if (Build.VERSION.SDK_INT <= 22 && BrowserSettings.getInstance().useFullscreen())
+ mHandler.postDelayed(mFullScreenModeRunnable, 500);
+
final Tab ct = mTabControl.getCurrentTab();
if (ct != null) {
setActiveTab(ct);
@@ -834,19 +857,13 @@ public abstract class BaseUi implements UI {
Window win = mActivity.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN;
- final int fullscreenImmersiveSetting =
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
- View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
- View.SYSTEM_UI_FLAG_FULLSCREEN |
- View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
if (mCustomView != null) {
mCustomView.setSystemUiVisibility(enabled ?
- fullscreenImmersiveSetting : View.SYSTEM_UI_FLAG_VISIBLE);
+ mFullScreenImmersiveSetting : View.SYSTEM_UI_FLAG_VISIBLE);
} else if (Build.VERSION.SDK_INT >= 19) {
mContentView.setSystemUiVisibility(enabled ?
- fullscreenImmersiveSetting : View.SYSTEM_UI_FLAG_VISIBLE);
+ mFullScreenImmersiveSetting : View.SYSTEM_UI_FLAG_VISIBLE);
} else {
mContentView.setSystemUiVisibility(enabled ?
View.SYSTEM_UI_FLAG_LOW_PROFILE : View.SYSTEM_UI_FLAG_VISIBLE);