Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18cdc1c4 authored by Lyn Han's avatar Lyn Han
Browse files

Stop inflate on overflow and null check views

Fixes: 151833548
Fixes: 151879831
Test - manual: bugs fixed with overflow flag on/off
Test: atest SystemUITests

Change-Id: Id2e222354764a8f54c81cadb4e79bfffe0471717
parent 92eb1bbf
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -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) {
+10 −6
Original line number Diff line number Diff line
@@ -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.