Merge "Fade in/out taskbar bg alpha when unstash/stashing." into udc-dev am: 613cc95c8a

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/23696768

Change-Id: I8155e8db1ce215f25e842058de3564f49d57f83f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
index 7681fe0..f6de926 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
@@ -22,6 +22,7 @@
 import android.graphics.Canvas;
 import android.graphics.RectF;
 import android.util.AttributeSet;
+import android.util.FloatProperty;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
@@ -33,6 +34,8 @@
 import com.android.launcher3.AbstractFloatingView;
 import com.android.launcher3.testing.TestLogging;
 import com.android.launcher3.testing.shared.TestProtocol;
+import com.android.launcher3.util.MultiPropertyFactory;
+import com.android.launcher3.util.MultiPropertyFactory.MultiProperty;
 import com.android.launcher3.views.BaseDragLayer;
 
 /**
@@ -40,6 +43,25 @@
  */
 public class TaskbarDragLayer extends BaseDragLayer<TaskbarActivityContext> {
 
+    private static final int INDEX_ALL_OTHER_STATES = 0;
+    private static final int INDEX_STASH_ANIM = 1;
+    private static final int INDEX_COUNT = 2;
+
+    private static final FloatProperty<TaskbarDragLayer> BG_ALPHA =
+            new FloatProperty<>("taskbarBgAlpha") {
+                @Override
+                public void setValue(TaskbarDragLayer dragLayer, float alpha) {
+                    dragLayer.mBackgroundRenderer.getPaint().setAlpha((int) (alpha * 255));
+                    dragLayer.invalidate();
+                }
+
+                @Override
+                public Float get(TaskbarDragLayer dragLayer) {
+                    return dragLayer.mBackgroundRenderer.getPaint().getAlpha() / 255f;
+                }
+            };
+
+
     private final TaskbarBackgroundRenderer mBackgroundRenderer;
     private final ViewTreeObserver.OnComputeInternalInsetsListener mTaskbarInsetsComputer =
             this::onComputeTaskbarInsets;
@@ -49,6 +71,8 @@
 
     private float mTaskbarBackgroundOffset;
 
+    private final MultiPropertyFactory<TaskbarDragLayer> mTaskbarBackgroundAlpha;
+
     public TaskbarDragLayer(@NonNull Context context) {
         this(context, null);
     }
@@ -66,7 +90,11 @@
             int defStyleAttr, int defStyleRes) {
         super(context, attrs, 1 /* alphaChannelCount */);
         mBackgroundRenderer = new TaskbarBackgroundRenderer(mActivity);
-        mBackgroundRenderer.getPaint().setAlpha(0);
+
+        mTaskbarBackgroundAlpha = new MultiPropertyFactory<>(this, BG_ALPHA, INDEX_COUNT,
+                (a, b) -> a * b, 1f);
+        mTaskbarBackgroundAlpha.get(INDEX_ALL_OTHER_STATES).setValue(0);
+        mTaskbarBackgroundAlpha.get(INDEX_STASH_ANIM).setValue(1);
     }
 
     public void init(TaskbarDragLayerController.TaskbarDragLayerCallbacks callbacks) {
@@ -133,13 +161,12 @@
         super.dispatchDraw(canvas);
     }
 
-    /**
-     * Sets the alpha of the background color behind all the Taskbar contents.
-     * @param alpha 0 is fully transparent, 1 is fully opaque.
-     */
-    protected void setTaskbarBackgroundAlpha(float alpha) {
-        mBackgroundRenderer.getPaint().setAlpha((int) (alpha * 255));
-        invalidate();
+    protected MultiProperty getBackgroundRendererAlpha() {
+        return mTaskbarBackgroundAlpha.get(INDEX_ALL_OTHER_STATES);
+    }
+
+    protected MultiProperty getBackgroundRendererAlphaForStash() {
+        return mTaskbarBackgroundAlpha.get(INDEX_STASH_ANIM);
     }
 
     /**
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
index 888d535..867b062 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
@@ -24,6 +24,7 @@
 import com.android.launcher3.R;
 import com.android.launcher3.anim.AnimatedFloat;
 import com.android.launcher3.util.DimensionUtils;
+import com.android.launcher3.util.MultiPropertyFactory.MultiProperty;
 import com.android.launcher3.util.TouchController;
 
 import java.io.PrintWriter;
@@ -62,12 +63,14 @@
     private TaskbarStashViaTouchController mTaskbarStashViaTouchController;
     private AnimatedFloat mOnBackgroundNavButtonColorIntensity;
 
+    private MultiProperty mBackgroundRendererAlpha;
     private float mLastSetBackgroundAlpha;
 
     public TaskbarDragLayerController(TaskbarActivityContext activity,
             TaskbarDragLayer taskbarDragLayer) {
         mActivity = activity;
         mTaskbarDragLayer = taskbarDragLayer;
+        mBackgroundRendererAlpha = mTaskbarDragLayer.getBackgroundRendererAlpha();
         final Resources resources = mTaskbarDragLayer.getResources();
         mFolderMargin = resources.getDimensionPixelSize(R.dimen.taskbar_folder_margin);
     }
@@ -152,11 +155,15 @@
                 * mNotificationShadeBgTaskbar.value * mImeBgTaskbar.value
                 * mAssistantBgTaskbar.value;
         mLastSetBackgroundAlpha = mBgOverride.value * Math.max(bgNavbar, bgTaskbar);
-        mTaskbarDragLayer.setTaskbarBackgroundAlpha(mLastSetBackgroundAlpha);
+        mBackgroundRendererAlpha.setValue(mLastSetBackgroundAlpha);
 
         updateOnBackgroundNavButtonColorIntensity();
     }
 
+    public MultiProperty getBackgroundRendererAlphaForStash() {
+        return mTaskbarDragLayer.getBackgroundRendererAlphaForStash();
+    }
+
     /**
      * Sets the translation of the background during the swipe up gesture.
      */
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
index 4f2d5df..9c00a02 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
@@ -232,6 +232,7 @@
     // Taskbar background properties.
     private AnimatedFloat mTaskbarBackgroundOffset;
     private AnimatedFloat mTaskbarImeBgAlpha;
+    private MultiProperty mTaskbarBackgroundAlphaForStash;
     // TaskbarView icon properties.
     private MultiProperty mIconAlphaForStash;
     private AnimatedFloat mIconScaleForStash;
@@ -303,6 +304,7 @@
         TaskbarDragLayerController dragLayerController = controllers.taskbarDragLayerController;
         mTaskbarBackgroundOffset = dragLayerController.getTaskbarBackgroundOffset();
         mTaskbarImeBgAlpha = dragLayerController.getImeBgTaskbar();
+        mTaskbarBackgroundAlphaForStash = dragLayerController.getBackgroundRendererAlphaForStash();
 
         TaskbarViewController taskbarViewController = controllers.taskbarViewController;
         mIconAlphaForStash = taskbarViewController.getTaskbarIconAlpha().get(
@@ -747,37 +749,42 @@
         final float backgroundOffsetTarget = isStashed ? 1 : 0;
         final float iconAlphaTarget = isStashed ? 0 : 1;
         final float stashedHandleAlphaTarget = isStashed ? 1 : 0;
+        final float backgroundAlphaTarget = isStashed ? 0 : 1;
 
         // Timing for the alpha values depend on the animation played
-        long iconAlphaStartDelay = 0, iconAlphaDuration = 0, stashedHandleAlphaDelay = 0,
-                stashedHandleAlphaDuration = 0;
+        long iconAlphaStartDelay = 0, iconAlphaDuration = 0, backgroundAndHandleAlphaStartDelay = 0,
+                backgroundAndHandleAlphaDuration = 0;
         if (duration > 0) {
             if (animationType == TRANSITION_HANDLE_FADE) {
                 // When fading, the handle fades in/out at the beginning of the transition with
                 // TASKBAR_STASH_ALPHA_DURATION.
-                stashedHandleAlphaDuration = TASKBAR_STASH_ALPHA_DURATION;
+                backgroundAndHandleAlphaDuration = TASKBAR_STASH_ALPHA_DURATION;
                 // The iconAlphaDuration must be set to duration for the skippable interpolators
                 // below to work.
                 iconAlphaDuration = duration;
             } else {
                 iconAlphaStartDelay = TASKBAR_STASH_ALPHA_START_DELAY;
                 iconAlphaDuration = TASKBAR_STASH_ALPHA_DURATION;
-                stashedHandleAlphaDuration = TASKBAR_STASH_ALPHA_DURATION;
+                backgroundAndHandleAlphaDuration = TASKBAR_STASH_ALPHA_DURATION;
 
                 if (isStashed) {
                     if (animationType == TRANSITION_HOME_TO_APP) {
                         iconAlphaStartDelay = TASKBAR_STASH_ICON_ALPHA_HOME_TO_APP_START_DELAY;
                     }
-                    stashedHandleAlphaDelay = iconAlphaStartDelay;
-                    stashedHandleAlphaDuration = Math.max(0, duration - iconAlphaStartDelay);
+                    backgroundAndHandleAlphaStartDelay = iconAlphaStartDelay;
+                    backgroundAndHandleAlphaDuration = Math.max(0, duration - iconAlphaStartDelay);
                 }
 
             }
         }
 
         play(as, mTaskbarStashedHandleAlpha.animateToValue(stashedHandleAlphaTarget),
-                stashedHandleAlphaDelay,
-                stashedHandleAlphaDuration, LINEAR);
+                backgroundAndHandleAlphaStartDelay,
+                backgroundAndHandleAlphaDuration, LINEAR);
+
+        play(as, mTaskbarBackgroundAlphaForStash.animateToValue(backgroundAlphaTarget),
+                backgroundAndHandleAlphaStartDelay,
+                backgroundAndHandleAlphaDuration, LINEAR);
 
         // The rest of the animations might be "skipped" in TRANSITION_HANDLE_FADE transitions.
         AnimatorSet skippable = as;