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
This commit is contained in:
Mady Mellor
2021-10-07 17:57:26 -07:00
parent 356b103c6f
commit 5981b9fa27
2 changed files with 18 additions and 3 deletions

View File

@@ -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.

View File

@@ -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);
}