Merge "Add a way to fade out taskbar view when closing an app in the taskbar." into tm-qpr-dev am: 149246f077 am: ce06cf89b0
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/22141153
Change-Id: I919b45021c1fbc2a5d5c30c2d5eca71a672cd5be
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
index 537b208..8baa324 100644
--- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
+++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
@@ -641,7 +641,8 @@
(mLauncher.getTaskbarUIController() == null || !isTransientTaskbar(mLauncher))
? null
: mLauncher.getTaskbarUIController().findMatchingView(v),
- !appTargetsAreTranslucent, launcherIconBounds, true /* isOpening */);
+ null /* fadeOutView */, !appTargetsAreTranslucent, launcherIconBounds,
+ true /* isOpening */);
Rect crop = new Rect();
Matrix matrix = new Matrix();
@@ -1362,7 +1363,7 @@
mDeviceProfile.isMultiWindowMode ? 0 : getWindowCornerRadius(mLauncher),
isTransluscent, fallbackBackgroundColor);
} else if (launcherView != null) {
- floatingIconView = getFloatingIconView(mLauncher, launcherView,
+ floatingIconView = getFloatingIconView(mLauncher, launcherView, null,
mLauncher.getTaskbarUIController() == null
? null
: mLauncher.getTaskbarUIController().findMatchingView(launcherView),
diff --git a/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java b/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java
index 3267ba4..43ad175 100644
--- a/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java
+++ b/quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java
@@ -105,7 +105,7 @@
private HomeAnimationFactory createIconHomeAnimationFactory(View workspaceView) {
RectF iconLocation = new RectF();
- FloatingIconView floatingIconView = getFloatingIconView(mActivity, workspaceView,
+ FloatingIconView floatingIconView = getFloatingIconView(mActivity, workspaceView, null,
mActivity.getTaskbarUIController() == null
? null
: mActivity.getTaskbarUIController().findMatchingView(workspaceView),
diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java
index 172b405..c3633db 100644
--- a/src/com/android/launcher3/views/FloatingIconView.java
+++ b/src/com/android/launcher3/views/FloatingIconView.java
@@ -19,6 +19,8 @@
import static com.android.launcher3.Utilities.getBadge;
import static com.android.launcher3.Utilities.getFullDrawable;
+import static com.android.launcher3.Utilities.mapToRange;
+import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.views.IconLabelDotView.setIconAndDotVisible;
@@ -98,6 +100,9 @@
// A view whose visibility should update in sync with mOriginalIcon.
private @Nullable View mMatchVisibilityView;
+ // A view that will fade out as the animation progresses.
+ private @Nullable View mFadeOutView;
+
private View mOriginalIcon;
private RectF mPositionOut;
private Runnable mOnTargetChangeRunnable;
@@ -156,6 +161,11 @@
setAlpha(alpha);
mClipIconView.update(rect, progress, shapeProgressStart, cornerRadius, isOpening, this,
mLauncher.getDeviceProfile());
+
+ if (mFadeOutView != null) {
+ // The alpha goes from 1 to 0 when progress is 0 and 0.33 respectively.
+ mFadeOutView.setAlpha(1 - Math.min(1f, mapToRange(progress, 0, 0.33f, 0, 1, LINEAR)));
+ }
}
@Override
@@ -564,14 +574,16 @@
/**
* Creates a floating icon view for {@param originalView}.
* @param originalView The view to copy
- * @param secondView A view whose visibility should update in sync with originalView.
+ * @param visibilitySyncView A view whose visibility should update in sync with originalView.
+ * @param fadeOutView A view that will fade out as the animation progresses.
* @param hideOriginal If true, it will hide {@param originalView} while this view is visible.
* Else, we will not draw anything in this view.
* @param positionOut Rect that will hold the size and position of v.
* @param isOpening True if this view replaces the icon for app open animation.
*/
public static FloatingIconView getFloatingIconView(Launcher launcher, View originalView,
- @Nullable View secondView, boolean hideOriginal, RectF positionOut, boolean isOpening) {
+ @Nullable View visibilitySyncView, @Nullable View fadeOutView, boolean hideOriginal,
+ RectF positionOut, boolean isOpening) {
final DragLayer dragLayer = launcher.getDragLayer();
ViewGroup parent = (ViewGroup) dragLayer.getParent();
FloatingIconView view = launcher.getViewCache().getView(R.layout.floating_icon_view,
@@ -581,7 +593,8 @@
// Init properties before getting the drawable.
view.mIsOpening = isOpening;
view.mOriginalIcon = originalView;
- view.mMatchVisibilityView = secondView;
+ view.mMatchVisibilityView = visibilitySyncView;
+ view.mFadeOutView = fadeOutView;
view.mPositionOut = positionOut;
// Get the drawable on the background thread
@@ -610,6 +623,10 @@
view.mEndRunnable = () -> {
view.mEndRunnable = null;
+ if (view.mFadeOutView != null) {
+ view.mFadeOutView.setAlpha(1f);
+ }
+
if (hideOriginal) {
view.updateViewsVisibility(true /* isVisible */);
view.finish(dragLayer);
@@ -669,6 +686,8 @@
mBtvDrawable.setBackground(null);
mFastFinishRunnable = null;
mIconOffsetY = 0;
+ mMatchVisibilityView = null;
+ mFadeOutView = null;
}
private static class IconLoadResult {