Merge "Using material style overscroll effect for workspace and folders" into ub-launcher3-burnaby
diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
index 13e4a59..399ef97 100644
--- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
+++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
@@ -192,8 +192,7 @@
 
     @Thunk final ZoomInInterpolator mZoomInInterpolator = new ZoomInInterpolator();
 
-    // These properties refer to the background protection gradient used for AllApps and Customize
-    @Thunk ValueAnimator mBackgroundFadeInAnimation;
+    // These properties refer to the background protection gradient used for AllApps and Widget tray.
     @Thunk ValueAnimator mBackgroundFadeOutAnimation;
 
     @Thunk float mSpringLoadedShrinkFactor;
@@ -232,6 +231,7 @@
                 accessibilityEnabled);
         animateSearchBar(states, animated, duration, hasOverlaySearchBar, layerViews,
                 accessibilityEnabled);
+        animateBackgroundGradient(states, animated, BACKGROUND_FADE_OUT_DURATION);
         return mStateAnimator;
     }
 
@@ -473,12 +473,6 @@
                         AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
             }
         }
-
-        if (states.stateIsNormal) {
-            animateBackgroundGradient(0f, animated);
-        } else {
-            animateBackgroundGradient(mWorkspaceScrimAlpha, animated);
-        }
     }
 
     /**
@@ -548,19 +542,17 @@
     }
 
     /**
-     * Animates the background scrim.
-     * TODO(winsonc): Is there a better place for this?
+     * Animates the background scrim. Add to the state animator to prevent jankiness.
      *
      * @param finalAlpha the final alpha for the background scrim
      * @param animated whether or not to set the background alpha immediately
+     * @duration duration of the animation
      */
-    private void animateBackgroundGradient(float finalAlpha, boolean animated) {
-        // Cancel any running background animations
-        cancelAnimator(mBackgroundFadeInAnimation);
-        cancelAnimator(mBackgroundFadeOutAnimation);
-
+    private void animateBackgroundGradient(TransitionStates states, boolean animated, int duration) {
         final DragLayer dragLayer = mLauncher.getDragLayer();
         final float startAlpha = dragLayer.getBackgroundAlpha();
+        float finalAlpha = states.stateIsNormal ? 0 : mWorkspaceScrimAlpha;
+
         if (finalAlpha != startAlpha) {
             if (animated) {
                 mBackgroundFadeOutAnimation =
@@ -573,8 +565,8 @@
                     }
                 });
                 mBackgroundFadeOutAnimation.setInterpolator(new DecelerateInterpolator(1.5f));
-                mBackgroundFadeOutAnimation.setDuration(BACKGROUND_FADE_OUT_DURATION);
-                mBackgroundFadeOutAnimation.start();
+                mBackgroundFadeOutAnimation.setDuration(duration);
+                mStateAnimator.play(mBackgroundFadeOutAnimation);
             } else {
                 dragLayer.setBackgroundAlpha(finalAlpha);
             }