Loading packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +18 −0 Original line number Diff line number Diff line Loading @@ -365,6 +365,24 @@ public abstract class BaseStatusBar extends SystemUI implements Notification n = sbn.getNotification(); boolean isUpdate = mNotificationData.get(sbn.getKey()) != null || isHeadsUp(sbn.getKey()); // Ignore children of notifications that have a summary, since we're not // going to show them anyway. This is true also when the summary is canceled, // because children are automatically canceled by NoMan in that case. if (n.isGroupChild() && mNotificationData.isGroupWithSummary(sbn.getGroupKey())) { if (DEBUG) { Log.d(TAG, "Ignoring group child due to existing summary: " + sbn); } // Remove existing notification to avoid stale data. if (isUpdate) { removeNotification(sbn.getKey(), rankingMap); } else { mNotificationData.updateRanking(rankingMap); } return; } if (isUpdate) { updateNotification(sbn, rankingMap); } else { Loading packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java +9 −7 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ public class NotificationData { private final ArrayMap<String, Entry> mEntries = new ArrayMap<>(); private final ArrayList<Entry> mSortedAndFiltered = new ArrayList<>(); private ArraySet<String> mGroupsWithSummaries = new ArraySet<>(); private RankingMap mRankingMap; private final Ranking mTmpRanking = new Ranking(); Loading Loading @@ -183,8 +184,8 @@ public class NotificationData { // anything changed, and this class should call back the UI so it updates itself. public void filterAndSort() { mSortedAndFiltered.clear(); mGroupsWithSummaries.clear(); ArraySet<String> groupsWithSummaries = null; final int N = mEntries.size(); for (int i = 0; i < N; i++) { Entry entry = mEntries.valueAt(i); Loading @@ -195,22 +196,19 @@ public class NotificationData { } if (sbn.getNotification().isGroupSummary()) { if (groupsWithSummaries == null) { groupsWithSummaries = new ArraySet<>(); } groupsWithSummaries.add(sbn.getGroupKey()); mGroupsWithSummaries.add(sbn.getGroupKey()); } mSortedAndFiltered.add(entry); } // Second pass: Filter out group children with summary. if (groupsWithSummaries != null) { if (!mGroupsWithSummaries.isEmpty()) { final int M = mSortedAndFiltered.size(); for (int i = M - 1; i >= 0; i--) { Entry ent = mSortedAndFiltered.get(i); StatusBarNotification sbn = ent.notification; if (sbn.getNotification().isGroupChild() && groupsWithSummaries.contains(sbn.getGroupKey())) { mGroupsWithSummaries.contains(sbn.getGroupKey())) { mSortedAndFiltered.remove(i); } } Loading @@ -219,6 +217,10 @@ public class NotificationData { Collections.sort(mSortedAndFiltered, mRankingComparator); } public boolean isGroupWithSummary(String groupKey) { return mGroupsWithSummaries.contains(groupKey); } private boolean shouldFilterOut(StatusBarNotification sbn) { if (!(mEnvironment.isDeviceProvisioned() || showNotificationEvenIfUnprovisioned(sbn))) { Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +18 −0 Original line number Diff line number Diff line Loading @@ -365,6 +365,24 @@ public abstract class BaseStatusBar extends SystemUI implements Notification n = sbn.getNotification(); boolean isUpdate = mNotificationData.get(sbn.getKey()) != null || isHeadsUp(sbn.getKey()); // Ignore children of notifications that have a summary, since we're not // going to show them anyway. This is true also when the summary is canceled, // because children are automatically canceled by NoMan in that case. if (n.isGroupChild() && mNotificationData.isGroupWithSummary(sbn.getGroupKey())) { if (DEBUG) { Log.d(TAG, "Ignoring group child due to existing summary: " + sbn); } // Remove existing notification to avoid stale data. if (isUpdate) { removeNotification(sbn.getKey(), rankingMap); } else { mNotificationData.updateRanking(rankingMap); } return; } if (isUpdate) { updateNotification(sbn, rankingMap); } else { Loading
packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java +9 −7 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ public class NotificationData { private final ArrayMap<String, Entry> mEntries = new ArrayMap<>(); private final ArrayList<Entry> mSortedAndFiltered = new ArrayList<>(); private ArraySet<String> mGroupsWithSummaries = new ArraySet<>(); private RankingMap mRankingMap; private final Ranking mTmpRanking = new Ranking(); Loading Loading @@ -183,8 +184,8 @@ public class NotificationData { // anything changed, and this class should call back the UI so it updates itself. public void filterAndSort() { mSortedAndFiltered.clear(); mGroupsWithSummaries.clear(); ArraySet<String> groupsWithSummaries = null; final int N = mEntries.size(); for (int i = 0; i < N; i++) { Entry entry = mEntries.valueAt(i); Loading @@ -195,22 +196,19 @@ public class NotificationData { } if (sbn.getNotification().isGroupSummary()) { if (groupsWithSummaries == null) { groupsWithSummaries = new ArraySet<>(); } groupsWithSummaries.add(sbn.getGroupKey()); mGroupsWithSummaries.add(sbn.getGroupKey()); } mSortedAndFiltered.add(entry); } // Second pass: Filter out group children with summary. if (groupsWithSummaries != null) { if (!mGroupsWithSummaries.isEmpty()) { final int M = mSortedAndFiltered.size(); for (int i = M - 1; i >= 0; i--) { Entry ent = mSortedAndFiltered.get(i); StatusBarNotification sbn = ent.notification; if (sbn.getNotification().isGroupChild() && groupsWithSummaries.contains(sbn.getGroupKey())) { mGroupsWithSummaries.contains(sbn.getGroupKey())) { mSortedAndFiltered.remove(i); } } Loading @@ -219,6 +217,10 @@ public class NotificationData { Collections.sort(mSortedAndFiltered, mRankingComparator); } public boolean isGroupWithSummary(String groupKey) { return mGroupsWithSummaries.contains(groupKey); } private boolean shouldFilterOut(StatusBarNotification sbn) { if (!(mEnvironment.isDeviceProvisioned() || showNotificationEvenIfUnprovisioned(sbn))) { Loading