Fix window movement animations.

Surface insets/parent calculation wasn't used when calculating
the positions for movement animations.

Test: go/wm-smoke
Test: Go to Wifi setting, click on a WIFI with pw, open/close IME
to observe window movement animation.
Bug: 64674361

Change-Id: Iffd98d8f946c2fc2dcb5adb176bb890d8a3fc374
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index a9708ce..6bebcf4 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -4295,8 +4295,12 @@
 
     private void startMoveAnimation(Transaction t, int left, int top) {
         if (DEBUG_ANIM) Slog.v(TAG, "Setting move animation on " + this);
+        final Point oldPosition = new Point();
+        final Point newPosition = new Point();
+        transformFrameToSurfacePosition(mLastFrame.left, mLastFrame.top, oldPosition);
+        transformFrameToSurfacePosition(left, top, newPosition);
         final AnimationAdapter adapter = new LocalAnimationAdapter(
-                new MoveAnimationSpec(mLastFrame.left, mLastFrame.top, left, top),
+                new MoveAnimationSpec(oldPosition.x, oldPosition.y, newPosition.x, newPosition.y),
                 mService.mSurfaceAnimationRunner);
         startAnimation(t, adapter);
     }
@@ -4435,23 +4439,23 @@
             return;
         }
 
-        int left = mFrame.left;
-        int top = mFrame.top;
+        transformFrameToSurfacePosition(mFrame.left, mFrame.top, mSurfacePosition);
+        if (!mSurfaceAnimator.hasLeash()) {
+            t.setPosition(mSurfaceControl, mSurfacePosition.x, mSurfacePosition.y);
+        }
+    }
+
+    private void transformFrameToSurfacePosition(int left, int top, Point outPoint) {
+        outPoint.set(left, top);
         if (isChildWindow()) {
             // TODO: This probably falls apart at some point and we should
             // actually compute relative coordinates.
             final WindowState parent = getParentWindow();
-            left -= parent.mFrame.left;
-            top -= parent.mFrame.top;
+            outPoint.offset(-parent.mFrame.left, -parent.mFrame.top);
         }
 
         // Expand for surface insets. See WindowState.expandForSurfaceInsets.
-        left -= mAttrs.surfaceInsets.left;
-        top -= mAttrs.surfaceInsets.top;
-        mSurfacePosition.set(left, top);
-        if (!mSurfaceAnimator.hasLeash()) {
-            t.setPosition(mSurfaceControl, mSurfacePosition.x, mSurfacePosition.y);
-        }
+        outPoint.offset(-mAttrs.surfaceInsets.left, -mAttrs.surfaceInsets.top);
     }
 
     @Override