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

Commit 0acd9a85 authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Fix some more empty bubble issues!

The main thing here is not ignoring new selected bubbles that are different instances, but otherwise equal (same key, etc.).

Also, release the animating-out surface on collapse, and don't start the switch animation if we're collapsed. I was able to cause some issues in my testing with animating-out surfaces lying around.

Bug: 159861400
Test: manual, also using modded bubble test app with instantly canceled+readded bubbles
Change-Id: Ic19ee0bd3f4700021b1c790ae267beba9a52c532
parent 874dec6b
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1307,7 +1307,10 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
            for (Pair<Bubble, Integer> removed : removedBubbles) {
                final Bubble bubble = removed.first;
                @DismissReason final int reason = removed.second;

                if (mStackView != null) {
                    mStackView.removeBubble(bubble);
                }

                // If the bubble is removed for user switching, leave the notification in place.
                if (reason == DISMISS_USER_CHANGED) {
+15 −2
Original line number Diff line number Diff line
@@ -1581,7 +1581,13 @@ public class BubbleStackView extends FrameLayout
        if (DEBUG_BUBBLE_STACK_VIEW) {
            Log.d(TAG, "setSelectedBubble: " + bubbleToSelect);
        }
        if (mExpandedBubble != null && mExpandedBubble.equals(bubbleToSelect)) {

        // Ignore this new bubble only if it is the exact same bubble object. Otherwise, we'll want
        // to re-render it even if it has the same key (equals() returns true). If the currently
        // expanded bubble is removed and instantly re-added, we'll get back a new Bubble instance
        // with the same key (with newly inflated expanded views), and we need to render those new
        // views.
        if (mExpandedBubble == bubbleToSelect) {
            return;
        }
        if (bubbleToSelect == null || bubbleToSelect.getKey() != BubbleOverflow.KEY) {
@@ -1661,6 +1667,13 @@ public class BubbleStackView extends FrameLayout
        if (DEBUG_BUBBLE_STACK_VIEW) {
            Log.d(TAG, "setExpanded: " + shouldExpand);
        }

        if (!shouldExpand) {
            // If we're collapsing, release the animating-out surface immediately since we have no
            // need for it, and this ensures it cannot remain visible as we collapse.
            releaseAnimatingOutBubbleBuffer();
        }

        if (shouldExpand == mIsExpanded) {
            return;
        }
@@ -2663,7 +2676,7 @@ public class BubbleStackView extends FrameLayout
     *                   expanded bubble.
     */
    private void screenshotAnimatingOutBubbleIntoSurface(Consumer<Boolean> onComplete) {
        if (mExpandedBubble == null || mExpandedBubble.getExpandedView() == null) {
        if (!mIsExpanded || mExpandedBubble == null || mExpandedBubble.getExpandedView() == null) {
            // You can't animate null.
            onComplete.accept(false);
            return;