BubbleData [5/n]: Split up StackView.setExpandedBubble
This splits setSelectedBubble into two discrete steps,
setSelectedBubble, and setExpanded. These will allow
BubbleData to dispatch these actions independently.
Bug: 123542488
Test: atest BubbleControllerTest
Change-Id: I7393d06b08713dc966acd96e165d32ff1e8110f3
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index 418d052..dfa9c95 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -356,8 +356,10 @@
ensureStackViewCreated();
mStackView.addBubble(notif);
}
+ Bubble bubble = mBubbleData.getBubble(notif.key);
if (shouldAutoExpand(notif)) {
- mStackView.setExpandedBubble(notif);
+ mStackView.setSelectedBubble(bubble);
+ mStackView.setExpanded(true);
}
updateVisibility();
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index 53e65e6..1f1a3e4 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -441,40 +441,15 @@
* Sets the bubble that should be expanded and expands if needed.
*
* @param key the {@link NotificationEntry#key} associated with the bubble to expand.
+ * @deprecated replaced by setSelectedBubble(Bubble) + setExpanded(true)
*/
+ @Deprecated
void setExpandedBubble(String key) {
Bubble bubbleToExpand = mBubbleData.getBubble(key);
- if (mIsExpanded && !bubbleToExpand.equals(mExpandedBubble)) {
- // Previously expanded, notify that this bubble is no longer expanded
- notifyExpansionChanged(mExpandedBubble.entry, false /* expanded */);
- }
- Bubble prevBubble = mExpandedBubble;
- mExpandedBubble = bubbleToExpand;
- if (!mIsExpanded) {
- // If we weren't previously expanded we should animate open.
- animateExpansion(true /* expand */);
- logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
- mExpandedBubble.entry.setShowInShadeWhenBubble(false);
- notifyExpansionChanged(mExpandedBubble.entry, true /* expanded */);
- } else {
- // Make the container of the expanded view transparent before removing the expanded view
- // from it. Otherwise a punch hole created by {@link android.view.SurfaceView} in the
- // expanded view becomes visible on the screen. See b/126856255
- mExpandedViewContainer.setAlpha(0.0f);
-
- mSurfaceSynchronizer.syncSurfaceAndRun(new Runnable() {
- @Override
- public void run() {
- updateExpandedBubble();
- updatePointerPosition();
- requestUpdate();
- logBubbleEvent(prevBubble, StatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED);
- logBubbleEvent(mExpandedBubble,
- StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
- mExpandedBubble.entry.setShowInShadeWhenBubble(false);
- notifyExpansionChanged(mExpandedBubble.entry, true /* expanded */);
- }
- });
+ if (bubbleToExpand != null) {
+ setSelectedBubble(bubbleToExpand);
+ bubbleToExpand.entry.setShowInShadeWhenBubble(false);
+ setExpanded(true);
}
}
@@ -492,6 +467,57 @@
}
/**
+ * Changes the currently selected bubble. If the stack is already expanded, the newly selected
+ * bubble will be shown immediately. This does not change the expanded state or change the
+ * position of any bubble.
+ */
+ public void setSelectedBubble(Bubble bubbleToSelect) {
+ if (mExpandedBubble != null && mExpandedBubble.equals(bubbleToSelect)) {
+ return;
+ }
+ final Bubble previouslySelected = mExpandedBubble;
+ mExpandedBubble = bubbleToSelect;
+ if (mIsExpanded) {
+ // Make the container of the expanded view transparent before removing the expanded view
+ // from it. Otherwise a punch hole created by {@link android.view.SurfaceView} in the
+ // expanded view becomes visible on the screen. See b/126856255
+ mExpandedViewContainer.setAlpha(0.0f);
+ mSurfaceSynchronizer.syncSurfaceAndRun(() -> {
+ updateExpandedBubble();
+ updatePointerPosition();
+ requestUpdate();
+ logBubbleEvent(previouslySelected, StatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED);
+ logBubbleEvent(bubbleToSelect, StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
+ notifyExpansionChanged(previouslySelected.entry, false /* expanded */);
+ notifyExpansionChanged(bubbleToSelect.entry, true /* expanded */);
+ });
+ }
+ }
+
+ /**
+ * Changes the expanded state of the stack.
+ *
+ * @param expanded whether the bubble stack should appear expanded
+ */
+ public void setExpanded(boolean expanded) {
+ if (expanded == mIsExpanded) {
+ return;
+ }
+ if (mIsExpanded) {
+ // Collapse the stack
+ animateExpansion(false /* expand */);
+ logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED);
+ } else {
+ // Expand the stack
+ animateExpansion(true /* expand */);
+ // TODO: move next line to BubbleData
+ logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
+ logBubbleEvent(mExpandedBubble, StatsLog.BUBBLE_UICHANGED__ACTION__STACK_EXPANDED);
+ }
+ notifyExpansionChanged(mExpandedBubble.entry, mIsExpanded);
+ }
+
+ /**
* Adds a bubble to the top of the stack.
*
* @param entry the notification to add to the stack of bubbles.
@@ -652,7 +678,10 @@
* Collapses the stack of bubbles.
* <p>
* Must be called from the main thread.
+ *
+ * @deprecated use {@link #setExpanded(boolean)} and {@link #setSelectedBubble(Bubble)}
*/
+ @Deprecated
@MainThread
public void collapseStack() {
if (mIsExpanded) {
@@ -663,6 +692,11 @@
}
}
+ /**
+ * @deprecated use {@link #setExpanded(boolean)} and {@link #setSelectedBubble(Bubble)}
+ */
+ @Deprecated
+ @MainThread
void collapseStack(Runnable endRunnable) {
collapseStack();
// TODO - use the runnable at end of animation
@@ -673,7 +707,10 @@
* Expands the stack of bubbles.
* <p>
* Must be called from the main thread.
+ *
+ * @deprecated use {@link #setExpanded(boolean)} and {@link #setSelectedBubble(Bubble)}
*/
+ @Deprecated
@MainThread
public void expandStack() {
if (!mIsExpanded) {