Merge "Fix an issue where the bubble overflow wouldn't animate when collapsing" into sc-v2-dev

This commit is contained in:
Mady Mellor
2021-08-16 15:15:35 +00:00
committed by Android (Google) Code Review
2 changed files with 35 additions and 14 deletions

View File

@@ -699,10 +699,9 @@ public class BubbleData {
if (DEBUG_BUBBLE_DATA) { if (DEBUG_BUBBLE_DATA) {
Log.d(TAG, "setSelectedBubbleInternal: " + bubble); Log.d(TAG, "setSelectedBubbleInternal: " + bubble);
} }
if (!mShowingOverflow && Objects.equals(bubble, mSelectedBubble)) { if (Objects.equals(bubble, mSelectedBubble)) {
return; return;
} }
// Otherwise, if we are showing the overflow menu, return to the previously selected bubble.
boolean isOverflow = bubble != null && BubbleOverflow.KEY.equals(bubble.getKey()); boolean isOverflow = bubble != null && BubbleOverflow.KEY.equals(bubble.getKey());
if (bubble != null if (bubble != null
&& !mBubbles.contains(bubble) && !mBubbles.contains(bubble)
@@ -771,6 +770,10 @@ public class BubbleData {
Log.e(TAG, "Attempt to expand stack without selected bubble!"); Log.e(TAG, "Attempt to expand stack without selected bubble!");
return; return;
} }
if (mSelectedBubble.getKey().equals(mOverflow.getKey()) && !mBubbles.isEmpty()) {
// Show previously selected bubble instead of overflow menu when expanding.
setSelectedBubbleInternal(mBubbles.get(0));
}
if (mSelectedBubble instanceof Bubble) { if (mSelectedBubble instanceof Bubble) {
((Bubble) mSelectedBubble).markAsAccessedAt(mTimeSource.currentTimeMillis()); ((Bubble) mSelectedBubble).markAsAccessedAt(mTimeSource.currentTimeMillis());
} }
@@ -779,16 +782,6 @@ public class BubbleData {
// Apply ordering and grouping rules from expanded -> collapsed, then save // Apply ordering and grouping rules from expanded -> collapsed, then save
// the result. // the result.
mStateChange.orderChanged |= repackAll(); mStateChange.orderChanged |= repackAll();
// Save the state which should be returned to when expanded (with no other changes)
if (mShowingOverflow) {
// Show previously selected bubble instead of overflow menu on next expansion.
if (!mSelectedBubble.getKey().equals(mOverflow.getKey())) {
setSelectedBubbleInternal(mSelectedBubble);
} else {
setSelectedBubbleInternal(mBubbles.get(0));
}
}
if (mBubbles.indexOf(mSelectedBubble) > 0) { if (mBubbles.indexOf(mSelectedBubble) > 0) {
// Move the selected bubble to the top while collapsed. // Move the selected bubble to the top while collapsed.
int index = mBubbles.indexOf(mSelectedBubble); int index = mBubbles.indexOf(mSelectedBubble);

View File

@@ -869,6 +869,35 @@ public class BubbleDataTest extends ShellTestCase {
assertNotNull(mBubbleData.getOverflowBubbleWithKey(mBubbleA2.getKey())); assertNotNull(mBubbleData.getOverflowBubbleWithKey(mBubbleA2.getKey()));
} }
/**
* Verifies that after the stack is collapsed with the overflow selected, it will select
* the top bubble upon next expansion.
*/
@Test
public void test_collapseWithOverflowSelected_nextExpansion() {
sendUpdatedEntryAtTime(mEntryA1, 1000);
sendUpdatedEntryAtTime(mEntryA2, 2000);
mBubbleData.setExpanded(true);
mBubbleData.setListener(mListener);
// Select the overflow
mBubbleData.setShowingOverflow(true);
mBubbleData.setSelectedBubble(mBubbleData.getOverflow());
verifyUpdateReceived();
assertSelectionChangedTo(mBubbleData.getOverflow());
// Collapse
mBubbleData.setExpanded(false);
verifyUpdateReceived();
assertSelectionNotChanged();
// Expand (here we should select the new bubble)
mBubbleData.setExpanded(true);
verifyUpdateReceived();
assertSelectionChangedTo(mBubbleA2);
}
private void verifyUpdateReceived() { private void verifyUpdateReceived() {
verify(mListener).applyUpdate(mUpdateCaptor.capture()); verify(mListener).applyUpdate(mUpdateCaptor.capture());
reset(mListener); reset(mListener);
@@ -902,7 +931,7 @@ public class BubbleDataTest extends ShellTestCase {
assertWithMessage("selectionChanged").that(update.selectionChanged).isFalse(); assertWithMessage("selectionChanged").that(update.selectionChanged).isFalse();
} }
private void assertSelectionChangedTo(Bubble bubble) { private void assertSelectionChangedTo(BubbleViewProvider bubble) {
BubbleData.Update update = mUpdateCaptor.getValue(); BubbleData.Update update = mUpdateCaptor.getValue();
assertWithMessage("selectionChanged").that(update.selectionChanged).isTrue(); assertWithMessage("selectionChanged").that(update.selectionChanged).isTrue();
assertWithMessage("selectedBubble").that(update.selectedBubble).isEqualTo(bubble); assertWithMessage("selectedBubble").that(update.selectedBubble).isEqualTo(bubble);
@@ -925,7 +954,6 @@ public class BubbleDataTest extends ShellTestCase {
assertThat(update.overflowBubbles).isEqualTo(bubbles); assertThat(update.overflowBubbles).isEqualTo(bubbles);
} }
private BubbleEntry createBubbleEntry(int userId, String notifKey, String packageName, private BubbleEntry createBubbleEntry(int userId, String notifKey, String packageName,
NotificationListenerService.Ranking ranking) { NotificationListenerService.Ranking ranking) {
return createBubbleEntry(userId, notifKey, packageName, ranking, 1000); return createBubbleEntry(userId, notifKey, packageName, ranking, 1000);