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

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

Merge "Assign NotifSections in new notif pipeline"

parents c2cdc0d6 21df0361
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -842,7 +842,7 @@ public class ShadeListBuilder implements Dumpable {
    }

    private static final NotifSection sDefaultSection =
            new NotifSection("DefaultSection") {
            new NotifSection("UnknownSection") {
                @Override
                public boolean isInSection(ListEntry entry) {
                    return true;
+27 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

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

import static android.app.NotificationManager.IMPORTANCE_MIN;

import android.app.Notification;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
@@ -24,9 +26,11 @@ import android.util.ArraySet;
import com.android.systemui.ForegroundServiceController;
import com.android.systemui.appops.AppOpsController;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.notification.collection.ListEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
import com.android.systemui.util.Assert;
@@ -43,6 +47,8 @@ import javax.inject.Singleton;
 *  Tags notifications with appOps
 *  Lifetime extends notifications associated with an ongoing ForegroundService.
 *  Filters out notifications that represent foreground services that are no longer running
 *  Puts foreground service notifications into the FGS section. See {@link NotifCoordinators} for
 *      section ordering priority.
 *
 * Previously this logic lived in
 *  frameworks/base/packages/SystemUI/src/com/android/systemui/ForegroundServiceController
@@ -86,6 +92,10 @@ public class AppOpsCoordinator implements Coordinator {
        mAppOpsController.addCallback(ForegroundServiceController.APP_OPS, this::onAppOpsChanged);
    }

    public NotifSection getSection() {
        return mNotifSection;
    }

    /**
     * Filters out notifications that represent foreground services that are no longer running or
     * that already have an app notification with the appOps tagged to
@@ -204,6 +214,23 @@ public class AppOpsCoordinator implements Coordinator {
        }
    };

    /**
     * Puts foreground service notifications into its own section.
     */
    private final NotifSection mNotifSection = new NotifSection("ForegroundService") {
        @Override
        public boolean isInSection(ListEntry entry) {
            NotificationEntry notificationEntry = entry.getRepresentativeEntry();
            if (notificationEntry != null) {
                Notification notification = notificationEntry.getSbn().getNotification();
                return notification.isForegroundService()
                        && notification.isColorized()
                        && entry.getRepresentativeEntry().getImportance() > IMPORTANCE_MIN;
            }
            return false;
        }
    };

    private void onAppOpsChanged(int code, int uid, String packageName, boolean active) {
        mMainExecutor.execute(() -> handleAppOpsChanged(code, uid, packageName, active));
    }
+24 −2
Original line number Diff line number Diff line
@@ -16,17 +16,25 @@

package com.android.systemui.statusbar.notification.collection.coordinator

import com.android.systemui.statusbar.notification.collection.ListEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
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.people.PeopleNotificationIdentifier
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_NON_PERSON
import javax.inject.Inject
import javax.inject.Singleton

/**
 * A coordinator that elevates important conversation notifications
 * A Conversation/People Coordinator that:
 * - Elevates important conversation notifications
 * - Puts conversations into its own people section. @see [NotifCoordinators] for section ordering.
 */
@Singleton
class ConversationCoordinator @Inject constructor() : Coordinator {
class ConversationCoordinator @Inject constructor(
    private val peopleNotificationIdentifier: PeopleNotificationIdentifier
) : Coordinator {

    private val notificationPromoter = object : NotifPromoter(TAG) {
        override fun shouldPromoteToTopLevel(entry: NotificationEntry): Boolean {
@@ -34,10 +42,24 @@ class ConversationCoordinator @Inject constructor() : Coordinator {
        }
    }

    private val mNotifSection: NotifSection = object : NotifSection("People") {
        override fun isInSection(entry: ListEntry): Boolean {
            return isConversation(entry.representativeEntry!!)
        }
    }

    override fun attach(pipeline: NotifPipeline) {
        pipeline.addPromoter(notificationPromoter)
    }

    fun getSection(): NotifSection {
        return mNotifSection
    }

    private fun isConversation(entry: NotificationEntry): Boolean =
        peopleNotificationIdentifier.getPeopleNotificationType(entry.sbn, entry.ranking) !=
            TYPE_NON_PERSON

    companion object {
        private const val TAG = "ConversationCoordinator"
    }
+0 −5
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.notification.collection.coordinator;

import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable;

/**
@@ -29,8 +28,4 @@ public interface Coordinator {
     * Coordinators should register their listeners and {@link Pluggable}s to the pipeline.
     */
    void attach(NotifPipeline pipeline);

    default NotifSection getSection() {
        return null;
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ public class HeadsUpCoordinator implements Coordinator {
        pipeline.addNotificationLifetimeExtender(mLifetimeExtender);
    }

    @Override
    public NotifSection getSection() {
        return mNotifSection;
    }
@@ -192,7 +191,7 @@ public class HeadsUpCoordinator implements Coordinator {
        }
    };

    private final NotifSection mNotifSection = new NotifSection(TAG) {
    private final NotifSection mNotifSection = new NotifSection("HeadsUp") {
        @Override
        public boolean isInSection(ListEntry entry) {
            return isCurrentlyShowingHun(entry);
Loading