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

Commit bf1b3d66 authored by Lyn Han's avatar Lyn Han
Browse files

Move overflow bubble to stack on update

BubbleData#getOrCreateBubble is called per update, pre-inflation
- If bubble overflowed, remove it from overflow list,
- add it to pending bubbles, where it will be removed on
notificationEntryUpdated, post inflation
- return this bubble instead of creating a new one

Fixes: 150396294
Test: atest SystemUITests
Test: manual
1. Add people bubbles
2. Add more bubbles to get people in overflow
3. Add bubbles for same people, so that they are "active" in stack
4. Go to overflow => overflow no longer shows people "active" in stack

Change-Id: I79c1ba92533169da0e82414f2ad507cbf20d8561
parent 28ab4933
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -225,6 +225,14 @@ public class BubbleData {
    Bubble getOrCreateBubble(NotificationEntry entry) {
        Bubble bubble = getBubbleWithKey(entry.getKey());
        if (bubble == null) {
            for (int i = 0; i < mOverflowBubbles.size(); i++) {
                Bubble b = mOverflowBubbles.get(i);
                if (b.getKey().equals(entry.getKey())) {
                    mOverflowBubbles.remove(b);
                    mPendingBubbles.add(b);
                    return b;
                }
            }
            // Check for it in pending
            for (int i = 0; i < mPendingBubbles.size(); i++) {
                Bubble b = mPendingBubbles.get(i);
+14 −4
Original line number Diff line number Diff line
@@ -268,13 +268,18 @@ public class BubbleDataTest extends SysuiTestCase {
        sendUpdatedEntryAtTime(mEntryB2, 5000);
        mBubbleData.setListener(mListener);

        // Test
        sendUpdatedEntryAtTime(mEntryC1, 6000);
        verifyUpdateReceived();

        // Verify
        assertBubbleRemoved(mBubbleA1, BubbleController.DISMISS_AGED);
        assertThat(mBubbleData.getOverflowBubbles()).isEqualTo(ImmutableList.of(mBubbleA1));
        assertOverflowChangedTo(ImmutableList.of(mBubbleA1));

        Bubble bubbleA1 = mBubbleData.getOrCreateBubble(mEntryA1);
        bubbleA1.markUpdatedAt(7000L);
        mBubbleData.notificationEntryUpdated(bubbleA1, false /* suppressFlyout*/,
                true /* showInShade */);
        verifyUpdateReceived();
        assertBubbleRemoved(mBubbleA2, BubbleController.DISMISS_AGED);
        assertOverflowChangedTo(ImmutableList.of(mBubbleA2));
    }

    /**
@@ -931,6 +936,11 @@ public class BubbleDataTest extends SysuiTestCase {
        assertThat(update.expanded).named("expanded").isEqualTo(expected);
    }

    private void assertOverflowChangedTo(ImmutableList<Bubble> bubbles) {
        BubbleData.Update update = mUpdateCaptor.getValue();
        assertThat(update.overflowBubbles).isEqualTo(bubbles);
    }


    private NotificationEntry createBubbleEntry(int userId, String notifKey, String packageName) {
        return createBubbleEntry(userId, notifKey, packageName, 1000);