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

Commit 65c38b39 authored by Kevin Han's avatar Kevin Han
Browse files

Hook up bind pipeline to CommonNotifCollection

Move off entry manager so bind pipeline can work with either pipeline as
long as the appropriate flag is set. Also move from onPendingEntry to
onEntryInit to ensure that the bind entry always exists even if some
coordinator decides it wants to invalidate immediately.

Bug: 145749521
Test: atest SystemUITests
Change-Id: I968f564bd36f8914b3b00f1392b234b3e440c4ab
parent cd240190
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ class NotificationsControllerImpl @Inject constructor(
                listContainer,
                headsUpManager,
                bindRowCallback)
        notifBindPipelineInitializer.initialize()

        if (featureFlags.isNewNotifPipelineEnabled) {
            newNotifPipeline.get().initialize(notificationListener, notificationRowBinder)
@@ -100,7 +101,6 @@ class NotificationsControllerImpl @Inject constructor(
        if (featureFlags.isNewNotifPipelineRenderingEnabled) {
            // TODO
        } else {
            notifBindPipelineInitializer.initialize()
            notificationRowBinder.setInflationCallback(entryManager)

            remoteInputUriController.attach(entryManager)
+7 −11
Original line number Diff line number Diff line
@@ -25,11 +25,10 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.os.CancellationSignal;

import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;

import java.util.Map;
@@ -78,8 +77,8 @@ public final class NotifBindPipeline {
    private BindStage mStage;

    @Inject
    NotifBindPipeline(NotificationEntryManager entryManager) {
        entryManager.addNotificationEntryListener(mEntryListener);
    NotifBindPipeline(CommonNotifCollection collection) {
        collection.addCollectionListener(mCollectionListener);
    }

    /**
@@ -158,18 +157,15 @@ public final class NotifBindPipeline {
        callbacks.clear();
    }

    //TODO: Move this to onManageEntry hook when we split that from add/remove
    private final NotificationEntryListener mEntryListener = new NotificationEntryListener() {
    private final NotifCollectionListener mCollectionListener = new NotifCollectionListener() {
        @Override
        public void onPendingEntryAdded(NotificationEntry entry) {
        public void onEntryInit(NotificationEntry entry) {
            mBindEntries.put(entry, new BindEntry());
            mStage.createStageParams(entry);
        }

        @Override
        public void onEntryRemoved(NotificationEntry entry,
                @Nullable NotificationVisibility visibility,
                boolean removedByUser) {
        public void onEntryCleanUp(NotificationEntry entry) {
            BindEntry bindEntry = mBindEntries.remove(entry);
            ExpandableNotificationRow row = bindEntry.row;
            if (row != null) {
+9 −9
Original line number Diff line number Diff line
@@ -28,9 +28,9 @@ import androidx.core.os.CancellationSignal;
import androidx.test.filters.SmallTest;

import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.row.NotifBindPipeline.BindCallback;

import org.junit.Before;
@@ -57,17 +57,17 @@ public class NotifBindPipelineTest extends SysuiTestCase {
    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        NotificationEntryManager entryManager = mock(NotificationEntryManager.class);
        CommonNotifCollection collection = mock(CommonNotifCollection.class);

        mBindPipeline = new NotifBindPipeline(entryManager);
        mBindPipeline = new NotifBindPipeline(collection);
        mBindPipeline.setStage(mStage);

        ArgumentCaptor<NotificationEntryListener> entryListenerCaptor =
                ArgumentCaptor.forClass(NotificationEntryListener.class);
        verify(entryManager).addNotificationEntryListener(entryListenerCaptor.capture());
        NotificationEntryListener entryListener = entryListenerCaptor.getValue();
        ArgumentCaptor<NotifCollectionListener> collectionListenerCaptor =
                ArgumentCaptor.forClass(NotifCollectionListener.class);
        verify(collection).addCollectionListener(collectionListenerCaptor.capture());
        NotifCollectionListener listener = collectionListenerCaptor.getValue();

        entryListener.onPendingEntryAdded(mEntry);
        listener.onEntryInit(mEntry);
    }

    @Test
+10 −10
Original line number Diff line number Diff line
@@ -49,10 +49,10 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.SmartReplyController;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow.ExpansionLogger;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow.OnExpandClickListener;
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
@@ -89,7 +89,7 @@ public class NotificationTestHelper {
    private ExpandableNotificationRow mRow;
    private HeadsUpManagerPhone mHeadsUpManager;
    private final NotifBindPipeline mBindPipeline;
    private final NotificationEntryListener mBindPipelineEntryListener;
    private final NotifCollectionListener mBindPipelineEntryListener;
    private final RowContentBindStage mBindStage;

    public NotificationTestHelper(Context context, TestableDependency dependency) {
@@ -112,15 +112,15 @@ public class NotificationTestHelper {
        contentBinder.setInflateSynchronously(true);
        mBindStage = new RowContentBindStage(contentBinder, mock(IStatusBarService.class));

        NotificationEntryManager entryManager = mock(NotificationEntryManager.class);
        CommonNotifCollection collection = mock(CommonNotifCollection.class);

        mBindPipeline = new NotifBindPipeline(entryManager);
        mBindPipeline = new NotifBindPipeline(collection);
        mBindPipeline.setStage(mBindStage);

        ArgumentCaptor<NotificationEntryListener> entryListenerCaptor =
                ArgumentCaptor.forClass(NotificationEntryListener.class);
        verify(entryManager).addNotificationEntryListener(entryListenerCaptor.capture());
        mBindPipelineEntryListener = entryListenerCaptor.getValue();
        ArgumentCaptor<NotifCollectionListener> collectionListenerCaptor =
                ArgumentCaptor.forClass(NotifCollectionListener.class);
        verify(collection).addCollectionListener(collectionListenerCaptor.capture());
        mBindPipelineEntryListener = collectionListenerCaptor.getValue();
    }

    /**
@@ -357,7 +357,7 @@ public class NotificationTestHelper {
        entry.createIcons(mContext, entry.getSbn());
        row.setEntry(entry);

        mBindPipelineEntryListener.onPendingEntryAdded(entry);
        mBindPipelineEntryListener.onEntryInit(entry);
        mBindPipeline.manageRow(entry, row);

        row.initialize(