From 4c38fada4fa970dbcff9dde19efd267f302a9a95 Mon Sep 17 00:00:00 2001 From: dshivangi Date: Wed, 22 Mar 2023 18:26:12 +0000 Subject: [PATCH] Transient Taskbar's Background animation Added fold/unfold animation to the background of transient taskbar. Note: The animation has only been added to transient taskbar Test: manual Fixes: 273929852 Change-Id: I2f35b6a1157341744d9c7b8306d7dbd8490702dc --- .../launcher3/taskbar/TaskbarBackgroundRenderer.kt | 11 +++++++++++ .../android/launcher3/taskbar/TaskbarDragLayer.java | 9 +++++++++ .../launcher3/taskbar/TaskbarDragLayerController.java | 9 +++++++++ .../taskbar/TaskbarUnfoldAnimationController.java | 7 +++++++ 4 files changed, 36 insertions(+) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt index 82b455d24a..ebe057cf80 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt @@ -50,6 +50,7 @@ class TaskbarBackgroundRenderer(context: TaskbarActivityContext) { private val fullRightCornerRadius = context.rightCornerRadius.toFloat() private var leftCornerRadius = fullLeftCornerRadius private var rightCornerRadius = fullRightCornerRadius + private var widthInsetPercentage = 0f private val square: Path = Path() private val circle: Path = Path() private val invertedLeftCornerPath: Path = Path() @@ -157,12 +158,22 @@ class TaskbarBackgroundRenderer(context: TaskbarActivityContext) { transientBackgroundBounds.right - halfWidthDelta, bottom ) + val horizontalInset = fullWidth * widthInsetPercentage + lastDrawnTransientRect.inset(horizontalInset, 0f) canvas.drawRoundRect(lastDrawnTransientRect, radius, radius, paint) } canvas.restore() } + /** + * Sets the width percentage to inset the transient taskbar's background from the left and from + * the right. + */ + fun setBackgroundHorizontalInsets(insetPercentage: Float) { + widthInsetPercentage = insetPercentage + } + companion object { const val DEFAULT_ROUNDNESS = 1f } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java index 1b3972d0ca..c53460d104 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java @@ -200,4 +200,13 @@ public class TaskbarDragLayer extends BaseDragLayer { } return super.dispatchKeyEvent(event); } + + /** + * Sets the width percentage to inset the transient taskbar's background from the left and from + * the right. + */ + public void setBackgroundHorizontalInsets(float insetPercentage) { + mBackgroundRenderer.setBackgroundHorizontalInsets(insetPercentage); + invalidate(); + } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java index 7f8879469a..01cac2bd4f 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java @@ -183,6 +183,15 @@ public class TaskbarDragLayerController implements TaskbarControllers.LoggableTa mLastSetBackgroundAlpha * (1 - mBgOffset.value)); } + /** + * Sets the width percentage to inset the transient taskbar's background from the left and from + * the right. + */ + public void setBackgroundHorizontalInsets(float insetPercentage) { + mTaskbarDragLayer.setBackgroundHorizontalInsets(insetPercentage); + + } + @Override public void dumpLogs(String prefix, PrintWriter pw) { pw.println(prefix + "TaskbarDragLayerController:"); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUnfoldAnimationController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUnfoldAnimationController.java index 4c937a7f9b..f12d518764 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUnfoldAnimationController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUnfoldAnimationController.java @@ -33,11 +33,14 @@ import java.io.PrintWriter; public class TaskbarUnfoldAnimationController implements TaskbarControllers.LoggableTaskbarController { + private static final float MAX_WIDTH_INSET_FRACTION = 0.035f; + private final ScopedUnfoldTransitionProgressProvider mScopedUnfoldTransitionProgressProvider; private final NaturalRotationUnfoldProgressProvider mNaturalUnfoldTransitionProgressProvider; private final UnfoldMoveFromCenterAnimator mMoveFromCenterAnimator; private final TransitionListener mTransitionListener = new TransitionListener(); private TaskbarViewController mTaskbarViewController; + private TaskbarDragLayerController mTaskbarDragLayerController; public TaskbarUnfoldAnimationController(BaseTaskbarContext context, ScopedUnfoldTransitionProgressProvider source, @@ -63,6 +66,7 @@ public class TaskbarUnfoldAnimationController implements mTaskbarViewController.addOneTimePreDrawListener(() -> mScopedUnfoldTransitionProgressProvider.setReadyToHandleTransition(true)); mNaturalUnfoldTransitionProgressProvider.addCallback(mTransitionListener); + mTaskbarDragLayerController = taskbarControllers.taskbarDragLayerController; } /** @@ -99,11 +103,14 @@ public class TaskbarUnfoldAnimationController implements public void onTransitionFinished() { mMoveFromCenterAnimator.onTransitionFinished(); mMoveFromCenterAnimator.clearRegisteredViews(); + mTaskbarDragLayerController.setBackgroundHorizontalInsets(0f); } @Override public void onTransitionProgress(float progress) { mMoveFromCenterAnimator.onTransitionProgress(progress); + float insetPercentage = (1 - progress) * MAX_WIDTH_INSET_FRACTION; + mTaskbarDragLayerController.setBackgroundHorizontalInsets(insetPercentage); } } }