diff --git a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
index b3354a4..ef7f894 100644
--- a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
+++ b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
@@ -21,10 +21,7 @@
 import static android.view.MotionEvent.ACTION_POINTER_UP;
 import static android.view.MotionEvent.ACTION_UP;
 import static android.view.MotionEvent.INVALID_POINTER_ID;
-
 import static com.android.quickstep.RemoteRunnable.executeSafely;
-import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_BACK;
-import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_HOME;
 import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_NONE;
 
 import android.app.ActivityManager.RunningTaskInfo;
diff --git a/quickstep/src/com/android/quickstep/QuickScrubController.java b/quickstep/src/com/android/quickstep/QuickScrubController.java
index 01c99d5..8d5422f 100644
--- a/quickstep/src/com/android/quickstep/QuickScrubController.java
+++ b/quickstep/src/com/android/quickstep/QuickScrubController.java
@@ -20,6 +20,7 @@
 
 import com.android.launcher3.Alarm;
 import com.android.launcher3.OnAlarmListener;
+import com.android.launcher3.Utilities;
 
 /**
  * Responds to quick scrub callbacks to page through and launch recent tasks.
@@ -61,7 +62,8 @@
             int page = mRecentsView.getNextPage();
             Runnable launchTaskRunnable = () -> {
                 if (page < mRecentsView.getFirstTaskIndex()) {
-                    mRecentsView.getPageAt(page).performClick();
+                    // Call post() since we can't performClick() on a background thread.
+                    mRecentsView.post(() -> mRecentsView.getPageAt(page).performClick());
                 } else {
                     ((TaskView) mRecentsView.getPageAt(page)).launchTask(true);
                 }
@@ -114,6 +116,7 @@
     }
 
     private void goToPageWithHaptic(int pageToGoTo) {
+        pageToGoTo = Utilities.boundToRange(pageToGoTo, mStartPage, mRecentsView.getPageCount() - 1);
         if (pageToGoTo != mRecentsView.getNextPage()) {
             int duration = Math.abs(pageToGoTo - mRecentsView.getNextPage())
                     * QUICKSCRUB_SNAP_DURATION_PER_PAGE;
diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationWrapper.java b/quickstep/src/com/android/quickstep/RecentsAnimationWrapper.java
index 7c98317..2fae01a 100644
--- a/quickstep/src/com/android/quickstep/RecentsAnimationWrapper.java
+++ b/quickstep/src/com/android/quickstep/RecentsAnimationWrapper.java
@@ -15,6 +15,9 @@
  */
 package com.android.quickstep;
 
+import android.os.Handler;
+import android.os.Looper;
+
 import com.android.systemui.shared.system.BackgroundExecutor;
 import com.android.systemui.shared.system.RecentsAnimationControllerCompat;
 import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
@@ -39,12 +42,18 @@
         }
     }
 
-    public void finish(boolean toHome) {
+    /**
+     * @param onFinishComplete A callback that runs on the UI thread.
+     */
+    public void finish(boolean toHome, Runnable onFinishComplete) {
         BackgroundExecutor.get().submit(() -> {
             synchronized (this) {
                 if (controller != null) {
                     controller.setInputConsumerEnabled(false);
                     controller.finish(toHome);
+                    if (onFinishComplete != null) {
+                        new Handler(Looper.getMainLooper()).post(onFinishComplete);
+                    }
                 }
             }
         });
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index 0e7bc42..52cd60e 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -21,7 +21,6 @@
 import static android.view.MotionEvent.ACTION_POINTER_DOWN;
 import static android.view.MotionEvent.ACTION_POINTER_UP;
 import static android.view.MotionEvent.ACTION_UP;
-
 import static com.android.launcher3.LauncherState.OVERVIEW;
 import static com.android.quickstep.QuickScrubController.QUICK_SWITCH_START_DURATION;
 import static com.android.quickstep.TouchConsumer.INTERACTION_QUICK_SCRUB;
@@ -49,7 +48,6 @@
 import com.android.launcher3.LauncherAppState;
 import com.android.launcher3.MainThreadExecutor;
 import com.android.launcher3.R;
-import com.android.launcher3.model.ModelPreload;
 import com.android.systemui.shared.recents.IOverviewProxy;
 import com.android.systemui.shared.recents.ISystemUiProxy;
 import com.android.systemui.shared.system.ActivityManagerWrapper;
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index 5fd483f..f50204f 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -595,7 +595,7 @@
 
     @UiThread
     private void resumeLastTask() {
-        mRecentsAnimationWrapper.finish(false /* toHome */);
+        mRecentsAnimationWrapper.finish(false /* toHome */, null);
     }
 
     public void reset() {
@@ -647,21 +647,21 @@
                 transaction.apply();
             }
         }
-        mRecentsAnimationWrapper.finish(true /* toHome */);
-
-        if (mInteractionType == INTERACTION_QUICK_SWITCH) {
-            if (mQuickScrubController != null) {
-                mQuickScrubController.onQuickSwitch();
-            }
-        } else if (mInteractionType == INTERACTION_QUICK_SCRUB) {
-            if (mQuickScrubController != null) {
-                if (mDeferredQuickScrubEnd) {
-                    onQuickScrubEnd();
-                } else {
-                    mQuickScrubController.snapToPageForCurrentQuickScrubSection();
+        mRecentsAnimationWrapper.finish(true /* toHome */, () -> {
+            if (mInteractionType == INTERACTION_QUICK_SWITCH) {
+                if (mQuickScrubController != null) {
+                    mQuickScrubController.onQuickSwitch();
+                }
+            } else if (mInteractionType == INTERACTION_QUICK_SCRUB) {
+                if (mQuickScrubController != null) {
+                    if (mDeferredQuickScrubEnd) {
+                        onQuickScrubEnd();
+                    } else {
+                        mQuickScrubController.snapToPageForCurrentQuickScrubSection();
+                    }
                 }
             }
-        }
+        });
     }
 
     private void setupLauncherUiAfterSwipeUpAnimation() {
