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

Commit 2b3feba7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Interface for notification collection being used"

parents ce409f36 f400aee8
Loading
Loading
Loading
Loading
+30 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification;
import static android.service.notification.NotificationListenerService.REASON_CANCEL;
import static android.service.notification.NotificationListenerService.REASON_CANCEL;
import static android.service.notification.NotificationListenerService.REASON_ERROR;
import static android.service.notification.NotificationListenerService.REASON_ERROR;


import static com.android.systemui.statusbar.notification.collection.NotifCollection.REASON_UNKNOWN;
import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationCallback;
import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationCallback;


import android.annotation.NonNull;
import android.annotation.NonNull;
@@ -44,6 +45,8 @@ import com.android.systemui.statusbar.NotificationUiAdjustment;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
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.logging.NotifEvent;
import com.android.systemui.statusbar.notification.logging.NotifEvent;
import com.android.systemui.statusbar.notification.logging.NotifLog;
import com.android.systemui.statusbar.notification.logging.NotifLog;
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
@@ -96,6 +99,7 @@ import dagger.Lazy;
 */
 */
@Singleton
@Singleton
public class NotificationEntryManager implements
public class NotificationEntryManager implements
        CommonNotifCollection,
        Dumpable,
        Dumpable,
        InflationCallback,
        InflationCallback,
        VisualStabilityManager.Callback {
        VisualStabilityManager.Callback {
@@ -130,6 +134,7 @@ public class NotificationEntryManager implements
    private final Lazy<NotificationRowBinder> mNotificationRowBinderLazy;
    private final Lazy<NotificationRowBinder> mNotificationRowBinderLazy;
    private final Lazy<NotificationRemoteInputManager> mRemoteInputManagerLazy;
    private final Lazy<NotificationRemoteInputManager> mRemoteInputManagerLazy;
    private final LeakDetector mLeakDetector;
    private final LeakDetector mLeakDetector;
    private final List<NotifCollectionListener> mNotifCollectionListeners = new ArrayList<>();


    private final KeyguardEnvironment mKeyguardEnvironment;
    private final KeyguardEnvironment mKeyguardEnvironment;
    private final NotificationGroupManager mGroupManager;
    private final NotificationGroupManager mGroupManager;
@@ -488,6 +493,13 @@ public class NotificationEntryManager implements
                for (NotificationEntryListener listener : mNotificationEntryListeners) {
                for (NotificationEntryListener listener : mNotificationEntryListeners) {
                    listener.onEntryRemoved(entry, visibility, removedByUser);
                    listener.onEntryRemoved(entry, visibility, removedByUser);
                }
                }
                for (NotifCollectionListener listener : mNotifCollectionListeners) {
                    // NEM doesn't have a good knowledge of reasons so defaulting to unknown.
                    listener.onEntryRemoved(entry, REASON_UNKNOWN);
                }
                for (NotifCollectionListener listener : mNotifCollectionListeners) {
                    listener.onEntryCleanUp(entry);
                }
            }
            }
        }
        }
    }
    }
@@ -553,6 +565,10 @@ public class NotificationEntryManager implements


        mLeakDetector.trackInstance(entry);
        mLeakDetector.trackInstance(entry);


        for (NotifCollectionListener listener : mNotifCollectionListeners) {
            listener.onEntryInit(entry);
        }

        // Construct the expanded view.
        // Construct the expanded view.
        if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
        if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
            mNotificationRowBinderLazy.get()
            mNotificationRowBinderLazy.get()
@@ -566,6 +582,9 @@ public class NotificationEntryManager implements
        for (NotificationEntryListener listener : mNotificationEntryListeners) {
        for (NotificationEntryListener listener : mNotificationEntryListeners) {
            listener.onPendingEntryAdded(entry);
            listener.onPendingEntryAdded(entry);
        }
        }
        for (NotifCollectionListener listener : mNotifCollectionListeners) {
            listener.onEntryAdded(entry);
        }
    }
    }


    public void addNotification(StatusBarNotification notification, RankingMap ranking) {
    public void addNotification(StatusBarNotification notification, RankingMap ranking) {
@@ -600,6 +619,9 @@ public class NotificationEntryManager implements
        for (NotificationEntryListener listener : mNotificationEntryListeners) {
        for (NotificationEntryListener listener : mNotificationEntryListeners) {
            listener.onPreEntryUpdated(entry);
            listener.onPreEntryUpdated(entry);
        }
        }
        for (NotifCollectionListener listener : mNotifCollectionListeners) {
            listener.onEntryUpdated(entry);
        }


        if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
        if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
            mNotificationRowBinderLazy.get()
            mNotificationRowBinderLazy.get()
@@ -674,6 +696,9 @@ public class NotificationEntryManager implements
        for (NotificationEntryListener listener : mNotificationEntryListeners) {
        for (NotificationEntryListener listener : mNotificationEntryListeners) {
            listener.onNotificationRankingUpdated(rankingMap);
            listener.onNotificationRankingUpdated(rankingMap);
        }
        }
        for (NotifCollectionListener listener : mNotifCollectionListeners) {
            listener.onRankingUpdate(rankingMap);
        }
    }
    }


    private void updateRankingOfPendingNotifications(@Nullable RankingMap rankingMap) {
    private void updateRankingOfPendingNotifications(@Nullable RankingMap rankingMap) {
@@ -862,6 +887,11 @@ public class NotificationEntryManager implements
        return mReadOnlyNotifications.size() != 0;
        return mReadOnlyNotifications.size() != 0;
    }
    }


    @Override
    public void addCollectionListener(NotifCollectionListener listener) {
        mNotifCollectionListeners.add(listener);
    }

    /*
    /*
     * End annexation
     * End annexation
     * -----
     * -----
+3 −5
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.plugga
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;


@@ -66,7 +67,7 @@ import javax.inject.Singleton;
 *  9. The list is handed off to the view layer to be rendered
 *  9. The list is handed off to the view layer to be rendered
 */
 */
@Singleton
@Singleton
public class NotifPipeline {
public class NotifPipeline implements CommonNotifCollection {
    private final NotifCollection mNotifCollection;
    private final NotifCollection mNotifCollection;
    private final ShadeListBuilder mShadeListBuilder;
    private final ShadeListBuilder mShadeListBuilder;


@@ -89,10 +90,7 @@ public class NotifPipeline {
        return mNotifCollection.getActiveNotifs();
        return mNotifCollection.getActiveNotifs();
    }
    }


    /**
    @Override
     * Registers a listener to be informed when there is a notification entry event such as an add,
     * update, or remove.
     */
    public void addCollectionListener(NotifCollectionListener listener) {
    public void addCollectionListener(NotifCollectionListener listener) {
        mNotifCollection.addCollectionListener(listener);
        mNotifCollection.addCollectionListener(listener);
    }
    }
+37 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.notification.collection.notifcollection;

import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;

/**
 * A notification collection that manages the list of {@link NotificationEntry}s that will be
 * rendered.
 *
 * TODO: (b/145659174) Once we fully switch off {@link NotificationEntryManager} to
 * {@link NotifPipeline}, we probably won't need this, but having it for now makes it easy to
 * switch between the two.
 */
public interface CommonNotifCollection {
    /**
     * Registers a listener to be informed when notifications are created, added, updated, removed,
     * or deleted.
     */
    void addCollectionListener(NotifCollectionListener listener);
}
+16 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,10 @@ package com.android.systemui.statusbar.notification.dagger;
import android.content.Context;
import android.content.Context;


import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.init.NotificationsControllerImpl;
import com.android.systemui.statusbar.notification.init.NotificationsControllerImpl;
import com.android.systemui.statusbar.notification.init.NotificationsControllerStub;
import com.android.systemui.statusbar.notification.init.NotificationsControllerStub;
@@ -45,4 +49,16 @@ public class NotificationsModule {
            return stubController.get();
            return stubController.get();
        }
        }
    }
    }

    /**
     * Provide the active notification collection managing the notifications to render.
     */
    @Provides
    @Singleton
    public CommonNotifCollection provideCommonNotifCollection(
            FeatureFlags featureFlags,
            Lazy<NotifPipeline> pipeline,
            NotificationEntryManager entryManager) {
        return featureFlags.isNewNotifPipelineRenderingEnabled() ? pipeline.get() : entryManager;
    }
}
}
+7 −11
Original line number Original line Diff line number Diff line
@@ -22,10 +22,9 @@ import android.widget.RemoteViews;


import androidx.annotation.Nullable;
import androidx.annotation.Nullable;


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.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.NotificationRowContentBinder.InflationFlag;
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;


import java.util.Map;
import java.util.Map;
@@ -40,8 +39,8 @@ public class NotifRemoteViewCacheImpl implements NotifRemoteViewCache {
            new ArrayMap<>();
            new ArrayMap<>();


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


    @Override
    @Override
@@ -93,17 +92,14 @@ public class NotifRemoteViewCacheImpl implements NotifRemoteViewCache {
        contentViews.clear();
        contentViews.clear();
    }
    }


    private final NotificationEntryListener mEntryListener = new NotificationEntryListener() {
    private final NotifCollectionListener mCollectionListener = new NotifCollectionListener() {
        @Override
        @Override
        public void onPendingEntryAdded(NotificationEntry entry) {
        public void onEntryInit(NotificationEntry entry) {
            mNotifCachedContentViews.put(entry, new SparseArray<>());
            mNotifCachedContentViews.put(entry, new SparseArray<>());
        }
        }


        @Override
        @Override
        public void onEntryRemoved(
        public void onEntryCleanUp(NotificationEntry entry) {
                NotificationEntry entry,
                @Nullable NotificationVisibility visibility,
                boolean removedByUser) {
            mNotifCachedContentViews.remove(entry);
            mNotifCachedContentViews.remove(entry);
        }
        }
    };
    };
Loading