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

Commit f9027a59 authored by Evan Laird's avatar Evan Laird
Browse files

[Mobile] Don't return StateFlow from method

MobileConnectionsRepositoryImpl#subscriptionModelForSubId was creating a
StateFlow for each subscription that it returned. This is an incorrect
usage since that `stateIn` call starts a new job to collect from the
underlying flow, and it is never canceled until the scope is canceled.
The scope being used is the @Application scope, so it's effectively
never canceled.

It seems that this was not a load bearing StateFlow, so this CL just
removes the `stateIn` call to fix that issue.

Test: tests in statusbar/pipeline/mobile
Bug: 317205264
Flag: NONE
Change-Id: I82ddc7576e2b8d45574be6f0c3f0176da9457bb9
parent ff50b586
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConn
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
@@ -48,7 +49,7 @@ class FullMobileConnectionRepository(
    override val subId: Int,
    startingIsCarrierMerged: Boolean,
    override val tableLogBuffer: TableLogBuffer,
    subscriptionModel: StateFlow<SubscriptionModel?>,
    subscriptionModel: Flow<SubscriptionModel?>,
    private val defaultNetworkName: NetworkNameModel,
    private val networkNameSeparator: String,
    @Application scope: CoroutineScope,
@@ -331,7 +332,7 @@ class FullMobileConnectionRepository(
        fun build(
            subId: Int,
            startingIsCarrierMerged: Boolean,
            subscriptionModel: StateFlow<SubscriptionModel?>,
            subscriptionModel: Flow<SubscriptionModel?>,
            defaultNetworkName: NetworkNameModel,
            networkNameSeparator: String,
        ): FullMobileConnectionRepository {
+2 −2
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ import kotlinx.coroutines.withContext
class MobileConnectionRepositoryImpl(
    override val subId: Int,
    private val context: Context,
    subscriptionModel: StateFlow<SubscriptionModel?>,
    subscriptionModel: Flow<SubscriptionModel?>,
    defaultNetworkName: NetworkNameModel,
    networkNameSeparator: String,
    connectivityManager: ConnectivityManager,
@@ -448,7 +448,7 @@ class MobileConnectionRepositoryImpl(
        fun build(
            subId: Int,
            mobileLogger: TableLogBuffer,
            subscriptionModel: StateFlow<SubscriptionModel?>,
            subscriptionModel: Flow<SubscriptionModel?>,
            defaultNetworkName: NetworkNameModel,
            networkNameSeparator: String,
        ): MobileConnectionRepository {
+4 −4
Original line number Diff line number Diff line
@@ -357,10 +357,10 @@ constructor(

    @VisibleForTesting fun getSubIdRepoCache() = subIdRepositoryCache

    private fun subscriptionModelForSubId(subId: Int): StateFlow<SubscriptionModel?> {
        return subscriptions
            .map { list -> list.firstOrNull { model -> model.subscriptionId == subId } }
            .stateIn(scope, SharingStarted.WhileSubscribed(), null)
    private fun subscriptionModelForSubId(subId: Int): Flow<SubscriptionModel?> {
        return subscriptions.map { list ->
            list.firstOrNull { model -> model.subscriptionId == subId }
        }
    }

    private fun createRepositoryForSubId(subId: Int): FullMobileConnectionRepository {