From 0cb0f728fb48f3d10de74dedef13d155d5fed2b6 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Fri, 25 Mar 2016 20:49:41 -0700 Subject: [PATCH] Fix divider animation Don't animate if the divider is offscreen. Bug: 27859698 Change-Id: Ie41ed9d2a4b8ad8fc08fcb56bd85a56a13572acf --- .../android/server/policy/PhoneWindowManager.java | 14 +++++++++++--- 1 file 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 164536646090f..c1f430cd93ae4 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) {