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 f899919..11bc883 100644
--- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
+++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
@@ -87,7 +87,7 @@
     private View mFloatingView;
     private boolean mIsRtl;
 
-    private Animator mCurrentAnimator;
+    private LauncherTransitionAnimator mCurrentAnimator;
 
     public LauncherAppTransitionManagerImpl(Context context) {
         mLauncher = Launcher.getLauncher(context);
@@ -109,7 +109,7 @@
         mDeviceProfile = dp;
     }
 
-    private void setCurrentAnimator(Animator animator) {
+    private void setCurrentAnimator(LauncherTransitionAnimator animator) {
         if (mCurrentAnimator != null && mCurrentAnimator.isRunning()) {
             mCurrentAnimator.cancel();
         }
@@ -117,9 +117,9 @@
     }
 
     @Override
-    public void finishAnimation() {
+    public void finishLauncherAnimation() {
         if (mCurrentAnimator != null && mCurrentAnimator.isRunning()) {
-            mCurrentAnimator.end();
+            mCurrentAnimator.finishLauncherAnimation();
         }
         mCurrentAnimator = null;
     }
@@ -139,10 +139,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) {
@@ -449,16 +449,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();
         }
     }
 
