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

Commit e0320054 authored by Christoph Studer's avatar Christoph Studer Committed by Android (Google) Code Review
Browse files

Merge "SysUI: Ignore group children when summary is present" into lmp-dev

parents 2debc99e d722f273
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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 {
+9 −7
Original line number Diff line number Diff line
@@ -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();
@@ -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);
@@ -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);
                }
            }
@@ -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))) {