Fix animation problem when swipeing up app to screen edge and release

- Consider scroll diff between currentPage and primary scroll when calculating adjacent page offset
- Removed setEnableFreeScroll call in onPrepareGestureAnimation that calls setCurrentPage and causes jumping

Fixes: 197012570
Fixes: 195740577
Test: Swipe up from app to end of screen, adjacent task should come from screen edge, and app should snap smoothly to position
Test: Swipe up from app, scroll immediately, free scroll should be enabled
Test: Swipe up immediately after quick switch, task thumbnails are loaded
Change-Id: Id88266634183dfcb18d5ba8a803883b7d6f50ab4
Merged-In: I1964b8c3bd82b22396340d2352833b2aee73a6fc
(cherry picked from commit 8ebd11af143b09c5892810d6f8d2e1dfda888864)
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index fa4d6a1..11a4884 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -1764,8 +1764,6 @@
             // When switching to tasks in quick switch, ensures the snapped page's scroll maintain
             // invariant between quick switch and overview, to ensure a smooth animation transition.
             updateGridProperties();
-        } else if (endTarget == GestureState.GestureEndTarget.RECENTS) {
-            setEnableFreeScroll(true);
         }
     }
 
@@ -2906,8 +2904,11 @@
         boolean isStartShift;
         if (midpointIndex > -1) {
             // When there is a midpoint reference task, adjacent tasks have less distance to travel
-            // to reach offscreen. Offset the task position to the task's starting point.
-            int midpointScroll = getScrollForPage(midpointIndex);
+            // to reach offscreen. Offset the task position to the task's starting point, and offset
+            // by current page's scroll diff.
+            int midpointScroll = getScrollForPage(midpointIndex)
+                    + mOrientationHandler.getPrimaryScroll(this) - getScrollForPage(mCurrentPage);
+
             getPersistentChildPosition(midpointIndex, midpointScroll, taskPosition);
             float midpointStart = mOrientationHandler.getStart(taskPosition);