Refactor animate expansion
Bug: 131849856
Test: manual
Change-Id: Ia39c1e38fee6c088f7c4b4a14354e4311b67fe73
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index 014baf8..0e7c581 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -225,7 +225,7 @@
@Override
public boolean onPreDraw() {
getViewTreeObserver().removeOnPreDrawListener(mViewUpdater);
- applyCurrentState();
+ updateExpandedView();
mViewUpdatedRequested = false;
return true;
}
@@ -401,7 +401,7 @@
}
mImeVisible = keyboardHeight != 0;
- float newY = getYPositionForExpandedView();
+ float newY = getExpandedViewY();
if (newY < 0) {
// TODO: This means our expanded content is too big to fit on screen. Right now
// we'll let it translate off but we should be clipping it & pushing the header
@@ -779,25 +779,14 @@
if (DEBUG) {
Log.d(TAG, "setExpanded: " + shouldExpand);
}
- boolean wasExpanded = mIsExpanded;
- if (shouldExpand == wasExpanded) {
+ if (shouldExpand == mIsExpanded) {
return;
}
- if (wasExpanded) {
- // Collapse the stack
- mExpandedViewContainer.setAlpha(0.0f);
- // TODO: In order to prevent flicker, code below should be executed after the alpha
- // value set on the mExpandedViewContainer is reflected on the screen. However, we
- // cannot just postpone the execution like #setSelectedBubble(), since some of member
- // variables referred by the code are overridden before the execution.
- if (mExpandedBubble != null) {
- mExpandedBubble.setContentVisibility(false);
- }
- animateExpansion(false /* expand */);
+ if (mIsExpanded) {
+ animateCollapse();
logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED);
} else {
- // Expand the stack
- animateExpansion(true /* expand */);
+ animateExpansion();
// TODO: move next line to BubbleData
logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__STACK_EXPANDED);
@@ -897,64 +886,71 @@
mBubbleData.setExpanded(true);
}
- /**
- * Tell the stack to animate to collapsed or expanded state.
- */
- private void animateExpansion(boolean shouldExpand) {
- if (DEBUG) {
- Log.d(TAG, "animateExpansion: shouldExpand=" + shouldExpand);
- }
- if (mIsExpanded != shouldExpand) {
- hideFlyoutImmediate();
+ private void beforeExpandedViewAnimation() {
+ hideFlyoutImmediate();
+ updateExpandedBubble();
+ updateExpandedView();
+ mIsExpansionAnimating = true;
+ }
- mIsExpanded = shouldExpand;
- updateExpandedBubble();
- applyCurrentState();
+ private void afterExpandedViewAnimation() {
+ updateExpandedView();
+ mIsExpansionAnimating = false;
+ requestUpdate();
+ }
- mIsExpansionAnimating = true;
+ private void animateCollapse() {
+ mIsExpanded = false;
+ beforeExpandedViewAnimation();
- Runnable updateAfter = () -> {
- applyCurrentState();
- mIsExpansionAnimating = false;
- requestUpdate();
- };
+ mBubbleContainer.cancelAllAnimations();
+ mExpandedAnimationController.collapseBackToStack(
+ () -> {
+ mBubbleContainer.setController(mStackAnimationController);
+ afterExpandedViewAnimation();
+ });
- if (shouldExpand) {
- mBubbleContainer.setController(mExpandedAnimationController);
- mExpandedAnimationController.expandFromStack(
- mStackAnimationController.getStackPositionAlongNearestHorizontalEdge()
- /* collapseTo */,
- () -> {
- updatePointerPosition();
- updateAfter.run();
- } /* after */);
- } else {
- mBubbleContainer.cancelAllAnimations();
- mExpandedAnimationController.collapseBackToStack(
- () -> {
- mBubbleContainer.setController(mStackAnimationController);
- updateAfter.run();
- });
- }
+ mExpandedViewXAnim.animateToFinalPosition(getCollapsedX());
+ mExpandedViewYAnim.animateToFinalPosition(getCollapsedY());
+ mExpandedViewContainer.animate()
+ .setDuration(100)
+ .alpha(0f);
+ }
- final float xStart =
- mStackAnimationController.getStackPosition().x < getWidth() / 2
- ? -mExpandedAnimateXDistance
- : mExpandedAnimateXDistance;
+ private void animateExpansion() {
+ mIsExpanded = true;
+ beforeExpandedViewAnimation();
- final float yStart = Math.min(
- mStackAnimationController.getStackPosition().y,
- mExpandedAnimateYDistance);
- final float yDest = getYPositionForExpandedView();
+ mBubbleContainer.setController(mExpandedAnimationController);
+ mExpandedAnimationController.expandFromStack(
+ mStackAnimationController.getStackPositionAlongNearestHorizontalEdge()
+ /* collapseTo */,
+ () -> {
+ updatePointerPosition();
+ afterExpandedViewAnimation();
+ } /* after */);
- if (shouldExpand) {
- mExpandedViewContainer.setTranslationX(xStart);
- mExpandedViewContainer.setTranslationY(yStart);
- }
- mExpandedViewXAnim.animateToFinalPosition(shouldExpand ? 0f : xStart);
- mExpandedViewYAnim.animateToFinalPosition(shouldExpand ? yDest : yStart);
- }
+ mExpandedViewContainer.setTranslationX(getCollapsedX());
+ mExpandedViewContainer.setTranslationY(getCollapsedY());
+ mExpandedViewContainer.setAlpha(0f);
+
+ mExpandedViewXAnim.animateToFinalPosition(0f);
+ mExpandedViewYAnim.animateToFinalPosition(getExpandedViewY());
+ mExpandedViewContainer.animate()
+ .setDuration(100)
+ .alpha(1f);
+ }
+
+ private float getCollapsedX() {
+ return mStackAnimationController.getStackPosition().x < getWidth() / 2
+ ? -mExpandedAnimateXDistance
+ : mExpandedAnimateXDistance;
+ }
+
+ private float getCollapsedY() {
+ return Math.min(mStackAnimationController.getStackPosition().y,
+ mExpandedAnimateYDistance);
}
private void notifyExpansionChanged(NotificationEntry entry, boolean expanded) {
@@ -1308,7 +1304,7 @@
/**
* Calculates the y position of the expanded view when it is expanded.
*/
- float getYPositionForExpandedView() {
+ float getExpandedViewY() {
return getStatusBarHeight() + mBubbleSize + mBubblePadding + mPointerHeight;
}
@@ -1482,9 +1478,9 @@
}
}
- private void applyCurrentState() {
+ private void updateExpandedView() {
if (DEBUG) {
- Log.d(TAG, "applyCurrentState: mIsExpanded=" + mIsExpanded);
+ Log.d(TAG, "updateExpandedView: mIsExpanded=" + mIsExpanded);
}
mExpandedViewContainer.setVisibility(mIsExpanded ? VISIBLE : GONE);
@@ -1492,7 +1488,7 @@
// First update the view so that it calculates a new height (ensuring the y position
// calculation is correct)
mExpandedBubble.expandedView.updateView();
- final float y = getYPositionForExpandedView();
+ final float y = getExpandedViewY();
if (!mExpandedViewYAnim.isRunning()) {
// We're not animating so set the value
mExpandedViewContainer.setTranslationY(y);