Merge "Stop inflate on overflow and null check views" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-03-20 14:41:17 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 9 deletions

View File

@@ -216,11 +216,20 @@ class Bubble implements BubbleViewProvider {
return mInflated; return mInflated;
} }
void stopInflation() {
if (mInflationTask == null) {
return;
}
mInflationTask.cancel(/* mayInterruptIfRunning */ true);
mIconView = null;
mExpandedView = null;
mInflated = false;
}
void setViewInfo(BubbleViewInfoTask.BubbleViewInfo info) { void setViewInfo(BubbleViewInfoTask.BubbleViewInfo info) {
if (!isInflated()) { if (!isInflated()) {
mIconView = info.imageView; mIconView = info.imageView;
mExpandedView = info.expandedView; mExpandedView = info.expandedView;
mInflated = true;
} }
mShortcutInfo = info.shortcutInfo; mShortcutInfo = info.shortcutInfo;
@@ -231,8 +240,15 @@ class Bubble implements BubbleViewProvider {
mDotColor = info.dotColor; mDotColor = info.dotColor;
mDotPath = info.dotPath; mDotPath = info.dotPath;
mExpandedView.update(this); if (mExpandedView != null && mIconView != null) {
mIconView.update(this); mInflated = true;
}
if (mExpandedView != null) {
mExpandedView.update(/* bubble */ this);
}
if (mIconView != null) {
mIconView.update(/* bubble */ this);
}
} }
void setInflated(boolean inflated) { void setInflated(boolean inflated) {

View File

@@ -203,10 +203,7 @@ public class BubbleData {
if (DEBUG_BUBBLE_DATA) { if (DEBUG_BUBBLE_DATA) {
Log.d(TAG, "promoteBubbleFromOverflow: " + bubble); Log.d(TAG, "promoteBubbleFromOverflow: " + bubble);
} }
moveOverflowBubbleToPending(bubble);
// Preserve new order for next repack, which sorts by last updated time.
bubble.markUpdatedAt(mTimeSource.currentTimeMillis());
mOverflowBubbles.remove(bubble);
bubble.inflate( bubble.inflate(
b -> { b -> {
notificationEntryUpdated(bubble, /* suppressFlyout */ notificationEntryUpdated(bubble, /* suppressFlyout */
@@ -217,6 +214,13 @@ public class BubbleData {
dispatchPendingChanges(); 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 * 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)} * 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++) { for (int i = 0; i < mOverflowBubbles.size(); i++) {
Bubble b = mOverflowBubbles.get(i); Bubble b = mOverflowBubbles.get(i);
if (b.getKey().equals(entry.getKey())) { if (b.getKey().equals(entry.getKey())) {
mOverflowBubbles.remove(b); moveOverflowBubbleToPending(b);
mPendingBubbles.add(b);
return b; return b;
} }
} }
@@ -445,6 +448,7 @@ public class BubbleData {
Log.d(TAG, "overflowing bubble: " + bubble); Log.d(TAG, "overflowing bubble: " + bubble);
} }
mOverflowBubbles.add(0, bubble); mOverflowBubbles.add(0, bubble);
bubble.stopInflation();
if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) { if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) {
// Remove oldest bubble. // Remove oldest bubble.