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

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

Merge "Move HighPriority variable out of Notif/ListEntry"

parents f093b48b e558f1dd
Loading
Loading
Loading
Loading
+2 −10
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;

/**
 * Represents a set of grouped notifications. The final notification list is usually a mix of
@@ -58,22 +57,15 @@ public class GroupEntry extends ListEntry {

    @VisibleForTesting
    public void setSummary(@Nullable NotificationEntry summary) {
        if (!Objects.equals(mSummary, summary)) {
        mSummary = summary;
            onGroupingUpdated();
        }
    }

    void clearChildren() {
        if (mChildren.size() != 0) {
        mChildren.clear();
            onGroupingUpdated();
        }
    }

    void addChild(NotificationEntry child) {
        mChildren.add(child);
        onGroupingUpdated();
    }

    void sortChildren(Comparator<? super NotificationEntry> c) {
+1 −77
Original line number Diff line number Diff line
@@ -18,38 +18,20 @@ package com.android.systemui.statusbar.notification.collection;

import android.annotation.Nullable;

import com.android.systemui.Dependency;
import com.android.systemui.statusbar.notification.collection.provider.DerivedMember;
import com.android.systemui.statusbar.notification.collection.provider.IsHighPriorityProvider;
import com.android.systemui.statusbar.phone.NotificationGroupManager;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * Abstract superclass for top-level entries, i.e. things that can appear in the final notification
 * list shown to users. In practice, this means either GroupEntries or NotificationEntries.
 */
public abstract class ListEntry {
    private final String mKey;
    private final IsHighPriorityProvider mIsHighPriorityProvider = new IsHighPriorityProvider();
    private final List<DerivedMember> mDerivedMemberList = Arrays.asList(mIsHighPriorityProvider);

    @Nullable private GroupEntry mParent;
    @Nullable private GroupEntry mPreviousParent;
    private int mSection;
    int mFirstAddedIteration = -1;

    // TODO: (b/145659174) remove groupManager when moving to NewNotifPipeline. Logic
    //  replaced in GroupEntry and NotifListBuilderImpl
    private final NotificationGroupManager mGroupManager;

    ListEntry(String key) {
        mKey = key;

        // TODO: (b/145659174) remove
        mGroupManager = Dependency.get(NotificationGroupManager.class);
    }

    public String getKey() {
@@ -68,11 +50,7 @@ public abstract class ListEntry {
    }

    void setParent(@Nullable GroupEntry parent) {
        if (!Objects.equals(mParent, parent)) {
            invalidateParent();
        mParent = parent;
            onGroupingUpdated();
        }
    }

    @Nullable public GroupEntry getPreviousParent() {
@@ -91,58 +69,4 @@ public abstract class ListEntry {
    void setSection(int section) {
        mSection = section;
    }

    /**
     * Resets the cached values of DerivedMembers.
     */
    void invalidateDerivedMembers() {
        for (int i = 0; i < mDerivedMemberList.size(); i++) {
            mDerivedMemberList.get(i).invalidate();
        }
    }

    /**
     * Whether this notification is shown to the user as a high priority notification: visible on
     * the lock screen/status bar and in the top section in the shade.
     */
    public boolean isHighPriority() {
        return mIsHighPriorityProvider.get(this);
    }

    private void invalidateParent() {
        // invalidate our parent (GroupEntry) since DerivedMembers may be dependent on children
        if (getParent() != null) {
            getParent().invalidateDerivedMembers();
        }

        // TODO: (b/145659174) remove
        final NotificationEntry notifEntry = getRepresentativeEntry();
        if (notifEntry != null && mGroupManager.isGroupChild(notifEntry.getSbn())) {
            NotificationEntry summary = mGroupManager.getLogicalGroupSummary(notifEntry.getSbn());
            if (summary != null) {
                summary.invalidateDerivedMembers();
            }
        }
    }

    void onGroupingUpdated() {
        for (int i = 0; i < mDerivedMemberList.size(); i++) {
            mDerivedMemberList.get(i).onGroupingUpdated();
        }
        invalidateParent();
    }

    void onSbnUpdated() {
        for (int i = 0; i < mDerivedMemberList.size(); i++) {
            mDerivedMemberList.get(i).onSbnUpdated();
        }
        invalidateParent();
    }

    void onRankingUpdated() {
        for (int i = 0; i < mDerivedMemberList.size(); i++) {
            mDerivedMemberList.get(i).onRankingUpdated();
        }
        invalidateParent();
    }
}
+3 −9
Original line number Diff line number Diff line
@@ -204,11 +204,8 @@ public final class NotificationEntry extends ListEntry {
                    + " doesn't match existing key " + mKey);
        }

        if (!Objects.equals(mSbn, sbn)) {
        mSbn = sbn;
        mBubbleMetadata = mSbn.getNotification().getBubbleMetadata();
            onSbnUpdated();
        }
    }

    /**
@@ -233,10 +230,7 @@ public final class NotificationEntry extends ListEntry {
                    + " doesn't match existing key " + mKey);
        }

        if (!Objects.equals(mRanking, ranking)) {
        mRanking = ranking;
            onRankingUpdated();
        }
    }

    /*
+12 −8
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.service.notification.StatusBarNotification
import com.android.systemui.statusbar.NotificationMediaManager
import com.android.systemui.statusbar.notification.NotificationFilter
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider
import com.android.systemui.statusbar.notification.logging.NotifEvent
import com.android.systemui.statusbar.notification.logging.NotifLog
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier
@@ -54,7 +55,8 @@ open class NotificationRankingManager @Inject constructor(
    private val notifFilter: NotificationFilter,
    private val notifLog: NotifLog,
    sectionsFeatureManager: NotificationSectionsFeatureManager,
    private val peopleNotificationIdentifier: PeopleNotificationIdentifier
    private val peopleNotificationIdentifier: PeopleNotificationIdentifier,
    private val highPriorityProvider: HighPriorityProvider
) {

    var rankingMap: RankingMap? = null
@@ -81,6 +83,9 @@ open class NotificationRankingManager @Inject constructor(
        val aHeadsUp = a.isRowHeadsUp
        val bHeadsUp = b.isRowHeadsUp

        val aIsHighPriority = a.isHighPriority()
        val bIsHighPriority = b.isHighPriority()

        when {
            usePeopleFiltering && aIsPeople != bIsPeople -> if (aIsPeople) -1 else 1
            aHeadsUp != bHeadsUp -> if (aHeadsUp) -1 else 1
@@ -90,8 +95,8 @@ open class NotificationRankingManager @Inject constructor(
            aMedia != bMedia -> if (aMedia) -1 else 1
            // Upsort PRIORITY_MAX system notifications
            aSystemMax != bSystemMax -> if (aSystemMax) -1 else 1
            a.isHighPriority != b.isHighPriority ->
                -1 * a.isHighPriority.compareTo(b.isHighPriority)
            aIsHighPriority != bIsHighPriority ->
                -1 * aIsHighPriority.compareTo(bIsHighPriority)
            aRank != bRank -> aRank - bRank
            else -> nb.notification.`when`.compareTo(na.notification.`when`)
        }
@@ -154,7 +159,7 @@ open class NotificationRankingManager @Inject constructor(
    ) {
        if (usePeopleFiltering && entry.isPeopleNotification()) {
            entry.bucket = BUCKET_PEOPLE
        } else if (isHeadsUp || isMedia || isSystemMax || entry.isHighPriority) {
        } else if (isHeadsUp || isMedia || isSystemMax || entry.isHighPriority()) {
            entry.bucket = BUCKET_ALERTING
        } else {
            entry.bucket = BUCKET_SILENT
@@ -178,10 +183,6 @@ open class NotificationRankingManager @Inject constructor(
                        // TODO: notify group manager here?
                        groupManager.onEntryUpdated(entry, oldSbn)
                    }

                    // TODO: (b/145659174) remove after moving to new NotifPipeline
                    // (should be able to remove all groupManager code post-migration)
                    entry.invalidateDerivedMembers()
                }
            }
        }
@@ -191,6 +192,9 @@ open class NotificationRankingManager @Inject constructor(
            sbn.isPeopleNotification()
    private fun StatusBarNotification.isPeopleNotification() =
            peopleNotificationIdentifier.isPeopleNotification(this)

    private fun NotificationEntry.isHighPriority() =
            highPriorityProvider.isHighPriority(this)
}

// Convenience functions
+6 −3
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifListBuilder;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
import com.android.systemui.statusbar.policy.KeyguardStateController;

import javax.inject.Inject;
@@ -62,6 +63,7 @@ public class KeyguardCoordinator implements Coordinator {
    private final BroadcastDispatcher mBroadcastDispatcher;
    private final StatusBarStateController mStatusBarStateController;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final HighPriorityProvider mHighPriorityProvider;

    @Inject
    public KeyguardCoordinator(
@@ -71,15 +73,16 @@ public class KeyguardCoordinator implements Coordinator {
            NotificationLockscreenUserManager lockscreenUserManager,
            BroadcastDispatcher broadcastDispatcher,
            StatusBarStateController statusBarStateController,
            KeyguardUpdateMonitor keyguardUpdateMonitor) {
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            HighPriorityProvider highPriorityProvider) {
        mContext = context;
        mMainHandler = mainThreadHandler;
        mKeyguardStateController = keyguardStateController;
        mLockscreenUserManager = lockscreenUserManager;

        mBroadcastDispatcher = broadcastDispatcher;
        mStatusBarStateController = statusBarStateController;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mHighPriorityProvider = highPriorityProvider;
    }

    @Override
@@ -151,7 +154,7 @@ public class KeyguardCoordinator implements Coordinator {
        }
        if (NotificationUtils.useNewInterruptionModel(mContext)
                && hideSilentNotificationsOnLockscreen()) {
            return entry.isHighPriority();
            return mHighPriorityProvider.isHighPriority(entry);
        } else {
            return entry.getRepresentativeEntry() != null
                    && !entry.getRepresentativeEntry().getRanking().isAmbient();
Loading