diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java | 22 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java | 16 |
2 files changed, 29 insertions, 9 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java b/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java index 4240209c4f1b..7c4e61c0c175 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java @@ -216,11 +216,20 @@ class Bubble implements BubbleViewProvider { return mInflated; } + void stopInflation() { + if (mInflationTask == null) { + return; + } + mInflationTask.cancel(/* mayInterruptIfRunning */ true); + mIconView = null; + mExpandedView = null; + mInflated = false; + } + void setViewInfo(BubbleViewInfoTask.BubbleViewInfo info) { if (!isInflated()) { mIconView = info.imageView; mExpandedView = info.expandedView; - mInflated = true; } mShortcutInfo = info.shortcutInfo; @@ -231,8 +240,15 @@ class Bubble implements BubbleViewProvider { mDotColor = info.dotColor; mDotPath = info.dotPath; - mExpandedView.update(this); - mIconView.update(this); + if (mExpandedView != null && mIconView != null) { + mInflated = true; + } + if (mExpandedView != null) { + mExpandedView.update(/* bubble */ this); + } + if (mIconView != null) { + mIconView.update(/* bubble */ this); + } } void setInflated(boolean inflated) { diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java index ff5e13c25859..fcbd9121fcda 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java @@ -203,10 +203,7 @@ public class BubbleData { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "promoteBubbleFromOverflow: " + bubble); } - - // Preserve new order for next repack, which sorts by last updated time. - bubble.markUpdatedAt(mTimeSource.currentTimeMillis()); - mOverflowBubbles.remove(bubble); + moveOverflowBubbleToPending(bubble); bubble.inflate( b -> { notificationEntryUpdated(bubble, /* suppressFlyout */ @@ -217,6 +214,13 @@ public class BubbleData { dispatchPendingChanges(); } + private void moveOverflowBubbleToPending(Bubble b) { + // Preserve new order for next repack, which sorts by last updated time. + b.markUpdatedAt(mTimeSource.currentTimeMillis()); + mOverflowBubbles.remove(b); + mPendingBubbles.add(b); + } + /** * Constructs a new bubble or returns an existing one. Does not add new bubbles to * bubble data, must go through {@link #notificationEntryUpdated(Bubble, boolean, boolean)} @@ -228,8 +232,7 @@ public class BubbleData { 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); + moveOverflowBubbleToPending(b); return b; } } @@ -445,6 +448,7 @@ public class BubbleData { Log.d(TAG, "overflowing bubble: " + bubble); } mOverflowBubbles.add(0, bubble); + bubble.stopInflation(); if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) { // Remove oldest bubble. |