Reset the bubble bar scale when the animation is interrupted

Flag: com.android.wm.shell.enable_bubble_bar
Fixes: 381283214
Test: atest BubbleBarViewAnimatorTest
Test: manual
       - have a bubble in the bubble bar
       - launch an app
       - set animator scale to 5x to slow down animation
       - send a bubble
       - when the bubble bar animates interrupt the animation by
         touching the bubble bar
       - observe the bubble bar scale is reset correctly
Change-Id: I1abd81e3df987ba749a13eb1b7506d5c1d8fdddd
This commit is contained in:
Liran Binyamin
2024-11-27 15:14:01 -05:00
parent 495fe1d255
commit 3931b671b4
2 changed files with 15 additions and 7 deletions
@@ -511,23 +511,21 @@ constructor(
/** Interrupts the animation due to touching the bubble bar or flyout. */
fun interruptForTouch() {
animatingBubble?.hideAnimation?.let { scheduler.cancel(it) }
PhysicsAnimator.getInstance(bubbleBarView).cancelIfRunning()
bubbleStashController.getStashedHandlePhysicsAnimator().cancelIfRunning()
cancelFlyout()
val hideAnimation = animatingBubble?.hideAnimation ?: return
scheduler.cancel(hideAnimation)
bubbleBarView.relativePivotY = 1f
resetBubbleBarPropertiesOnInterrupt()
clearAnimatingBubble()
}
/** Notifies the animator that the taskbar area was touched during an animation. */
fun onStashStateChangingWhileAnimating() {
animatingBubble?.hideAnimation?.let { scheduler.cancel(it) }
cancelFlyout()
val hideAnimation = animatingBubble?.hideAnimation ?: return
scheduler.cancel(hideAnimation)
clearAnimatingBubble()
bubbleStashController.getStashedHandlePhysicsAnimator().cancelIfRunning()
bubbleBarView.relativePivotY = 1f
resetBubbleBarPropertiesOnInterrupt()
bubbleStashController.onNewBubbleAnimationInterrupted(
/* isStashed= */ bubbleBarView.alpha == 0f,
bubbleBarView.translationY,
@@ -541,7 +539,7 @@ constructor(
scheduler.cancel(hideAnimation)
animatingBubble = null
bubbleStashController.getStashedHandlePhysicsAnimator().cancelIfRunning()
bubbleBarView.relativePivotY = 1f
resetBubbleBarPropertiesOnInterrupt()
// stash the bubble bar since the IME is now visible
bubbleStashController.onNewBubbleAnimationInterrupted(
/* isStashed= */ true,
@@ -679,6 +677,12 @@ constructor(
bubbleStashController.showBubbleBarImmediate()
}
private fun resetBubbleBarPropertiesOnInterrupt() {
bubbleBarView.relativePivotY = 1f
bubbleBarView.scaleX = 1f
bubbleBarView.scaleY = 1f
}
private fun <T> PhysicsAnimator<T>?.cancelIfRunning() {
if (this?.isRunning() == true) cancel()
}
@@ -197,6 +197,8 @@ class BubbleBarViewAnimatorTest {
assertThat(bubbleBarParentViewController.timesInvoked).isEqualTo(2)
assertThat(animatorScheduler.delayedBlock).isNull()
assertThat(bubbleBarView.alpha).isEqualTo(1)
assertThat(bubbleBarView.scaleX).isEqualTo(1)
assertThat(bubbleBarView.scaleY).isEqualTo(1)
assertThat(bubbleBarView.visibility).isEqualTo(VISIBLE)
assertThat(bubbleBarView.translationY).isEqualTo(BAR_TRANSLATION_Y_FOR_TASKBAR)
assertThat(animator.isAnimating).isFalse()
@@ -241,6 +243,8 @@ class BubbleBarViewAnimatorTest {
// verify that the hide animation was canceled
assertThat(animatorScheduler.delayedBlock).isNull()
assertThat(animator.isAnimating).isFalse()
assertThat(bubbleBarView.scaleX).isEqualTo(1)
assertThat(bubbleBarView.scaleY).isEqualTo(1)
verify(bubbleStashController).onNewBubbleAnimationInterrupted(any(), any())
// PhysicsAnimatorTestUtils posts the cancellation to the main thread so we need to wait