Merge "Fix case of gesture being stuck when the Launcher is stopped mid-gesture" into tm-qpr-dev
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index 4e635a7..24bb393 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -1140,6 +1140,13 @@
             boolean isCancel) {
         long duration = MAX_SWIPE_DURATION;
         float currentShift = mCurrentShift.value;
+        boolean recentsVisible = mRecentsView != null
+                && (mRecentsView.getWindowVisibility() == View.VISIBLE);
+        if (!recentsVisible) {
+            // We've hit a case where Launcher is been stopped mid-gesture, in this case, force
+            // a LAST_TASK end target
+            isCancel = true;
+        }
         final GestureEndTarget endTarget = calculateEndTarget(velocity, endVelocity,
                 isFling, isCancel);
         // Set the state, but don't notify until the animation completes
@@ -1219,7 +1226,7 @@
 
         // Let RecentsView handle the scrolling to the task, which we launch in startNewTask()
         // or resumeLastTask().
-        if (mRecentsView != null) {
+        if (recentsVisible) {
             ActiveGestureLog.INSTANCE.trackEvent(ActiveGestureErrorDetector.GestureEvent
                     .SET_ON_PAGE_TRANSITION_END_CALLBACK);
             mRecentsView.setOnPageTransitionEndCallback(