From b48ee4cf8020a9a0e5f94447cff656043b75d973 Mon Sep 17 00:00:00 2001 From: Caitlin Shkuratov Date: Fri, 10 Feb 2023 19:28:11 +0000 Subject: [PATCH 1/5] [SB Refactor] Split the wifi input logging into its own class. Bug: 238425913 Test: all tests in pipeline.wifi Test: `adb shell dumpsys activity service com.android.systemui/.SystemUIService WifiInputLog` -> dumps wifi network logs Change-Id: I210fba0bd402dfe582d47a05394ba8e7426a2256 --- .../dagger/StatusBarPipelineModule.kt | 9 +++ .../statusbar/pipeline/dagger/WifiInputLog.kt | 25 ++++++++ .../shared/ConnectivityPipelineLogger.kt | 47 ++------------ .../statusbar/pipeline/shared/LoggerHelper.kt | 48 ++++++++++++++ .../repository/prod/WifiRepositoryImpl.kt | 24 ++----- .../pipeline/wifi/shared/WifiInputLogger.kt | 64 +++++++++++++++++++ .../wifi/ui/viewmodel/WifiViewModel.kt | 23 ++++--- .../repository/WifiRepositorySwitcherTest.kt | 5 +- .../repository/prod/WifiRepositoryImplTest.kt | 4 +- .../ui/view/ModernStatusBarWifiViewTest.kt | 1 - .../WifiViewModelIconParameterizedTest.kt | 1 - .../wifi/ui/viewmodel/WifiViewModelTest.kt | 1 - 12 files changed, 176 insertions(+), 76 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/WifiInputLog.kt create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/LoggerHelper.kt create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiInputLogger.kt diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt index 60de1a38dd95d..38a97752a5b4b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt @@ -19,8 +19,10 @@ package com.android.systemui.statusbar.pipeline.dagger import android.net.wifi.WifiManager import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.log.LogBufferFactory import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBufferFactory +import com.android.systemui.plugins.log.LogBuffer import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepositoryImpl import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel @@ -105,6 +107,13 @@ abstract class StatusBarPipelineModule { } } + @Provides + @SysUISingleton + @WifiInputLog + fun provideWifiInputLogBuffer(factory: LogBufferFactory): LogBuffer { + return factory.create("WifiInputLog", 50) + } + @Provides @SysUISingleton @WifiTableLog diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/WifiInputLog.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/WifiInputLog.kt new file mode 100644 index 0000000000000..6db694474f5f5 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/WifiInputLog.kt @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.dagger + +import javax.inject.Qualifier + +/** Wifi logs for inputs into the wifi pipeline. */ +@Qualifier +@MustBeDocumented +@kotlin.annotation.Retention(AnnotationRetention.RUNTIME) +annotation class WifiInputLog diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt index 45036969aefe9..c6daf1957ec8b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt @@ -25,7 +25,6 @@ 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 @@ -59,32 +58,6 @@ constructor( ) } - /** Logs a **data transformation** that we performed within the connectivity pipeline. */ - fun logTransformation(transformationName: String, oldValue: Any?, newValue: Any?) { - if (oldValue == newValue) { - buffer.log( - SB_LOGGING_TAG, - LogLevel.INFO, - { - str1 = transformationName - str2 = oldValue.toString() - }, - { "Transform: $str1: $str2 (transformation didn't change it)" } - ) - } else { - buffer.log( - SB_LOGGING_TAG, - LogLevel.INFO, - { - str1 = transformationName - str2 = oldValue.toString() - str3 = newValue.toString() - }, - { "Transform: $str1: $str2 -> $str3" } - ) - } - } - /** Logs a change in one of the **outputs** to the connectivity pipeline. */ fun logOutputChange(outputParamName: String, changeInfo: String) { buffer.log( @@ -103,25 +76,17 @@ constructor( networkCapabilities: NetworkCapabilities, isDefaultNetworkCallback: Boolean, ) { - buffer.log( + LoggerHelper.logOnCapabilitiesChanged( + buffer, SB_LOGGING_TAG, - LogLevel.INFO, - { - bool1 = isDefaultNetworkCallback - int1 = network.getNetId() - str1 = networkCapabilities.toString() - }, - { "onCapabilitiesChanged[default=$bool1]: net=$int1 capabilities=$str1" } + network, + networkCapabilities, + isDefaultNetworkCallback, ) } fun logOnLost(network: Network) { - buffer.log( - SB_LOGGING_TAG, - LogLevel.INFO, - { int1 = network.getNetId() }, - { "onLost: net=$int1" } - ) + LoggerHelper.logOnLost(buffer, SB_LOGGING_TAG, network) } fun logOnServiceStateChanged(serviceState: ServiceState, subId: Int) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/LoggerHelper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/LoggerHelper.kt new file mode 100644 index 0000000000000..6f29e33b5a174 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/LoggerHelper.kt @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.shared + +import android.net.Network +import android.net.NetworkCapabilities +import com.android.systemui.plugins.log.LogBuffer +import com.android.systemui.plugins.log.LogLevel + +/** Helper object for logs that are shared between wifi and mobile. */ +object LoggerHelper { + fun logOnCapabilitiesChanged( + buffer: LogBuffer, + tag: String, + network: Network, + networkCapabilities: NetworkCapabilities, + isDefaultNetworkCallback: Boolean, + ) { + buffer.log( + tag, + LogLevel.INFO, + { + bool1 = isDefaultNetworkCallback + int1 = network.getNetId() + str1 = networkCapabilities.toString() + }, + { "onCapabilitiesChanged[default=$bool1]: net=$int1 capabilities=$str1" } + ) + } + + fun logOnLost(buffer: LogBuffer, tag: String, network: Network) { + buffer.log(tag, LogLevel.INFO, { int1 = network.getNetId() }, { "onLost: net=$int1" }) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt index 7b486c1998cda..ee58160a7d3b9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt @@ -39,12 +39,11 @@ import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.logDiffsForTable import com.android.systemui.statusbar.pipeline.dagger.WifiTableLog -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logInputChange import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.toWifiDataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.repository.RealWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository +import com.android.systemui.statusbar.pipeline.wifi.shared.WifiInputLogger import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel import java.util.concurrent.Executor import javax.inject.Inject @@ -58,6 +57,7 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.merge +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn /** Real implementation of [WifiRepository]. */ @@ -70,7 +70,7 @@ class WifiRepositoryImpl constructor( broadcastDispatcher: BroadcastDispatcher, connectivityManager: ConnectivityManager, - logger: ConnectivityPipelineLogger, + logger: WifiInputLogger, @WifiTableLog wifiTableLogBuffer: TableLogBuffer, @Main mainExecutor: Executor, @Application scope: CoroutineScope, @@ -80,7 +80,7 @@ constructor( private val wifiStateChangeEvents: Flow = broadcastDispatcher .broadcastFlow(IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)) - .logInputChange(logger, "WIFI_STATE_CHANGED_ACTION intent") + .onEach { logger.logIntent("WIFI_STATE_CHANGED_ACTION") } private val wifiNetworkChangeEvents: MutableSharedFlow = MutableSharedFlow(extraBufferCapacity = 1) @@ -173,11 +173,6 @@ constructor( networkCapabilities, wifiManager, ) - logger.logTransformation( - WIFI_NETWORK_CALLBACK_NAME, - oldValue = currentWifi, - newValue = wifiNetworkModel, - ) currentWifi = wifiNetworkModel trySend(wifiNetworkModel) } @@ -194,11 +189,6 @@ constructor( wifi.networkId == network.getNetId() ) { val newNetworkModel = WifiNetworkModel.Inactive - logger.logTransformation( - WIFI_NETWORK_CALLBACK_NAME, - oldValue = wifi, - newValue = newNetworkModel, - ) currentWifi = newNetworkModel trySend(newNetworkModel) } @@ -228,7 +218,7 @@ constructor( override val wifiActivity: StateFlow = conflatedCallbackFlow { val callback = TrafficStateCallback { state -> - logger.logInputChange("onTrafficStateChange", prettyPrintActivity(state)) + logger.logActivity(prettyPrintActivity(state)) trySend(state.toWifiDataActivityModel()) } wifiManager.registerTrafficStateCallback(mainExecutor, callback) @@ -336,8 +326,6 @@ constructor( .addTransportType(TRANSPORT_CELLULAR) .build() - private const val WIFI_NETWORK_CALLBACK_NAME = "wifiNetworkModel" - private const val CARRIER_MERGED_INVALID_SUB_ID_REASON = "Wifi network was carrier merged but had invalid sub ID" } @@ -348,7 +336,7 @@ constructor( constructor( private val broadcastDispatcher: BroadcastDispatcher, private val connectivityManager: ConnectivityManager, - private val logger: ConnectivityPipelineLogger, + private val logger: WifiInputLogger, @WifiTableLog private val wifiTableLogBuffer: TableLogBuffer, @Main private val mainExecutor: Executor, @Application private val scope: CoroutineScope, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiInputLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiInputLogger.kt new file mode 100644 index 0000000000000..a32e475923556 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiInputLogger.kt @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.wifi.shared + +import android.net.Network +import android.net.NetworkCapabilities +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.plugins.log.LogBuffer +import com.android.systemui.plugins.log.LogLevel +import com.android.systemui.statusbar.pipeline.dagger.WifiInputLog +import com.android.systemui.statusbar.pipeline.shared.LoggerHelper +import javax.inject.Inject + +/** + * Logger for all the wifi-related inputs (intents, callbacks, etc.) that the wifi repo receives. + */ +@SysUISingleton +class WifiInputLogger +@Inject +constructor( + @WifiInputLog val buffer: LogBuffer, +) { + fun logOnCapabilitiesChanged( + network: Network, + networkCapabilities: NetworkCapabilities, + isDefaultNetworkCallback: Boolean, + ) { + LoggerHelper.logOnCapabilitiesChanged( + buffer, + TAG, + network, + networkCapabilities, + isDefaultNetworkCallback, + ) + } + + fun logOnLost(network: Network) { + LoggerHelper.logOnLost(buffer, TAG, network) + } + + fun logIntent(intentName: String) { + buffer.log(TAG, LogLevel.DEBUG, { str1 = intentName }, { "Intent received: $str1" }) + } + + fun logActivity(activity: String) { + buffer.log(TAG, LogLevel.DEBUG, { str1 = activity }, { "Activity: $str1" }) + } +} + +private const val TAG = "WifiInputLog" diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt index 0f5ff91866fac..105723156b50b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt @@ -34,8 +34,6 @@ import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel import com.android.systemui.statusbar.pipeline.dagger.WifiTableLog import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logOutputChange import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants @@ -69,7 +67,6 @@ constructor( airplaneModeViewModel: AirplaneModeViewModel, connectivityConstants: ConnectivityConstants, private val context: Context, - logger: ConnectivityPipelineLogger, @WifiTableLog wifiTableLogBuffer: TableLogBuffer, interactor: WifiInteractor, @Application private val scope: CoroutineScope, @@ -143,29 +140,35 @@ constructor( ) /** The wifi activity status. Null if we shouldn't display the activity status. */ - private val activity: Flow = + private val activity: Flow = run { + val default = DataActivityModel(hasActivityIn = false, hasActivityOut = false) if (!connectivityConstants.shouldShowActivityConfig) { - flowOf(null) + flowOf(default) } else { combine(interactor.activity, interactor.ssid) { activity, ssid -> when (ssid) { - null -> null + null -> default else -> activity } } } .distinctUntilChanged() - .logOutputChange(logger, "activity") - .stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = null) + .logDiffsForTable( + wifiTableLogBuffer, + columnPrefix = "VM.activity", + initialValue = default, + ) + .stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = default) + } private val isActivityInViewVisible: Flow = activity - .map { it?.hasActivityIn == true } + .map { it.hasActivityIn } .stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false) private val isActivityOutViewVisible: Flow = activity - .map { it?.hasActivityOut == true } + .map { it.hasActivityOut } .stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false) private val isActivityContainerVisible: Flow = diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt index 1085c2b1a5d58..25678b0530f6e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt @@ -23,11 +23,11 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.demomode.DemoMode import com.android.systemui.demomode.DemoModeController import com.android.systemui.log.table.TableLogBuffer -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoModeWifiDataSource import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.model.FakeWifiEventModel import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl +import com.android.systemui.statusbar.pipeline.wifi.shared.WifiInputLogger import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.kotlinArgumentCaptor import com.android.systemui.util.mockito.whenever @@ -47,6 +47,7 @@ import org.mockito.Mockito import org.mockito.MockitoAnnotations @OptIn(ExperimentalCoroutinesApi::class) +@Suppress("EXPERIMENTAL_IS_NOT_ENABLED") @SmallTest class WifiRepositorySwitcherTest : SysuiTestCase() { private lateinit var underTest: WifiRepositorySwitcher @@ -54,7 +55,7 @@ class WifiRepositorySwitcherTest : SysuiTestCase() { private lateinit var demoImpl: DemoWifiRepository @Mock private lateinit var demoModeController: DemoModeController - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: WifiInputLogger @Mock private lateinit var tableLogger: TableLogBuffer @Mock private lateinit var connectivityManager: ConnectivityManager @Mock private lateinit var wifiManager: WifiManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt index db791bbb1f1fd..c7b31bcf9a0cb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt @@ -34,9 +34,9 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.log.table.TableLogBuffer -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.WIFI_NETWORK_DEFAULT +import com.android.systemui.statusbar.pipeline.wifi.shared.WifiInputLogger import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any @@ -72,7 +72,7 @@ class WifiRepositoryImplTest : SysuiTestCase() { private lateinit var underTest: WifiRepositoryImpl @Mock private lateinit var broadcastDispatcher: BroadcastDispatcher - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: WifiInputLogger @Mock private lateinit var tableLogger: TableLogBuffer @Mock private lateinit var connectivityManager: ConnectivityManager @Mock private lateinit var wifiManager: WifiManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt index 60f564e5f2dcc..eabd6aae67eb7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt @@ -100,7 +100,6 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() { airplaneModeViewModel, connectivityConstants, context, - logger, tableLogBuffer, interactor, scope, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt index 648d7a5f0f55f..3aba3e486b30f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt @@ -125,7 +125,6 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase airplaneModeViewModel, connectivityConstants, context, - logger, tableLogBuffer, interactor, scope, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt index 45ebb3903332c..da102d2baca1d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt @@ -478,7 +478,6 @@ class WifiViewModelTest : SysuiTestCase() { airplaneModeViewModel, connectivityConstants, context, - logger, tableLogBuffer, interactor, scope, From 21fa009309c2a1efd90d18e3875a54e29df60745 Mon Sep 17 00:00:00 2001 From: Caitlin Shkuratov Date: Mon, 13 Feb 2023 19:05:37 +0000 Subject: [PATCH 2/5] [SB Refactor] Don't use ConnectivityPipelineLogger for the airplane VM. Bug: 238425913 Test: atest AirplaneModeViewModelImplTest Test: `adb shell dumpsys activity service com.android.systemui/.SystemUIService AirplaneTableLog` -> has iconVisible logs Change-Id: I89b8169908c84d4fec0bfa9bcd0e420e0972c27a --- .../airplane/ui/viewmodel/AirplaneModeViewModel.kt | 14 ++++++++++---- .../ui/viewmodel/AirplaneModeViewModelImplTest.kt | 4 ++-- .../wifi/ui/view/ModernStatusBarWifiViewTest.kt | 4 +--- .../WifiViewModelIconParameterizedTest.kt | 4 +--- .../wifi/ui/viewmodel/WifiViewModelTest.kt | 4 +--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModel.kt index 4a5342e0f765c..5d5d562a22fc2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModel.kt @@ -18,9 +18,10 @@ package com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.log.table.TableLogBuffer +import com.android.systemui.log.table.logDiffsForTable import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logOutputChange +import com.android.systemui.statusbar.pipeline.dagger.AirplaneTableLog import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharingStarted @@ -46,7 +47,7 @@ class AirplaneModeViewModelImpl @Inject constructor( interactor: AirplaneModeInteractor, - logger: ConnectivityPipelineLogger, + @AirplaneTableLog logger: TableLogBuffer, @Application private val scope: CoroutineScope, ) : AirplaneModeViewModel { override val isAirplaneModeIconVisible: StateFlow = @@ -56,6 +57,11 @@ constructor( isAirplaneMode && !isAirplaneIconForceHidden } .distinctUntilChanged() - .logOutputChange(logger, "isAirplaneModeIconVisible") + .logDiffsForTable( + logger, + columnPrefix = "", + columnName = "isAirplaneModeIconVisible", + initialValue = false, + ) .stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModelImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModelImplTest.kt index 5a6bb301743ae..ab888f7c133e4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModelImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/airplane/ui/viewmodel/AirplaneModeViewModelImplTest.kt @@ -18,9 +18,9 @@ package com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase +import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.google.common.truth.Truth.assertThat @@ -42,7 +42,7 @@ class AirplaneModeViewModelImplTest : SysuiTestCase() { private lateinit var underTest: AirplaneModeViewModelImpl - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: TableLogBuffer private lateinit var airplaneModeRepository: FakeAirplaneModeRepository private lateinit var connectivityRepository: FakeConnectivityRepository private lateinit var interactor: AirplaneModeInteractor diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt index eabd6aae67eb7..64810d2a93087 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt @@ -36,7 +36,6 @@ import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.Airpla import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModelImpl import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor @@ -63,7 +62,6 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() { private lateinit var testableLooper: TestableLooper @Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags - @Mock private lateinit var logger: ConnectivityPipelineLogger @Mock private lateinit var tableLogBuffer: TableLogBuffer @Mock private lateinit var connectivityConstants: ConnectivityConstants @Mock private lateinit var wifiConstants: WifiConstants @@ -92,7 +90,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() { airplaneModeRepository, connectivityRepository, ), - logger, + tableLogBuffer, scope, ) viewModel = diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt index 3aba3e486b30f..12b16640c0c22 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt @@ -33,7 +33,6 @@ import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.Airpla import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModelImpl import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository @@ -68,7 +67,6 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase private lateinit var underTest: WifiViewModel @Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags - @Mock private lateinit var logger: ConnectivityPipelineLogger @Mock private lateinit var tableLogBuffer: TableLogBuffer @Mock private lateinit var connectivityConstants: ConnectivityConstants @Mock private lateinit var wifiConstants: WifiConstants @@ -94,7 +92,7 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase airplaneModeRepository, connectivityRepository, ), - logger, + tableLogBuffer, scope, ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt index da102d2baca1d..7a62cb8a377d8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt @@ -25,7 +25,6 @@ import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.Airpla import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModelImpl import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository @@ -59,7 +58,6 @@ class WifiViewModelTest : SysuiTestCase() { private lateinit var underTest: WifiViewModel @Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags - @Mock private lateinit var logger: ConnectivityPipelineLogger @Mock private lateinit var tableLogBuffer: TableLogBuffer @Mock private lateinit var connectivityConstants: ConnectivityConstants @Mock private lateinit var wifiConstants: WifiConstants @@ -85,7 +83,7 @@ class WifiViewModelTest : SysuiTestCase() { airplaneModeRepository, connectivityRepository, ), - logger, + tableLogBuffer, scope, ) From 2f946a641a175bf8e8612c9f69a7580094f0778f Mon Sep 17 00:00:00 2001 From: Caitlin Shkuratov Date: Mon, 13 Feb 2023 19:48:47 +0000 Subject: [PATCH 3/5] [SB Refactor] Define a new buffer for the shared connectivity repo. Since ConnectivityPiplineLogger will eventually become mobile only, we need to add a different buffer for the shared repo. Bug: 238425913 Test: make modifications via System UI Tuner, then `adb shell dumpsys activity service com.android.systemui/.SystemUIService SharedConnectivityInputLog` -> see tuner updates in log Change-Id: I5b75bc5e09f176ce54264023f0fcf33eb52ed07a --- .../dagger/SharedConnectivityInputLog.kt | 25 +++++++++++++ .../dagger/StatusBarPipelineModule.kt | 7 ++++ .../shared/ConnectivityInputLogger.kt | 37 +++++++++++++++++++ .../data/repository/ConnectivityRepository.kt | 6 +-- .../ConnectivityRepositoryImplTest.kt | 4 +- 5 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/SharedConnectivityInputLog.kt create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityInputLogger.kt diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/SharedConnectivityInputLog.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/SharedConnectivityInputLog.kt new file mode 100644 index 0000000000000..5face22e505fa --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/SharedConnectivityInputLog.kt @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.dagger + +import javax.inject.Qualifier + +/** Logs for connectivity-related inputs that are shared across wifi, mobile, etc. */ +@Qualifier +@MustBeDocumented +@kotlin.annotation.Retention(AnnotationRetention.RUNTIME) +annotation class SharedConnectivityInputLog diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt index 38a97752a5b4b..0b9903de70d39 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt @@ -128,6 +128,13 @@ abstract class StatusBarPipelineModule { return factory.create("AirplaneTableLog", 30) } + @Provides + @SysUISingleton + @SharedConnectivityInputLog + fun provideSharedConnectivityTableLogBuffer(factory: LogBufferFactory): LogBuffer { + return factory.create("SharedConnectivityInputLog", 30) + } + @Provides @SysUISingleton @MobileSummaryLog diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityInputLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityInputLogger.kt new file mode 100644 index 0000000000000..95548b84f7693 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityInputLogger.kt @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.shared + +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.plugins.log.LogBuffer +import com.android.systemui.plugins.log.LogLevel +import com.android.systemui.statusbar.pipeline.dagger.SharedConnectivityInputLog +import javax.inject.Inject + +/** Logs for connectivity-related inputs that are shared across wifi, mobile, etc. */ +@SysUISingleton +class ConnectivityInputLogger +@Inject +constructor( + @SharedConnectivityInputLog private val buffer: LogBuffer, +) { + fun logTuningChanged(tuningList: String?) { + buffer.log(TAG, LogLevel.DEBUG, { str1 = tuningList }, { "onTuningChanged: $str1" }) + } +} + +private const val TAG = "ConnectivityInputLogger" diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt index 45c6d466f7e04..b8761584c64d3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt @@ -26,7 +26,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.phone.StatusBarIconController -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger +import com.android.systemui.statusbar.pipeline.shared.ConnectivityInputLogger import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.SB_LOGGING_TAG import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlots @@ -57,7 +57,7 @@ class ConnectivityRepositoryImpl @Inject constructor( private val connectivitySlots: ConnectivitySlots, context: Context, dumpManager: DumpManager, - logger: ConnectivityPipelineLogger, + logger: ConnectivityInputLogger, @Application scope: CoroutineScope, tunerService: TunerService, ) : ConnectivityRepository, Dumpable { @@ -77,7 +77,7 @@ class ConnectivityRepositoryImpl @Inject constructor( if (key != HIDDEN_ICONS_TUNABLE_KEY) { return } - logger.logInputChange("onTuningChanged", newHideList) + logger.logTuningChanged(newHideList) val outputList = newHideList?.split(",")?.toSlotSet(connectivitySlots) ?: defaultHiddenIcons diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt index 6dbee2f26ff99..b0a41ce2d3493 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt @@ -19,7 +19,7 @@ package com.android.systemui.statusbar.pipeline.shared.data.repository import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger +import com.android.systemui.statusbar.pipeline.shared.ConnectivityInputLogger import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlots import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl.Companion.DEFAULT_HIDDEN_ICONS_RESOURCE @@ -52,7 +52,7 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() { @Mock private lateinit var connectivitySlots: ConnectivitySlots @Mock private lateinit var dumpManager: DumpManager - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: ConnectivityInputLogger private lateinit var scope: CoroutineScope @Mock private lateinit var tunerService: TunerService From 77a386eb5cff706352fe8b9b4163e4c68a193cb2 Mon Sep 17 00:00:00 2001 From: Caitlin Shkuratov Date: Mon, 13 Feb 2023 20:42:46 +0000 Subject: [PATCH 4/5] [SB Refactor] Re-name ConnectivityPipelineLogger -> MobileInputLogger. This is to preserve git history. The next CL will remove extraneous uses of the logger. Bug: 238425913 Test: atest MobileInputLoggerTest Change-Id: I629eda93ce51f54627bcc929e419f850ff4a7210 --- packages/SystemUI/ktfmt_includes.txt | 2 -- .../data/repository/CarrierConfigRepository.kt | 4 ++-- .../prod/MobileConnectionRepositoryImpl.kt | 6 +++--- .../prod/MobileConnectionsRepositoryImpl.kt | 6 +++--- .../domain/interactor/MobileIconsInteractor.kt | 4 ++-- .../shared/MobileInputLogger.kt} | 13 +++++++------ .../pipeline/mobile/ui/MobileUiAdapter.kt | 4 ++-- .../mobile/ui/viewmodel/MobileIconsViewModel.kt | 6 +++--- .../pipeline/shared/ConnectivityConstants.kt | 2 +- .../data/repository/ConnectivityRepository.kt | 2 +- .../pipeline/wifi/shared/WifiConstants.kt | 14 +++++++------- .../data/repository/CarrierConfigRepositoryTest.kt | 4 ++-- .../repository/MobileRepositorySwitcherTest.kt | 4 ++-- .../prod/MobileConnectionRepositoryTest.kt | 4 ++-- .../prod/MobileConnectionsRepositoryTest.kt | 4 ++-- .../shared/MobileInputLoggerTest.kt} | 10 +++++----- .../ui/viewmodel/MobileIconsViewModelTest.kt | 4 ++-- 17 files changed, 46 insertions(+), 47 deletions(-) rename packages/SystemUI/src/com/android/systemui/statusbar/pipeline/{shared/ConnectivityPipelineLogger.kt => mobile/shared/MobileInputLogger.kt} (95%) rename packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/{shared/ConnectivityPipelineLoggerTest.kt => mobile/shared/MobileInputLoggerTest.kt} (92%) diff --git a/packages/SystemUI/ktfmt_includes.txt b/packages/SystemUI/ktfmt_includes.txt index 22158571bcd6d..943d7996dd89d 100644 --- a/packages/SystemUI/ktfmt_includes.txt +++ b/packages/SystemUI/ktfmt_includes.txt @@ -451,7 +451,6 @@ -packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherController.kt -packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherFeatureController.kt -packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt --packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt -packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.kt -packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsController.kt -packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt @@ -736,7 +735,6 @@ -packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallLoggerTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/panelstate/ShadeExpansionStateManagerTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerOldImplTest.kt --packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLoggerTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryStateNotifierTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ClockTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepository.kt index 5769f90ab6c7d..bb3b9b2166c35 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepository.kt @@ -31,7 +31,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.pipeline.mobile.data.model.SystemUiCarrierConfig -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import java.io.PrintWriter import javax.inject.Inject import kotlinx.coroutines.CoroutineScope @@ -57,7 +57,7 @@ constructor( broadcastDispatcher: BroadcastDispatcher, private val carrierConfigManager: CarrierConfigManager, dumpManager: DumpManager, - logger: ConnectivityPipelineLogger, + logger: MobileInputLogger, @Application scope: CoroutineScope, ) : Dumpable { private var isListening = false diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt index dcce0ea585126..96b96f14d6aa2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt @@ -47,8 +47,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.toNetworkNameMo import com.android.systemui.statusbar.pipeline.mobile.data.repository.CarrierConfigRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository.Companion.DEFAULT_NUM_LEVELS +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.toMobileDataActivityModel import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher @@ -85,7 +85,7 @@ class MobileConnectionRepositoryImpl( broadcastDispatcher: BroadcastDispatcher, private val mobileMappingsProxy: MobileMappingsProxy, bgDispatcher: CoroutineDispatcher, - logger: ConnectivityPipelineLogger, + logger: MobileInputLogger, override val tableLogBuffer: TableLogBuffer, scope: CoroutineScope, ) : MobileConnectionRepository { @@ -291,7 +291,7 @@ class MobileConnectionRepositoryImpl( private val broadcastDispatcher: BroadcastDispatcher, private val context: Context, private val telephonyManager: TelephonyManager, - private val logger: ConnectivityPipelineLogger, + private val logger: MobileInputLogger, private val carrierConfigRepository: CarrierConfigRepository, private val mobileMappingsProxy: MobileMappingsProxy, @Background private val bgDispatcher: CoroutineDispatcher, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt index adeed0a757551..55cf864507511 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt @@ -49,9 +49,9 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.MobileConnectiv import com.android.systemui.statusbar.pipeline.mobile.data.model.NetworkNameModel import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.logInputChange import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logInputChange import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel import com.android.systemui.util.kotlin.pairwise @@ -84,7 +84,7 @@ constructor( private val connectivityManager: ConnectivityManager, private val subscriptionManager: SubscriptionManager, private val telephonyManager: TelephonyManager, - private val logger: ConnectivityPipelineLogger, + private val logger: MobileInputLogger, @MobileSummaryLog private val tableLogger: TableLogBuffer, mobileMappingsProxy: MobileMappingsProxy, broadcastDispatcher: BroadcastDispatcher, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt index 72d5113e59386..02b08537c61bd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt @@ -30,7 +30,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.statusbar.pipeline.mobile.shared.MobileInputLogger import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.util.CarrierConfigTracker @@ -111,7 +111,7 @@ class MobileIconsInteractorImpl constructor( private val mobileConnectionsRepo: MobileConnectionsRepository, private val carrierConfigTracker: CarrierConfigTracker, - private val logger: ConnectivityPipelineLogger, + private val logger: MobileInputLogger, @MobileSummaryLog private val tableLogger: TableLogBuffer, connectivityRepository: ConnectivityRepository, userSetupRepo: UserSetupRepository, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLogger.kt similarity index 95% rename from packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt rename to packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLogger.kt index c6daf1957ec8b..f7fff70711e63 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLogger.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.statusbar.pipeline.shared +package com.android.systemui.statusbar.pipeline.mobile.shared import android.net.Network import android.net.NetworkCapabilities @@ -25,13 +25,14 @@ 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.shared.ConnectivityPipelineLogger.Companion.toString +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.toString +import com.android.systemui.statusbar.pipeline.shared.LoggerHelper import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.onEach @SysUISingleton -class ConnectivityPipelineLogger +class MobileInputLogger @Inject constructor( @StatusBarConnectivityLog private val buffer: LogBuffer, @@ -213,7 +214,7 @@ constructor( /** Log a change in one of the **inputs** to the connectivity pipeline. */ fun Flow.logInputChange( - logger: ConnectivityPipelineLogger, + logger: MobileInputLogger, inputParamName: String, ): Flow { return this.onEach { logger.logInputChange(inputParamName) } @@ -226,7 +227,7 @@ constructor( * [toString] is used if no custom function is provided. */ fun Flow.logInputChange( - logger: ConnectivityPipelineLogger, + logger: MobileInputLogger, inputParamName: String, prettyPrint: (T) -> String = { it.toString() } ): Flow { @@ -240,7 +241,7 @@ constructor( * [toString] is used if no custom function is provided. */ fun Flow.logOutputChange( - logger: ConnectivityPipelineLogger, + logger: MobileInputLogger, outputParamName: String, prettyPrint: (T) -> String = { it.toString() } ): Flow { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt index ef75713cd2f2e..da63ab10f733a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt @@ -22,8 +22,8 @@ import com.android.systemui.dagger.qualifiers.Application 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.shared.MobileInputLogger 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 @@ -55,7 +55,7 @@ constructor( interactor: MobileIconsInteractor, private val iconController: StatusBarIconController, private val iconsViewModelFactory: MobileIconsViewModel.Factory, - private val logger: ConnectivityPipelineLogger, + private val logger: MobileInputLogger, @Application private val scope: CoroutineScope, private val statusBarPipelineFlags: StatusBarPipelineFlags, ) : CoreStartable { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt index 185b6685ba0e1..f3c491de6efbd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt @@ -25,7 +25,7 @@ import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.Airpla import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernStatusBarMobileView import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow @@ -42,7 +42,7 @@ constructor( val subscriptionIdsFlow: StateFlow>, private val interactor: MobileIconsInteractor, private val airplaneModeInteractor: AirplaneModeInteractor, - private val logger: ConnectivityPipelineLogger, + private val logger: MobileInputLogger, private val constants: ConnectivityConstants, @Application private val scope: CoroutineScope, private val statusBarPipelineFlags: StatusBarPipelineFlags, @@ -83,7 +83,7 @@ constructor( constructor( private val interactor: MobileIconsInteractor, private val airplaneModeInteractor: AirplaneModeInteractor, - private val logger: ConnectivityPipelineLogger, + private val logger: MobileInputLogger, private val constants: ConnectivityConstants, @Application private val scope: CoroutineScope, private val statusBarPipelineFlags: StatusBarPipelineFlags, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt index 0c9b86cb2b118..a6caf76c03e2a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt @@ -22,7 +22,7 @@ import com.android.systemui.Dumpable import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.SB_LOGGING_TAG +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.SB_LOGGING_TAG import java.io.PrintWriter import javax.inject.Inject diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt index b8761584c64d3..a216db88103d6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt @@ -27,7 +27,7 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.pipeline.shared.ConnectivityInputLogger -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.SB_LOGGING_TAG +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.SB_LOGGING_TAG import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlots import com.android.systemui.tuner.TunerService diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt index 4f7fe28c1e7c6..00459e94e9e5c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt @@ -21,7 +21,7 @@ import com.android.systemui.Dumpable import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.SB_LOGGING_TAG +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.SB_LOGGING_TAG import java.io.PrintWriter import javax.inject.Inject @@ -30,9 +30,11 @@ import javax.inject.Inject * logging purposes. */ @SysUISingleton -class WifiConstants @Inject constructor( - context: Context, - dumpManager: DumpManager, +class WifiConstants +@Inject +constructor( + context: Context, + dumpManager: DumpManager, ) : Dumpable { init { dumpManager.registerDumpable("${SB_LOGGING_TAG}WifiConstants", this) @@ -43,8 +45,6 @@ class WifiConstants @Inject constructor( context.resources.getBoolean(R.bool.config_showWifiIndicatorWhenEnabled) override fun dump(pw: PrintWriter, args: Array) { - pw.apply { - println("alwaysShowIconIfEnabled=$alwaysShowIconIfEnabled") - } + pw.apply { println("alwaysShowIconIfEnabled=$alwaysShowIconIfEnabled") } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepositoryTest.kt index 521c67f20cfd0..0145103d55e12 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepositoryTest.kt @@ -25,7 +25,7 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.pipeline.mobile.data.model.SystemUiCarrierConfigTest.Companion.createTestConfig -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -53,7 +53,7 @@ class CarrierConfigRepositoryTest : SysuiTestCase() { private lateinit var mockitoSession: MockitoSession private lateinit var carrierConfigCoreStartable: CarrierConfigCoreStartable - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: MobileInputLogger @Mock private lateinit var carrierConfigManager: CarrierConfigManager @Mock private lateinit var dumpManager: DumpManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt index 4da2104ca32e0..17502f28a4790 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt @@ -33,8 +33,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.demo.DemoM import com.android.systemui.statusbar.pipeline.mobile.data.repository.demo.model.FakeNetworkEventModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.demo.validMobileEvent import com.android.systemui.statusbar.pipeline.mobile.data.repository.prod.MobileConnectionsRepositoryImpl +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoModeWifiDataSource import com.android.systemui.util.mockito.any @@ -81,7 +81,7 @@ class MobileRepositorySwitcherTest : SysuiTestCase() { @Mock private lateinit var connectivityManager: ConnectivityManager @Mock private lateinit var subscriptionManager: SubscriptionManager @Mock private lateinit var telephonyManager: TelephonyManager - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: MobileInputLogger @Mock private lateinit var summaryLogger: TableLogBuffer @Mock private lateinit var demoModeController: DemoModeController @Mock private lateinit var dumpManager: DumpManager diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt index a294088a41c02..b2577e349da76 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt @@ -65,8 +65,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.SystemUiCarrier import com.android.systemui.statusbar.pipeline.mobile.data.model.toNetworkNameModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository.Companion.DEFAULT_NUM_LEVELS +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.toMobileDataActivityModel import com.android.systemui.util.mockito.any @@ -94,7 +94,7 @@ class MobileConnectionRepositoryTest : SysuiTestCase() { private lateinit var connectionsRepo: FakeMobileConnectionsRepository @Mock private lateinit var telephonyManager: TelephonyManager - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: MobileInputLogger @Mock private lateinit var tableLogger: TableLogBuffer private val scope = CoroutineScope(IMMEDIATE) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt index 4e2483479e427..6c1ac708ab038 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt @@ -42,8 +42,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionMod import com.android.systemui.statusbar.pipeline.mobile.data.repository.CarrierConfigRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.prod.FullMobileConnectionRepository.Factory.Companion.tableBufferLogName +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel import com.android.systemui.util.mockito.any @@ -86,7 +86,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { @Mock private lateinit var connectivityManager: ConnectivityManager @Mock private lateinit var subscriptionManager: SubscriptionManager @Mock private lateinit var telephonyManager: TelephonyManager - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: MobileInputLogger @Mock private lateinit var summaryLogger: TableLogBuffer @Mock private lateinit var logBufferFactory: TableLogBufferFactory diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLoggerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLoggerTest.kt similarity index 92% rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLoggerTest.kt rename to packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLoggerTest.kt index 3dccbbf265755..7c2b7a651994c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLoggerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLoggerTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.statusbar.pipeline.shared +package com.android.systemui.statusbar.pipeline.mobile.shared import android.net.Network import android.net.NetworkCapabilities @@ -23,8 +23,8 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.log.LogBufferFactory import com.android.systemui.plugins.log.LogcatEchoTracker -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logInputChange -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logOutputChange +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.logInputChange +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.logOutputChange import com.google.common.truth.Truth.assertThat import java.io.PrintWriter import java.io.StringWriter @@ -38,10 +38,10 @@ import org.mockito.Mockito import org.mockito.Mockito.mock @SmallTest -class ConnectivityPipelineLoggerTest : SysuiTestCase() { +class MobileInputLoggerTest : SysuiTestCase() { private val buffer = LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java)) .create("buffer", 10) - private val logger = ConnectivityPipelineLogger(buffer) + private val logger = MobileInputLogger(buffer) @Test fun testLogNetworkCapsChange_bufferHasInfo() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt index d9268a2c3b94a..69bae5dad5ed4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt @@ -24,9 +24,9 @@ import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirp import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.FakeMobileIconsInteractor +import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants -import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.android.systemui.util.mockito.mock import com.google.common.truth.Truth.assertThat @@ -51,7 +51,7 @@ class MobileIconsViewModelTest : SysuiTestCase() { private lateinit var airplaneModeInteractor: AirplaneModeInteractor @Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags - @Mock private lateinit var logger: ConnectivityPipelineLogger + @Mock private lateinit var logger: MobileInputLogger @Mock private lateinit var constants: ConnectivityConstants private val testDispatcher = UnconfinedTestDispatcher() From 3a4245bb68b6fd8b8f0b27380c7535b0004bda1a Mon Sep 17 00:00:00 2001 From: Caitlin Shkuratov Date: Mon, 13 Feb 2023 19:40:46 +0000 Subject: [PATCH 5/5] [SB Refactor] Remove non-mobile usages of MobileInputLogger. Also removes the `logInputChange` and `logOutputChange` methods, since now all logs to this logger are, by definition, input changes. Also lints the ConnectivityRepository(Test) files, since they apparently were incorrectly linted before. Bug: 238425913 Test: atest MobileInputLoggerTest Test: `adb shell dumpsys activity service com.android.systemui/.SystemUIService MobileInputLog` -> verify logs appear Change-Id: I469cd3aaa7205694229c6f8cb08480f37af6fe80 --- .../systemui/log/dagger/LogModule.java | 10 - .../pipeline/dagger/MobileInputLog.kt} | 24 +- .../dagger/StatusBarPipelineModule.kt | 7 + .../prod/MobileConnectionsRepositoryImpl.kt | 9 +- .../interactor/MobileIconsInteractor.kt | 2 - .../mobile/shared/MobileInputLogger.kt | 129 +++----- .../ui/viewmodel/MobileIconsViewModel.kt | 4 - .../pipeline/shared/ConnectivityConstants.kt | 3 +- .../data/repository/ConnectivityRepository.kt | 68 ++-- .../pipeline/wifi/shared/WifiConstants.kt | 3 +- .../interactor/MobileIconsInteractorTest.kt | 1 - .../mobile/shared/MobileInputLoggerTest.kt | 83 +---- .../ui/viewmodel/MobileIconsViewModelTest.kt | 3 - .../ConnectivityRepositoryImplTest.kt | 291 ++++++++---------- 14 files changed, 240 insertions(+), 397 deletions(-) rename packages/SystemUI/src/com/android/systemui/{log/dagger/StatusBarConnectivityLog.java => statusbar/pipeline/dagger/MobileInputLog.kt} (55%) diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java index 41774800c5277..5341cd53b2a5c 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java @@ -265,16 +265,6 @@ public class LogModule { return factory.create("MediaCarouselCtlrLog", 20); } - /** - * Provides a {@link LogBuffer} for use in the status bar connectivity pipeline - */ - @Provides - @SysUISingleton - @StatusBarConnectivityLog - public static LogBuffer provideStatusBarConnectivityBuffer(LogBufferFactory factory) { - return factory.create("SbConnectivity", 64); - } - /** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */ @Provides @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarConnectivityLog.java b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/MobileInputLog.kt similarity index 55% rename from packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarConnectivityLog.java rename to packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/MobileInputLog.kt index 67cdb722055bf..d1aa79e2233a8 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarConnectivityLog.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/MobileInputLog.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 The Android Open Source Project + * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,22 +14,12 @@ * limitations under the License. */ -package com.android.systemui.log.dagger; +package com.android.systemui.statusbar.pipeline.dagger -import static java.lang.annotation.RetentionPolicy.RUNTIME; +import javax.inject.Qualifier -import com.android.systemui.plugins.log.LogBuffer; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; - -import javax.inject.Qualifier; - -/** - * A {@link LogBuffer} for status bar connectivity events. - */ +/** Logs for inputs into the mobile pipeline. */ @Qualifier -@Documented -@Retention(RUNTIME) -public @interface StatusBarConnectivityLog { -} +@MustBeDocumented +@kotlin.annotation.Retention(AnnotationRetention.RUNTIME) +annotation class MobileInputLog diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt index 0b9903de70d39..44647515a6e55 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt @@ -141,5 +141,12 @@ abstract class StatusBarPipelineModule { fun provideMobileSummaryLogBuffer(factory: TableLogBufferFactory): TableLogBuffer { return factory.create("MobileSummaryLog", 100) } + + @Provides + @SysUISingleton + @MobileInputLog + fun provideMobileInputLogBuffer(factory: LogBufferFactory): LogBuffer { + return factory.create("MobileInputLog", 100) + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt index 55cf864507511..a80e1eb85d468 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt @@ -50,7 +50,6 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.NetworkNameMode import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger -import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.logInputChange import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel @@ -222,13 +221,13 @@ constructor( private val carrierConfigChangedEvent = broadcastDispatcher .broadcastFlow(IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) - .logInputChange(logger, "ACTION_CARRIER_CONFIG_CHANGED") + .onEach { logger.logActionCarrierConfigChanged() } override val defaultDataSubRatConfig: StateFlow = merge(defaultDataSubIdChangeEvent, carrierConfigChangedEvent) .mapLatest { Config.readConfig(context) } .distinctUntilChanged() - .logInputChange(logger, "defaultDataSubRatConfig") + .onEach { logger.logDefaultDataSubRatConfig(it) } .stateIn( scope, SharingStarted.WhileSubscribed(), @@ -239,13 +238,13 @@ constructor( defaultDataSubRatConfig .map { mobileMappingsProxy.mapIconSets(it) } .distinctUntilChanged() - .logInputChange(logger, "defaultMobileIconMapping") + .onEach { logger.logDefaultMobileIconMapping(it) } override val defaultMobileIconGroup: Flow = defaultDataSubRatConfig .map { mobileMappingsProxy.getDefaultIcons(it) } .distinctUntilChanged() - .logInputChange(logger, "defaultMobileIconGroup") + .onEach { logger.logDefaultMobileIconGroup(it) } override fun getRepoForSubId(subId: Int): FullMobileConnectionRepository { if (!isValidSubId(subId)) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt index 02b08537c61bd..4e5fc07ba3a3a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt @@ -30,7 +30,6 @@ 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.mobile.shared.MobileInputLogger import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.util.CarrierConfigTracker @@ -111,7 +110,6 @@ class MobileIconsInteractorImpl constructor( private val mobileConnectionsRepo: MobileConnectionsRepository, private val carrierConfigTracker: CarrierConfigTracker, - private val logger: MobileInputLogger, @MobileSummaryLog private val tableLogger: TableLogBuffer, connectivityRepository: ConnectivityRepository, userSetupRepo: UserSetupRepository, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLogger.kt index f7fff70711e63..3cbd2b76c2484 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLogger.kt @@ -21,57 +21,22 @@ import android.net.NetworkCapabilities import android.telephony.ServiceState import android.telephony.SignalStrength import android.telephony.TelephonyDisplayInfo +import com.android.settingslib.SignalIcon +import com.android.settingslib.mobile.MobileMappings 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.shared.MobileInputLogger.Companion.toString +import com.android.systemui.statusbar.pipeline.dagger.MobileInputLog import com.android.systemui.statusbar.pipeline.shared.LoggerHelper import javax.inject.Inject -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.onEach +/** Logs for inputs into the mobile pipeline. */ @SysUISingleton class MobileInputLogger @Inject constructor( - @StatusBarConnectivityLog private val buffer: LogBuffer, + @MobileInputLog private val buffer: LogBuffer, ) { - /** - * Logs a change in one of the **raw inputs** to the connectivity pipeline. - * - * Use this method for inputs that don't have any extra information besides their callback name. - */ - fun logInputChange(callbackName: String) { - buffer.log(SB_LOGGING_TAG, LogLevel.INFO, { str1 = callbackName }, { "Input: $str1" }) - } - - /** Logs a change in one of the **raw inputs** to the connectivity pipeline. */ - fun logInputChange(callbackName: String, changeInfo: String?) { - buffer.log( - SB_LOGGING_TAG, - LogLevel.INFO, - { - str1 = callbackName - str2 = changeInfo - }, - { "Input: $str1: $str2" } - ) - } - - /** Logs a change in one of the **outputs** to the connectivity pipeline. */ - fun logOutputChange(outputParamName: String, changeInfo: String) { - buffer.log( - SB_LOGGING_TAG, - LogLevel.INFO, - { - str1 = outputParamName - str2 = changeInfo - }, - { "Output: $str1: $str2" } - ) - } - fun logOnCapabilitiesChanged( network: Network, networkCapabilities: NetworkCapabilities, @@ -79,7 +44,7 @@ constructor( ) { LoggerHelper.logOnCapabilitiesChanged( buffer, - SB_LOGGING_TAG, + TAG, network, networkCapabilities, isDefaultNetworkCallback, @@ -87,12 +52,12 @@ constructor( } fun logOnLost(network: Network) { - LoggerHelper.logOnLost(buffer, SB_LOGGING_TAG, network) + LoggerHelper.logOnLost(buffer, TAG, network) } fun logOnServiceStateChanged(serviceState: ServiceState, subId: Int) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { int1 = subId @@ -109,7 +74,7 @@ constructor( fun logOnSignalStrengthsChanged(signalStrength: SignalStrength, subId: Int) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { int1 = subId @@ -121,7 +86,7 @@ constructor( fun logOnDataConnectionStateChanged(dataState: Int, networkType: Int, subId: Int) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { int1 = subId @@ -134,7 +99,7 @@ constructor( fun logOnDataActivity(direction: Int, subId: Int) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { int1 = subId @@ -146,7 +111,7 @@ constructor( fun logOnCarrierNetworkChange(active: Boolean, subId: Int) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { int1 = subId @@ -158,7 +123,7 @@ constructor( fun logOnDisplayInfoChanged(displayInfo: TelephonyDisplayInfo, subId: Int) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { int1 = subId @@ -168,11 +133,9 @@ constructor( ) } - // TODO(b/238425913): We should split this class into mobile-specific and wifi-specific loggers. - fun logUiAdapterSubIdsUpdated(subs: List) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { str1 = subs.toString() }, { "Sub IDs in MobileUiAdapter updated internally: $str1" }, @@ -181,7 +144,7 @@ constructor( fun logUiAdapterSubIdsSentToIconController(subs: List) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { str1 = subs.toString() }, { "Sub IDs in MobileUiAdapter being sent to icon controller: $str1" }, @@ -190,7 +153,7 @@ constructor( fun logCarrierConfigChanged(subId: Int) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { int1 = subId }, { "onCarrierConfigChanged: subId=$int1" }, @@ -199,7 +162,7 @@ constructor( fun logOnDataEnabledChanged(enabled: Boolean, subId: Int) { buffer.log( - SB_LOGGING_TAG, + TAG, LogLevel.INFO, { int1 = subId @@ -209,43 +172,31 @@ constructor( ) } - companion object { - const val SB_LOGGING_TAG = "SbConnectivity" + fun logActionCarrierConfigChanged() { + buffer.log(TAG, LogLevel.INFO, {}, { "Intent received: ACTION_CARRIER_CONFIG_CHANGED" }) + } - /** Log a change in one of the **inputs** to the connectivity pipeline. */ - fun Flow.logInputChange( - logger: MobileInputLogger, - inputParamName: String, - ): Flow { - return this.onEach { logger.logInputChange(inputParamName) } - } + fun logDefaultDataSubRatConfig(config: MobileMappings.Config) { + buffer.log( + TAG, + LogLevel.INFO, + { str1 = config.toString() }, + { "defaultDataSubRatConfig: $str1" } + ) + } - /** - * Log a change in one of the **inputs** to the connectivity pipeline. - * - * @param prettyPrint an optional function to transform the value into a readable string. - * [toString] is used if no custom function is provided. - */ - fun Flow.logInputChange( - logger: MobileInputLogger, - inputParamName: String, - prettyPrint: (T) -> String = { it.toString() } - ): Flow { - return this.onEach { logger.logInputChange(inputParamName, prettyPrint(it)) } - } + fun logDefaultMobileIconMapping(mapping: Map) { + buffer.log( + TAG, + LogLevel.INFO, + { str1 = mapping.toString() }, + { "defaultMobileIconMapping: $str1" } + ) + } - /** - * Log a change in one of the **outputs** to the connectivity pipeline. - * - * @param prettyPrint an optional function to transform the value into a readable string. - * [toString] is used if no custom function is provided. - */ - fun Flow.logOutputChange( - logger: MobileInputLogger, - outputParamName: String, - prettyPrint: (T) -> String = { it.toString() } - ): Flow { - return this.onEach { logger.logOutputChange(outputParamName, prettyPrint(it)) } - } + fun logDefaultMobileIconGroup(group: SignalIcon.MobileIconGroup) { + buffer.log(TAG, LogLevel.INFO, { str1 = group.name }, { "defaultMobileIconGroup: $str1" }) } } + +private const val TAG = "MobileInputLog" diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt index f3c491de6efbd..8cb52af336daa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt @@ -25,7 +25,6 @@ import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.Airpla import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernStatusBarMobileView import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants -import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow @@ -42,7 +41,6 @@ constructor( val subscriptionIdsFlow: StateFlow>, private val interactor: MobileIconsInteractor, private val airplaneModeInteractor: AirplaneModeInteractor, - private val logger: MobileInputLogger, private val constants: ConnectivityConstants, @Application private val scope: CoroutineScope, private val statusBarPipelineFlags: StatusBarPipelineFlags, @@ -83,7 +81,6 @@ constructor( constructor( private val interactor: MobileIconsInteractor, private val airplaneModeInteractor: AirplaneModeInteractor, - private val logger: MobileInputLogger, private val constants: ConnectivityConstants, @Application private val scope: CoroutineScope, private val statusBarPipelineFlags: StatusBarPipelineFlags, @@ -93,7 +90,6 @@ constructor( subscriptionIdsFlow, interactor, airplaneModeInteractor, - logger, constants, scope, statusBarPipelineFlags, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt index a6caf76c03e2a..0fe53294fa7dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityConstants.kt @@ -22,7 +22,6 @@ import com.android.systemui.Dumpable import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager -import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.SB_LOGGING_TAG import java.io.PrintWriter import javax.inject.Inject @@ -40,7 +39,7 @@ constructor( telephonyManager: TelephonyManager, ) : Dumpable { init { - dumpManager.registerNormalDumpable("${SB_LOGGING_TAG}Constants", this) + dumpManager.registerNormalDumpable("ConnectivityConstants", this) } /** True if this device has the capability for data connections and false otherwise. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt index a216db88103d6..5d9ba018822d6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt @@ -27,7 +27,6 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.pipeline.shared.ConnectivityInputLogger -import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.SB_LOGGING_TAG import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlots import com.android.systemui.tuner.TunerService @@ -45,15 +44,15 @@ import kotlinx.coroutines.flow.stateIn * types of connectivity (wifi, mobile, ethernet, etc.) */ interface ConnectivityRepository { - /** - * Observable for the current set of connectivity icons that should be force-hidden. - */ + /** Observable for the current set of connectivity icons that should be force-hidden. */ val forceHiddenSlots: StateFlow> } @OptIn(ExperimentalCoroutinesApi::class) @SysUISingleton -class ConnectivityRepositoryImpl @Inject constructor( +class ConnectivityRepositoryImpl +@Inject +constructor( private val connectivitySlots: ConnectivitySlots, context: Context, dumpManager: DumpManager, @@ -62,42 +61,44 @@ class ConnectivityRepositoryImpl @Inject constructor( tunerService: TunerService, ) : ConnectivityRepository, Dumpable { init { - dumpManager.registerDumpable("${SB_LOGGING_TAG}Repository", this) + dumpManager.registerDumpable("ConnectivityRepository", this) } // The default set of hidden icons to use if we don't get any from [TunerService]. private val defaultHiddenIcons: Set = - context.resources.getStringArray(DEFAULT_HIDDEN_ICONS_RESOURCE) - .asList() - .toSlotSet(connectivitySlots) + context.resources + .getStringArray(DEFAULT_HIDDEN_ICONS_RESOURCE) + .asList() + .toSlotSet(connectivitySlots) - override val forceHiddenSlots: StateFlow> = conflatedCallbackFlow { - val callback = object : TunerService.Tunable { - override fun onTuningChanged(key: String, newHideList: String?) { - if (key != HIDDEN_ICONS_TUNABLE_KEY) { - return - } - logger.logTuningChanged(newHideList) + override val forceHiddenSlots: StateFlow> = + conflatedCallbackFlow { + val callback = + object : TunerService.Tunable { + override fun onTuningChanged(key: String, newHideList: String?) { + if (key != HIDDEN_ICONS_TUNABLE_KEY) { + return + } + logger.logTuningChanged(newHideList) - val outputList = newHideList?.split(",")?.toSlotSet(connectivitySlots) - ?: defaultHiddenIcons - trySend(outputList) + val outputList = + newHideList?.split(",")?.toSlotSet(connectivitySlots) + ?: defaultHiddenIcons + trySend(outputList) + } + } + tunerService.addTunable(callback, HIDDEN_ICONS_TUNABLE_KEY) + + awaitClose { tunerService.removeTunable(callback) } } - } - tunerService.addTunable(callback, HIDDEN_ICONS_TUNABLE_KEY) - - awaitClose { tunerService.removeTunable(callback) } - } - .stateIn( - scope, - started = SharingStarted.WhileSubscribed(), - initialValue = defaultHiddenIcons - ) + .stateIn( + scope, + started = SharingStarted.WhileSubscribed(), + initialValue = defaultHiddenIcons + ) override fun dump(pw: PrintWriter, args: Array) { - pw.apply { - println("defaultHiddenIcons=$defaultHiddenIcons") - } + pw.apply { println("defaultHiddenIcons=$defaultHiddenIcons") } } companion object { @@ -111,8 +112,7 @@ class ConnectivityRepositoryImpl @Inject constructor( private fun List.toSlotSet( connectivitySlots: ConnectivitySlots ): Set { - return this - .filter { it.isNotBlank() } + return this.filter { it.isNotBlank() } .mapNotNull { connectivitySlots.getSlotFromName(it) } .toSet() } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt index 00459e94e9e5c..8bea7728170f3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt @@ -21,7 +21,6 @@ import com.android.systemui.Dumpable import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager -import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.SB_LOGGING_TAG import java.io.PrintWriter import javax.inject.Inject @@ -37,7 +36,7 @@ constructor( dumpManager: DumpManager, ) : Dumpable { init { - dumpManager.registerDumpable("${SB_LOGGING_TAG}WifiConstants", this) + dumpManager.registerNormalDumpable("WifiConstants", this) } /** True if we should always show the wifi icon when wifi is enabled and false otherwise. */ diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt index f8a978300dd37..ee4e496fcf3ae 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt @@ -83,7 +83,6 @@ class MobileIconsInteractorTest : SysuiTestCase() { MobileIconsInteractorImpl( connectionsRepository, carrierConfigTracker, - logger = mock(), tableLogger = mock(), connectivityRepository, userSetupRepository, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLoggerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLoggerTest.kt index 7c2b7a651994c..86529dce948a9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLoggerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/shared/MobileInputLoggerTest.kt @@ -23,24 +23,17 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.log.LogBufferFactory import com.android.systemui.plugins.log.LogcatEchoTracker -import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.logInputChange -import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger.Companion.logOutputChange import com.google.common.truth.Truth.assertThat import java.io.PrintWriter import java.io.StringWriter -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.runBlocking import org.junit.Test import org.mockito.Mockito import org.mockito.Mockito.mock @SmallTest class MobileInputLoggerTest : SysuiTestCase() { - private val buffer = LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java)) - .create("buffer", 10) + private val buffer = + LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java)).create("buffer", 10) private val logger = MobileInputLogger(buffer) @Test @@ -72,70 +65,16 @@ class MobileInputLoggerTest : SysuiTestCase() { assertThat(actualString).contains(expectedNetId) } - @Test - fun logOutputChange_printsValuesAndNulls() = runBlocking(IMMEDIATE) { - val flow: Flow = flowOf(1, null, 3) - - val job = flow - .logOutputChange(logger, "testInts") - .launchIn(this) - - val stringWriter = StringWriter() - buffer.dump(PrintWriter(stringWriter), tailLength = 0) - val actualString = stringWriter.toString() - - assertThat(actualString).contains("1") - assertThat(actualString).contains("null") - assertThat(actualString).contains("3") - - job.cancel() - } - - @Test - fun logInputChange_unit_printsInputName() = runBlocking(IMMEDIATE) { - val flow: Flow = flowOf(Unit, Unit) - - val job = flow - .logInputChange(logger, "testInputs") - .launchIn(this) - - val stringWriter = StringWriter() - buffer.dump(PrintWriter(stringWriter), tailLength = 0) - val actualString = stringWriter.toString() - - assertThat(actualString).contains("testInputs") - - job.cancel() - } - - @Test - fun logInputChange_any_printsValuesAndNulls() = runBlocking(IMMEDIATE) { - val flow: Flow = flowOf(null, 2, "threeString") - - val job = flow - .logInputChange(logger, "testInputs") - .launchIn(this) - - val stringWriter = StringWriter() - buffer.dump(PrintWriter(stringWriter), tailLength = 0) - val actualString = stringWriter.toString() - - assertThat(actualString).contains("null") - assertThat(actualString).contains("2") - assertThat(actualString).contains("threeString") - - job.cancel() - } - companion object { private const val NET_1_ID = 100 - private val NET_1 = com.android.systemui.util.mockito.mock().also { - Mockito.`when`(it.getNetId()).thenReturn(NET_1_ID) - } - private val NET_1_CAPS = NetworkCapabilities.Builder() - .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) - .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) - .build() - private val IMMEDIATE = Dispatchers.Main.immediate + private val NET_1 = + com.android.systemui.util.mockito.mock().also { + Mockito.`when`(it.getNetId()).thenReturn(NET_1_ID) + } + private val NET_1_CAPS = + NetworkCapabilities.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) + .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + .build() } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt index 69bae5dad5ed4..4628f84102450 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt @@ -24,7 +24,6 @@ import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirp import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.FakeMobileIconsInteractor -import com.android.systemui.statusbar.pipeline.mobile.shared.MobileInputLogger import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository @@ -51,7 +50,6 @@ class MobileIconsViewModelTest : SysuiTestCase() { private lateinit var airplaneModeInteractor: AirplaneModeInteractor @Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags - @Mock private lateinit var logger: MobileInputLogger @Mock private lateinit var constants: ConnectivityConstants private val testDispatcher = UnconfinedTestDispatcher() @@ -77,7 +75,6 @@ class MobileIconsViewModelTest : SysuiTestCase() { subscriptionIdsFlow, interactor, airplaneModeInteractor, - logger, constants, testScope.backgroundScope, statusBarPipelineFlags, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt index b0a41ce2d3493..496f090da25cc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt @@ -61,14 +61,15 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() { MockitoAnnotations.initMocks(this) scope = CoroutineScope(IMMEDIATE) - underTest = ConnectivityRepositoryImpl( - connectivitySlots, - context, - dumpManager, - logger, - scope, - tunerService, - ) + underTest = + ConnectivityRepositoryImpl( + connectivitySlots, + context, + dumpManager, + logger, + scope, + tunerService, + ) } @After @@ -77,199 +78,179 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() { } @Test - fun forceHiddenSlots_initiallyGetsDefault() = runBlocking(IMMEDIATE) { - setUpEthernetWifiMobileSlotNames() - context.getOrCreateTestableResources().addOverride( - DEFAULT_HIDDEN_ICONS_RESOURCE, - arrayOf(SLOT_WIFI, SLOT_ETHERNET) - ) - // Re-create our [ConnectivityRepositoryImpl], since it fetches - // config_statusBarIconsToExclude when it's first constructed - underTest = ConnectivityRepositoryImpl( - connectivitySlots, - context, - dumpManager, - logger, - scope, - tunerService, - ) + fun forceHiddenSlots_initiallyGetsDefault() = + runBlocking(IMMEDIATE) { + setUpEthernetWifiMobileSlotNames() + context + .getOrCreateTestableResources() + .addOverride(DEFAULT_HIDDEN_ICONS_RESOURCE, arrayOf(SLOT_WIFI, SLOT_ETHERNET)) + // Re-create our [ConnectivityRepositoryImpl], since it fetches + // config_statusBarIconsToExclude when it's first constructed + underTest = + ConnectivityRepositoryImpl( + connectivitySlots, + context, + dumpManager, + logger, + scope, + tunerService, + ) - var latest: Set? = null - val job = underTest - .forceHiddenSlots - .onEach { latest = it } - .launchIn(this) + var latest: Set? = null + val job = underTest.forceHiddenSlots.onEach { latest = it }.launchIn(this) - assertThat(latest).containsExactly(ConnectivitySlot.ETHERNET, ConnectivitySlot.WIFI) + assertThat(latest).containsExactly(ConnectivitySlot.ETHERNET, ConnectivitySlot.WIFI) - job.cancel() - } + job.cancel() + } @Test - fun forceHiddenSlots_slotNamesAdded_flowHasSlots() = runBlocking(IMMEDIATE) { - setUpEthernetWifiMobileSlotNames() + fun forceHiddenSlots_slotNamesAdded_flowHasSlots() = + runBlocking(IMMEDIATE) { + setUpEthernetWifiMobileSlotNames() - var latest: Set? = null - val job = underTest - .forceHiddenSlots - .onEach { latest = it } - .launchIn(this) + var latest: Set? = null + val job = underTest.forceHiddenSlots.onEach { latest = it }.launchIn(this) - getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, SLOT_MOBILE) + getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, SLOT_MOBILE) - assertThat(latest).containsExactly(ConnectivitySlot.MOBILE) + assertThat(latest).containsExactly(ConnectivitySlot.MOBILE) - job.cancel() - } + job.cancel() + } @Test - fun forceHiddenSlots_wrongKey_doesNotUpdate() = runBlocking(IMMEDIATE) { - setUpEthernetWifiMobileSlotNames() + fun forceHiddenSlots_wrongKey_doesNotUpdate() = + runBlocking(IMMEDIATE) { + setUpEthernetWifiMobileSlotNames() - var latest: Set? = null - val job = underTest - .forceHiddenSlots - .onEach { latest = it } - .launchIn(this) + var latest: Set? = null + val job = underTest.forceHiddenSlots.onEach { latest = it }.launchIn(this) - getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, SLOT_MOBILE) + getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, SLOT_MOBILE) - // WHEN onTuningChanged with the wrong key - getTunable().onTuningChanged("wrongKey", SLOT_WIFI) - yield() + // WHEN onTuningChanged with the wrong key + getTunable().onTuningChanged("wrongKey", SLOT_WIFI) + yield() - // THEN we didn't update our value and still have the old one - assertThat(latest).containsExactly(ConnectivitySlot.MOBILE) + // THEN we didn't update our value and still have the old one + assertThat(latest).containsExactly(ConnectivitySlot.MOBILE) - job.cancel() - } + job.cancel() + } @Test - fun forceHiddenSlots_slotNamesAddedThenNull_flowHasDefault() = runBlocking(IMMEDIATE) { - setUpEthernetWifiMobileSlotNames() - context.getOrCreateTestableResources().addOverride( - DEFAULT_HIDDEN_ICONS_RESOURCE, - arrayOf(SLOT_WIFI, SLOT_ETHERNET) - ) - // Re-create our [ConnectivityRepositoryImpl], since it fetches - // config_statusBarIconsToExclude when it's first constructed - underTest = ConnectivityRepositoryImpl( - connectivitySlots, - context, - dumpManager, - logger, - scope, - tunerService, - ) + fun forceHiddenSlots_slotNamesAddedThenNull_flowHasDefault() = + runBlocking(IMMEDIATE) { + setUpEthernetWifiMobileSlotNames() + context + .getOrCreateTestableResources() + .addOverride(DEFAULT_HIDDEN_ICONS_RESOURCE, arrayOf(SLOT_WIFI, SLOT_ETHERNET)) + // Re-create our [ConnectivityRepositoryImpl], since it fetches + // config_statusBarIconsToExclude when it's first constructed + underTest = + ConnectivityRepositoryImpl( + connectivitySlots, + context, + dumpManager, + logger, + scope, + tunerService, + ) - var latest: Set? = null - val job = underTest - .forceHiddenSlots - .onEach { latest = it } - .launchIn(this) + var latest: Set? = null + val job = underTest.forceHiddenSlots.onEach { latest = it }.launchIn(this) - // First, update the slots - getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, SLOT_MOBILE) - assertThat(latest).containsExactly(ConnectivitySlot.MOBILE) + // First, update the slots + getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, SLOT_MOBILE) + assertThat(latest).containsExactly(ConnectivitySlot.MOBILE) - // WHEN we update to a null value - getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, null) - yield() + // WHEN we update to a null value + getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, null) + yield() - // THEN we go back to our default value - assertThat(latest).containsExactly(ConnectivitySlot.ETHERNET, ConnectivitySlot.WIFI) + // THEN we go back to our default value + assertThat(latest).containsExactly(ConnectivitySlot.ETHERNET, ConnectivitySlot.WIFI) - job.cancel() - } + job.cancel() + } @Test - fun forceHiddenSlots_someInvalidSlotNames_flowHasValidSlotsOnly() = runBlocking(IMMEDIATE) { - var latest: Set? = null - val job = underTest - .forceHiddenSlots - .onEach { latest = it } - .launchIn(this) + fun forceHiddenSlots_someInvalidSlotNames_flowHasValidSlotsOnly() = + runBlocking(IMMEDIATE) { + var latest: Set? = null + val job = underTest.forceHiddenSlots.onEach { latest = it }.launchIn(this) - whenever(connectivitySlots.getSlotFromName(SLOT_WIFI)) - .thenReturn(ConnectivitySlot.WIFI) - whenever(connectivitySlots.getSlotFromName(SLOT_MOBILE)).thenReturn(null) + whenever(connectivitySlots.getSlotFromName(SLOT_WIFI)).thenReturn(ConnectivitySlot.WIFI) + whenever(connectivitySlots.getSlotFromName(SLOT_MOBILE)).thenReturn(null) - getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, "$SLOT_WIFI,$SLOT_MOBILE") + getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, "$SLOT_WIFI,$SLOT_MOBILE") - assertThat(latest).containsExactly(ConnectivitySlot.WIFI) + assertThat(latest).containsExactly(ConnectivitySlot.WIFI) - job.cancel() - } + job.cancel() + } @Test - fun forceHiddenSlots_someEmptySlotNames_flowHasValidSlotsOnly() = runBlocking(IMMEDIATE) { - setUpEthernetWifiMobileSlotNames() + fun forceHiddenSlots_someEmptySlotNames_flowHasValidSlotsOnly() = + runBlocking(IMMEDIATE) { + setUpEthernetWifiMobileSlotNames() - var latest: Set? = null - val job = underTest - .forceHiddenSlots - .onEach { latest = it } - .launchIn(this) + var latest: Set? = null + val job = underTest.forceHiddenSlots.onEach { latest = it }.launchIn(this) - // WHEN there's empty and blank slot names - getTunable().onTuningChanged( - HIDDEN_ICONS_TUNABLE_KEY, "$SLOT_MOBILE, ,,$SLOT_WIFI" - ) + // WHEN there's empty and blank slot names + getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, "$SLOT_MOBILE, ,,$SLOT_WIFI") - // THEN we skip that slot but still process the other ones - assertThat(latest).containsExactly(ConnectivitySlot.WIFI, ConnectivitySlot.MOBILE) + // THEN we skip that slot but still process the other ones + assertThat(latest).containsExactly(ConnectivitySlot.WIFI, ConnectivitySlot.MOBILE) - job.cancel() - } + job.cancel() + } @Test - fun forceHiddenSlots_allInvalidOrEmptySlotNames_flowHasEmpty() = runBlocking(IMMEDIATE) { - var latest: Set? = null - val job = underTest - .forceHiddenSlots - .onEach { latest = it } - .launchIn(this) + fun forceHiddenSlots_allInvalidOrEmptySlotNames_flowHasEmpty() = + runBlocking(IMMEDIATE) { + var latest: Set? = null + val job = underTest.forceHiddenSlots.onEach { latest = it }.launchIn(this) - whenever(connectivitySlots.getSlotFromName(SLOT_WIFI)).thenReturn(null) - whenever(connectivitySlots.getSlotFromName(SLOT_ETHERNET)).thenReturn(null) - whenever(connectivitySlots.getSlotFromName(SLOT_MOBILE)).thenReturn(null) + whenever(connectivitySlots.getSlotFromName(SLOT_WIFI)).thenReturn(null) + whenever(connectivitySlots.getSlotFromName(SLOT_ETHERNET)).thenReturn(null) + whenever(connectivitySlots.getSlotFromName(SLOT_MOBILE)).thenReturn(null) - getTunable().onTuningChanged( - HIDDEN_ICONS_TUNABLE_KEY, "$SLOT_MOBILE,,$SLOT_WIFI,$SLOT_ETHERNET,,," - ) + getTunable() + .onTuningChanged( + HIDDEN_ICONS_TUNABLE_KEY, + "$SLOT_MOBILE,,$SLOT_WIFI,$SLOT_ETHERNET,,," + ) - assertThat(latest).isEmpty() + assertThat(latest).isEmpty() - job.cancel() - } + job.cancel() + } @Test - fun forceHiddenSlots_newSubscriberGetsCurrentValue() = runBlocking(IMMEDIATE) { - setUpEthernetWifiMobileSlotNames() + fun forceHiddenSlots_newSubscriberGetsCurrentValue() = + runBlocking(IMMEDIATE) { + setUpEthernetWifiMobileSlotNames() - var latest1: Set? = null - val job1 = underTest - .forceHiddenSlots - .onEach { latest1 = it } - .launchIn(this) + var latest1: Set? = null + val job1 = underTest.forceHiddenSlots.onEach { latest1 = it }.launchIn(this) - getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, "$SLOT_WIFI,$SLOT_ETHERNET") + getTunable().onTuningChanged(HIDDEN_ICONS_TUNABLE_KEY, "$SLOT_WIFI,$SLOT_ETHERNET") - assertThat(latest1).containsExactly(ConnectivitySlot.WIFI, ConnectivitySlot.ETHERNET) + assertThat(latest1).containsExactly(ConnectivitySlot.WIFI, ConnectivitySlot.ETHERNET) - // WHEN we add a second subscriber after having already emitted a value - var latest2: Set? = null - val job2 = underTest - .forceHiddenSlots - .onEach { latest2 = it } - .launchIn(this) + // WHEN we add a second subscriber after having already emitted a value + var latest2: Set? = null + val job2 = underTest.forceHiddenSlots.onEach { latest2 = it }.launchIn(this) - // THEN the second subscribe receives the already-emitted value - assertThat(latest2).containsExactly(ConnectivitySlot.WIFI, ConnectivitySlot.ETHERNET) + // THEN the second subscribe receives the already-emitted value + assertThat(latest2).containsExactly(ConnectivitySlot.WIFI, ConnectivitySlot.ETHERNET) - job1.cancel() - job2.cancel() - } + job1.cancel() + job2.cancel() + } private fun getTunable(): TunerService.Tunable { val callbackCaptor = argumentCaptor() @@ -280,10 +261,8 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() { private fun setUpEthernetWifiMobileSlotNames() { whenever(connectivitySlots.getSlotFromName(SLOT_ETHERNET)) .thenReturn(ConnectivitySlot.ETHERNET) - whenever(connectivitySlots.getSlotFromName(SLOT_WIFI)) - .thenReturn(ConnectivitySlot.WIFI) - whenever(connectivitySlots.getSlotFromName(SLOT_MOBILE)) - .thenReturn(ConnectivitySlot.MOBILE) + whenever(connectivitySlots.getSlotFromName(SLOT_WIFI)).thenReturn(ConnectivitySlot.WIFI) + whenever(connectivitySlots.getSlotFromName(SLOT_MOBILE)).thenReturn(ConnectivitySlot.MOBILE) } companion object {