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

Commit b85a04e2 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Automerger Merge Worker
Browse files

Merge "[SB Refactor] Add logging to the mobile adapter and interactor." into...

Merge "[SB Refactor] Add logging to the mobile adapter and interactor." into tm-qpr-dev am: 5c906402

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21147320



Change-Id: I7249d0b0ba9ef28c975f18ec4d17953688dd00d8
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents c27d2bb4 5c906402
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionMod
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
import com.android.systemui.util.CarrierConfigTracker
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -37,10 +38,12 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.transformLatest

@@ -100,6 +103,7 @@ class MobileIconsInteractorImpl
constructor(
    private val mobileConnectionsRepo: MobileConnectionsRepository,
    private val carrierConfigTracker: CarrierConfigTracker,
    private val logger: ConnectivityPipelineLogger,
    userSetupRepo: UserSetupRepository,
    @Application private val scope: CoroutineScope,
) : MobileIconsInteractor {
@@ -168,6 +172,8 @@ constructor(
                }
            }
        }
            .distinctUntilChanged()
            .onEach { logger.logFilteredSubscriptionsChanged(it) }

    override val defaultDataSubId = mobileConnectionsRepo.defaultDataSubId

+25 −4
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
import java.io.PrintWriter
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -30,7 +32,9 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch

@@ -51,13 +55,17 @@ constructor(
    interactor: MobileIconsInteractor,
    private val iconController: StatusBarIconController,
    private val iconsViewModelFactory: MobileIconsViewModel.Factory,
    private val logger: ConnectivityPipelineLogger,
    @Application private val scope: CoroutineScope,
    private val statusBarPipelineFlags: StatusBarPipelineFlags,
) : CoreStartable {
    private val mobileSubIds: Flow<List<Int>> =
        interactor.filteredSubscriptions.mapLatest { subscriptions ->
        interactor.filteredSubscriptions
            .mapLatest { subscriptions ->
                subscriptions.map { subscriptionModel -> subscriptionModel.subscriptionId }
            }
            .distinctUntilChanged()
            .onEach { logger.logUiAdapterSubIdsUpdated(it) }

    /**
     * We expose the list of tracked subscriptions as a flow of a list of ints, where each int is
@@ -72,6 +80,9 @@ constructor(
    /** In order to keep the logs tame, we will reuse the same top-level mobile icons view model */
    val mobileIconsViewModel = iconsViewModelFactory.create(mobileSubIdsState)

    private var isCollecting: Boolean = false
    private var lastValue: List<Int>? = null

    override fun start() {
        // Only notify the icon controller if we want to *render* the new icons.
        // Note that this flow may still run if
@@ -79,8 +90,18 @@ constructor(
        // get the logging data without rendering.
        if (statusBarPipelineFlags.useNewMobileIcons()) {
            scope.launch {
                mobileSubIds.collectLatest { iconController.setNewMobileIconSubIds(it) }
                isCollecting = true
                mobileSubIds.collectLatest {
                    logger.logUiAdapterSubIdsSentToIconController(it)
                    lastValue = it
                    iconController.setNewMobileIconSubIds(it)
                }
            }
        }
    }

    override fun dump(pw: PrintWriter, args: Array<out String>) {
        pw.println("isCollecting=$isCollecting")
        pw.println("Last values sent to icon controller: $lastValue")
    }
}
+30 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.log.dagger.StatusBarConnectivityLog
import com.android.systemui.plugins.log.LogBuffer
import com.android.systemui.plugins.log.LogLevel
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.toString
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
@@ -201,6 +202,35 @@ constructor(
        )
    }

    // TODO(b/238425913): We should split this class into mobile-specific and wifi-specific loggers.

    fun logFilteredSubscriptionsChanged(subs: List<SubscriptionModel>) {
        buffer.log(
            SB_LOGGING_TAG,
            LogLevel.INFO,
            { str1 = subs.toString() },
            { "Filtered subscriptions updated: $str1" },
        )
    }

    fun logUiAdapterSubIdsUpdated(subs: List<Int>) {
        buffer.log(
            SB_LOGGING_TAG,
            LogLevel.INFO,
            { str1 = subs.toString() },
            { "Sub IDs in MobileUiAdapter updated internally: $str1" },
        )
    }

    fun logUiAdapterSubIdsSentToIconController(subs: List<Int>) {
        buffer.log(
            SB_LOGGING_TAG,
            LogLevel.INFO,
            { str1 = subs.toString() },
            { "Sub IDs in MobileUiAdapter being sent to icon controller: $str1" },
        )
    }

    companion object {
        const val SB_LOGGING_TAG = "SbConnectivity"

+2 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobile
import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeUserSetupRepository
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy
import com.android.systemui.util.CarrierConfigTracker
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
@@ -77,6 +78,7 @@ class MobileIconsInteractorTest : SysuiTestCase() {
            MobileIconsInteractorImpl(
                connectionsRepository,
                carrierConfigTracker,
                logger = mock(),
                userSetupRepository,
                testScope.backgroundScope,
            )