Merge "[SB Refactor] Lint all the wifi classes; move network model to shared." into tm-qpr-dev

This commit is contained in:
Caitlin Shkuratov
2023-02-14 19:40:11 +00:00
committed by Android (Google) Code Review
22 changed files with 1222 additions and 1350 deletions

View File

@@ -452,12 +452,6 @@
-packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherFeatureController.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/dagger/StatusBarPipelineModule.kt
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt -packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/model/WifiActivityModel.kt
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/model/WifiNetworkModel.kt
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt
-packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.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/DeviceControlsController.kt
-packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt -packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt
@@ -743,10 +737,6 @@
-packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/panelstate/ShadeExpansionStateManagerTest.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/phone/userswitcher/StatusBarUserSwitcherControllerOldImplTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLoggerTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLoggerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorImplTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryStateNotifierTest.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/ClockTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt

View File

@@ -28,8 +28,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.ResolvedNetwork
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository 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.data.repository.MobileConnectionRepository.Companion.DEFAULT_NUM_LEVELS
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow

View File

@@ -52,8 +52,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConn
import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy 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
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logInputChange import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logInputChange
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository 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 import com.android.systemui.util.kotlin.pairwise
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher

View File

@@ -17,7 +17,7 @@
package com.android.systemui.statusbar.pipeline.wifi.data.repository package com.android.systemui.statusbar.pipeline.wifi.data.repository
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
/** Provides data related to the wifi state. */ /** Provides data related to the wifi state. */

View File

@@ -23,9 +23,9 @@ import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.demomode.DemoMode import com.android.systemui.demomode.DemoMode
import com.android.systemui.demomode.DemoModeController import com.android.systemui.demomode.DemoModeController
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi

View File

@@ -19,9 +19,9 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository.demo
import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel 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.shared.data.model.toWifiDataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.model.FakeWifiEventModel import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.model.FakeWifiEventModel
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job import kotlinx.coroutines.Job

View File

@@ -18,8 +18,8 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository.prod
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.RealWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.RealWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow

View File

@@ -43,9 +43,9 @@ 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.ConnectivityPipelineLogger.Companion.logInputChange
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel 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.shared.data.model.toWifiDataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.RealWifiRepository 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.data.repository.WifiRepository
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import java.util.concurrent.Executor import java.util.concurrent.Executor
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope

View File

@@ -21,8 +21,8 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot 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.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
@@ -58,18 +58,22 @@ interface WifiInteractor {
} }
@SysUISingleton @SysUISingleton
class WifiInteractorImpl @Inject constructor( class WifiInteractorImpl
@Inject
constructor(
connectivityRepository: ConnectivityRepository, connectivityRepository: ConnectivityRepository,
wifiRepository: WifiRepository, wifiRepository: WifiRepository,
) : WifiInteractor { ) : WifiInteractor {
override val ssid: Flow<String?> = wifiRepository.wifiNetwork.map { info -> override val ssid: Flow<String?> =
wifiRepository.wifiNetwork.map { info ->
when (info) { when (info) {
is WifiNetworkModel.Unavailable -> null is WifiNetworkModel.Unavailable -> null
is WifiNetworkModel.Invalid -> null is WifiNetworkModel.Invalid -> null
is WifiNetworkModel.Inactive -> null is WifiNetworkModel.Inactive -> null
is WifiNetworkModel.CarrierMerged -> null is WifiNetworkModel.CarrierMerged -> null
is WifiNetworkModel.Active -> when { is WifiNetworkModel.Active ->
when {
info.isPasspointAccessPoint || info.isOnlineSignUpForPasspointAccessPoint -> info.isPasspointAccessPoint || info.isOnlineSignUpForPasspointAccessPoint ->
info.passpointProviderFriendlyName info.passpointProviderFriendlyName
info.ssid != WifiManager.UNKNOWN_SSID -> info.ssid info.ssid != WifiManager.UNKNOWN_SSID -> info.ssid
@@ -86,7 +90,6 @@ class WifiInteractorImpl @Inject constructor(
override val activity: StateFlow<DataActivityModel> = wifiRepository.wifiActivity override val activity: StateFlow<DataActivityModel> = wifiRepository.wifiActivity
override val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots.map { override val isForceHidden: Flow<Boolean> =
it.contains(ConnectivitySlot.WIFI) connectivityRepository.forceHiddenSlots.map { it.contains(ConnectivitySlot.WIFI) }
}
} }

View File

@@ -14,13 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.systemui.statusbar.pipeline.wifi.data.model package com.android.systemui.statusbar.pipeline.wifi.shared.model
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID import android.telephony.SubscriptionManager
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import com.android.systemui.log.table.TableRowLogger
import com.android.systemui.log.table.Diffable import com.android.systemui.log.table.Diffable
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository.Companion.DEFAULT_NUM_LEVELS import com.android.systemui.log.table.TableRowLogger
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository
/** Provides information about the current wifi network. */ /** Provides information about the current wifi network. */
sealed class WifiNetworkModel : Diffable<WifiNetworkModel> { sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
@@ -57,9 +57,7 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
} }
} }
/** /** A model representing that the wifi information we received was invalid in some way. */
* A model representing that the wifi information we received was invalid in some way.
*/
data class Invalid( data class Invalid(
/** A description of why the wifi information was invalid. */ /** A description of why the wifi information was invalid. */
val invalidReason: String, val invalidReason: String,
@@ -142,21 +140,17 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
*/ */
val subscriptionId: Int, val subscriptionId: Int,
/** /** The signal level, guaranteed to be 0 <= level <= numberOfLevels. */
* The signal level, guaranteed to be 0 <= level <= numberOfLevels.
*/
val level: Int, val level: Int,
/** /** The maximum possible level. */
* The maximum possible level. val numberOfLevels: Int = MobileConnectionRepository.DEFAULT_NUM_LEVELS,
*/
val numberOfLevels: Int = DEFAULT_NUM_LEVELS,
) : WifiNetworkModel() { ) : WifiNetworkModel() {
init { init {
require(level in MIN_VALID_LEVEL..numberOfLevels) { require(level in MIN_VALID_LEVEL..numberOfLevels) {
"0 <= wifi level <= $numberOfLevels required; level was $level" "0 <= wifi level <= $numberOfLevels required; level was $level"
} }
require(subscriptionId != INVALID_SUBSCRIPTION_ID) { require(subscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
"subscription ID cannot be invalid" "subscription ID cannot be invalid"
} }
} }
@@ -208,9 +202,7 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
/** See [android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED]. */ /** See [android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED]. */
val isValidated: Boolean = false, val isValidated: Boolean = false,
/** /** The wifi signal level, guaranteed to be 0 <= level <= 4. */
* The wifi signal level, guaranteed to be 0 <= level <= 4.
*/
val level: Int, val level: Int,
/** See [android.net.wifi.WifiInfo.ssid]. */ /** See [android.net.wifi.WifiInfo.ssid]. */
@@ -255,8 +247,10 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
if (prevVal.isPasspointAccessPoint != isPasspointAccessPoint) { if (prevVal.isPasspointAccessPoint != isPasspointAccessPoint) {
row.logChange(COL_PASSPOINT_ACCESS_POINT, isPasspointAccessPoint) row.logChange(COL_PASSPOINT_ACCESS_POINT, isPasspointAccessPoint)
} }
if (prevVal.isOnlineSignUpForPasspointAccessPoint != if (
isOnlineSignUpForPasspointAccessPoint) { prevVal.isOnlineSignUpForPasspointAccessPoint !=
isOnlineSignUpForPasspointAccessPoint
) {
row.logChange(COL_ONLINE_SIGN_UP, isOnlineSignUpForPasspointAccessPoint) row.logChange(COL_ONLINE_SIGN_UP, isOnlineSignUpForPasspointAccessPoint)
} }
if (prevVal.passpointProviderFriendlyName != passpointProviderFriendlyName) { if (prevVal.passpointProviderFriendlyName != passpointProviderFriendlyName) {
@@ -281,9 +275,11 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
// Only include the passpoint-related values in the string if we have them. (Most // Only include the passpoint-related values in the string if we have them. (Most
// networks won't have them so they'll be mostly clutter.) // networks won't have them so they'll be mostly clutter.)
val passpointString = val passpointString =
if (isPasspointAccessPoint || if (
isPasspointAccessPoint ||
isOnlineSignUpForPasspointAccessPoint || isOnlineSignUpForPasspointAccessPoint ||
passpointProviderFriendlyName != null) { passpointProviderFriendlyName != null
) {
", isPasspointAp=$isPasspointAccessPoint, " + ", isPasspointAp=$isPasspointAccessPoint, " +
"isOnlineSignUpForPasspointAp=$isOnlineSignUpForPasspointAccessPoint, " + "isOnlineSignUpForPasspointAp=$isOnlineSignUpForPasspointAccessPoint, " +
"passpointName=$passpointProviderFriendlyName" "passpointName=$passpointProviderFriendlyName"
@@ -296,14 +292,12 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
} }
companion object { companion object {
@VisibleForTesting @VisibleForTesting internal const val MAX_VALID_LEVEL = 4
internal const val MAX_VALID_LEVEL = 4
} }
} }
companion object { companion object {
@VisibleForTesting @VisibleForTesting internal const val MIN_VALID_LEVEL = 0
internal const val MIN_VALID_LEVEL = 0
} }
} }

View File

@@ -25,8 +25,6 @@ import com.android.systemui.R
import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.statusbar.pipeline.dagger.WifiTableLog
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.logDiffsForTable import com.android.systemui.log.table.logDiffsForTable
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_FULL_ICONS import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_FULL_ICONS
@@ -34,13 +32,15 @@ import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_INTERNET_IC
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_NETWORK import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_NETWORK
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel 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.ConnectivityConstants
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger 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.ConnectivityPipelineLogger.Companion.logOutputChange
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
@@ -55,15 +55,12 @@ import kotlinx.coroutines.flow.stateIn
/** /**
* Models the UI state for the status bar wifi icon. * Models the UI state for the status bar wifi icon.
* *
* This class exposes three view models, one per status bar location: * This class exposes three view models, one per status bar location: [home], [keyguard], and [qs].
* - [home]
* - [keyguard]
* - [qs]
* In order to get the UI state for the wifi icon, you must use one of those view models (whichever * In order to get the UI state for the wifi icon, you must use one of those view models (whichever
* is correct for your location). * is correct for your location).
* *
* Internally, this class maintains the current state of the wifi icon and notifies those three * Internally, this class maintains the current state of the wifi icon and notifies those three view
* view models of any changes. * models of any changes.
*/ */
@SysUISingleton @SysUISingleton
class WifiViewModel class WifiViewModel
@@ -85,7 +82,8 @@ constructor(
is WifiNetworkModel.Unavailable -> WifiIcon.Hidden is WifiNetworkModel.Unavailable -> WifiIcon.Hidden
is WifiNetworkModel.Invalid -> WifiIcon.Hidden is WifiNetworkModel.Invalid -> WifiIcon.Hidden
is WifiNetworkModel.CarrierMerged -> WifiIcon.Hidden is WifiNetworkModel.CarrierMerged -> WifiIcon.Hidden
is WifiNetworkModel.Inactive -> WifiIcon.Visible( is WifiNetworkModel.Inactive ->
WifiIcon.Visible(
res = WIFI_NO_NETWORK, res = WIFI_NO_NETWORK,
ContentDescription.Loaded( ContentDescription.Loaded(
"${context.getString(WIFI_NO_CONNECTION)},${context.getString(NO_INTERNET)}" "${context.getString(WIFI_NO_CONNECTION)},${context.getString(NO_INTERNET)}"

View File

@@ -26,8 +26,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.MobileConnectio
import com.android.systemui.statusbar.pipeline.mobile.data.model.NetworkNameModel import com.android.systemui.statusbar.pipeline.mobile.data.model.NetworkNameModel
import com.android.systemui.statusbar.pipeline.mobile.data.model.ResolvedNetworkType import com.android.systemui.statusbar.pipeline.mobile.data.model.ResolvedNetworkType
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository 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.whenever import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi

View File

@@ -32,8 +32,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.NetworkNameMode
import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.prod.MobileTelephonyHelpers.getTelephonyCallbackForType import com.android.systemui.statusbar.pipeline.mobile.data.repository.prod.MobileTelephonyHelpers.getTelephonyCallbackForType
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository 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 import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.mock

View File

@@ -44,8 +44,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConn
import com.android.systemui.statusbar.pipeline.mobile.data.repository.prod.FullMobileConnectionRepository.Factory.Companion.tableBufferLogName import com.android.systemui.statusbar.pipeline.mobile.data.repository.prod.FullMobileConnectionRepository.Factory.Companion.tableBufferLogName
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository 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 import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.eq

View File

@@ -17,8 +17,8 @@
package com.android.systemui.statusbar.pipeline.wifi.data.repository package com.android.systemui.statusbar.pipeline.wifi.data.repository
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow

View File

@@ -19,7 +19,7 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository.prod
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test

View File

@@ -36,8 +36,8 @@ import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger 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.DataActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.WIFI_NETWORK_DEFAULT import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.WIFI_NETWORK_DEFAULT
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.argumentCaptor
@@ -89,7 +89,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
anyInt(), anyInt(),
nullable(), nullable(),
) )
).thenReturn(flowOf(Unit)) )
.thenReturn(flowOf(Unit))
executor = FakeExecutor(FakeSystemClock()) executor = FakeExecutor(FakeSystemClock())
scope = CoroutineScope(IMMEDIATE) scope = CoroutineScope(IMMEDIATE)
underTest = createRepo() underTest = createRepo()
@@ -101,7 +102,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiEnabled_initiallyGetsWifiManagerValue() = runBlocking(IMMEDIATE) { fun isWifiEnabled_initiallyGetsWifiManagerValue() =
runBlocking(IMMEDIATE) {
whenever(wifiManager.isWifiEnabled).thenReturn(true) whenever(wifiManager.isWifiEnabled).thenReturn(true)
underTest = createRepo() underTest = createRepo()
@@ -110,22 +112,21 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiEnabled_networkCapabilitiesChanged_valueUpdated() = runBlocking(IMMEDIATE) { fun isWifiEnabled_networkCapabilitiesChanged_valueUpdated() =
runBlocking(IMMEDIATE) {
// We need to call launch on the flows so that they start updating // We need to call launch on the flows so that they start updating
val networkJob = underTest.wifiNetwork.launchIn(this) val networkJob = underTest.wifiNetwork.launchIn(this)
val enabledJob = underTest.isWifiEnabled.launchIn(this) val enabledJob = underTest.isWifiEnabled.launchIn(this)
whenever(wifiManager.isWifiEnabled).thenReturn(true) whenever(wifiManager.isWifiEnabled).thenReturn(true)
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO) .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO))
)
assertThat(underTest.isWifiEnabled.value).isTrue() assertThat(underTest.isWifiEnabled.value).isTrue()
whenever(wifiManager.isWifiEnabled).thenReturn(false) whenever(wifiManager.isWifiEnabled).thenReturn(false)
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO) .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO))
)
assertThat(underTest.isWifiEnabled.value).isFalse() assertThat(underTest.isWifiEnabled.value).isFalse()
@@ -134,7 +135,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiEnabled_networkLost_valueUpdated() = runBlocking(IMMEDIATE) { fun isWifiEnabled_networkLost_valueUpdated() =
runBlocking(IMMEDIATE) {
// We need to call launch on the flows so that they start updating // We need to call launch on the flows so that they start updating
val networkJob = underTest.wifiNetwork.launchIn(this) val networkJob = underTest.wifiNetwork.launchIn(this)
val enabledJob = underTest.isWifiEnabled.launchIn(this) val enabledJob = underTest.isWifiEnabled.launchIn(this)
@@ -154,7 +156,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiEnabled_intentsReceived_valueUpdated() = runBlocking(IMMEDIATE) { fun isWifiEnabled_intentsReceived_valueUpdated() =
runBlocking(IMMEDIATE) {
val intentFlow = MutableSharedFlow<Unit>() val intentFlow = MutableSharedFlow<Unit>()
whenever( whenever(
broadcastDispatcher.broadcastFlow( broadcastDispatcher.broadcastFlow(
@@ -163,7 +166,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
anyInt(), anyInt(),
nullable(), nullable(),
) )
).thenReturn(intentFlow) )
.thenReturn(intentFlow)
underTest = createRepo() underTest = createRepo()
val job = underTest.isWifiEnabled.launchIn(this) val job = underTest.isWifiEnabled.launchIn(this)
@@ -182,7 +186,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiEnabled_bothIntentAndNetworkUpdates_valueAlwaysUpdated() = runBlocking(IMMEDIATE) { fun isWifiEnabled_bothIntentAndNetworkUpdates_valueAlwaysUpdated() =
runBlocking(IMMEDIATE) {
val intentFlow = MutableSharedFlow<Unit>() val intentFlow = MutableSharedFlow<Unit>()
whenever( whenever(
broadcastDispatcher.broadcastFlow( broadcastDispatcher.broadcastFlow(
@@ -191,7 +196,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
anyInt(), anyInt(),
nullable(), nullable(),
) )
).thenReturn(intentFlow) )
.thenReturn(intentFlow)
underTest = createRepo() underTest = createRepo()
val networkJob = underTest.wifiNetwork.launchIn(this) val networkJob = underTest.wifiNetwork.launchIn(this)
@@ -206,9 +212,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
assertThat(underTest.isWifiEnabled.value).isTrue() assertThat(underTest.isWifiEnabled.value).isTrue()
whenever(wifiManager.isWifiEnabled).thenReturn(false) whenever(wifiManager.isWifiEnabled).thenReturn(false)
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO) .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO))
)
assertThat(underTest.isWifiEnabled.value).isFalse() assertThat(underTest.isWifiEnabled.value).isFalse()
whenever(wifiManager.isWifiEnabled).thenReturn(true) whenever(wifiManager.isWifiEnabled).thenReturn(true)
@@ -220,7 +225,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiDefault_initiallyGetsDefault() = runBlocking(IMMEDIATE) { fun isWifiDefault_initiallyGetsDefault() =
runBlocking(IMMEDIATE) {
val job = underTest.isWifiDefault.launchIn(this) val job = underTest.isWifiDefault.launchIn(this)
assertThat(underTest.isWifiDefault.value).isFalse() assertThat(underTest.isWifiDefault.value).isFalse()
@@ -229,17 +235,14 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiDefault_wifiNetwork_isTrue() = runBlocking(IMMEDIATE) { fun isWifiDefault_wifiNetwork_isTrue() =
runBlocking(IMMEDIATE) {
val job = underTest.isWifiDefault.launchIn(this) val job = underTest.isWifiDefault.launchIn(this)
val wifiInfo = mock<WifiInfo>().apply { val wifiInfo = mock<WifiInfo>().apply { whenever(this.ssid).thenReturn(SSID) }
whenever(this.ssid).thenReturn(SSID)
}
getDefaultNetworkCallback().onCapabilitiesChanged( getDefaultNetworkCallback()
NETWORK, .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
createWifiNetworkCapabilities(wifiInfo)
)
assertThat(underTest.isWifiDefault.value).isTrue() assertThat(underTest.isWifiDefault.value).isTrue()
@@ -252,11 +255,13 @@ class WifiRepositoryImplTest : SysuiTestCase() {
runBlocking(IMMEDIATE) { runBlocking(IMMEDIATE) {
val job = underTest.isWifiDefault.launchIn(this) val job = underTest.isWifiDefault.launchIn(this)
val transportInfo = VpnTransportInfo( val transportInfo =
VpnTransportInfo(
/* type= */ 0, /* type= */ 0,
/* sessionId= */ "sessionId", /* sessionId= */ "sessionId",
) )
val networkCapabilities = mock<NetworkCapabilities>().also { val networkCapabilities =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_VPN)).thenReturn(true) whenever(it.hasTransport(TRANSPORT_VPN)).thenReturn(true)
whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(false) whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(false)
whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(false) whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(false)
@@ -276,11 +281,13 @@ class WifiRepositoryImplTest : SysuiTestCase() {
runBlocking(IMMEDIATE) { runBlocking(IMMEDIATE) {
val job = underTest.isWifiDefault.launchIn(this) val job = underTest.isWifiDefault.launchIn(this)
val transportInfo = VpnTransportInfo( val transportInfo =
VpnTransportInfo(
/* type= */ 0, /* type= */ 0,
/* sessionId= */ "sessionId", /* sessionId= */ "sessionId",
) )
val networkCapabilities = mock<NetworkCapabilities>().also { val networkCapabilities =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_VPN)).thenReturn(true) whenever(it.hasTransport(TRANSPORT_VPN)).thenReturn(true)
whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true) whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(false) whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(false)
@@ -295,10 +302,12 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiDefault_cellularVcnNetwork_isTrue() = runBlocking(IMMEDIATE) { fun isWifiDefault_cellularVcnNetwork_isTrue() =
runBlocking(IMMEDIATE) {
val job = underTest.isWifiDefault.launchIn(this) val job = underTest.isWifiDefault.launchIn(this)
val capabilities = mock<NetworkCapabilities>().apply { val capabilities =
mock<NetworkCapabilities>().apply {
whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(this.transportInfo).thenReturn(VcnTransportInfo(PRIMARY_WIFI_INFO)) whenever(this.transportInfo).thenReturn(VcnTransportInfo(PRIMARY_WIFI_INFO))
} }
@@ -315,7 +324,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
runBlocking(IMMEDIATE) { runBlocking(IMMEDIATE) {
val job = underTest.isWifiDefault.launchIn(this) val job = underTest.isWifiDefault.launchIn(this)
val capabilities = mock<NetworkCapabilities>().apply { val capabilities =
mock<NetworkCapabilities>().apply {
whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(this.hasTransport(TRANSPORT_WIFI)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
whenever(this.transportInfo).thenReturn(VcnTransportInfo(PRIMARY_WIFI_INFO)) whenever(this.transportInfo).thenReturn(VcnTransportInfo(PRIMARY_WIFI_INFO))
@@ -329,10 +339,12 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiDefault_cellularNotVcnNetwork_isFalse() = runBlocking(IMMEDIATE) { fun isWifiDefault_cellularNotVcnNetwork_isFalse() =
runBlocking(IMMEDIATE) {
val job = underTest.isWifiDefault.launchIn(this) val job = underTest.isWifiDefault.launchIn(this)
val capabilities = mock<NetworkCapabilities>().apply { val capabilities =
mock<NetworkCapabilities>().apply {
whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(this.transportInfo).thenReturn(mock()) whenever(this.transportInfo).thenReturn(mock())
} }
@@ -345,7 +357,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun isWifiDefault_wifiNetworkLost_isFalse() = runBlocking(IMMEDIATE) { fun isWifiDefault_wifiNetworkLost_isFalse() =
runBlocking(IMMEDIATE) {
val job = underTest.isWifiDefault.launchIn(this) val job = underTest.isWifiDefault.launchIn(this)
// First, add a network // First, add a network
@@ -363,12 +376,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_initiallyGetsDefault() = runBlocking(IMMEDIATE) { fun wifiNetwork_initiallyGetsDefault() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isEqualTo(WIFI_NETWORK_DEFAULT) assertThat(latest).isEqualTo(WIFI_NETWORK_DEFAULT)
@@ -376,22 +387,20 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_primaryWifiNetworkAdded_flowHasNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_primaryWifiNetworkAdded_flowHasNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val wifiInfo = mock<WifiInfo>().apply { val wifiInfo =
mock<WifiInfo>().apply {
whenever(this.ssid).thenReturn(SSID) whenever(this.ssid).thenReturn(SSID)
whenever(this.isPrimary).thenReturn(true) whenever(this.isPrimary).thenReturn(true)
} }
val network = mock<Network>().apply { val network = mock<Network>().apply { whenever(this.getNetId()).thenReturn(NETWORK_ID) }
whenever(this.getNetId()).thenReturn(NETWORK_ID)
}
getNetworkCallback().onCapabilitiesChanged(network, createWifiNetworkCapabilities(wifiInfo)) getNetworkCallback()
.onCapabilitiesChanged(network, createWifiNetworkCapabilities(wifiInfo))
assertThat(latest is WifiNetworkModel.Active).isTrue() assertThat(latest is WifiNetworkModel.Active).isTrue()
val latestActive = latest as WifiNetworkModel.Active val latestActive = latest as WifiNetworkModel.Active
@@ -402,19 +411,19 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_isCarrierMerged_flowHasCarrierMerged() = runBlocking(IMMEDIATE) { fun wifiNetwork_isCarrierMerged_flowHasCarrierMerged() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val wifiInfo = mock<WifiInfo>().apply { val wifiInfo =
mock<WifiInfo>().apply {
whenever(this.isPrimary).thenReturn(true) whenever(this.isPrimary).thenReturn(true)
whenever(this.isCarrierMerged).thenReturn(true) whenever(this.isCarrierMerged).thenReturn(true)
} }
getNetworkCallback().onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo)) getNetworkCallback()
.onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
assertThat(latest is WifiNetworkModel.CarrierMerged).isTrue() assertThat(latest is WifiNetworkModel.CarrierMerged).isTrue()
@@ -425,18 +434,17 @@ class WifiRepositoryImplTest : SysuiTestCase() {
fun wifiNetwork_carrierMergedButInvalidSubId_flowHasInvalid() = fun wifiNetwork_carrierMergedButInvalidSubId_flowHasInvalid() =
runBlocking(IMMEDIATE) { runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val wifiInfo = mock<WifiInfo>().apply { val wifiInfo =
mock<WifiInfo>().apply {
whenever(this.isPrimary).thenReturn(true) whenever(this.isPrimary).thenReturn(true)
whenever(this.isCarrierMerged).thenReturn(true) whenever(this.isCarrierMerged).thenReturn(true)
whenever(this.subscriptionId).thenReturn(INVALID_SUBSCRIPTION_ID) whenever(this.subscriptionId).thenReturn(INVALID_SUBSCRIPTION_ID)
} }
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
.onCapabilitiesChanged(
NETWORK, NETWORK,
createWifiNetworkCapabilities(wifiInfo), createWifiNetworkCapabilities(wifiInfo),
) )
@@ -450,13 +458,11 @@ class WifiRepositoryImplTest : SysuiTestCase() {
fun wifiNetwork_isCarrierMerged_getsCorrectValues() = fun wifiNetwork_isCarrierMerged_getsCorrectValues() =
runBlocking(IMMEDIATE) { runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val rssi = -57 val rssi = -57
val wifiInfo = mock<WifiInfo>().apply { val wifiInfo =
mock<WifiInfo>().apply {
whenever(this.isPrimary).thenReturn(true) whenever(this.isPrimary).thenReturn(true)
whenever(this.isCarrierMerged).thenReturn(true) whenever(this.isCarrierMerged).thenReturn(true)
whenever(this.rssi).thenReturn(rssi) whenever(this.rssi).thenReturn(rssi)
@@ -466,7 +472,8 @@ class WifiRepositoryImplTest : SysuiTestCase() {
whenever(wifiManager.calculateSignalLevel(rssi)).thenReturn(2) whenever(wifiManager.calculateSignalLevel(rssi)).thenReturn(2)
whenever(wifiManager.maxSignalLevel).thenReturn(5) whenever(wifiManager.maxSignalLevel).thenReturn(5)
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
.onCapabilitiesChanged(
NETWORK, NETWORK,
createWifiNetworkCapabilities(wifiInfo), createWifiNetworkCapabilities(wifiInfo),
) )
@@ -483,15 +490,15 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_notValidated_networkNotValidated() = runBlocking(IMMEDIATE) { fun wifiNetwork_notValidated_networkNotValidated() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO, isValidated = false) .onCapabilitiesChanged(
NETWORK,
createWifiNetworkCapabilities(PRIMARY_WIFI_INFO, isValidated = false)
) )
assertThat((latest as WifiNetworkModel.Active).isValidated).isFalse() assertThat((latest as WifiNetworkModel.Active).isValidated).isFalse()
@@ -500,15 +507,15 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_validated_networkValidated() = runBlocking(IMMEDIATE) { fun wifiNetwork_validated_networkValidated() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO, isValidated = true) .onCapabilitiesChanged(
NETWORK,
createWifiNetworkCapabilities(PRIMARY_WIFI_INFO, isValidated = true)
) )
assertThat((latest as WifiNetworkModel.Active).isValidated).isTrue() assertThat((latest as WifiNetworkModel.Active).isValidated).isTrue()
@@ -517,19 +524,19 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_nonPrimaryWifiNetworkAdded_flowHasNoNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_nonPrimaryWifiNetworkAdded_flowHasNoNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val wifiInfo = mock<WifiInfo>().apply { val wifiInfo =
mock<WifiInfo>().apply {
whenever(this.ssid).thenReturn(SSID) whenever(this.ssid).thenReturn(SSID)
whenever(this.isPrimary).thenReturn(false) whenever(this.isPrimary).thenReturn(false)
} }
getNetworkCallback().onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo)) getNetworkCallback()
.onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
assertThat(latest is WifiNetworkModel.Inactive).isTrue() assertThat(latest is WifiNetworkModel.Inactive).isTrue()
@@ -541,12 +548,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
fun wifiNetwork_transportInfoIsNotWifi_flowHasNoNetwork() = fun wifiNetwork_transportInfoIsNotWifi_flowHasNoNetwork() =
runBlocking(IMMEDIATE) { runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val transportInfo = VpnTransportInfo( val transportInfo =
VpnTransportInfo(
/* type= */ 0, /* type= */ 0,
/* sessionId= */ "sessionId", /* sessionId= */ "sessionId",
) )
@@ -559,14 +564,13 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_cellularVcnNetworkAdded_flowHasNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_cellularVcnNetworkAdded_flowHasNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val capabilities = mock<NetworkCapabilities>().apply { val capabilities =
mock<NetworkCapabilities>().apply {
whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(this.transportInfo).thenReturn(VcnTransportInfo(PRIMARY_WIFI_INFO)) whenever(this.transportInfo).thenReturn(VcnTransportInfo(PRIMARY_WIFI_INFO))
} }
@@ -582,18 +586,18 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_nonPrimaryCellularVcnNetworkAdded_flowHasNoNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_nonPrimaryCellularVcnNetworkAdded_flowHasNoNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val wifiInfo = mock<WifiInfo>().apply { val wifiInfo =
mock<WifiInfo>().apply {
whenever(this.ssid).thenReturn(SSID) whenever(this.ssid).thenReturn(SSID)
whenever(this.isPrimary).thenReturn(false) whenever(this.isPrimary).thenReturn(false)
} }
val capabilities = mock<NetworkCapabilities>().apply { val capabilities =
mock<NetworkCapabilities>().apply {
whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(this.transportInfo).thenReturn(VcnTransportInfo(wifiInfo)) whenever(this.transportInfo).thenReturn(VcnTransportInfo(wifiInfo))
} }
@@ -606,14 +610,13 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_cellularNotVcnNetworkAdded_flowHasNoNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_cellularNotVcnNetworkAdded_flowHasNoNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val capabilities = mock<NetworkCapabilities>().apply { val capabilities =
mock<NetworkCapabilities>().apply {
whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(this.transportInfo).thenReturn(mock()) whenever(this.transportInfo).thenReturn(mock())
} }
@@ -629,12 +632,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
fun wifiNetwork_cellularAndWifiTransports_usesCellular() = fun wifiNetwork_cellularAndWifiTransports_usesCellular() =
runBlocking(IMMEDIATE) { runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val capabilities = mock<NetworkCapabilities>().apply { val capabilities =
mock<NetworkCapabilities>().apply {
whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(this.hasTransport(TRANSPORT_WIFI)).thenReturn(true) whenever(this.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
whenever(this.transportInfo).thenReturn(VcnTransportInfo(PRIMARY_WIFI_INFO)) whenever(this.transportInfo).thenReturn(VcnTransportInfo(PRIMARY_WIFI_INFO))
@@ -651,12 +652,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_newPrimaryWifiNetwork_flowHasNewNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_newPrimaryWifiNetwork_flowHasNewNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
// Start with the original network // Start with the original network
getNetworkCallback() getNetworkCallback()
@@ -664,18 +663,17 @@ class WifiRepositoryImplTest : SysuiTestCase() {
// WHEN we update to a new primary network // WHEN we update to a new primary network
val newNetworkId = 456 val newNetworkId = 456
val newNetwork = mock<Network>().apply { val newNetwork =
whenever(this.getNetId()).thenReturn(newNetworkId) mock<Network>().apply { whenever(this.getNetId()).thenReturn(newNetworkId) }
}
val newSsid = "CD" val newSsid = "CD"
val newWifiInfo = mock<WifiInfo>().apply { val newWifiInfo =
mock<WifiInfo>().apply {
whenever(this.ssid).thenReturn(newSsid) whenever(this.ssid).thenReturn(newSsid)
whenever(this.isPrimary).thenReturn(true) whenever(this.isPrimary).thenReturn(true)
} }
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
newNetwork, createWifiNetworkCapabilities(newWifiInfo) .onCapabilitiesChanged(newNetwork, createWifiNetworkCapabilities(newWifiInfo))
)
// THEN we use the new network // THEN we use the new network
assertThat(latest is WifiNetworkModel.Active).isTrue() assertThat(latest is WifiNetworkModel.Active).isTrue()
@@ -687,12 +685,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_newNonPrimaryWifiNetwork_flowHasOldNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_newNonPrimaryWifiNetwork_flowHasOldNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
// Start with the original network // Start with the original network
getNetworkCallback() getNetworkCallback()
@@ -700,18 +696,17 @@ class WifiRepositoryImplTest : SysuiTestCase() {
// WHEN we notify of a new but non-primary network // WHEN we notify of a new but non-primary network
val newNetworkId = 456 val newNetworkId = 456
val newNetwork = mock<Network>().apply { val newNetwork =
whenever(this.getNetId()).thenReturn(newNetworkId) mock<Network>().apply { whenever(this.getNetId()).thenReturn(newNetworkId) }
}
val newSsid = "EF" val newSsid = "EF"
val newWifiInfo = mock<WifiInfo>().apply { val newWifiInfo =
mock<WifiInfo>().apply {
whenever(this.ssid).thenReturn(newSsid) whenever(this.ssid).thenReturn(newSsid)
whenever(this.isPrimary).thenReturn(false) whenever(this.isPrimary).thenReturn(false)
} }
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
newNetwork, createWifiNetworkCapabilities(newWifiInfo) .onCapabilitiesChanged(newNetwork, createWifiNetworkCapabilities(newWifiInfo))
)
// THEN we still use the original network // THEN we still use the original network
assertThat(latest is WifiNetworkModel.Active).isTrue() assertThat(latest is WifiNetworkModel.Active).isTrue()
@@ -723,32 +718,36 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_newNetworkCapabilities_flowHasNewData() = runBlocking(IMMEDIATE) { fun wifiNetwork_newNetworkCapabilities_flowHasNewData() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
val wifiInfo = mock<WifiInfo>().apply { val wifiInfo =
mock<WifiInfo>().apply {
whenever(this.ssid).thenReturn(SSID) whenever(this.ssid).thenReturn(SSID)
whenever(this.isPrimary).thenReturn(true) whenever(this.isPrimary).thenReturn(true)
} }
// Start with the original network // Start with the original network
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
NETWORK, createWifiNetworkCapabilities(wifiInfo, isValidated = true) .onCapabilitiesChanged(
NETWORK,
createWifiNetworkCapabilities(wifiInfo, isValidated = true)
) )
// WHEN we keep the same network ID but change the SSID // WHEN we keep the same network ID but change the SSID
val newSsid = "CD" val newSsid = "CD"
val newWifiInfo = mock<WifiInfo>().apply { val newWifiInfo =
mock<WifiInfo>().apply {
whenever(this.ssid).thenReturn(newSsid) whenever(this.ssid).thenReturn(newSsid)
whenever(this.isPrimary).thenReturn(true) whenever(this.isPrimary).thenReturn(true)
} }
getNetworkCallback().onCapabilitiesChanged( getNetworkCallback()
NETWORK, createWifiNetworkCapabilities(newWifiInfo, isValidated = false) .onCapabilitiesChanged(
NETWORK,
createWifiNetworkCapabilities(newWifiInfo, isValidated = false)
) )
// THEN we've updated to the new SSID // THEN we've updated to the new SSID
@@ -762,12 +761,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_noCurrentNetwork_networkLost_flowHasNoNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_noCurrentNetwork_networkLost_flowHasNoNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
// WHEN we receive #onLost without any #onCapabilitiesChanged beforehand // WHEN we receive #onLost without any #onCapabilitiesChanged beforehand
getNetworkCallback().onLost(NETWORK) getNetworkCallback().onLost(NETWORK)
@@ -779,12 +776,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_currentNetworkLost_flowHasNoNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_currentNetworkLost_flowHasNoNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
getNetworkCallback() getNetworkCallback()
.onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO)) .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO))
@@ -800,21 +795,17 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_unknownNetworkLost_flowHasPreviousNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_unknownNetworkLost_flowHasPreviousNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
getNetworkCallback() getNetworkCallback()
.onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO)) .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO))
assertThat((latest as WifiNetworkModel.Active).networkId).isEqualTo(NETWORK_ID) assertThat((latest as WifiNetworkModel.Active).networkId).isEqualTo(NETWORK_ID)
// WHEN we lose an unknown network // WHEN we lose an unknown network
val unknownNetwork = mock<Network>().apply { val unknownNetwork = mock<Network>().apply { whenever(this.getNetId()).thenReturn(543) }
whenever(this.getNetId()).thenReturn(543)
}
getNetworkCallback().onLost(unknownNetwork) getNetworkCallback().onLost(unknownNetwork)
// THEN we still have our previous network // THEN we still have our previous network
@@ -827,12 +818,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_notCurrentNetworkLost_flowHasCurrentNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_notCurrentNetworkLost_flowHasCurrentNetwork() =
runBlocking(IMMEDIATE) {
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
getNetworkCallback() getNetworkCallback()
.onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO)) .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO))
@@ -840,12 +829,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
// WHEN we update to a new network... // WHEN we update to a new network...
val newNetworkId = 89 val newNetworkId = 89
val newNetwork = mock<Network>().apply { val newNetwork =
whenever(this.getNetId()).thenReturn(newNetworkId) mock<Network>().apply { whenever(this.getNetId()).thenReturn(newNetworkId) }
} getNetworkCallback()
getNetworkCallback().onCapabilitiesChanged( .onCapabilitiesChanged(newNetwork, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO))
newNetwork, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO)
)
// ...and lose the old network // ...and lose the old network
getNetworkCallback().onLost(NETWORK) getNetworkCallback().onLost(NETWORK)
@@ -857,12 +844,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
/** Regression test for b/244173280. */ /** Regression test for b/244173280. */
@Test @Test
fun wifiNetwork_multipleSubscribers_newSubscribersGetCurrentValue() = runBlocking(IMMEDIATE) { fun wifiNetwork_multipleSubscribers_newSubscribersGetCurrentValue() =
runBlocking(IMMEDIATE) {
var latest1: WifiNetworkModel? = null var latest1: WifiNetworkModel? = null
val job1 = underTest val job1 = underTest.wifiNetwork.onEach { latest1 = it }.launchIn(this)
.wifiNetwork
.onEach { latest1 = it }
.launchIn(this)
getNetworkCallback() getNetworkCallback()
.onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO)) .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(PRIMARY_WIFI_INFO))
@@ -874,10 +859,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
// WHEN we add a second subscriber after having already emitted a value // WHEN we add a second subscriber after having already emitted a value
var latest2: WifiNetworkModel? = null var latest2: WifiNetworkModel? = null
val job2 = underTest val job2 = underTest.wifiNetwork.onEach { latest2 = it }.launchIn(this)
.wifiNetwork
.onEach { latest2 = it }
.launchIn(this)
// THEN the second subscribe receives the already-emitted value // THEN the second subscribe receives the already-emitted value
assertThat(latest2 is WifiNetworkModel.Active).isTrue() assertThat(latest2 is WifiNetworkModel.Active).isTrue()
@@ -890,67 +872,57 @@ class WifiRepositoryImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiActivity_callbackGivesNone_activityFlowHasNone() = runBlocking(IMMEDIATE) { fun wifiActivity_callbackGivesNone_activityFlowHasNone() =
runBlocking(IMMEDIATE) {
var latest: DataActivityModel? = null var latest: DataActivityModel? = null
val job = underTest val job = underTest.wifiActivity.onEach { latest = it }.launchIn(this)
.wifiActivity
.onEach { latest = it }
.launchIn(this)
getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_NONE) getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_NONE)
assertThat(latest).isEqualTo( assertThat(latest)
DataActivityModel(hasActivityIn = false, hasActivityOut = false) .isEqualTo(DataActivityModel(hasActivityIn = false, hasActivityOut = false))
)
job.cancel() job.cancel()
} }
@Test @Test
fun wifiActivity_callbackGivesIn_activityFlowHasIn() = runBlocking(IMMEDIATE) { fun wifiActivity_callbackGivesIn_activityFlowHasIn() =
runBlocking(IMMEDIATE) {
var latest: DataActivityModel? = null var latest: DataActivityModel? = null
val job = underTest val job = underTest.wifiActivity.onEach { latest = it }.launchIn(this)
.wifiActivity
.onEach { latest = it }
.launchIn(this)
getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_IN) getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_IN)
assertThat(latest).isEqualTo( assertThat(latest)
DataActivityModel(hasActivityIn = true, hasActivityOut = false) .isEqualTo(DataActivityModel(hasActivityIn = true, hasActivityOut = false))
)
job.cancel() job.cancel()
} }
@Test @Test
fun wifiActivity_callbackGivesOut_activityFlowHasOut() = runBlocking(IMMEDIATE) { fun wifiActivity_callbackGivesOut_activityFlowHasOut() =
runBlocking(IMMEDIATE) {
var latest: DataActivityModel? = null var latest: DataActivityModel? = null
val job = underTest val job = underTest.wifiActivity.onEach { latest = it }.launchIn(this)
.wifiActivity
.onEach { latest = it }
.launchIn(this)
getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_OUT) getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_OUT)
assertThat(latest).isEqualTo( assertThat(latest)
DataActivityModel(hasActivityIn = false, hasActivityOut = true) .isEqualTo(DataActivityModel(hasActivityIn = false, hasActivityOut = true))
)
job.cancel() job.cancel()
} }
@Test @Test
fun wifiActivity_callbackGivesInout_activityFlowHasInAndOut() = runBlocking(IMMEDIATE) { fun wifiActivity_callbackGivesInout_activityFlowHasInAndOut() =
runBlocking(IMMEDIATE) {
var latest: DataActivityModel? = null var latest: DataActivityModel? = null
val job = underTest val job = underTest.wifiActivity.onEach { latest = it }.launchIn(this)
.wifiActivity
.onEach { latest = it }
.launchIn(this)
getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_INOUT) getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_INOUT)
assertThat(latest).isEqualTo(DataActivityModel(hasActivityIn = true, hasActivityOut = true)) assertThat(latest)
.isEqualTo(DataActivityModel(hasActivityIn = true, hasActivityOut = true))
job.cancel() job.cancel()
} }
@@ -998,11 +970,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
private companion object { private companion object {
const val NETWORK_ID = 45 const val NETWORK_ID = 45
val NETWORK = mock<Network>().apply { val NETWORK = mock<Network>().apply { whenever(this.getNetId()).thenReturn(NETWORK_ID) }
whenever(this.getNetId()).thenReturn(NETWORK_ID)
}
const val SSID = "AB" const val SSID = "AB"
val PRIMARY_WIFI_INFO: WifiInfo = mock<WifiInfo>().apply { val PRIMARY_WIFI_INFO: WifiInfo =
mock<WifiInfo>().apply {
whenever(this.ssid).thenReturn(SSID) whenever(this.ssid).thenReturn(SSID)
whenever(this.isPrimary).thenReturn(true) whenever(this.isPrimary).thenReturn(true)
} }

View File

@@ -22,8 +22,8 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot 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.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -57,10 +57,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(WifiNetworkModel.Unavailable) wifiRepository.setWifiNetwork(WifiNetworkModel.Unavailable)
var latest: String? = "default" var latest: String? = "default"
val job = underTest val job = underTest.ssid.onEach { latest = it }.launchIn(this)
.ssid
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isNull() assertThat(latest).isNull()
@@ -68,14 +65,12 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun ssid_inactiveNetwork_outputsNull() = runBlocking(IMMEDIATE) { fun ssid_inactiveNetwork_outputsNull() =
runBlocking(IMMEDIATE) {
wifiRepository.setWifiNetwork(WifiNetworkModel.Inactive) wifiRepository.setWifiNetwork(WifiNetworkModel.Inactive)
var latest: String? = "default" var latest: String? = "default"
val job = underTest val job = underTest.ssid.onEach { latest = it }.launchIn(this)
.ssid
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isNull() assertThat(latest).isNull()
@@ -83,16 +78,14 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun ssid_carrierMergedNetwork_outputsNull() = runBlocking(IMMEDIATE) { fun ssid_carrierMergedNetwork_outputsNull() =
runBlocking(IMMEDIATE) {
wifiRepository.setWifiNetwork( wifiRepository.setWifiNetwork(
WifiNetworkModel.CarrierMerged(networkId = 1, subscriptionId = 2, level = 1) WifiNetworkModel.CarrierMerged(networkId = 1, subscriptionId = 2, level = 1)
) )
var latest: String? = "default" var latest: String? = "default"
val job = underTest val job = underTest.ssid.onEach { latest = it }.launchIn(this)
.ssid
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isNull() assertThat(latest).isNull()
@@ -100,19 +93,19 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun ssid_isPasspointAccessPoint_outputsPasspointName() = runBlocking(IMMEDIATE) { fun ssid_isPasspointAccessPoint_outputsPasspointName() =
wifiRepository.setWifiNetwork(WifiNetworkModel.Active( runBlocking(IMMEDIATE) {
wifiRepository.setWifiNetwork(
WifiNetworkModel.Active(
networkId = 1, networkId = 1,
level = 1, level = 1,
isPasspointAccessPoint = true, isPasspointAccessPoint = true,
passpointProviderFriendlyName = "friendly", passpointProviderFriendlyName = "friendly",
)) )
)
var latest: String? = null var latest: String? = null
val job = underTest val job = underTest.ssid.onEach { latest = it }.launchIn(this)
.ssid
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isEqualTo("friendly") assertThat(latest).isEqualTo("friendly")
@@ -120,19 +113,19 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun ssid_isOnlineSignUpForPasspoint_outputsPasspointName() = runBlocking(IMMEDIATE) { fun ssid_isOnlineSignUpForPasspoint_outputsPasspointName() =
wifiRepository.setWifiNetwork(WifiNetworkModel.Active( runBlocking(IMMEDIATE) {
wifiRepository.setWifiNetwork(
WifiNetworkModel.Active(
networkId = 1, networkId = 1,
level = 1, level = 1,
isOnlineSignUpForPasspointAccessPoint = true, isOnlineSignUpForPasspointAccessPoint = true,
passpointProviderFriendlyName = "friendly", passpointProviderFriendlyName = "friendly",
)) )
)
var latest: String? = null var latest: String? = null
val job = underTest val job = underTest.ssid.onEach { latest = it }.launchIn(this)
.ssid
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isEqualTo("friendly") assertThat(latest).isEqualTo("friendly")
@@ -140,18 +133,18 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun ssid_unknownSsid_outputsNull() = runBlocking(IMMEDIATE) { fun ssid_unknownSsid_outputsNull() =
wifiRepository.setWifiNetwork(WifiNetworkModel.Active( runBlocking(IMMEDIATE) {
wifiRepository.setWifiNetwork(
WifiNetworkModel.Active(
networkId = 1, networkId = 1,
level = 1, level = 1,
ssid = WifiManager.UNKNOWN_SSID, ssid = WifiManager.UNKNOWN_SSID,
)) )
)
var latest: String? = "default" var latest: String? = "default"
val job = underTest val job = underTest.ssid.onEach { latest = it }.launchIn(this)
.ssid
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isNull() assertThat(latest).isNull()
@@ -159,18 +152,18 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun ssid_validSsid_outputsSsid() = runBlocking(IMMEDIATE) { fun ssid_validSsid_outputsSsid() =
wifiRepository.setWifiNetwork(WifiNetworkModel.Active( runBlocking(IMMEDIATE) {
wifiRepository.setWifiNetwork(
WifiNetworkModel.Active(
networkId = 1, networkId = 1,
level = 1, level = 1,
ssid = "MyAwesomeWifiNetwork", ssid = "MyAwesomeWifiNetwork",
)) )
)
var latest: String? = null var latest: String? = null
val job = underTest val job = underTest.ssid.onEach { latest = it }.launchIn(this)
.ssid
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isEqualTo("MyAwesomeWifiNetwork") assertThat(latest).isEqualTo("MyAwesomeWifiNetwork")
@@ -178,12 +171,10 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun isEnabled_matchesRepoIsEnabled() = runBlocking(IMMEDIATE) { fun isEnabled_matchesRepoIsEnabled() =
runBlocking(IMMEDIATE) {
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.isEnabled.onEach { latest = it }.launchIn(this)
.isEnabled
.onEach { latest = it }
.launchIn(this)
wifiRepository.setIsWifiEnabled(true) wifiRepository.setIsWifiEnabled(true)
yield() yield()
@@ -201,12 +192,10 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun isDefault_matchesRepoIsDefault() = runBlocking(IMMEDIATE) { fun isDefault_matchesRepoIsDefault() =
runBlocking(IMMEDIATE) {
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.isDefault.onEach { latest = it }.launchIn(this)
.isDefault
.onEach { latest = it }
.launchIn(this)
wifiRepository.setIsWifiDefault(true) wifiRepository.setIsWifiDefault(true)
yield() yield()
@@ -224,8 +213,10 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun wifiNetwork_matchesRepoWifiNetwork() = runBlocking(IMMEDIATE) { fun wifiNetwork_matchesRepoWifiNetwork() =
val wifiNetwork = WifiNetworkModel.Active( runBlocking(IMMEDIATE) {
val wifiNetwork =
WifiNetworkModel.Active(
networkId = 45, networkId = 45,
isValidated = true, isValidated = true,
level = 3, level = 3,
@@ -235,10 +226,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
wifiRepository.setWifiNetwork(wifiNetwork) wifiRepository.setWifiNetwork(wifiNetwork)
var latest: WifiNetworkModel? = null var latest: WifiNetworkModel? = null
val job = underTest val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
.wifiNetwork
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isEqualTo(wifiNetwork) assertThat(latest).isEqualTo(wifiNetwork)
@@ -246,12 +234,10 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun activity_matchesRepoWifiActivity() = runBlocking(IMMEDIATE) { fun activity_matchesRepoWifiActivity() =
runBlocking(IMMEDIATE) {
var latest: DataActivityModel? = null var latest: DataActivityModel? = null
val job = underTest val job = underTest.activity.onEach { latest = it }.launchIn(this)
.activity
.onEach { latest = it }
.launchIn(this)
val activity1 = DataActivityModel(hasActivityIn = true, hasActivityOut = true) val activity1 = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity1) wifiRepository.setWifiActivity(activity1)
@@ -272,14 +258,12 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun isForceHidden_repoHasWifiHidden_outputsTrue() = runBlocking(IMMEDIATE) { fun isForceHidden_repoHasWifiHidden_outputsTrue() =
runBlocking(IMMEDIATE) {
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.WIFI)) connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.WIFI))
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this)
.isForceHidden
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isTrue() assertThat(latest).isTrue()
@@ -287,14 +271,12 @@ class WifiInteractorImplTest : SysuiTestCase() {
} }
@Test @Test
fun isForceHidden_repoDoesNotHaveWifiHidden_outputsFalse() = runBlocking(IMMEDIATE) { fun isForceHidden_repoDoesNotHaveWifiHidden_outputsFalse() =
runBlocking(IMMEDIATE) {
connectivityRepository.setForceHiddenIcons(setOf()) connectivityRepository.setForceHiddenIcons(setOf())
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this)
.isForceHidden
.onEach { latest = it }
.launchIn(this)
assertThat(latest).isFalse() assertThat(latest).isFalse()

View File

@@ -14,14 +14,14 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.systemui.statusbar.pipeline.wifi.data.model package com.android.systemui.statusbar.pipeline.wifi.shared.model
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.log.table.TableRowLogger import com.android.systemui.log.table.TableRowLogger
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel.Active.Companion.MAX_VALID_LEVEL import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel.Active.Companion.MAX_VALID_LEVEL
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel.Companion.MIN_VALID_LEVEL import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel.Companion.MIN_VALID_LEVEL
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Test import org.junit.Test

View File

@@ -38,11 +38,11 @@ import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneMod
import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.whenever
@@ -62,16 +62,11 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
private lateinit var testableLooper: TestableLooper private lateinit var testableLooper: TestableLooper
@Mock @Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags @Mock private lateinit var logger: ConnectivityPipelineLogger
@Mock @Mock private lateinit var tableLogBuffer: TableLogBuffer
private lateinit var logger: ConnectivityPipelineLogger @Mock private lateinit var connectivityConstants: ConnectivityConstants
@Mock @Mock private lateinit var wifiConstants: WifiConstants
private lateinit var tableLogBuffer: TableLogBuffer
@Mock
private lateinit var connectivityConstants: ConnectivityConstants
@Mock
private lateinit var wifiConstants: WifiConstants
private lateinit var airplaneModeRepository: FakeAirplaneModeRepository private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
private lateinit var connectivityRepository: FakeConnectivityRepository private lateinit var connectivityRepository: FakeConnectivityRepository
private lateinit var wifiRepository: FakeWifiRepository private lateinit var wifiRepository: FakeWifiRepository
@@ -91,7 +86,8 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
wifiRepository.setIsWifiEnabled(true) wifiRepository.setIsWifiEnabled(true)
interactor = WifiInteractorImpl(connectivityRepository, wifiRepository) interactor = WifiInteractorImpl(connectivityRepository, wifiRepository)
scope = CoroutineScope(Dispatchers.Unconfined) scope = CoroutineScope(Dispatchers.Unconfined)
airplaneModeViewModel = AirplaneModeViewModelImpl( airplaneModeViewModel =
AirplaneModeViewModelImpl(
AirplaneModeInteractor( AirplaneModeInteractor(
airplaneModeRepository, airplaneModeRepository,
connectivityRepository, connectivityRepository,
@@ -99,7 +95,8 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
logger, logger,
scope, scope,
) )
viewModel = WifiViewModel( viewModel =
WifiViewModel(
airplaneModeViewModel, airplaneModeViewModel,
connectivityConstants, connectivityConstants,
context, context,
@@ -109,7 +106,8 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
scope, scope,
statusBarPipelineFlags, statusBarPipelineFlags,
wifiConstants, wifiConstants,
).home )
.home
} }
// Note: The following tests are more like integration tests, since they stand up a full // Note: The following tests are more like integration tests, since they stand up a full

View File

@@ -36,11 +36,11 @@ import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger 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.ConnectivitySlot
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel.Companion.NO_INTERNET import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel.Companion.NO_INTERNET
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat

View File

@@ -29,11 +29,11 @@ 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.ConnectivitySlot
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@@ -79,7 +79,8 @@ class WifiViewModelTest : SysuiTestCase() {
wifiRepository.setIsWifiEnabled(true) wifiRepository.setIsWifiEnabled(true)
interactor = WifiInteractorImpl(connectivityRepository, wifiRepository) interactor = WifiInteractorImpl(connectivityRepository, wifiRepository)
scope = CoroutineScope(IMMEDIATE) scope = CoroutineScope(IMMEDIATE)
airplaneModeViewModel = AirplaneModeViewModelImpl( airplaneModeViewModel =
AirplaneModeViewModelImpl(
AirplaneModeInteractor( AirplaneModeInteractor(
airplaneModeRepository, airplaneModeRepository,
connectivityRepository, connectivityRepository,
@@ -104,34 +105,20 @@ class WifiViewModelTest : SysuiTestCase() {
// instances. There are also some tests that verify all 3 instances received the same data. // instances. There are also some tests that verify all 3 instances received the same data.
@Test @Test
fun wifiIcon_allLocationViewModelsReceiveSameData() = runBlocking(IMMEDIATE) { fun wifiIcon_allLocationViewModelsReceiveSameData() =
runBlocking(IMMEDIATE) {
var latestHome: WifiIcon? = null var latestHome: WifiIcon? = null
val jobHome = underTest val jobHome = underTest.home.wifiIcon.onEach { latestHome = it }.launchIn(this)
.home
.wifiIcon
.onEach { latestHome = it }
.launchIn(this)
var latestKeyguard: WifiIcon? = null var latestKeyguard: WifiIcon? = null
val jobKeyguard = underTest val jobKeyguard =
.keyguard underTest.keyguard.wifiIcon.onEach { latestKeyguard = it }.launchIn(this)
.wifiIcon
.onEach { latestKeyguard = it }
.launchIn(this)
var latestQs: WifiIcon? = null var latestQs: WifiIcon? = null
val jobQs = underTest val jobQs = underTest.qs.wifiIcon.onEach { latestQs = it }.launchIn(this)
.qs
.wifiIcon
.onEach { latestQs = it }
.launchIn(this)
wifiRepository.setWifiNetwork( wifiRepository.setWifiNetwork(
WifiNetworkModel.Active( WifiNetworkModel.Active(NETWORK_ID, isValidated = true, level = 1)
NETWORK_ID,
isValidated = true,
level = 1
)
) )
yield() yield()
@@ -145,29 +132,23 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activity_showActivityConfigFalse_outputsFalse() = runBlocking(IMMEDIATE) { fun activity_showActivityConfigFalse_outputsFalse() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var activityIn: Boolean? = null var activityIn: Boolean? = null
val activityInJob = underTest val activityInJob =
.home underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
.isActivityInViewVisible
.onEach { activityIn = it }
.launchIn(this)
var activityOut: Boolean? = null var activityOut: Boolean? = null
val activityOutJob = underTest val activityOutJob =
.home underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
.isActivityOutViewVisible
.onEach { activityOut = it }
.launchIn(this)
var activityContainer: Boolean? = null var activityContainer: Boolean? = null
val activityContainerJob = underTest val activityContainerJob =
.home underTest.home.isActivityContainerVisible
.isActivityContainerVisible
.onEach { activityContainer = it } .onEach { activityContainer = it }
.launchIn(this) .launchIn(this)
@@ -182,29 +163,23 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activity_showActivityConfigFalse_noUpdatesReceived() = runBlocking(IMMEDIATE) { fun activity_showActivityConfigFalse_noUpdatesReceived() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var activityIn: Boolean? = null var activityIn: Boolean? = null
val activityInJob = underTest val activityInJob =
.home underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
.isActivityInViewVisible
.onEach { activityIn = it }
.launchIn(this)
var activityOut: Boolean? = null var activityOut: Boolean? = null
val activityOutJob = underTest val activityOutJob =
.home underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
.isActivityOutViewVisible
.onEach { activityOut = it }
.launchIn(this)
var activityContainer: Boolean? = null var activityContainer: Boolean? = null
val activityContainerJob = underTest val activityContainerJob =
.home underTest.home.isActivityContainerVisible
.isActivityContainerVisible
.onEach { activityContainer = it } .onEach { activityContainer = it }
.launchIn(this) .launchIn(this)
@@ -224,30 +199,26 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activity_nullSsid_outputsFalse() = runBlocking(IMMEDIATE) { fun activity_nullSsid_outputsFalse() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(WifiNetworkModel.Active(NETWORK_ID, ssid = null, level = 1)) wifiRepository.setWifiNetwork(
WifiNetworkModel.Active(NETWORK_ID, ssid = null, level = 1)
)
var activityIn: Boolean? = null var activityIn: Boolean? = null
val activityInJob = underTest val activityInJob =
.home underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
.isActivityInViewVisible
.onEach { activityIn = it }
.launchIn(this)
var activityOut: Boolean? = null var activityOut: Boolean? = null
val activityOutJob = underTest val activityOutJob =
.home underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
.isActivityOutViewVisible
.onEach { activityOut = it }
.launchIn(this)
var activityContainer: Boolean? = null var activityContainer: Boolean? = null
val activityContainerJob = underTest val activityContainerJob =
.home underTest.home.isActivityContainerVisible
.isActivityContainerVisible
.onEach { activityContainer = it } .onEach { activityContainer = it }
.launchIn(this) .launchIn(this)
@@ -267,31 +238,24 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activity_allLocationViewModelsReceiveSameData() = runBlocking(IMMEDIATE) { fun activity_allLocationViewModelsReceiveSameData() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latestHome: Boolean? = null var latestHome: Boolean? = null
val jobHome = underTest val jobHome =
.home underTest.home.isActivityInViewVisible.onEach { latestHome = it }.launchIn(this)
.isActivityInViewVisible
.onEach { latestHome = it }
.launchIn(this)
var latestKeyguard: Boolean? = null var latestKeyguard: Boolean? = null
val jobKeyguard = underTest val jobKeyguard =
.keyguard underTest.keyguard.isActivityInViewVisible
.isActivityInViewVisible
.onEach { latestKeyguard = it } .onEach { latestKeyguard = it }
.launchIn(this) .launchIn(this)
var latestQs: Boolean? = null var latestQs: Boolean? = null
val jobQs = underTest val jobQs = underTest.qs.isActivityInViewVisible.onEach { latestQs = it }.launchIn(this)
.qs
.isActivityInViewVisible
.onEach { latestQs = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -307,17 +271,14 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activityIn_hasActivityInTrue_outputsTrue() = runBlocking(IMMEDIATE) { fun activityIn_hasActivityInTrue_outputsTrue() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.home.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
.home
.isActivityInViewVisible
.onEach { latest = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -329,17 +290,14 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activityIn_hasActivityInFalse_outputsFalse() = runBlocking(IMMEDIATE) { fun activityIn_hasActivityInFalse_outputsFalse() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.home.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
.home
.isActivityInViewVisible
.onEach { latest = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -351,17 +309,14 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activityOut_hasActivityOutTrue_outputsTrue() = runBlocking(IMMEDIATE) { fun activityOut_hasActivityOutTrue_outputsTrue() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.home.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
.home
.isActivityOutViewVisible
.onEach { latest = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -373,17 +328,14 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activityOut_hasActivityOutFalse_outputsFalse() = runBlocking(IMMEDIATE) { fun activityOut_hasActivityOutFalse_outputsFalse() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.home.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
.home
.isActivityOutViewVisible
.onEach { latest = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -395,17 +347,15 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activityContainer_hasActivityInTrue_outputsTrue() = runBlocking(IMMEDIATE) { fun activityContainer_hasActivityInTrue_outputsTrue() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job =
.home underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
.isActivityContainerVisible
.onEach { latest = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -417,17 +367,15 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activityContainer_hasActivityOutTrue_outputsTrue() = runBlocking(IMMEDIATE) { fun activityContainer_hasActivityOutTrue_outputsTrue() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job =
.home underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
.isActivityContainerVisible
.onEach { latest = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -439,17 +387,15 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activityContainer_inAndOutTrue_outputsTrue() = runBlocking(IMMEDIATE) { fun activityContainer_inAndOutTrue_outputsTrue() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job =
.home underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
.isActivityContainerVisible
.onEach { latest = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -461,17 +407,15 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun activityContainer_inAndOutFalse_outputsFalse() = runBlocking(IMMEDIATE) { fun activityContainer_inAndOutFalse_outputsFalse() =
runBlocking(IMMEDIATE) {
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
createAndSetViewModel() createAndSetViewModel()
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job =
.home underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
.isActivityContainerVisible
.onEach { latest = it }
.launchIn(this)
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
wifiRepository.setWifiActivity(activity) wifiRepository.setWifiActivity(activity)
@@ -483,13 +427,10 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun airplaneSpacer_notAirplaneMode_outputsFalse() = runBlocking(IMMEDIATE) { fun airplaneSpacer_notAirplaneMode_outputsFalse() =
runBlocking(IMMEDIATE) {
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
.qs
.isAirplaneSpacerVisible
.onEach { latest = it }
.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(false) airplaneModeRepository.setIsAirplaneMode(false)
yield() yield()
@@ -500,13 +441,10 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun airplaneSpacer_airplaneForceHidden_outputsFalse() = runBlocking(IMMEDIATE) { fun airplaneSpacer_airplaneForceHidden_outputsFalse() =
runBlocking(IMMEDIATE) {
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
.qs
.isAirplaneSpacerVisible
.onEach { latest = it }
.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(true) airplaneModeRepository.setIsAirplaneMode(true)
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.AIRPLANE)) connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.AIRPLANE))
@@ -518,13 +456,10 @@ class WifiViewModelTest : SysuiTestCase() {
} }
@Test @Test
fun airplaneSpacer_airplaneIconVisible_outputsTrue() = runBlocking(IMMEDIATE) { fun airplaneSpacer_airplaneIconVisible_outputsTrue() =
runBlocking(IMMEDIATE) {
var latest: Boolean? = null var latest: Boolean? = null
val job = underTest val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
.qs
.isAirplaneSpacerVisible
.onEach { latest = it }
.launchIn(this)
airplaneModeRepository.setIsAirplaneMode(true) airplaneModeRepository.setIsAirplaneMode(true)
yield() yield()
@@ -538,7 +473,8 @@ class WifiViewModelTest : SysuiTestCase() {
// [WifiViewModel] creates its flows as soon as it's instantiated, and some of those flow // [WifiViewModel] creates its flows as soon as it's instantiated, and some of those flow
// creations rely on certain config values that we mock out in individual tests. This method // creations rely on certain config values that we mock out in individual tests. This method
// allows tests to create the view model only after those configs are correctly set up. // allows tests to create the view model only after those configs are correctly set up.
underTest = WifiViewModel( underTest =
WifiViewModel(
airplaneModeViewModel, airplaneModeViewModel,
connectivityConstants, connectivityConstants,
context, context,