diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index ed82082760ee3..6a5e94ce7096b 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -175,7 +175,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi private INotificationManager mINotificationManager; // Callback that updates BubbleOverflowActivity on data change. - @Nullable private BubbleData.Listener mOverflowListener = null; + @Nullable private Runnable mOverflowCallback = null; private final NotificationInterruptStateProvider mNotificationInterruptStateProvider; private IStatusBarService mBarService; @@ -571,8 +571,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi mInflateSynchronously = inflateSynchronously; } - void setOverflowListener(BubbleData.Listener listener) { - mOverflowListener = listener; + void setOverflowCallback(Runnable updateOverflow) { + mOverflowCallback = updateOverflow; } /** @@ -986,8 +986,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi @Override public void applyUpdate(BubbleData.Update update) { // Update bubbles in overflow. - if (mOverflowListener != null) { - mOverflowListener.applyUpdate(update); + if (mOverflowCallback != null) { + mOverflowCallback.run(); } // Collapsing? Do this first before remaining steps. @@ -1015,8 +1015,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi if (!mBubbleData.hasOverflowBubbleWithKey(bubble.getKey()) && (!bubble.showInShade() || reason == DISMISS_NOTIF_CANCEL - || reason == DISMISS_GROUP_CANCELLED - || reason == DISMISS_OVERFLOW_MAX_REACHED)) { + || reason == DISMISS_GROUP_CANCELLED)) { // The bubble is now gone & the notification is hidden from the shade, so // time to actually remove it for (NotifCallback cb : mCallbacks) { @@ -1087,6 +1086,9 @@ public class BubbleController implements ConfigurationController.ConfigurationLi Log.d(TAG, BubbleDebugConfig.formatBubblesString(mStackView.getBubblesOnScreen(), mStackView.getExpandedBubble())); } + Log.d(TAG, "\n[BubbleData] overflow:"); + Log.d(TAG, BubbleDebugConfig.formatBubblesString(mBubbleData.getOverflowBubbles(), + null) + "\n"); } } }; diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java index f2b1c031dcd55..65d5bebc625dc 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleData.java @@ -74,8 +74,6 @@ public class BubbleData { @Nullable Bubble selectedBubble; @Nullable Bubble addedBubble; @Nullable Bubble updatedBubble; - @Nullable Bubble addedOverflowBubble; - @Nullable Bubble removedOverflowBubble; // Pair with Bubble and @DismissReason Integer final List> removedBubbles = new ArrayList<>(); @@ -94,12 +92,10 @@ public class BubbleData { || addedBubble != null || updatedBubble != null || !removedBubbles.isEmpty() - || addedOverflowBubble != null - || removedOverflowBubble != null || orderChanged; } - void bubbleRemoved(Bubble bubbleToRemove, @DismissReason int reason) { + void bubbleRemoved(Bubble bubbleToRemove, @DismissReason int reason) { removedBubbles.add(new Pair<>(bubbleToRemove, reason)); } } @@ -237,7 +233,6 @@ public class BubbleData { private void moveOverflowBubbleToPending(Bubble b) { mOverflowBubbles.remove(b); - mStateChange.removedOverflowBubble = b; mPendingBubbles.add(b); } @@ -445,9 +440,8 @@ public class BubbleData { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Cancel overflow bubble: " + b); } - mOverflowBubbles.remove(b); mStateChange.bubbleRemoved(b, reason); - mStateChange.removedOverflowBubble = b; + mOverflowBubbles.remove(b); } return; } @@ -489,7 +483,6 @@ public class BubbleData { Log.d(TAG, "Overflowing: " + bubble); } mOverflowBubbles.add(0, bubble); - mStateChange.addedOverflowBubble = bubble; bubble.stopInflation(); if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) { // Remove oldest bubble. @@ -497,9 +490,8 @@ public class BubbleData { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Overflow full. Remove: " + oldest); } - mOverflowBubbles.remove(oldest); - mStateChange.removedOverflowBubble = oldest; mStateChange.bubbleRemoved(oldest, BubbleController.DISMISS_OVERFLOW_MAX_REACHED); + mOverflowBubbles.remove(oldest); } } diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java index c2ca9fad6d43c..0074249a197cd 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java @@ -108,12 +108,11 @@ public class BubbleOverflowActivity extends Activity { mAdapter = new BubbleOverflowAdapter(getApplicationContext(), mOverflowBubbles, mBubbleController::promoteBubbleFromOverflow, viewWidth, viewHeight); mRecyclerView.setAdapter(mAdapter); - - mOverflowBubbles.addAll(mBubbleController.getOverflowBubbles()); - mAdapter.notifyDataSetChanged(); - setEmptyStateVisibility(); - - mBubbleController.setOverflowListener(mDataListener); + onDataChanged(mBubbleController.getOverflowBubbles()); + mBubbleController.setOverflowCallback(() -> { + onDataChanged(mBubbleController.getOverflowBubbles()); + }); + onThemeChanged(); } /** @@ -140,14 +139,6 @@ public class BubbleOverflowActivity extends Activity { } } - void setEmptyStateVisibility() { - if (mOverflowBubbles.isEmpty()) { - mEmptyState.setVisibility(View.VISIBLE); - } else { - mEmptyState.setVisibility(View.GONE); - } - } - void setBackgroundColor() { final TypedArray ta = getApplicationContext().obtainStyledAttributes( new int[]{android.R.attr.colorBackgroundFloating}); @@ -156,40 +147,22 @@ public class BubbleOverflowActivity extends Activity { findViewById(android.R.id.content).setBackgroundColor(bgColor); } - private final BubbleData.Listener mDataListener = new BubbleData.Listener() { + void onDataChanged(List bubbles) { + mOverflowBubbles.clear(); + mOverflowBubbles.addAll(bubbles); + mAdapter.notifyDataSetChanged(); - @Override - public void applyUpdate(BubbleData.Update update) { - - Bubble toRemove = update.removedOverflowBubble; - if (toRemove != null) { - if (DEBUG_OVERFLOW) { - Log.d(TAG, "remove: " + toRemove); - } - toRemove.cleanupViews(); - int i = mOverflowBubbles.indexOf(toRemove); - mOverflowBubbles.remove(toRemove); - mAdapter.notifyItemRemoved(i); - } - - Bubble toAdd = update.addedOverflowBubble; - if (toAdd != null) { - if (DEBUG_OVERFLOW) { - Log.d(TAG, "add: " + toAdd); - } - mOverflowBubbles.add(0, toAdd); - mAdapter.notifyItemInserted(0); - } - - setEmptyStateVisibility(); - - if (DEBUG_OVERFLOW) { - Log.d(TAG, BubbleDebugConfig.formatBubblesString( - mBubbleController.getOverflowBubbles(), - null)); - } + if (mOverflowBubbles.isEmpty()) { + mEmptyState.setVisibility(View.VISIBLE); + } else { + mEmptyState.setVisibility(View.GONE); } - }; + + if (DEBUG_OVERFLOW) { + Log.d(TAG, "Updated overflow bubbles:\n" + BubbleDebugConfig.formatBubblesString( + mOverflowBubbles, /*selected*/ null)); + } + } @Override public void onStart() {