[SB Refactor] Add logging to the mobile adapter and interactor.
Bug: 266960478 Bug: 238425913 Test: manual: Verified the new logs appear in logcat Test: manual: Dumped MobileUiAdapter and verified it has the new information Change-Id: I34f367d853211393720bd07bf5681dfb61ded0eb
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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 ->
|
||||
subscriptions.map { subscriptionModel -> subscriptionModel.subscriptionId }
|
||||
}
|
||||
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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -196,6 +197,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"
|
||||
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user