diff options
| -rw-r--r-- | services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/policy/PhoneWindowManager.java | 13 |
2 files changed, 16 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java index 2e32fe381722..c764833e08a6 100644 --- a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java +++ b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java @@ -134,7 +134,7 @@ public class ImmersiveModeConfirmation { } public void immersiveModeChangedLw(String pkg, boolean isImmersiveMode, - boolean userSetupComplete) { + boolean userSetupComplete, boolean navBarEmpty) { mHandler.removeMessages(H.SHOW); if (isImmersiveMode) { final boolean disabled = PolicyControl.disableImmersiveConfirmation(pkg); @@ -144,6 +144,7 @@ public class ImmersiveModeConfirmation { && (DEBUG_SHOW_EVERY_TIME || !mConfirmed) && userSetupComplete && !mVrModeEnabled + && !navBarEmpty && !UserManager.isDeviceInDemoMode(mContext)) { mHandler.sendEmptyMessageDelayed(H.SHOW, mShowDelayMs); } @@ -152,12 +153,13 @@ public class ImmersiveModeConfirmation { } } - public boolean onPowerKeyDown(boolean isScreenOn, long time, boolean inImmersiveMode) { + public boolean onPowerKeyDown(boolean isScreenOn, long time, boolean inImmersiveMode, + boolean navBarEmpty) { if (!isScreenOn && (time - mPanicTime < mPanicThresholdMs)) { // turning the screen back on within the panic threshold return mClingWindow == null; } - if (isScreenOn && inImmersiveMode) { + if (isScreenOn && inImmersiveMode && !navBarEmpty) { // turning the screen off, remember if we were in immersive mode mPanicTime = time; } else { diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 3f71ba4cf671..fbc727d348a3 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1024,7 +1024,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Detect user pressing the power button in panic when an application has // taken over the whole screen. boolean panic = mImmersiveModeConfirmation.onPowerKeyDown(interactive, - SystemClock.elapsedRealtime(), isImmersiveMode(mLastSystemUiFlags)); + SystemClock.elapsedRealtime(), isImmersiveMode(mLastSystemUiFlags), + isNavBarEmpty(mLastSystemUiFlags)); if (panic) { mHandler.post(mHiddenNavPanic); } @@ -7590,7 +7591,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (win != null && oldImmersiveMode != newImmersiveMode) { final String pkg = win.getOwningPackage(); mImmersiveModeConfirmation.immersiveModeChangedLw(pkg, newImmersiveMode, - isUserSetupComplete()); + isUserSetupComplete(), isNavBarEmpty(win.getSystemUiVisibility())); } vis = mNavigationBarController.updateVisibilityLw(transientNavBarAllowed, oldVis, vis); @@ -7649,6 +7650,14 @@ public class PhoneWindowManager implements WindowManagerPolicy { && canHideNavigationBar(); } + private static boolean isNavBarEmpty(int systemUiFlags) { + final int disableNavigationBar = (View.STATUS_BAR_DISABLE_HOME + | View.STATUS_BAR_DISABLE_BACK + | View.STATUS_BAR_DISABLE_RECENT); + + return (systemUiFlags & disableNavigationBar) == disableNavigationBar; + } + /** * @return whether the navigation or status bar can be made translucent * |