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

Commit add4a72a authored by Mady Mellor's avatar Mady Mellor Committed by Automerger Merge Worker
Browse files

Merge changes from topic "canBubble_isBubble_nuances" into rvc-dev am: 82e64ff4

Change-Id: I6c5cca60641dc2fc06d58259b432d18b5669cd75
parents b5616832 82e64ff4
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -68,6 +68,8 @@ class Bubble implements BubbleViewProvider {


    /** Whether flyout text should be suppressed, regardless of any other flags or state. */
    /** Whether flyout text should be suppressed, regardless of any other flags or state. */
    private boolean mSuppressFlyout;
    private boolean mSuppressFlyout;
    /** Whether this bubble should auto expand regardless of the normal flag, used for overflow. */
    private boolean mShouldAutoExpand;


    // Items that are typically loaded later
    // Items that are typically loaded later
    private String mAppName;
    private String mAppName;
@@ -470,7 +472,11 @@ class Bubble implements BubbleViewProvider {


    boolean shouldAutoExpand() {
    boolean shouldAutoExpand() {
        Notification.BubbleMetadata metadata = mEntry.getBubbleMetadata();
        Notification.BubbleMetadata metadata = mEntry.getBubbleMetadata();
        return metadata != null && metadata.getAutoExpandBubble();
        return (metadata != null && metadata.getAutoExpandBubble()) ||  mShouldAutoExpand;
    }

    void setShouldAutoExpand(boolean shouldAutoExpand) {
        mShouldAutoExpand = shouldAutoExpand;
    }
    }


    @Override
    @Override
+33 −23
Original line number Original line Diff line number Diff line
@@ -729,8 +729,9 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
                mNotificationEntryManager.getActiveNotificationsForCurrentUser()) {
                mNotificationEntryManager.getActiveNotificationsForCurrentUser()) {
            if (savedBubbleKeys.contains(e.getKey())
            if (savedBubbleKeys.contains(e.getKey())
                    && mNotificationInterruptStateProvider.shouldBubbleUp(e)
                    && mNotificationInterruptStateProvider.shouldBubbleUp(e)
                    && e.isBubble()
                    && canLaunchInActivityView(mContext, e)) {
                    && canLaunchInActivityView(mContext, e)) {
                updateBubble(e, /* suppressFlyout= */ true);
                updateBubble(e, true /* suppressFlyout */, false /* showInShade */);
            }
            }
        }
        }
        // Finally, remove the entries for this user now that bubbles are restored.
        // Finally, remove the entries for this user now that bubbles are restored.
@@ -844,25 +845,34 @@ public class BubbleController implements ConfigurationController.ConfigurationLi


    void promoteBubbleFromOverflow(Bubble bubble) {
    void promoteBubbleFromOverflow(Bubble bubble) {
        bubble.setInflateSynchronously(mInflateSynchronously);
        bubble.setInflateSynchronously(mInflateSynchronously);
        setIsBubble(bubble, /* isBubble */ true);
        setIsBubble(bubble.getEntry(), /* isBubble */ true);
        mBubbleData.promoteBubbleFromOverflow(bubble, mStackView, mBubbleIconFactory);
        mBubbleData.promoteBubbleFromOverflow(bubble, mStackView, mBubbleIconFactory);
    }
    }


    /**
    /**
     * Request the stack expand if needed, then select the specified Bubble as current.
     * Request the stack expand if needed, then select the specified Bubble as current.
     * If no bubble exists for this entry, one is created.
     *
     *
     * @param notificationKey the notification key for the bubble to be selected
     * @param entry the notification for the bubble to be selected
     */
     */
    public void expandStackAndSelectBubble(String notificationKey) {
    public void expandStackAndSelectBubble(NotificationEntry entry) {
        Bubble bubble = mBubbleData.getBubbleInStackWithKey(notificationKey);
        String key = entry.getKey();
        if (bubble == null) {
        Bubble bubble = mBubbleData.getBubbleInStackWithKey(key);
            bubble = mBubbleData.getOverflowBubbleWithKey(notificationKey);
        if (bubble != null) {
        if (bubble != null) {
                mBubbleData.promoteBubbleFromOverflow(bubble, mStackView, mBubbleIconFactory);
            }
        } else if (bubble.getEntry().isBubble()){
            mBubbleData.setSelectedBubble(bubble);
            mBubbleData.setSelectedBubble(bubble);
        } else {
            bubble = mBubbleData.getOverflowBubbleWithKey(key);
            if (bubble != null) {
                promoteBubbleFromOverflow(bubble);
            } else if (entry.canBubble()) {
                // It can bubble but it's not -- it got aged out of the overflow before it
                // was dismissed or opened, make it a bubble again.
                setIsBubble(entry, true);
                bubble.setShouldAutoExpand(true);
                updateBubble(entry, true /* suppressFlyout */, false /* showInShade */);
            }
            }
        }

        mBubbleData.setExpanded(true);
        mBubbleData.setExpanded(true);
    }
    }


@@ -882,11 +892,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
     * @param notif the notification associated with this bubble.
     * @param notif the notification associated with this bubble.
     */
     */
    void updateBubble(NotificationEntry notif) {
    void updateBubble(NotificationEntry notif) {
        updateBubble(notif, false /* suppressFlyout */);
        updateBubble(notif, false /* suppressFlyout */, true /* showInShade */);
    }

    void updateBubble(NotificationEntry notif, boolean suppressFlyout) {
        updateBubble(notif, suppressFlyout, true /* showInShade */);
    }
    }


    void updateBubble(NotificationEntry notif, boolean suppressFlyout, boolean showInShade) {
    void updateBubble(NotificationEntry notif, boolean suppressFlyout, boolean showInShade) {
@@ -901,7 +907,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
        bubble.setInflateSynchronously(mInflateSynchronously);
        bubble.setInflateSynchronously(mInflateSynchronously);
        bubble.inflate(
        bubble.inflate(
                b -> {
                b -> {
                    mBubbleData.notificationEntryUpdated(b, suppressFlyout, showInShade);
                    mBubbleData.notificationEntryUpdated(b, suppressFlyout,
                            showInShade);
                    if (bubble.getBubbleIntent() == null) {
                    if (bubble.getBubbleIntent() == null) {
                        return;
                        return;
                    }
                    }
@@ -979,18 +986,20 @@ public class BubbleController implements ConfigurationController.ConfigurationLi


    private void onEntryAdded(NotificationEntry entry) {
    private void onEntryAdded(NotificationEntry entry) {
        if (mNotificationInterruptStateProvider.shouldBubbleUp(entry)
        if (mNotificationInterruptStateProvider.shouldBubbleUp(entry)
                && entry.isBubble()
                && canLaunchInActivityView(mContext, entry)) {
                && canLaunchInActivityView(mContext, entry)) {
            updateBubble(entry);
            updateBubble(entry);
        }
        }
    }
    }


    private void onEntryUpdated(NotificationEntry entry) {
    private void onEntryUpdated(NotificationEntry entry) {
        // shouldBubbleUp checks canBubble & for bubble metadata
        boolean shouldBubble = mNotificationInterruptStateProvider.shouldBubbleUp(entry)
        boolean shouldBubble = mNotificationInterruptStateProvider.shouldBubbleUp(entry)
                && canLaunchInActivityView(mContext, entry);
                && canLaunchInActivityView(mContext, entry);
        if (!shouldBubble && mBubbleData.hasAnyBubbleWithKey(entry.getKey())) {
        if (!shouldBubble && mBubbleData.hasAnyBubbleWithKey(entry.getKey())) {
            // It was previously a bubble but no longer a bubble -- lets remove it
            // It was previously a bubble but no longer a bubble -- lets remove it
            removeBubble(entry, DISMISS_NO_LONGER_BUBBLE);
            removeBubble(entry, DISMISS_NO_LONGER_BUBBLE);
        } else if (shouldBubble) {
        } else if (shouldBubble && entry.isBubble()) {
            updateBubble(entry);
            updateBubble(entry);
        }
        }
    }
    }
@@ -1036,14 +1045,14 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
        }
        }
    }
    }


    private void setIsBubble(Bubble b, boolean isBubble) {
    private void setIsBubble(NotificationEntry entry, boolean isBubble) {
        if (isBubble) {
        if (isBubble) {
            b.getEntry().getSbn().getNotification().flags |= FLAG_BUBBLE;
            entry.getSbn().getNotification().flags |= FLAG_BUBBLE;
        } else {
        } else {
            b.getEntry().getSbn().getNotification().flags &= ~FLAG_BUBBLE;
            entry.getSbn().getNotification().flags &= ~FLAG_BUBBLE;
        }
        }
        try {
        try {
            mBarService.onNotificationBubbleChanged(b.getKey(), isBubble, 0);
            mBarService.onNotificationBubbleChanged(entry.getKey(), isBubble, 0);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            // Bad things have happened
            // Bad things have happened
        }
        }
@@ -1092,7 +1101,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
                        }
                        }
                    } else {
                    } else {
                        if (bubble.getEntry().isBubble() && bubble.showInShade()) {
                        if (bubble.getEntry().isBubble() && bubble.showInShade()) {
                            setIsBubble(bubble, /* isBubble */ false);
                            setIsBubble(bubble.getEntry(), false /* isBubble */);
                        }
                        }
                        if (bubble.getEntry().getRow() != null) {
                        if (bubble.getEntry().getRow() != null) {
                            bubble.getEntry().getRow().updateBubbleButton();
                            bubble.getEntry().getRow().updateBubbleButton();
@@ -1327,7 +1336,8 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
                boolean clearedTask, boolean wasVisible) {
                boolean clearedTask, boolean wasVisible) {
            for (Bubble b : mBubbleData.getBubbles()) {
            for (Bubble b : mBubbleData.getBubbles()) {
                if (b.getDisplayId() == task.displayId) {
                if (b.getDisplayId() == task.displayId) {
                    expandStackAndSelectBubble(b.getKey());
                    mBubbleData.setSelectedBubble(b);
                    mBubbleData.setExpanded(true);
                    return;
                    return;
                }
                }
            }
            }
+6 −8
Original line number Original line Diff line number Diff line
@@ -24,7 +24,6 @@ import static com.android.systemui.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME
import android.app.Notification;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Context;
import android.service.notification.NotificationListenerService;
import android.util.Log;
import android.util.Log;
import android.util.Pair;
import android.util.Pair;
import android.view.View;
import android.view.View;
@@ -123,8 +122,6 @@ public class BubbleData {
    // State tracked during an operation -- keeps track of what listener events to dispatch.
    // State tracked during an operation -- keeps track of what listener events to dispatch.
    private Update mStateChange;
    private Update mStateChange;


    private NotificationListenerService.Ranking mTmpRanking;

    private TimeSource mTimeSource = System::currentTimeMillis;
    private TimeSource mTimeSource = System::currentTimeMillis;


    @Nullable
    @Nullable
@@ -210,15 +207,14 @@ public class BubbleData {
        }
        }
        moveOverflowBubbleToPending(bubble);
        moveOverflowBubbleToPending(bubble);
        // Preserve new order for next repack, which sorts by last updated time.
        // Preserve new order for next repack, which sorts by last updated time.
        bubble.markUpdatedAt(mTimeSource.currentTimeMillis());
        bubble.inflate(
        bubble.inflate(
                b -> {
                b -> {
                    notificationEntryUpdated(bubble, /* suppressFlyout */
                    b.setShouldAutoExpand(true);
                            false, /* showInShade */ true);
                    b.markUpdatedAt(mTimeSource.currentTimeMillis());
                    setSelectedBubble(bubble);
                    notificationEntryUpdated(bubble, false /* suppressFlyout */,
                            true /* showInShade */);
                },
                },
                mContext, stack, factory);
                mContext, stack, factory);
        dispatchPendingChanges();
    }
    }


    void setShowingOverflow(boolean showingOverflow) {
    void setShowingOverflow(boolean showingOverflow) {
@@ -284,7 +280,9 @@ public class BubbleData {
            bubble.setSuppressFlyout(suppressFlyout);
            bubble.setSuppressFlyout(suppressFlyout);
            doUpdate(bubble);
            doUpdate(bubble);
        }
        }

        if (bubble.shouldAutoExpand()) {
        if (bubble.shouldAutoExpand()) {
            bubble.setShouldAutoExpand(false);
            setSelectedBubbleInternal(bubble);
            setSelectedBubbleInternal(bubble);
            if (!mExpanded) {
            if (!mExpanded) {
                setExpandedInternal(true);
                setExpandedInternal(true);
+0 −8
Original line number Original line Diff line number Diff line
@@ -146,14 +146,6 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
            return false;
            return false;
        }
        }


        if (!entry.isBubble()) {
            if (DEBUG) {
                Log.d(TAG, "No bubble up: notification " + sbn.getKey()
                        + " is bubble? " + entry.isBubble());
            }
            return false;
        }

        if (entry.getBubbleMetadata() == null
        if (entry.getBubbleMetadata() == null
                || (entry.getBubbleMetadata().getShortcutId() == null
                || (entry.getBubbleMetadata().getShortcutId() == null
                    && entry.getBubbleMetadata().getIntent() == null)) {
                    && entry.getBubbleMetadata().getIntent() == null)) {
+8 −8
Original line number Original line Diff line number Diff line
@@ -350,7 +350,6 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
        }
        }
        Intent fillInIntent = null;
        Intent fillInIntent = null;
        NotificationEntry entry = row.getEntry();
        NotificationEntry entry = row.getEntry();
        final boolean isBubble = entry.isBubble();
        CharSequence remoteInputText = null;
        CharSequence remoteInputText = null;
        if (!TextUtils.isEmpty(entry.remoteInputText)) {
        if (!TextUtils.isEmpty(entry.remoteInputText)) {
            remoteInputText = entry.remoteInputText;
            remoteInputText = entry.remoteInputText;
@@ -359,14 +358,15 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
            fillInIntent = new Intent().putExtra(Notification.EXTRA_REMOTE_INPUT_DRAFT,
            fillInIntent = new Intent().putExtra(Notification.EXTRA_REMOTE_INPUT_DRAFT,
                    remoteInputText.toString());
                    remoteInputText.toString());
        }
        }
        if (isBubble) {
        final boolean canBubble = entry.canBubble();
        if (canBubble) {
            mLogger.logExpandingBubble(notificationKey);
            mLogger.logExpandingBubble(notificationKey);
            expandBubbleStackOnMainThread(notificationKey);
            expandBubbleStackOnMainThread(entry);
        } else {
        } else {
            startNotificationIntent(
            startNotificationIntent(
                    intent, fillInIntent, entry, row, wasOccluded, isActivityIntent);
                    intent, fillInIntent, entry, row, wasOccluded, isActivityIntent);
        }
        }
        if (isActivityIntent || isBubble) {
        if (isActivityIntent || canBubble) {
            mAssistManagerLazy.get().hideAssist();
            mAssistManagerLazy.get().hideAssist();
        }
        }
        if (shouldCollapse()) {
        if (shouldCollapse()) {
@@ -381,7 +381,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
                rank, count, true, location);
                rank, count, true, location);
        mClickNotifier.onNotificationClick(notificationKey, nv);
        mClickNotifier.onNotificationClick(notificationKey, nv);


        if (!isBubble) {
        if (!canBubble) {
            if (parentToCancelFinal != null) {
            if (parentToCancelFinal != null) {
                // TODO: (b/145659174) remove - this cancels the parent if the notification clicked
                // TODO: (b/145659174) remove - this cancels the parent if the notification clicked
                // on will auto-cancel and is the only child in the group. This won't be
                // on will auto-cancel and is the only child in the group. This won't be
@@ -398,12 +398,12 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
        mIsCollapsingToShowActivityOverLockscreen = false;
        mIsCollapsingToShowActivityOverLockscreen = false;
    }
    }


    private void expandBubbleStackOnMainThread(String notificationKey) {
    private void expandBubbleStackOnMainThread(NotificationEntry entry) {
        if (Looper.getMainLooper().isCurrentThread()) {
        if (Looper.getMainLooper().isCurrentThread()) {
            mBubbleController.expandStackAndSelectBubble(notificationKey);
            mBubbleController.expandStackAndSelectBubble(entry);
        } else {
        } else {
            mMainThreadHandler.post(
            mMainThreadHandler.post(
                    () -> mBubbleController.expandStackAndSelectBubble(notificationKey));
                    () -> mBubbleController.expandStackAndSelectBubble(entry));
        }
        }
    }
    }


Loading