• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<lambda>null1 package com.android.systemui.statusbar.notification.collection.coordinator
2 
3 import android.util.ArrayMap
4 import com.android.systemui.statusbar.notification.collection.GroupEntry
5 import com.android.systemui.statusbar.notification.collection.ListEntry
6 import com.android.systemui.statusbar.notification.collection.NotifPipeline
7 import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
8 import com.android.systemui.statusbar.notification.collection.render.NotifGroupController
9 import javax.inject.Inject
10 
11 /** A small coordinator which calculates, stores, and applies the untruncated child count. */
12 @CoordinatorScope
13 class GroupCountCoordinator @Inject constructor() : Coordinator {
14     private val untruncatedChildCounts = ArrayMap<GroupEntry, Int>()
15 
16     override fun attach(pipeline: NotifPipeline) {
17         pipeline.addOnBeforeFinalizeFilterListener(::onBeforeFinalizeFilter)
18         pipeline.addOnAfterRenderGroupListener(::onAfterRenderGroup)
19     }
20 
21     private fun onBeforeFinalizeFilter(entries: List<ListEntry>) {
22         // save untruncated child counts to our internal map
23         untruncatedChildCounts.clear()
24         entries.asSequence().filterIsInstance<GroupEntry>().forEach { groupEntry ->
25             untruncatedChildCounts[groupEntry] = groupEntry.children.size
26         }
27     }
28 
29     private fun onAfterRenderGroup(group: GroupEntry, controller: NotifGroupController) {
30         // find the untruncated child count for a group and apply it to the controller
31         val count = untruncatedChildCounts[group]
32         checkNotNull(count) { "No untruncated child count for group: ${group.key}" }
33         controller.setUntruncatedChildCount(count)
34     }
35 }