Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java +2 −10 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java +1 −77 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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() { Loading @@ -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(); } } packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java +3 −9 Original line number Diff line number Diff line Loading @@ -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(); } } /** Loading @@ -233,10 +230,7 @@ public final class NotificationEntry extends ListEntry { + " doesn't match existing key " + mKey); } if (!Objects.equals(mRanking, ranking)) { mRanking = ranking; onRankingUpdated(); } } /* Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt +12 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading @@ -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`) } Loading Loading @@ -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 Loading @@ -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() } } } Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.java +6 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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( Loading @@ -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 Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java +2 −10 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java +1 −77 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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() { Loading @@ -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(); } }
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java +3 −9 Original line number Diff line number Diff line Loading @@ -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(); } } /** Loading @@ -233,10 +230,7 @@ public final class NotificationEntry extends ListEntry { + " doesn't match existing key " + mKey); } if (!Objects.equals(mRanking, ranking)) { mRanking = ranking; onRankingUpdated(); } } /* Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt +12 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading @@ -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`) } Loading Loading @@ -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 Loading @@ -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() } } } Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.java +6 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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( Loading @@ -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 Loading Loading @@ -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