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

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

Merge "Add IconContainerRefactor tracing to flow collects" into main

parents 52ca1161 7767ba46
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -142,7 +142,7 @@ object NotificationIconContainerViewBinder {

    /** Binds to [NotificationIconContainer.setAnimationsEnabled] */
    private suspend fun Flow<Boolean>.bindAnimationsEnabled(view: NotificationIconContainer) {
        collect(view::setAnimationsEnabled)
        collectTracingEach("NIC#bindAnimationsEnabled", view::setAnimationsEnabled)
    }

    private suspend fun NotificationIconContainerStatusBarViewModel.bindIsolatedIcon(
@@ -151,12 +151,12 @@ object NotificationIconContainerViewBinder {
    ) {
        coroutineScope {
            launch {
                isolatedIconLocation.collect { location ->
                isolatedIconLocation.collectTracingEach("NIC#isolatedIconLocation") { location ->
                    view.setIsolatedIconLocation(location, true)
                }
            }
            launch {
                isolatedIcon.collect { iconInfo ->
                isolatedIcon.collectTracingEach("NIC#showIconIsolated") { iconInfo ->
                    val iconView = iconInfo.value?.let { viewStore.iconView(it.notifKey) }
                    if (iconInfo.isAnimating) {
                        view.showIconIsolatedAnimated(iconView, iconInfo::stopAnimating)
@@ -214,7 +214,7 @@ object NotificationIconContainerViewBinder {
        val failedBindings = mutableSetOf<String>()
        val boundViewsByNotifKey = ArrayMap<String, Pair<StatusBarIconView, Job>>()
        var prevIcons = NotificationIconsViewData()
        collectTracingEach("NotifIconContainer#bindIcons") { iconsData: NotificationIconsViewData ->
        collectTracingEach("NIC#bindIcons") { iconsData: NotificationIconsViewData ->
            val iconsDiff = NotificationIconsViewData.computeDifference(iconsData, prevIcons)
            prevIcons = iconsData

@@ -265,7 +265,11 @@ object NotificationIconContainerViewBinder {
                            Pair(
                                sbiv,
                                launch {
                                    launch { layoutParams.collect { sbiv.layoutParams = it } }
                                    launch {
                                        layoutParams.collectTracingEach("SBIV#bindLayoutParams") {
                                            sbiv.layoutParams = it
                                        }
                                    }
                                    bindIcon(notifKey, sbiv)
                                },
                            )
@@ -369,6 +373,7 @@ private val View.viewBounds: Rect
        )
    }

private suspend fun <T> Flow<T>.collectTracingEach(tag: String, collector: (T) -> Unit) {
    collect { traceSection(tag) { collector(it) } }
}
private suspend inline fun <T> Flow<T>.collectTracingEach(
    tag: String,
    crossinline collector: (T) -> Unit,
) = collect { traceSection(tag) { collector(it) } }
+10 −4
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder

import android.graphics.Rect
import android.view.View
import com.android.app.tracing.traceSection
import com.android.internal.util.ContrastColorUtil
import com.android.systemui.res.R
import com.android.systemui.statusbar.StatusBarIconView
@@ -33,18 +34,18 @@ object StatusBarIconViewBinder {
    //  view-model (which, at the time of this writing, does not yet exist).

    suspend fun bindColor(view: StatusBarIconView, color: Flow<Int>) {
        color.collect { color ->
        color.collectTracingEach("SBIV#bindColor") { color ->
            view.staticDrawableColor = color
            view.setDecorColor(color)
        }
    }

    suspend fun bindTintAlpha(view: StatusBarIconView, tintAlpha: Flow<Float>) {
        tintAlpha.collect { amt -> view.setTintAlpha(amt) }
        tintAlpha.collectTracingEach("SBIV#bindTintAlpha") { amt -> view.setTintAlpha(amt) }
    }

    suspend fun bindAnimationsEnabled(view: StatusBarIconView, allowAnimation: Flow<Boolean>) {
        allowAnimation.collect(view::setAllowAnimation)
        allowAnimation.collectTracingEach("SBIV#bindAnimationsEnabled", view::setAllowAnimation)
    }

    suspend fun bindIconColors(
@@ -52,7 +53,7 @@ object StatusBarIconViewBinder {
        iconColors: Flow<NotificationIconColors>,
        contrastColorUtil: ContrastColorUtil,
    ) {
        iconColors.collect { colors ->
        iconColors.collectTracingEach("SBIV#bindIconColors") { colors ->
            val isPreL = java.lang.Boolean.TRUE == view.getTag(R.id.icon_is_pre_L)
            val isColorized = !isPreL || NotificationUtils.isGrayscale(view, contrastColorUtil)
            view.staticDrawableColor =
@@ -73,3 +74,8 @@ private val View.viewBounds: Rect
            /* bottom = */ top + height,
        )
    }

private suspend inline fun <T> Flow<T>.collectTracingEach(
    tag: String,
    crossinline collector: (T) -> Unit,
) = collect { traceSection(tag) { collector(it) } }