From 6563429e2bcd95a81cd1ceea408f6b30ca29f3de Mon Sep 17 00:00:00 2001 From: Liran Binyamin Date: Fri, 1 Nov 2024 11:50:59 -0400 Subject: [PATCH] Update the flyout collapsed position This change ensures that we're updating the distance to the flyout's collapsed position before we start collapsing it. The distance is initially calculated before we start expanding, but when a new bubble is added while we're fully expanded, and if we previously had 1 bubble and now have 2, the collapsed position changed, so we need to update it before we start collapsing. Flag: com.android.wm.shell.enable_bubble_bar Bug: 376276297 Test: manual - dismiss all bubbles - create 1 bubble - after the flyout is fully expanded create a second bubble - observe the flyout is updated with the contents of the second bubble - observe when the flyout collapses, it collapses to the dot on the second bubble Change-Id: I219886fd6463d69692d9945d901d1f3ad3cb26a0 --- .../flyout/BubbleBarFlyoutController.kt | 10 ++++++- .../bubbles/flyout/BubbleBarFlyoutView.kt | 30 +++++++++++-------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/flyout/BubbleBarFlyoutController.kt b/quickstep/src/com/android/launcher3/taskbar/bubbles/flyout/BubbleBarFlyoutController.kt index 39e9facddb..7b20eeab7c 100644 --- a/quickstep/src/com/android/launcher3/taskbar/bubbles/flyout/BubbleBarFlyoutController.kt +++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/flyout/BubbleBarFlyoutController.kt @@ -164,7 +164,15 @@ constructor( flyout.updateExpansionProgress(animator.animatedValue as Float) } } - animator.addListener(onStart = { flyout.setOnClickListener(null) }, onEnd = { endAction() }) + animator.addListener( + onStart = { + flyout.setOnClickListener(null) + if (animationType == AnimationType.MORPH) { + flyout.updateTranslationToCollapsedPosition() + } + }, + onEnd = { endAction() }, + ) animator.start() } diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/flyout/BubbleBarFlyoutView.kt b/quickstep/src/com/android/launcher3/taskbar/bubbles/flyout/BubbleBarFlyoutView.kt index af8aaf8d50..418675c41d 100644 --- a/quickstep/src/com/android/launcher3/taskbar/bubbles/flyout/BubbleBarFlyoutView.kt +++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/flyout/BubbleBarFlyoutView.kt @@ -192,18 +192,8 @@ class BubbleBarFlyoutView( title.alpha = 0f message.alpha = 0f setData(flyoutMessage) - val txToCollapsedPosition = - if (positioner.isOnLeft) { - positioner.distanceToCollapsedPosition.x - } else { - -positioner.distanceToCollapsedPosition.x - } - // TODO: b/277815200 - before collapsing, recalculate translationToCollapsedPosition because - // the collapsed position may have changed - val tyToCollapsedPosition = - positioner.distanceToCollapsedPosition.y + triangleHeight - triangleOverlap - translationToCollapsedPosition = PointF(txToCollapsedPosition, tyToCollapsedPosition) + updateTranslationToCollapsedPosition() collapsedSize = positioner.collapsedSize collapsedCornerRadius = collapsedSize / 2 collapsedColor = positioner.collapsedColor @@ -212,7 +202,7 @@ class BubbleBarFlyoutView( // calculate the expansion progress required before we start showing the triangle as part of // the expansion animation minExpansionProgressForTriangle = - positioner.distanceToRevealTriangle / tyToCollapsedPosition + positioner.distanceToRevealTriangle / translationToCollapsedPosition.y // post the request to start the expand animation to the looper so the view can measure // itself @@ -259,6 +249,22 @@ class BubbleBarFlyoutView( message.text = flyoutMessage.message } + /** + * This should be called to update [translationToCollapsedPosition] before we start expanding or + * collapsing to make sure that we're animating the flyout to and from the correct position. + */ + fun updateTranslationToCollapsedPosition() { + val txToCollapsedPosition = + if (positioner.isOnLeft) { + positioner.distanceToCollapsedPosition.x + } else { + -positioner.distanceToCollapsedPosition.x + } + val tyToCollapsedPosition = + positioner.distanceToCollapsedPosition.y + triangleHeight - triangleOverlap + translationToCollapsedPosition = PointF(txToCollapsedPosition, tyToCollapsedPosition) + } + /** Updates the flyout view with the progress of the animation. */ fun updateExpansionProgress(fraction: Float) { expansionProgress = fraction