Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81097e79 authored by Mady Mellor's avatar Mady Mellor Committed by Android (Google) Code Review
Browse files

Merge "Revert "Without modifying existing logic, animate out bubbles in...

Merge "Revert "Without modifying existing logic, animate out bubbles in reverse of the way they animate in."" into qt-r1-bubbles-dev
parents 609b68b7 88552b80
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -801,7 +801,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
        if (mStackView == null) {
            return;
        }

        if (mStatusBarStateListener.getCurrentState() == SHADE && hasBubbles()) {
            // Bubbles only appear in unlocked shade
            mStackView.setVisibility(hasBubbles() ? VISIBLE : INVISIBLE);
@@ -812,23 +811,12 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
        // Let listeners know if bubble state changed.
        boolean hadBubbles = mStatusBarWindowController.getBubblesShowing();
        boolean hasBubblesShowing = hasBubbles() && mStackView.getVisibility() == VISIBLE;
        mStatusBarWindowController.setBubblesShowing(hasBubblesShowing);
        if (mStateChangeListener != null && hadBubbles != hasBubblesShowing) {
            mStateChangeListener.onHasBubblesChanged(hasBubblesShowing);
        }

        mStackView.updateContentDescription();

        // If we don't have bubbles, but there's transient bubbles, keep the stack view visible and
        // the status bar window expanded until they finish animating out.
        if (!hasBubbles() && mStackView.hasTransientBubbles()) {
            mStackView.setVisibility(VISIBLE);
            mStackView.runActionAfterTransientViewAnimations(() -> {
                mStackView.setVisibility(INVISIBLE);
                mStatusBarWindowController.setBubblesShowing(false);
            });
        } else {
            mStatusBarWindowController.setBubblesShowing(hasBubblesShowing);
        }
    }

    /**
+0 −8
Original line number Diff line number Diff line
@@ -662,10 +662,6 @@ public class BubbleStackView extends FrameLayout {
        return mIsExpanded;
    }

    void runActionAfterTransientViewAnimations(Runnable after) {
        mStackAnimationController.runActionAfterAllViewsAndTransientRemoved(after);
    }

    /**
     * The {@link BubbleView} that is expanded, null if one does not exist.
     */
@@ -696,10 +692,6 @@ public class BubbleStackView extends FrameLayout {
        }
    }

    boolean hasTransientBubbles() {
        return mBubbleContainer.getTransientViewCount() > 0;
    }

    // via BubbleData.Listener
    void addBubble(Bubble bubble) {
        if (DEBUG_BUBBLE_STACK_VIEW) {
+6 −32
Original line number Diff line number Diff line
@@ -144,11 +144,6 @@ public class StackAnimationController extends
     */
    private boolean mFirstBubbleSpringingToTouch = false;

    /**
     * Action to run after all views, including transient views, have been removed from the layout.
     */
    @Nullable private Runnable mAfterAllViewsAndTransientRemoved = null;

    /** Horizontal offset of bubbles in the stack. */
    private float mStackOffset;
    /** Diameter of the bubble icon. */
@@ -565,14 +560,6 @@ public class StackAnimationController extends
                });
    }

    /**
     * Sets an action to run after all views, including transient views, have been removed from the
     * layout.
     */
    public void runActionAfterAllViewsAndTransientRemoved(Runnable action) {
        mAfterAllViewsAndTransientRemoved = action;
    }

    /**
     * Springs the first bubble to the given final position, with the rest of the stack 'following'.
     */
@@ -660,26 +647,13 @@ public class StackAnimationController extends

    @Override
    void onChildRemoved(View child, int index, Runnable finishRemoval) {
        // Animate the removing view in the opposite direction of the stack.
        final float xOffset = getOffsetForChainedPropertyAnimation(DynamicAnimation.TRANSLATION_X);
        animationForChild(child)
                .alpha(0f,
                        finishRemoval /* after */,
                        () -> {
                            // If this was the last transient view, run the callback.
                            if (mLayout.getTransientViewCount() == 0
                                    && mAfterAllViewsAndTransientRemoved != null) {

                                // If a 'real' view was added while we were animating out, don't run
                                // the callback since all views haven't been removed.
                                if (mLayout.getChildCount() == 0) {
                                    mAfterAllViewsAndTransientRemoved.run();
                                }

                                mAfterAllViewsAndTransientRemoved = null;
                            }
                        } /* after */)
                .scaleX(0f)
                .scaleY(0f)
                .withStiffness(ANIMATE_IN_STIFFNESS)
                .alpha(0f, finishRemoval /* after */)
                .scaleX(ANIMATE_IN_STARTING_SCALE)
                .scaleY(ANIMATE_IN_STARTING_SCALE)
                .translationX(mStackPosition.x - (-xOffset * ANIMATE_TRANSLATION_FACTOR))
                .start();

        if (mLayout.getChildCount() > 0) {
+2 −0
Original line number Diff line number Diff line
@@ -224,6 +224,7 @@ public class BubbleControllerTest extends SysuiTestCase {
        verify(mBubbleStateChangeListener).onHasBubblesChanged(true);

        mBubbleController.removeBubble(mRow.getEntry().key, BubbleController.DISMISS_USER_GESTURE);
        assertFalse(mStatusBarWindowController.getBubblesShowing());
        assertNull(mBubbleData.getBubbleWithKey(mRow.getEntry().key));
        verify(mNotificationEntryManager, times(2)).updateNotifications();
        verify(mBubbleStateChangeListener).onHasBubblesChanged(false);
@@ -261,6 +262,7 @@ public class BubbleControllerTest extends SysuiTestCase {
        assertTrue(mBubbleController.hasBubbles());

        mBubbleController.dismissStack(BubbleController.DISMISS_USER_GESTURE);
        assertFalse(mStatusBarWindowController.getBubblesShowing());
        verify(mNotificationEntryManager, times(3)).updateNotifications();
        assertNull(mBubbleData.getBubbleWithKey(mRow.getEntry().key));
        assertNull(mBubbleData.getBubbleWithKey(mRow2.getEntry().key));