Preventing stutter at beginning of All Apps animation

Bug: 6579204
Change-Id: I6e4eec80726a469d51494564933fe213bfdf47d3
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 9dc1fe4..9fbf50e 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -2403,32 +2403,37 @@
                 observer = null;
             }
 
+            final AnimatorSet stateAnimation = mStateAnimation;
+            final Runnable startAnimRunnable = new Runnable() {
+                public void run() {
+                    // Check that mStateAnimation hasn't changed while
+                    // we waited for a layout/draw pass
+                    if (mStateAnimation != stateAnimation)
+                        return;
+                    setPivotsForZoom(toView, scale);
+                    dispatchOnLauncherTransitionStart(fromView, animated, false);
+                    dispatchOnLauncherTransitionStart(toView, animated, false);
+                    mWorkspace.post(new Runnable() {
+                        public void run() {
+                            // Check that mStateAnimation hasn't changed while
+                            // we waited for a layout/draw pass
+                            if (mStateAnimation != stateAnimation)
+                                return;
+                            mStateAnimation.start();
+                        }
+                    });
+                }
+            };
             if (delayAnim) {
-                final AnimatorSet stateAnimation = mStateAnimation;
                 final OnGlobalLayoutListener delayedStart = new OnGlobalLayoutListener() {
                     public void onGlobalLayout() {
-                        mWorkspace.post(new Runnable() {
-                            public void run() {
-                                // Check that mStateAnimation hasn't changed while
-                                // we waited for a layout pass
-                                if (mStateAnimation == stateAnimation) {
-                                    // Need to update pivots for zoom if layout changed
-                                    setPivotsForZoom(toView, scale);
-                                    dispatchOnLauncherTransitionStart(fromView, animated, false);
-                                    dispatchOnLauncherTransitionStart(toView, animated, false);
-                                    mStateAnimation.start();
-                                }
-                            }
-                        });
+                        mWorkspace.post(startAnimRunnable);
                         observer.removeOnGlobalLayoutListener(this);
                     }
                 };
                 observer.addOnGlobalLayoutListener(delayedStart);
             } else {
-                setPivotsForZoom(toView, scale);
-                dispatchOnLauncherTransitionStart(fromView, animated, false);
-                dispatchOnLauncherTransitionStart(toView, animated, false);
-                mStateAnimation.start();
+                startAnimRunnable.run();
             }
         } else {
             toView.setTranslationX(0.0f);
@@ -2539,7 +2544,14 @@
             }
             dispatchOnLauncherTransitionStart(fromView, animated, true);
             dispatchOnLauncherTransitionStart(toView, animated, true);
-            mStateAnimation.start();
+            final Animator stateAnimation = mStateAnimation;
+            mWorkspace.post(new Runnable() {
+                public void run() {
+                    if (stateAnimation != mStateAnimation)
+                        return;
+                    mStateAnimation.start();
+                }
+            });
         } else {
             fromView.setVisibility(View.GONE);
             dispatchOnLauncherTransitionPrepare(fromView, animated, true);