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

Commit 01cd67aa authored by Steve Elliott's avatar Steve Elliott Committed by Android (Google) Code Review
Browse files

Merge "Fix bundle group summary timestamp" into main

parents 5ef0fe3d 9a9b8554
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -86,3 +86,24 @@ sealed class PipelineEntry(
        fun onSensitivityChanged(entry: NotificationEntry)
    }
}

/** Performs an action on all group entries, even if they are in a bundle */
inline fun List<PipelineEntry>.forEachGroupEntry(action: (GroupEntry) -> Unit) {
    forEach { entry ->
        when (entry) {
            is GroupEntry -> {
                action(entry)
            }
            is BundleEntry -> {
                for (bundleChild in entry.children) {
                    if (bundleChild is GroupEntry) {
                        action(bundleChild)
                    }
                }
            }
            else -> {
                // Do nothing for leaf nodes
            }
        }
    }
}
+6 −14
Original line number Diff line number Diff line
@@ -17,11 +17,11 @@
package com.android.systemui.statusbar.notification.collection.coordinator

import android.util.ArrayMap
import com.android.systemui.statusbar.notification.collection.BundleEntry
import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.forEachGroupEntry
import com.android.systemui.statusbar.notification.collection.render.NotifGroupController
import javax.inject.Inject

@@ -38,15 +38,7 @@ class GroupCountCoordinator @Inject constructor() : Coordinator {
    private fun onBeforeFinalizeFilter(entries: List<PipelineEntry>) {
        // save untruncated child counts to our internal map
        untruncatedChildCounts.clear()
        entries.asSequence()
            .flatMap { entry ->
                when (entry) {
                    is GroupEntry -> listOf(entry)
                    is BundleEntry -> entry.children.filterIsInstance<GroupEntry>()
                    else -> emptyList()
                }
            }
            .forEach { groupEntry ->
        entries.forEachGroupEntry { groupEntry ->
            untruncatedChildCounts[groupEntry] = groupEntry.children.size
        }
    }
+5 −4
Original line number Diff line number Diff line
@@ -18,9 +18,10 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import android.util.ArrayMap
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.forEachGroupEntry
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator
import com.android.systemui.statusbar.notification.collection.render.NotifGroupController
import com.android.systemui.util.concurrency.DelayableExecutor
@@ -35,7 +36,7 @@ class GroupWhenCoordinator
@Inject
constructor(
    @Main private val delayableExecutor: DelayableExecutor,
    private val systemClock: SystemClock
    private val systemClock: SystemClock,
) : Coordinator {

    private val invalidator = object : Invalidator("GroupWhenCoordinator") {}
@@ -58,7 +59,7 @@ constructor(

        val now = systemClock.currentTimeMillis()
        var closestFutureTime = Long.MAX_VALUE
        entries.asSequence().filterIsInstance<GroupEntry>().forEach { groupEntry ->
        entries.forEachGroupEntry { groupEntry ->
            val whenMillis = calculateGroupNotificationTime(groupEntry, now)
            notificationGroupTimes[groupEntry] = whenMillis
            if (whenMillis > now) {
@@ -83,7 +84,7 @@ constructor(

    private fun calculateGroupNotificationTime(
        groupEntry: GroupEntry,
        currentTimeMillis: Long
        currentTimeMillis: Long,
    ): Long {
        var pastTime = Long.MIN_VALUE
        var futureTime = Long.MAX_VALUE
+3 −2
Original line number Diff line number Diff line
@@ -17,10 +17,11 @@ package com.android.systemui.statusbar.notification.collection.coordinator

import android.util.ArrayMap
import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.forEachGroupEntry
import com.android.systemui.statusbar.notification.collection.render.NotifRowController
import javax.inject.Inject
import kotlin.math.max
@@ -41,7 +42,7 @@ class RowAlertTimeCoordinator @Inject constructor() : Coordinator {

    private fun onBeforeFinalizeFilterListener(entries: List<PipelineEntry>) {
        latestAlertTimeBySummary.clear()
        entries.asSequence().filterIsInstance<GroupEntry>().forEach { groupEntry ->
        entries.forEachGroupEntry { groupEntry ->
            val summary = checkNotNull(groupEntry.summary)
            latestAlertTimeBySummary[summary] = groupEntry.calculateLatestAlertTime()
        }
+2 −26
Original line number Diff line number Diff line
@@ -20,11 +20,12 @@ import com.android.app.tracing.traceSection
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.notification.collection.BundleEntry
import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.PipelineDumpable
import com.android.systemui.statusbar.notification.collection.PipelineDumper
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.ShadeListBuilder
import com.android.systemui.statusbar.notification.collection.forEachGroupEntry
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderListListener
@@ -154,29 +155,4 @@ class RenderStageManager @Inject constructor() : PipelineDumpable {
            }
        }
    }

    /**
     * Performs an action on all group entries, even if they are in a bundle
     */
    private inline fun List<PipelineEntry>.forEachGroupEntry(
        action: (GroupEntry) -> Unit
    ) {
        forEach { entry ->
            when (entry) {
                is GroupEntry -> {
                    action(entry)
                }
                is BundleEntry -> {
                    for (bundleChild in entry.children) {
                        if (bundleChild is GroupEntry) {
                            action(bundleChild)
                        }
                    }
                }
                else -> {
                    // Do nothing for leaf nodes
                }
            }
        }
    }
}