Fix divider animation

Don't animate if the divider is offscreen.

Bug: 27859698
Change-Id: Ie41ed9d2a4b8ad8fc08fcb56bd85a56a13572acf
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 1645366..c1f430c 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 @@
         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) {