Merge "Fix issues with bubbles crashing/removing during expansion." into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-06-22 23:24:19 +00:00
committed by Android (Google) Code Review
2 changed files with 54 additions and 29 deletions

View File

@@ -1554,6 +1554,14 @@ public class BubbleStackView extends FrameLayout
mBubbleData.setShowingOverflow(true); mBubbleData.setShowingOverflow(true);
} }
if (mIsExpanded && mIsExpansionAnimating) {
// If the bubble selection changed during the expansion animation, the expanding bubble
// probably crashed or immediately removed itself (or, we just got unlucky with a new
// auto-expanding bubble showing up at just the right time). Cancel the animations so we
// can start fresh.
cancelAllExpandCollapseSwitchAnimations();
}
// If we're expanded, screenshot the currently expanded bubble (before expanding the newly // If we're expanded, screenshot the currently expanded bubble (before expanding the newly
// selected bubble) so we can animate it out. // selected bubble) so we can animate it out.
if (mIsExpanded && mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) { if (mIsExpanded && mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
@@ -1879,7 +1887,8 @@ public class BubbleStackView extends FrameLayout
mExpandedBubble.getExpandedView().setSurfaceZOrderedOnTop(false); mExpandedBubble.getExpandedView().setSurfaceZOrderedOnTop(false);
} }
mDelayedAnimationHandler.postDelayed(() -> mDelayedAnimationHandler.postDelayed(() -> {
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix).cancel();
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix) PhysicsAnimator.getInstance(mExpandedViewContainerMatrix)
.spring(AnimatableScaleMatrix.SCALE_X, .spring(AnimatableScaleMatrix.SCALE_X,
AnimatableScaleMatrix.getAnimatableValueForScaleFactor(1f), AnimatableScaleMatrix.getAnimatableValueForScaleFactor(1f),
@@ -1907,7 +1916,8 @@ public class BubbleStackView extends FrameLayout
.setSurfaceZOrderedOnTop(false); .setSurfaceZOrderedOnTop(false);
} }
}) })
.start(), startDelay); .start();
}, startDelay);
} }
private void animateCollapse() { private void animateCollapse() {
@@ -2035,6 +2045,7 @@ public class BubbleStackView extends FrameLayout
return; return;
} }
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix).cancel();
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix) PhysicsAnimator.getInstance(mExpandedViewContainerMatrix)
.spring(AnimatableScaleMatrix.SCALE_X, .spring(AnimatableScaleMatrix.SCALE_X,
AnimatableScaleMatrix.getAnimatableValueForScaleFactor(1f), AnimatableScaleMatrix.getAnimatableValueForScaleFactor(1f),
@@ -2068,6 +2079,15 @@ public class BubbleStackView extends FrameLayout
mIsBubbleSwitchAnimating = false; mIsBubbleSwitchAnimating = false;
} }
private void cancelAllExpandCollapseSwitchAnimations() {
cancelDelayedExpandCollapseSwitchAnimations();
PhysicsAnimator.getInstance(mAnimatingOutSurfaceView).cancel();
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix).cancel();
mExpandedViewContainer.setAnimationMatrix(null);
}
private void notifyExpansionChanged(BubbleViewProvider bubble, boolean expanded) { private void notifyExpansionChanged(BubbleViewProvider bubble, boolean expanded) {
if (mExpandListener != null && bubble != null) { if (mExpandListener != null && bubble != null) {
mExpandListener.onBubbleExpandChanged(expanded, bubble.getKey()); mExpandListener.onBubbleExpandChanged(expanded, bubble.getKey());
@@ -2587,6 +2607,7 @@ public class BubbleStackView extends FrameLayout
bev.setContentVisibility(false); bev.setContentVisibility(false);
mExpandedViewContainerMatrix.setScaleX(0f); mExpandedViewContainerMatrix.setScaleX(0f);
mExpandedViewContainerMatrix.setScaleY(0f); mExpandedViewContainerMatrix.setScaleY(0f);
mExpandedViewContainerMatrix.setTranslate(0f, 0f);
mExpandedViewContainer.setVisibility(View.INVISIBLE); mExpandedViewContainer.setVisibility(View.INVISIBLE);
mExpandedViewContainer.setAlpha(0f); mExpandedViewContainer.setAlpha(0f);
mExpandedViewContainer.addView(bev); mExpandedViewContainer.addView(bev);

View File

@@ -237,6 +237,10 @@ public class ExpandedAnimationController
} }
mAfterExpand = null; mAfterExpand = null;
// Update bubble positions in case any bubbles were added or removed during the
// expansion animation.
updateBubblePositions();
}; };
} else { } else {
after = () -> { after = () -> {