diff options
| -rw-r--r-- | services/core/java/com/android/server/policy/PhoneWindowManager.java | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 164536646090..c1f430cd93ae 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2777,11 +2777,19 @@ public class PhoneWindowManager implements WindowManagerPolicy { int insets = mWindowManagerFuncs.getDockedDividerInsetsLw(); // If the divider is behind the navigation bar, don't animate. - if (mNavigationBar != null + final Rect frame = win.getFrameLw(); + final boolean behindNavBar = mNavigationBar != null && ((mNavigationBarOnBottom - && win.getFrameLw().top + insets >= mNavigationBar.getFrameLw().top) + && frame.top + insets >= mNavigationBar.getFrameLw().top) || (!mNavigationBarOnBottom - && win.getFrameLw().left + insets >= mNavigationBar.getFrameLw().left))) { + && frame.left + insets >= mNavigationBar.getFrameLw().left)); + final boolean landscape = frame.height() > frame.width(); + final boolean offscreenLandscape = landscape && (frame.right - insets <= 0 + || frame.left + insets >= win.getDisplayFrameLw().right); + final boolean offscreenPortrait = !landscape && (frame.top - insets <= 0 + || frame.bottom + insets >= win.getDisplayFrameLw().bottom); + final boolean offscreen = offscreenLandscape || offscreenPortrait; + if (behindNavBar || offscreen) { return 0; } if (transit == TRANSIT_ENTER || transit == TRANSIT_SHOW) { |