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

Commit 428c76bb authored by Steve Elliott's avatar Steve Elliott
Browse files

[kairos] Move Kairos to bg thread

Flag: com.android.systemui.status_bar_mobile_icon_kairos
Bug: 383172066
Test: atest
Change-Id: I8af070502011fbad8449f9c1b98461d9f1ffc735
parent d1cc7535
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import com.android.systemui.kairos.KairosNetwork
import com.android.systemui.kairos.runKairosTest
import com.android.systemui.kairos.toColdConflatedFlow
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.google.common.truth.Truth.assertThat
@@ -41,7 +42,12 @@ class KairosCoreStartableTest : SysuiTestCase() {
    fun kairosNetwork_usedBeforeStarted() =
        testKosmos().useUnconfinedTestDispatcher().runKairosTest {
            lateinit var activatable: TestActivatable
            val underTest = KairosCoreStartable(applicationCoroutineScope) { setOf(activatable) }
            val underTest =
                KairosCoreStartable(
                    appScope = applicationCoroutineScope,
                    activatables = { setOf(activatable) },
                    bgDispatcher = testDispatcher,
                )
            activatable = TestActivatable(underTest)

            // collect from the cold flow before starting the CoreStartable
+13 −1
Original line number Diff line number Diff line
@@ -18,8 +18,10 @@ package com.android.systemui

import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.kairos.BuildScope
import com.android.systemui.kairos.BuildSpec
import com.android.systemui.kairos.CoalescingPolicy
import com.android.systemui.kairos.Events
import com.android.systemui.kairos.EventsLoop
import com.android.systemui.kairos.ExperimentalKairosApi
@@ -41,6 +43,7 @@ import dagger.multibindings.IntoMap
import dagger.multibindings.Multibinds
import javax.inject.Inject
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch

@@ -189,7 +192,16 @@ private constructor(
    constructor(
        @Application appScope: CoroutineScope,
        activatables: dagger.Lazy<Set<@JvmSuppressWildcards KairosActivatable>>,
    ) : this(appScope, activatables, appScope.launchKairosNetwork())
        @Background bgDispatcher: CoroutineDispatcher,
    ) : this(
        appScope = appScope,
        activatables = activatables,
        unwrappedNetwork =
            appScope.launchKairosNetwork(
                context = bgDispatcher,
                coalescingPolicy = CoalescingPolicy.Eager,
            ),
    )

    private val started = CompletableDeferred<Unit>()

+7 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import com.android.systemui.Dumpable
import com.android.systemui.Flags
import com.android.systemui.KairosActivatable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.kairos.BuildScope
import com.android.systemui.kairos.ExperimentalKairosApi
@@ -36,6 +37,7 @@ import dagger.multibindings.ElementsIntoSet
import java.io.PrintWriter
import javax.inject.Inject
import javax.inject.Provider
import kotlinx.coroutines.CoroutineDispatcher

/**
 * This class is intended to provide a context to collect on the
@@ -54,6 +56,7 @@ constructor(
    val mobileIconsViewModel: MobileIconsViewModelKairos,
    private val logger: MobileViewLogger,
    dumpManager: DumpManager,
    @Main private val mainDispatcher: CoroutineDispatcher,
) : KairosActivatable, Dumpable {

    init {
@@ -74,8 +77,10 @@ constructor(
        combine(mobileIconsViewModel.subscriptionIds, mobileIconsViewModel.isStackable) { a, b ->
                Pair(a, b)
            }
            .observe(name = nameTag("MobileUiAdapterKairos.notifyIconController")) {
                (subIds, isStackable) ->
            .observe(
                coroutineContext = mainDispatcher,
                name = nameTag("MobileUiAdapterKairos.notifyIconController"),
            ) { (subIds, isStackable) ->
                logger.logUiAdapterSubIdsSentToIconController(subIds, isStackable)
                lastValue = subIds
                if (isStackable) {
+3 −1
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ object MobileIconBinderKairos {
    ): Pair<ModernStatusBarViewBinding, Job> {
        val binding =
            ModernStatusBarViewBindingKairosImpl(subId, kairosNetwork, initialVisibilityState)
        val mobileDrawable = SignalDrawable(view.context)
        return binding to
            scope.launch {
                kairosNetwork.activateSpec(
@@ -74,6 +75,7 @@ object MobileIconBinderKairos {
                ) {
                    bind(
                        view = view,
                        mobileDrawable = mobileDrawable,
                        viewModel = viewModel.applySpec(),
                        logger = logger,
                        binding = binding,
@@ -135,6 +137,7 @@ object MobileIconBinderKairos {
    @ExperimentalKairosApi
    private fun BuildScope.bind(
        view: ViewGroup,
        mobileDrawable: SignalDrawable,
        viewModel: LocationBasedMobileViewModelKairos,
        logger: MobileViewLogger,
        binding: ModernStatusBarViewBindingKairosImpl,
@@ -152,7 +155,6 @@ object MobileIconBinderKairos {
        val networkTypeView = view.requireViewById<ImageView>(R.id.mobile_type)
        val networkTypeContainer = view.requireViewById<FrameLayout>(R.id.mobile_type_container)
        val iconView = view.requireViewById<ImageView>(R.id.mobile_signal)
        val mobileDrawable = SignalDrawable(view.context)
        val roamingView = view.requireViewById<ImageView>(R.id.mobile_roaming)
        val roamingSpace = view.requireViewById<Space>(R.id.mobile_roaming_space)
        val dotView = view.requireViewById<StatusBarIconView>(R.id.status_bar_dot)
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import com.android.systemui.dump.dumpManager
import com.android.systemui.kairos.ActivatedKairosFixture
import com.android.systemui.kairos.ExperimentalKairosApi
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.statusbar.phone.ui.statusBarIconController
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.mobileIconsViewModelKairos

@@ -30,5 +31,6 @@ val Kosmos.mobileUiAdapterKairos by ActivatedKairosFixture {
        mobileIconsViewModelKairos,
        mobileViewLogger,
        dumpManager,
        testDispatcher,
    )
}
Loading