summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java22
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java16
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.