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

Commit 64a95068 authored by Steve Elliott's avatar Steve Elliott
Browse files

[kairos] Use lazy endSignal in LocalNetwork

Flag: com.android.systemui.status_bar_mobile_icon_kairos
Bug: 383172066
Test: atest
Change-Id: Ice942f14688bf4408cb8e149568d7dfe25fc59a0
parent a2ec91ad
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -143,8 +143,9 @@ suspend fun <R> KairosNetwork.activateSpec(
internal class LocalNetwork(
    private val network: Network,
    private val scope: CoroutineScope,
    private val endSignal: Events<Any>,
    private val endSignalLazy: Lazy<Events<Any>>,
) : KairosNetwork {

    override suspend fun <R> transact(block: TransactionScope.() -> R): R =
        network.transaction("KairosNetwork.transact") { block() }.awaitOrCancel()

@@ -160,7 +161,8 @@ internal class LocalNetwork(
                                stateScope =
                                    StateScopeImpl(
                                        evalScope = this,
                                        endSignalLazy = lazy { mergeLeft(stopEmitter, endSignal) },
                                        endSignalLazy =
                                            lazy { mergeLeft(stopEmitter, endSignalLazy.value) },
                                    ),
                                coroutineScope = this@coroutineScope,
                            )
@@ -225,7 +227,7 @@ internal class LocalNetwork(
@ExperimentalKairosApi
class RootKairosNetwork
internal constructor(private val network: Network, private val scope: CoroutineScope, job: Job) :
    Job by job, KairosNetwork by LocalNetwork(network, scope, emptyEvents)
    Job by job, KairosNetwork by LocalNetwork(network, scope, lazyOf(emptyEvents))

/** Constructs a new [RootKairosNetwork] in the given [CoroutineScope]. */
@ExperimentalKairosApi
+3 −3
Original line number Diff line number Diff line
@@ -61,8 +61,8 @@ internal class BuildScopeImpl(val stateScope: StateScopeImpl, val coroutineScope
    private val job: Job
        get() = coroutineScope.coroutineContext.job

    override val kairosNetwork: KairosNetwork by lazy {
        LocalNetwork(network, coroutineScope, endSignal)
    override val kairosNetwork: LocalNetwork by lazy {
        LocalNetwork(network, coroutineScope, stateScope.endSignalLazy)
    }

    override fun <T> events(builder: suspend EventProducerScope<T>.() -> Unit): Events<T> =
@@ -129,7 +129,7 @@ internal class BuildScopeImpl(val stateScope: StateScopeImpl, val coroutineScope
        }
        // When our scope is cancelled, deactivate this observer.
        cancelHandle = childScope.coroutineContext.job.invokeOnCompletion { handle.dispose() }
        val localNetwork = LocalNetwork(network, childScope, endSignal)
        val localNetwork = LocalNetwork(network, childScope, stateScope.endSignalLazy)
        val outputNode =
            Output<A>(
                interceptor =