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
This commit is contained in:
Mark Renouf
2019-04-09 16:42:22 -04:00
parent 8b6a3c6c1c
commit c6ab73dc69
2 changed files with 71 additions and 32 deletions

View File

@@ -356,8 +356,10 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe
ensureStackViewCreated();
mStackView.addBubble(notif);
}
Bubble bubble = mBubbleData.getBubble(notif.key);
if (shouldAutoExpand(notif)) {
mStackView.setExpandedBubble(notif);
mStackView.setSelectedBubble(bubble);
mStackView.setExpanded(true);
}
updateVisibility();
}

View File

@@ -441,40 +441,15 @@ public class BubbleStackView extends FrameLayout {
* 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);
}
}
@@ -491,6 +466,57 @@ public class BubbleStackView extends FrameLayout {
}
}
/**
* 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.
*
@@ -652,7 +678,10 @@ public class BubbleStackView extends FrameLayout {
* 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 @@ public class BubbleStackView extends FrameLayout {
}
}
/**
* @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 @@ public class BubbleStackView extends FrameLayout {
* 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) {