diff --git a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
index 489e55b..872e6ca 100644
--- a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
+++ b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
@@ -16,7 +16,6 @@
 package com.android.launcher3;
 
 import android.animation.AnimatorSet;
-import android.os.Handler;
 
 import com.android.systemui.shared.system.RemoteAnimationRunnerCompat;
 
diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
index 1fb2f79..35246b6 100644
--- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
+++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
@@ -88,7 +88,7 @@
     private ImageView mFloatingView;
     private boolean mIsRtl;
 
-    private Animator mCurrentAnimator;
+    private LauncherTransitionAnimator mCurrentAnimator;
 
     public LauncherAppTransitionManagerImpl(Context context) {
         mLauncher = Launcher.getLauncher(context);
@@ -110,7 +110,7 @@
         mDeviceProfile = dp;
     }
 
-    private void setCurrentAnimator(Animator animator) {
+    private void setCurrentAnimator(LauncherTransitionAnimator animator) {
         if (mCurrentAnimator != null && mCurrentAnimator.isRunning()) {
             mCurrentAnimator.cancel();
         }
@@ -118,9 +118,9 @@
     }
 
     @Override
-    public void finishAnimation() {
+    public void finishLauncherAnimation() {
         if (mCurrentAnimator != null && mCurrentAnimator.isRunning()) {
-            mCurrentAnimator.end();
+            mCurrentAnimator.finishLauncherAnimation();
         }
         mCurrentAnimator = null;
     }
@@ -140,10 +140,10 @@
                         // Post at front of queue ignoring sync barriers to make sure it gets
                         // processed before the next frame.
                         postAtFrontOfQueueAsynchronously(v.getHandler(), () -> {
-                            mAnimator = new AnimatorSet();
-                            setCurrentAnimator(mAnimator);
-                            mAnimator.play(getLauncherAnimators(v));
-                            mAnimator.play(getWindowAnimators(v, targets));
+                            LauncherTransitionAnimator animator = new LauncherTransitionAnimator(
+                                    getLauncherAnimators(v), getWindowAnimators(v, targets));
+                            setCurrentAnimator(animator);
+                            mAnimator = animator.getAnimatorSet();
                             mAnimator.addListener(new AnimatorListenerAdapter() {
                                 @Override
                                 public void onAnimationEnd(Animator animation) {
@@ -450,16 +450,16 @@
                         return;
                     }
 
-                    mAnimator = new AnimatorSet();
-                    setCurrentAnimator(mAnimator);
+                    LauncherTransitionAnimator animator = new LauncherTransitionAnimator(
+                            getLauncherResumeAnimation(), getClosingWindowAnimators(targets));
+                    setCurrentAnimator(animator);
+                    mAnimator = animator.getAnimatorSet();
                     mAnimator.addListener(new AnimatorListenerAdapter() {
                         @Override
                         public void onAnimationEnd(Animator animation) {
                             finishedCallback.run();
                         }
                     });
-                    mAnimator.play(getClosingWindowAnimators(targets));
-                    mAnimator.play(getLauncherResumeAnimation());
                     mAnimator.start();
 
                     // Because t=0 has the app icon in its original spot, we can skip the
diff --git a/quickstep/src/com/android/launcher3/LauncherTransitionAnimator.java b/quickstep/src/com/android/launcher3/LauncherTransitionAnimator.java
new file mode 100644
index 0000000..80eaef7
--- /dev/null
+++ b/quickstep/src/com/android/launcher3/LauncherTransitionAnimator.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import android.animation.Animator;
+import android.animation.AnimatorSet;
+
+/**
+ * Creates an AnimatorSet consisting on one Animator for Launcher transition, and one Animator for
+ * the Window transitions.
+ *
+ * Allows for ending the Launcher animator without ending the Window animator.
+ */
+public class LauncherTransitionAnimator {
+
+    private AnimatorSet mAnimatorSet;
+    private Animator mLauncherAnimator;
+    private Animator mWindowAnimator;
+
+    LauncherTransitionAnimator(Animator launcherAnimator, Animator windowAnimator) {
+        mLauncherAnimator = launcherAnimator;
+        mWindowAnimator = windowAnimator;
+
+        mAnimatorSet = new AnimatorSet();
+        mAnimatorSet.play(launcherAnimator);
+        mAnimatorSet.play(windowAnimator);
+    }
+
+    public AnimatorSet getAnimatorSet() {
+        return mAnimatorSet;
+    }
+
+    public void cancel() {
+        mAnimatorSet.cancel();
+    }
+
+    public boolean isRunning() {
+        return mAnimatorSet.isRunning();
+    }
+
+    public void finishLauncherAnimation() {
+        mLauncherAnimator.end();
+    }
+}
diff --git a/src/com/android/launcher3/LauncherAppTransitionManager.java b/src/com/android/launcher3/LauncherAppTransitionManager.java
index c0d52c1..43d5e62 100644
--- a/src/com/android/launcher3/LauncherAppTransitionManager.java
+++ b/src/com/android/launcher3/LauncherAppTransitionManager.java
@@ -65,7 +65,7 @@
         return getDefaultActivityLaunchOptions(launcher, v);
     }
 
-    /** Cancels the current transition animation */
-    public void finishAnimation() {
+    /** Cancels the current Launcher transition animation */
+    public void finishLauncherAnimation() {
     }
 }
diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java
index 4aed520..137e4b1 100644
--- a/src/com/android/launcher3/LauncherStateManager.java
+++ b/src/com/android/launcher3/LauncherStateManager.java
@@ -276,7 +276,7 @@
         // finish it and let this state animation take over.
         LauncherAppTransitionManager transitionManager = mLauncher.getAppTransitionManager();
         if (transitionManager != null) {
-            transitionManager.finishAnimation();
+            transitionManager.finishLauncherAnimation();
         }
     }
 
