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

Commit 5981b9fa authored by Mady Mellor's avatar Mady Mellor
Browse files

Fix an issue that caused an NPE

If the overflow is empty when the last bubble
is dismissed we collapse the stack. If it's not empty
we show the overflow contents.

We were overflowing bubbles AFTER making the choice
to select the overflow or collapse the stack which
causes problems.

Test: atest BubbleDataTest
Test: manual - have 1 bubble and an empty overflow
             - navigate to the overflow, dismiss the bubble
             => no crash
Bug: 202320538
Change-Id: Ic838c5c61bcd714d8de94672d3c4ed753d4f6fa6
parent 356b103c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -558,6 +558,8 @@ public class BubbleData {
        }
        Bubble bubbleToRemove = mBubbles.get(indexToRemove);
        bubbleToRemove.stopInflation();
        overflowBubble(reason, bubbleToRemove);

        if (mBubbles.size() == 1) {
            if (hasOverflowBubbles() && (mPositioner.showingInTaskbar() || isExpanded())) {
                // No more active bubbles but we have stuff in the overflow -- select that view
@@ -581,8 +583,6 @@ public class BubbleData {
            mStateChange.orderChanged |= repackAll();
        }

        overflowBubble(reason, bubbleToRemove);

        // Note: If mBubbles.isEmpty(), then mSelectedBubble is now null.
        if (Objects.equals(mSelectedBubble, bubbleToRemove)) {
            // Move selection to the new bubble at the same position.
+16 −1
Original line number Diff line number Diff line
@@ -793,7 +793,7 @@ public class BubbleDataTest extends ShellTestCase {
    }

    @Test
    public void test_expanded_removeLastBubble_collapsesStack() {
    public void test_expanded_removeLastBubble_showsOverflowIfNotEmpty() {
        // Setup
        sendUpdatedEntryAtTime(mEntryA1, 1000);
        changeExpandedStateAtTime(true, 2000);
@@ -802,6 +802,21 @@ public class BubbleDataTest extends ShellTestCase {
        // Test
        mBubbleData.dismissBubbleWithKey(mEntryA1.getKey(), Bubbles.DISMISS_USER_GESTURE);
        verifyUpdateReceived();
        assertThat(mBubbleData.getOverflowBubbles().size()).isGreaterThan(0);
        assertSelectionChangedTo(mBubbleData.getOverflow());
    }

    @Test
    public void test_expanded_removeLastBubble_collapsesIfOverflowEmpty() {
        // Setup
        sendUpdatedEntryAtTime(mEntryA1, 1000);
        changeExpandedStateAtTime(true, 2000);
        mBubbleData.setListener(mListener);

        // Test
        mBubbleData.dismissBubbleWithKey(mEntryA1.getKey(), Bubbles.DISMISS_NO_BUBBLE_UP);
        verifyUpdateReceived();
        assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
        assertExpandedChangedTo(false);
    }