Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java +6 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,12 @@ public final class NotificationEntry extends ListEntry { /** If this notification was filtered out, then the filter that did the filtering. */ @Nullable NotifFilter mExcludingFilter; /** * The NotifFilter, if any, that was active on this notification during the previous run of * the list builder. */ @Nullable NotifFilter mPreviousExcludingFilter; /** If this was a group child that was promoted to the top level, then who did the promoting. */ @Nullable NotifPromoter mNotifPromoter; Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java +24 −19 Original line number Diff line number Diff line Loading @@ -316,6 +316,7 @@ public class ShadeListBuilder implements Dumpable { // Step 7: Lock in our group structure and log anything that's changed since the last run mPipelineState.incrementTo(STATE_FINALIZING); logFilterChanges(); logParentingChanges(); freeEmptyGroups(); Loading Loading @@ -363,6 +364,9 @@ public class ShadeListBuilder implements Dumpable { entry.setPreviousParent(entry.getParent()); entry.setParent(null); entry.mPreviousExcludingFilter = entry.mExcludingFilter; entry.mExcludingFilter = null; if (entry.mFirstAddedIteration == -1) { entry.mFirstAddedIteration = mIterationCount; } Loading @@ -371,8 +375,10 @@ public class ShadeListBuilder implements Dumpable { mNotifList.clear(); } private void filterNotifs(Collection<? extends ListEntry> entries, List<ListEntry> out, List<NotifFilter> filters) { private void filterNotifs( Collection<? extends ListEntry> entries, List<ListEntry> out, List<NotifFilter> filters) { final long now = mSystemClock.uptimeMillis(); for (ListEntry entry : entries) { if (entry instanceof GroupEntry) { Loading Loading @@ -585,8 +591,9 @@ public class ShadeListBuilder implements Dumpable { * filtered out during any of the filtering steps. */ private void annulAddition(ListEntry entry) { entry.setSection(-1); entry.mNotifSection = null; // TODO: We should null out the entry's section and promoter here. However, if we do that, // future runs will think that the section changed. We need a mPreviousNotifSection, // similar to what we do for parents. entry.setParent(null); if (entry.mFirstAddedIteration == mIterationCount) { entry.mFirstAddedIteration = -1; Loading Loading @@ -615,6 +622,17 @@ public class ShadeListBuilder implements Dumpable { mGroups.values().removeIf(ge -> ge.getSummary() == null && ge.getChildren().isEmpty()); } private void logFilterChanges() { for (NotificationEntry entry : mAllEntries) { if (entry.mExcludingFilter != entry.mPreviousExcludingFilter) { mLogger.logFilterChanged( entry.getKey(), entry.mPreviousExcludingFilter, entry.mExcludingFilter); } } } private void logParentingChanges() { for (NotificationEntry entry : mAllEntries) { if (entry.getParent() != entry.getPreviousParent()) { Loading Loading @@ -680,21 +698,8 @@ public class ShadeListBuilder implements Dumpable { }; private boolean applyFilters(NotificationEntry entry, long now, List<NotifFilter> filters) { NotifFilter filter = findRejectingFilter(entry, now, filters); if (filter != entry.mExcludingFilter) { mLogger.logFilterChanged( entry.getKey(), entry.mExcludingFilter != null ? entry.mExcludingFilter.getName() : null, filter != null ? filter.getName() : null); // Note that groups and summaries can also be filtered out later if they're part of a // malformed group. We currently don't have a great way to track that beyond parenting // change logs. Consider adding something similar to mExcludingFilter for them. entry.mExcludingFilter = filter; } return filter != null; entry.mExcludingFilter = findRejectingFilter(entry, now, filters); return entry.mExcludingFilter != null; } @Nullable private static NotifFilter findRejectingFilter(NotificationEntry entry, long now, Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt +5 −4 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.android.systemui.log.LogLevel.WARNING import com.android.systemui.log.dagger.NotificationLog import com.android.systemui.statusbar.notification.collection.GroupEntry import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter import javax.inject.Inject class ShadeListBuilderLogger @Inject constructor( Loading Loading @@ -126,13 +127,13 @@ class ShadeListBuilderLogger @Inject constructor( fun logFilterChanged( key: String, prevFilter: String?, newFilter: String? prevFilter: NotifFilter?, newFilter: NotifFilter? ) { buffer.log(TAG, INFO, { str1 = key str2 = prevFilter str3 = newFilter str2 = prevFilter?.name str3 = newFilter?.name }, { "Filter changed for $str1: $str2 -> $str3" }) Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java +1 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ public class NotificationEntryBuilder { /* ListEntry properties */ private GroupEntry mParent; private int mSection; private int mSection = -1; public NotificationEntry build() { StatusBarNotification sbn = mSbn != null ? mSbn : mSbnBuilder.build(); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java +6 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,12 @@ public final class NotificationEntry extends ListEntry { /** If this notification was filtered out, then the filter that did the filtering. */ @Nullable NotifFilter mExcludingFilter; /** * The NotifFilter, if any, that was active on this notification during the previous run of * the list builder. */ @Nullable NotifFilter mPreviousExcludingFilter; /** If this was a group child that was promoted to the top level, then who did the promoting. */ @Nullable NotifPromoter mNotifPromoter; Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java +24 −19 Original line number Diff line number Diff line Loading @@ -316,6 +316,7 @@ public class ShadeListBuilder implements Dumpable { // Step 7: Lock in our group structure and log anything that's changed since the last run mPipelineState.incrementTo(STATE_FINALIZING); logFilterChanges(); logParentingChanges(); freeEmptyGroups(); Loading Loading @@ -363,6 +364,9 @@ public class ShadeListBuilder implements Dumpable { entry.setPreviousParent(entry.getParent()); entry.setParent(null); entry.mPreviousExcludingFilter = entry.mExcludingFilter; entry.mExcludingFilter = null; if (entry.mFirstAddedIteration == -1) { entry.mFirstAddedIteration = mIterationCount; } Loading @@ -371,8 +375,10 @@ public class ShadeListBuilder implements Dumpable { mNotifList.clear(); } private void filterNotifs(Collection<? extends ListEntry> entries, List<ListEntry> out, List<NotifFilter> filters) { private void filterNotifs( Collection<? extends ListEntry> entries, List<ListEntry> out, List<NotifFilter> filters) { final long now = mSystemClock.uptimeMillis(); for (ListEntry entry : entries) { if (entry instanceof GroupEntry) { Loading Loading @@ -585,8 +591,9 @@ public class ShadeListBuilder implements Dumpable { * filtered out during any of the filtering steps. */ private void annulAddition(ListEntry entry) { entry.setSection(-1); entry.mNotifSection = null; // TODO: We should null out the entry's section and promoter here. However, if we do that, // future runs will think that the section changed. We need a mPreviousNotifSection, // similar to what we do for parents. entry.setParent(null); if (entry.mFirstAddedIteration == mIterationCount) { entry.mFirstAddedIteration = -1; Loading Loading @@ -615,6 +622,17 @@ public class ShadeListBuilder implements Dumpable { mGroups.values().removeIf(ge -> ge.getSummary() == null && ge.getChildren().isEmpty()); } private void logFilterChanges() { for (NotificationEntry entry : mAllEntries) { if (entry.mExcludingFilter != entry.mPreviousExcludingFilter) { mLogger.logFilterChanged( entry.getKey(), entry.mPreviousExcludingFilter, entry.mExcludingFilter); } } } private void logParentingChanges() { for (NotificationEntry entry : mAllEntries) { if (entry.getParent() != entry.getPreviousParent()) { Loading Loading @@ -680,21 +698,8 @@ public class ShadeListBuilder implements Dumpable { }; private boolean applyFilters(NotificationEntry entry, long now, List<NotifFilter> filters) { NotifFilter filter = findRejectingFilter(entry, now, filters); if (filter != entry.mExcludingFilter) { mLogger.logFilterChanged( entry.getKey(), entry.mExcludingFilter != null ? entry.mExcludingFilter.getName() : null, filter != null ? filter.getName() : null); // Note that groups and summaries can also be filtered out later if they're part of a // malformed group. We currently don't have a great way to track that beyond parenting // change logs. Consider adding something similar to mExcludingFilter for them. entry.mExcludingFilter = filter; } return filter != null; entry.mExcludingFilter = findRejectingFilter(entry, now, filters); return entry.mExcludingFilter != null; } @Nullable private static NotifFilter findRejectingFilter(NotificationEntry entry, long now, Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt +5 −4 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.android.systemui.log.LogLevel.WARNING import com.android.systemui.log.dagger.NotificationLog import com.android.systemui.statusbar.notification.collection.GroupEntry import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter import javax.inject.Inject class ShadeListBuilderLogger @Inject constructor( Loading Loading @@ -126,13 +127,13 @@ class ShadeListBuilderLogger @Inject constructor( fun logFilterChanged( key: String, prevFilter: String?, newFilter: String? prevFilter: NotifFilter?, newFilter: NotifFilter? ) { buffer.log(TAG, INFO, { str1 = key str2 = prevFilter str3 = newFilter str2 = prevFilter?.name str3 = newFilter?.name }, { "Filter changed for $str1: $str2 -> $str3" }) Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java +1 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ public class NotificationEntryBuilder { /* ListEntry properties */ private GroupEntry mParent; private int mSection; private int mSection = -1; public NotificationEntry build() { StatusBarNotification sbn = mSbn != null ? mSbn : mSbnBuilder.build(); Loading