Merge "[SB Refactor] Lint all the wifi classes; move network model to shared." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7cf6cd8567
@@ -452,12 +452,6 @@
|
||||
-packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherFeatureController.kt
|
||||
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
|
||||
-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt
|
||||
-packages/SystemUI/src/com/android/systemui/statusbar/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/DeviceControlsController.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/userswitcher/StatusBarUserSwitcherControllerOldImplTest.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/ClockTest.kt
|
||||
-packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt
|
||||
|
||||
@@ -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.Companion.DEFAULT_NUM_LEVELS
|
||||
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.shared.model.WifiNetworkModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@@ -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.shared.ConnectivityPipelineLogger
|
||||
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.shared.model.WifiNetworkModel
|
||||
import com.android.systemui.util.kotlin.pairwise
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
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.wifi.data.model.WifiNetworkModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
/** Provides data related to the wifi state. */
|
||||
|
||||
@@ -23,9 +23,9 @@ import com.android.systemui.dagger.qualifiers.Application
|
||||
import com.android.systemui.demomode.DemoMode
|
||||
import com.android.systemui.demomode.DemoModeController
|
||||
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.prod.WifiRepositoryImpl
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
|
||||
@@ -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.statusbar.pipeline.shared.data.model.DataActivityModel
|
||||
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.demo.model.FakeWifiEventModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
|
||||
@@ -18,8 +18,8 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository.prod
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
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.shared.model.WifiNetworkModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
@@ -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.data.model.DataActivityModel
|
||||
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.WifiRepository
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
|
||||
import java.util.concurrent.Executor
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
||||
@@ -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.DataActivityModel
|
||||
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.shared.model.WifiNetworkModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
@@ -58,25 +58,29 @@ interface WifiInteractor {
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
class WifiInteractorImpl @Inject constructor(
|
||||
class WifiInteractorImpl
|
||||
@Inject
|
||||
constructor(
|
||||
connectivityRepository: ConnectivityRepository,
|
||||
wifiRepository: WifiRepository,
|
||||
) : WifiInteractor {
|
||||
|
||||
override val ssid: Flow<String?> = wifiRepository.wifiNetwork.map { info ->
|
||||
when (info) {
|
||||
is WifiNetworkModel.Unavailable -> null
|
||||
is WifiNetworkModel.Invalid -> null
|
||||
is WifiNetworkModel.Inactive -> null
|
||||
is WifiNetworkModel.CarrierMerged -> null
|
||||
is WifiNetworkModel.Active -> when {
|
||||
info.isPasspointAccessPoint || info.isOnlineSignUpForPasspointAccessPoint ->
|
||||
info.passpointProviderFriendlyName
|
||||
info.ssid != WifiManager.UNKNOWN_SSID -> info.ssid
|
||||
else -> null
|
||||
override val ssid: Flow<String?> =
|
||||
wifiRepository.wifiNetwork.map { info ->
|
||||
when (info) {
|
||||
is WifiNetworkModel.Unavailable -> null
|
||||
is WifiNetworkModel.Invalid -> null
|
||||
is WifiNetworkModel.Inactive -> null
|
||||
is WifiNetworkModel.CarrierMerged -> null
|
||||
is WifiNetworkModel.Active ->
|
||||
when {
|
||||
info.isPasspointAccessPoint || info.isOnlineSignUpForPasspointAccessPoint ->
|
||||
info.passpointProviderFriendlyName
|
||||
info.ssid != WifiManager.UNKNOWN_SSID -> info.ssid
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override val isEnabled: Flow<Boolean> = wifiRepository.isWifiEnabled
|
||||
|
||||
@@ -86,7 +90,6 @@ class WifiInteractorImpl @Inject constructor(
|
||||
|
||||
override val activity: StateFlow<DataActivityModel> = wifiRepository.wifiActivity
|
||||
|
||||
override val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots.map {
|
||||
it.contains(ConnectivitySlot.WIFI)
|
||||
}
|
||||
override val isForceHidden: Flow<Boolean> =
|
||||
connectivityRepository.forceHiddenSlots.map { it.contains(ConnectivitySlot.WIFI) }
|
||||
}
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
* 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 com.android.systemui.log.table.TableRowLogger
|
||||
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. */
|
||||
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(
|
||||
/** A description of why the wifi information was invalid. */
|
||||
val invalidReason: String,
|
||||
@@ -142,21 +140,17 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
|
||||
*/
|
||||
val subscriptionId: Int,
|
||||
|
||||
/**
|
||||
* The signal level, guaranteed to be 0 <= level <= numberOfLevels.
|
||||
*/
|
||||
/** The signal level, guaranteed to be 0 <= level <= numberOfLevels. */
|
||||
val level: Int,
|
||||
|
||||
/**
|
||||
* The maximum possible level.
|
||||
*/
|
||||
val numberOfLevels: Int = DEFAULT_NUM_LEVELS,
|
||||
/** The maximum possible level. */
|
||||
val numberOfLevels: Int = MobileConnectionRepository.DEFAULT_NUM_LEVELS,
|
||||
) : WifiNetworkModel() {
|
||||
init {
|
||||
require(level in MIN_VALID_LEVEL..numberOfLevels) {
|
||||
"0 <= wifi level <= $numberOfLevels required; level was $level"
|
||||
}
|
||||
require(subscriptionId != INVALID_SUBSCRIPTION_ID) {
|
||||
require(subscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||
"subscription ID cannot be invalid"
|
||||
}
|
||||
}
|
||||
@@ -208,9 +202,7 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
|
||||
/** See [android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED]. */
|
||||
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,
|
||||
|
||||
/** See [android.net.wifi.WifiInfo.ssid]. */
|
||||
@@ -255,8 +247,10 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
|
||||
if (prevVal.isPasspointAccessPoint != isPasspointAccessPoint) {
|
||||
row.logChange(COL_PASSPOINT_ACCESS_POINT, isPasspointAccessPoint)
|
||||
}
|
||||
if (prevVal.isOnlineSignUpForPasspointAccessPoint !=
|
||||
isOnlineSignUpForPasspointAccessPoint) {
|
||||
if (
|
||||
prevVal.isOnlineSignUpForPasspointAccessPoint !=
|
||||
isOnlineSignUpForPasspointAccessPoint
|
||||
) {
|
||||
row.logChange(COL_ONLINE_SIGN_UP, isOnlineSignUpForPasspointAccessPoint)
|
||||
}
|
||||
if (prevVal.passpointProviderFriendlyName != passpointProviderFriendlyName) {
|
||||
@@ -281,29 +275,29 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
|
||||
// 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.)
|
||||
val passpointString =
|
||||
if (isPasspointAccessPoint ||
|
||||
isOnlineSignUpForPasspointAccessPoint ||
|
||||
passpointProviderFriendlyName != null) {
|
||||
if (
|
||||
isPasspointAccessPoint ||
|
||||
isOnlineSignUpForPasspointAccessPoint ||
|
||||
passpointProviderFriendlyName != null
|
||||
) {
|
||||
", isPasspointAp=$isPasspointAccessPoint, " +
|
||||
"isOnlineSignUpForPasspointAp=$isOnlineSignUpForPasspointAccessPoint, " +
|
||||
"passpointName=$passpointProviderFriendlyName"
|
||||
} else {
|
||||
""
|
||||
}
|
||||
} else {
|
||||
""
|
||||
}
|
||||
|
||||
return "WifiNetworkModel.Active(networkId=$networkId, isValidated=$isValidated, " +
|
||||
"level=$level, ssid=$ssid$passpointString)"
|
||||
}
|
||||
|
||||
companion object {
|
||||
@VisibleForTesting
|
||||
internal const val MAX_VALID_LEVEL = 4
|
||||
@VisibleForTesting internal const val MAX_VALID_LEVEL = 4
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
@VisibleForTesting
|
||||
internal const val MIN_VALID_LEVEL = 0
|
||||
@VisibleForTesting internal const val MIN_VALID_LEVEL = 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,6 @@ import com.android.systemui.R
|
||||
import com.android.systemui.common.shared.model.ContentDescription
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
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.logDiffsForTable
|
||||
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.pipeline.StatusBarPipelineFlags
|
||||
import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel
|
||||
import com.android.systemui.statusbar.pipeline.dagger.WifiTableLog
|
||||
import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants
|
||||
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
|
||||
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.logOutputChange
|
||||
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
|
||||
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.model.WifiNetworkModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
@@ -55,15 +55,12 @@ import kotlinx.coroutines.flow.stateIn
|
||||
/**
|
||||
* Models the UI state for the status bar wifi icon.
|
||||
*
|
||||
* This class exposes three view models, one per status bar location:
|
||||
* - [home]
|
||||
* - [keyguard]
|
||||
* - [qs]
|
||||
* 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).
|
||||
* This class exposes three view models, one per status bar location: [home], [keyguard], and [qs].
|
||||
* 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).
|
||||
*
|
||||
* Internally, this class maintains the current state of the wifi icon and notifies those three
|
||||
* view models of any changes.
|
||||
* Internally, this class maintains the current state of the wifi icon and notifies those three view
|
||||
* models of any changes.
|
||||
*/
|
||||
@SysUISingleton
|
||||
class WifiViewModel
|
||||
@@ -85,12 +82,13 @@ constructor(
|
||||
is WifiNetworkModel.Unavailable -> WifiIcon.Hidden
|
||||
is WifiNetworkModel.Invalid -> WifiIcon.Hidden
|
||||
is WifiNetworkModel.CarrierMerged -> WifiIcon.Hidden
|
||||
is WifiNetworkModel.Inactive -> WifiIcon.Visible(
|
||||
res = WIFI_NO_NETWORK,
|
||||
ContentDescription.Loaded(
|
||||
"${context.getString(WIFI_NO_CONNECTION)},${context.getString(NO_INTERNET)}"
|
||||
is WifiNetworkModel.Inactive ->
|
||||
WifiIcon.Visible(
|
||||
res = WIFI_NO_NETWORK,
|
||||
ContentDescription.Loaded(
|
||||
"${context.getString(WIFI_NO_CONNECTION)},${context.getString(NO_INTERNET)}"
|
||||
)
|
||||
)
|
||||
)
|
||||
is WifiNetworkModel.Active -> {
|
||||
val levelDesc = context.getString(WIFI_CONNECTION_STRENGTH[this.level])
|
||||
when {
|
||||
@@ -114,25 +112,25 @@ constructor(
|
||||
/** The wifi icon that should be displayed. */
|
||||
private val wifiIcon: StateFlow<WifiIcon> =
|
||||
combine(
|
||||
interactor.isEnabled,
|
||||
interactor.isDefault,
|
||||
interactor.isForceHidden,
|
||||
interactor.wifiNetwork,
|
||||
) { isEnabled, isDefault, isForceHidden, wifiNetwork ->
|
||||
if (!isEnabled || isForceHidden || wifiNetwork is WifiNetworkModel.CarrierMerged) {
|
||||
return@combine WifiIcon.Hidden
|
||||
}
|
||||
interactor.isEnabled,
|
||||
interactor.isDefault,
|
||||
interactor.isForceHidden,
|
||||
interactor.wifiNetwork,
|
||||
) { isEnabled, isDefault, isForceHidden, wifiNetwork ->
|
||||
if (!isEnabled || isForceHidden || wifiNetwork is WifiNetworkModel.CarrierMerged) {
|
||||
return@combine WifiIcon.Hidden
|
||||
}
|
||||
|
||||
val icon = wifiNetwork.icon()
|
||||
val icon = wifiNetwork.icon()
|
||||
|
||||
return@combine when {
|
||||
isDefault -> icon
|
||||
wifiConstants.alwaysShowIconIfEnabled -> icon
|
||||
!connectivityConstants.hasDataCapabilities -> icon
|
||||
wifiNetwork is WifiNetworkModel.Active && wifiNetwork.isValidated -> icon
|
||||
else -> WifiIcon.Hidden
|
||||
return@combine when {
|
||||
isDefault -> icon
|
||||
wifiConstants.alwaysShowIconIfEnabled -> icon
|
||||
!connectivityConstants.hasDataCapabilities -> icon
|
||||
wifiNetwork is WifiNetworkModel.Active && wifiNetwork.isValidated -> icon
|
||||
else -> WifiIcon.Hidden
|
||||
}
|
||||
}
|
||||
}
|
||||
.logDiffsForTable(
|
||||
wifiTableLogBuffer,
|
||||
columnPrefix = "",
|
||||
@@ -147,34 +145,34 @@ constructor(
|
||||
/** The wifi activity status. Null if we shouldn't display the activity status. */
|
||||
private val activity: Flow<DataActivityModel?> =
|
||||
if (!connectivityConstants.shouldShowActivityConfig) {
|
||||
flowOf(null)
|
||||
} else {
|
||||
combine(interactor.activity, interactor.ssid) { activity, ssid ->
|
||||
when (ssid) {
|
||||
null -> null
|
||||
else -> activity
|
||||
flowOf(null)
|
||||
} else {
|
||||
combine(interactor.activity, interactor.ssid) { activity, ssid ->
|
||||
when (ssid) {
|
||||
null -> null
|
||||
else -> activity
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.distinctUntilChanged()
|
||||
.logOutputChange(logger, "activity")
|
||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = null)
|
||||
.distinctUntilChanged()
|
||||
.logOutputChange(logger, "activity")
|
||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = null)
|
||||
|
||||
private val isActivityInViewVisible: Flow<Boolean> =
|
||||
activity
|
||||
.map { it?.hasActivityIn == true }
|
||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false)
|
||||
activity
|
||||
.map { it?.hasActivityIn == true }
|
||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false)
|
||||
|
||||
private val isActivityOutViewVisible: Flow<Boolean> =
|
||||
activity
|
||||
.map { it?.hasActivityOut == true }
|
||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false)
|
||||
activity
|
||||
.map { it?.hasActivityOut == true }
|
||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false)
|
||||
|
||||
private val isActivityContainerVisible: Flow<Boolean> =
|
||||
combine(isActivityInViewVisible, isActivityOutViewVisible) { activityIn, activityOut ->
|
||||
activityIn || activityOut
|
||||
}
|
||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false)
|
||||
combine(isActivityInViewVisible, isActivityOutViewVisible) { activityIn, activityOut ->
|
||||
activityIn || activityOut
|
||||
}
|
||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = false)
|
||||
|
||||
// TODO(b/238425913): It isn't ideal for the wifi icon to need to know about whether the
|
||||
// airplane icon is visible. Instead, we should have a parent StatusBarSystemIconsViewModel
|
||||
|
||||
@@ -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.ResolvedNetworkType
|
||||
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.shared.model.WifiNetworkModel
|
||||
import com.android.systemui.util.mockito.whenever
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
|
||||
@@ -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.MobileConnectionRepository
|
||||
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.shared.model.WifiNetworkModel
|
||||
import com.android.systemui.util.mockito.any
|
||||
import com.android.systemui.util.mockito.eq
|
||||
import com.android.systemui.util.mockito.mock
|
||||
|
||||
@@ -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.util.FakeMobileMappingsProxy
|
||||
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.shared.model.WifiNetworkModel
|
||||
import com.android.systemui.util.mockito.any
|
||||
import com.android.systemui.util.mockito.argumentCaptor
|
||||
import com.android.systemui.util.mockito.eq
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
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.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.shared.model.WifiNetworkModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository.prod
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
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 org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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.DataActivityModel
|
||||
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.shared.model.WifiNetworkModel
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
@@ -57,10 +57,7 @@ class WifiInteractorImplTest : SysuiTestCase() {
|
||||
wifiRepository.setWifiNetwork(WifiNetworkModel.Unavailable)
|
||||
|
||||
var latest: String? = "default"
|
||||
val job = underTest
|
||||
.ssid
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
val job = underTest.ssid.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isNull()
|
||||
|
||||
@@ -68,238 +65,223 @@ class WifiInteractorImplTest : SysuiTestCase() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ssid_inactiveNetwork_outputsNull() = runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(WifiNetworkModel.Inactive)
|
||||
fun ssid_inactiveNetwork_outputsNull() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(WifiNetworkModel.Inactive)
|
||||
|
||||
var latest: String? = "default"
|
||||
val job = underTest
|
||||
.ssid
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: String? = "default"
|
||||
val job = underTest.ssid.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isNull()
|
||||
assertThat(latest).isNull()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ssid_carrierMergedNetwork_outputsNull() = runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(
|
||||
WifiNetworkModel.CarrierMerged(networkId = 1, subscriptionId = 2, level = 1)
|
||||
)
|
||||
fun ssid_carrierMergedNetwork_outputsNull() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(
|
||||
WifiNetworkModel.CarrierMerged(networkId = 1, subscriptionId = 2, level = 1)
|
||||
)
|
||||
|
||||
var latest: String? = "default"
|
||||
val job = underTest
|
||||
.ssid
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: String? = "default"
|
||||
val job = underTest.ssid.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isNull()
|
||||
assertThat(latest).isNull()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ssid_isPasspointAccessPoint_outputsPasspointName() = runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(WifiNetworkModel.Active(
|
||||
networkId = 1,
|
||||
level = 1,
|
||||
isPasspointAccessPoint = true,
|
||||
passpointProviderFriendlyName = "friendly",
|
||||
))
|
||||
fun ssid_isPasspointAccessPoint_outputsPasspointName() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(
|
||||
WifiNetworkModel.Active(
|
||||
networkId = 1,
|
||||
level = 1,
|
||||
isPasspointAccessPoint = true,
|
||||
passpointProviderFriendlyName = "friendly",
|
||||
)
|
||||
)
|
||||
|
||||
var latest: String? = null
|
||||
val job = underTest
|
||||
.ssid
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: String? = null
|
||||
val job = underTest.ssid.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isEqualTo("friendly")
|
||||
assertThat(latest).isEqualTo("friendly")
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ssid_isOnlineSignUpForPasspoint_outputsPasspointName() = runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(WifiNetworkModel.Active(
|
||||
networkId = 1,
|
||||
level = 1,
|
||||
isOnlineSignUpForPasspointAccessPoint = true,
|
||||
passpointProviderFriendlyName = "friendly",
|
||||
))
|
||||
fun ssid_isOnlineSignUpForPasspoint_outputsPasspointName() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(
|
||||
WifiNetworkModel.Active(
|
||||
networkId = 1,
|
||||
level = 1,
|
||||
isOnlineSignUpForPasspointAccessPoint = true,
|
||||
passpointProviderFriendlyName = "friendly",
|
||||
)
|
||||
)
|
||||
|
||||
var latest: String? = null
|
||||
val job = underTest
|
||||
.ssid
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: String? = null
|
||||
val job = underTest.ssid.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isEqualTo("friendly")
|
||||
assertThat(latest).isEqualTo("friendly")
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ssid_unknownSsid_outputsNull() = runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(WifiNetworkModel.Active(
|
||||
networkId = 1,
|
||||
level = 1,
|
||||
ssid = WifiManager.UNKNOWN_SSID,
|
||||
))
|
||||
fun ssid_unknownSsid_outputsNull() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(
|
||||
WifiNetworkModel.Active(
|
||||
networkId = 1,
|
||||
level = 1,
|
||||
ssid = WifiManager.UNKNOWN_SSID,
|
||||
)
|
||||
)
|
||||
|
||||
var latest: String? = "default"
|
||||
val job = underTest
|
||||
.ssid
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: String? = "default"
|
||||
val job = underTest.ssid.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isNull()
|
||||
assertThat(latest).isNull()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ssid_validSsid_outputsSsid() = runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(WifiNetworkModel.Active(
|
||||
networkId = 1,
|
||||
level = 1,
|
||||
ssid = "MyAwesomeWifiNetwork",
|
||||
))
|
||||
fun ssid_validSsid_outputsSsid() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
wifiRepository.setWifiNetwork(
|
||||
WifiNetworkModel.Active(
|
||||
networkId = 1,
|
||||
level = 1,
|
||||
ssid = "MyAwesomeWifiNetwork",
|
||||
)
|
||||
)
|
||||
|
||||
var latest: String? = null
|
||||
val job = underTest
|
||||
.ssid
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: String? = null
|
||||
val job = underTest.ssid.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isEqualTo("MyAwesomeWifiNetwork")
|
||||
assertThat(latest).isEqualTo("MyAwesomeWifiNetwork")
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isEnabled_matchesRepoIsEnabled() = runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.isEnabled
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
fun isEnabled_matchesRepoIsEnabled() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.isEnabled.onEach { latest = it }.launchIn(this)
|
||||
|
||||
wifiRepository.setIsWifiEnabled(true)
|
||||
yield()
|
||||
assertThat(latest).isTrue()
|
||||
wifiRepository.setIsWifiEnabled(true)
|
||||
yield()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
wifiRepository.setIsWifiEnabled(false)
|
||||
yield()
|
||||
assertThat(latest).isFalse()
|
||||
wifiRepository.setIsWifiEnabled(false)
|
||||
yield()
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
wifiRepository.setIsWifiEnabled(true)
|
||||
yield()
|
||||
assertThat(latest).isTrue()
|
||||
wifiRepository.setIsWifiEnabled(true)
|
||||
yield()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isDefault_matchesRepoIsDefault() = runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.isDefault
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
fun isDefault_matchesRepoIsDefault() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.isDefault.onEach { latest = it }.launchIn(this)
|
||||
|
||||
wifiRepository.setIsWifiDefault(true)
|
||||
yield()
|
||||
assertThat(latest).isTrue()
|
||||
wifiRepository.setIsWifiDefault(true)
|
||||
yield()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
wifiRepository.setIsWifiDefault(false)
|
||||
yield()
|
||||
assertThat(latest).isFalse()
|
||||
wifiRepository.setIsWifiDefault(false)
|
||||
yield()
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
wifiRepository.setIsWifiDefault(true)
|
||||
yield()
|
||||
assertThat(latest).isTrue()
|
||||
wifiRepository.setIsWifiDefault(true)
|
||||
yield()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun wifiNetwork_matchesRepoWifiNetwork() = runBlocking(IMMEDIATE) {
|
||||
val wifiNetwork = WifiNetworkModel.Active(
|
||||
networkId = 45,
|
||||
isValidated = true,
|
||||
level = 3,
|
||||
ssid = "AB",
|
||||
passpointProviderFriendlyName = "friendly"
|
||||
)
|
||||
wifiRepository.setWifiNetwork(wifiNetwork)
|
||||
fun wifiNetwork_matchesRepoWifiNetwork() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
val wifiNetwork =
|
||||
WifiNetworkModel.Active(
|
||||
networkId = 45,
|
||||
isValidated = true,
|
||||
level = 3,
|
||||
ssid = "AB",
|
||||
passpointProviderFriendlyName = "friendly"
|
||||
)
|
||||
wifiRepository.setWifiNetwork(wifiNetwork)
|
||||
|
||||
var latest: WifiNetworkModel? = null
|
||||
val job = underTest
|
||||
.wifiNetwork
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: WifiNetworkModel? = null
|
||||
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isEqualTo(wifiNetwork)
|
||||
assertThat(latest).isEqualTo(wifiNetwork)
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activity_matchesRepoWifiActivity() = runBlocking(IMMEDIATE) {
|
||||
var latest: DataActivityModel? = null
|
||||
val job = underTest
|
||||
.activity
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
fun activity_matchesRepoWifiActivity() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: DataActivityModel? = null
|
||||
val job = underTest.activity.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity1 = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity1)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity1)
|
||||
val activity1 = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity1)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity1)
|
||||
|
||||
val activity2 = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity2)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity2)
|
||||
val activity2 = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity2)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity2)
|
||||
|
||||
val activity3 = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity3)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity3)
|
||||
val activity3 = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity3)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity3)
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isForceHidden_repoHasWifiHidden_outputsTrue() = runBlocking(IMMEDIATE) {
|
||||
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.WIFI))
|
||||
fun isForceHidden_repoHasWifiHidden_outputsTrue() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.WIFI))
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.isForceHidden
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isForceHidden_repoDoesNotHaveWifiHidden_outputsFalse() = runBlocking(IMMEDIATE) {
|
||||
connectivityRepository.setForceHiddenIcons(setOf())
|
||||
fun isForceHidden_repoDoesNotHaveWifiHidden_outputsFalse() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
connectivityRepository.setForceHiddenIcons(setOf())
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.isForceHidden
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.isForceHidden.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
}
|
||||
|
||||
private val IMMEDIATE = Dispatchers.Main.immediate
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
* 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 androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
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.data.model.WifiNetworkModel.Companion.MIN_VALID_LEVEL
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel.Active.Companion.MAX_VALID_LEVEL
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel.Companion.MIN_VALID_LEVEL
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import org.junit.Test
|
||||
|
||||
@@ -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.ConnectivityPipelineLogger
|
||||
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.domain.interactor.WifiInteractor
|
||||
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.model.WifiNetworkModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
|
||||
import com.android.systemui.util.mockito.whenever
|
||||
@@ -62,16 +62,11 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
|
||||
|
||||
private lateinit var testableLooper: TestableLooper
|
||||
|
||||
@Mock
|
||||
private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
|
||||
@Mock
|
||||
private lateinit var logger: ConnectivityPipelineLogger
|
||||
@Mock
|
||||
private lateinit var tableLogBuffer: TableLogBuffer
|
||||
@Mock
|
||||
private lateinit var connectivityConstants: ConnectivityConstants
|
||||
@Mock
|
||||
private lateinit var wifiConstants: WifiConstants
|
||||
@Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
|
||||
@Mock private lateinit var logger: ConnectivityPipelineLogger
|
||||
@Mock private lateinit var tableLogBuffer: TableLogBuffer
|
||||
@Mock private lateinit var connectivityConstants: ConnectivityConstants
|
||||
@Mock private lateinit var wifiConstants: WifiConstants
|
||||
private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
|
||||
private lateinit var connectivityRepository: FakeConnectivityRepository
|
||||
private lateinit var wifiRepository: FakeWifiRepository
|
||||
@@ -91,25 +86,28 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
|
||||
wifiRepository.setIsWifiEnabled(true)
|
||||
interactor = WifiInteractorImpl(connectivityRepository, wifiRepository)
|
||||
scope = CoroutineScope(Dispatchers.Unconfined)
|
||||
airplaneModeViewModel = AirplaneModeViewModelImpl(
|
||||
AirplaneModeInteractor(
|
||||
airplaneModeRepository,
|
||||
connectivityRepository,
|
||||
),
|
||||
logger,
|
||||
scope,
|
||||
)
|
||||
viewModel = WifiViewModel(
|
||||
airplaneModeViewModel,
|
||||
connectivityConstants,
|
||||
context,
|
||||
logger,
|
||||
tableLogBuffer,
|
||||
interactor,
|
||||
scope,
|
||||
statusBarPipelineFlags,
|
||||
wifiConstants,
|
||||
).home
|
||||
airplaneModeViewModel =
|
||||
AirplaneModeViewModelImpl(
|
||||
AirplaneModeInteractor(
|
||||
airplaneModeRepository,
|
||||
connectivityRepository,
|
||||
),
|
||||
logger,
|
||||
scope,
|
||||
)
|
||||
viewModel =
|
||||
WifiViewModel(
|
||||
airplaneModeViewModel,
|
||||
connectivityConstants,
|
||||
context,
|
||||
logger,
|
||||
tableLogBuffer,
|
||||
interactor,
|
||||
scope,
|
||||
statusBarPipelineFlags,
|
||||
wifiConstants,
|
||||
)
|
||||
.home
|
||||
}
|
||||
|
||||
// Note: The following tests are more like integration tests, since they stand up a full
|
||||
|
||||
@@ -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.data.model.ConnectivitySlot
|
||||
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.domain.interactor.WifiInteractor
|
||||
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.model.WifiNetworkModel
|
||||
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.google.common.truth.Truth.assertThat
|
||||
|
||||
@@ -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.DataActivityModel
|
||||
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.domain.interactor.WifiInteractor
|
||||
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.model.WifiNetworkModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -79,14 +79,15 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
wifiRepository.setIsWifiEnabled(true)
|
||||
interactor = WifiInteractorImpl(connectivityRepository, wifiRepository)
|
||||
scope = CoroutineScope(IMMEDIATE)
|
||||
airplaneModeViewModel = AirplaneModeViewModelImpl(
|
||||
AirplaneModeInteractor(
|
||||
airplaneModeRepository,
|
||||
connectivityRepository,
|
||||
),
|
||||
logger,
|
||||
scope,
|
||||
)
|
||||
airplaneModeViewModel =
|
||||
AirplaneModeViewModelImpl(
|
||||
AirplaneModeInteractor(
|
||||
airplaneModeRepository,
|
||||
connectivityRepository,
|
||||
),
|
||||
logger,
|
||||
scope,
|
||||
)
|
||||
|
||||
createAndSetViewModel()
|
||||
}
|
||||
@@ -104,451 +105,386 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
// instances. There are also some tests that verify all 3 instances received the same data.
|
||||
|
||||
@Test
|
||||
fun wifiIcon_allLocationViewModelsReceiveSameData() = runBlocking(IMMEDIATE) {
|
||||
var latestHome: WifiIcon? = null
|
||||
val jobHome = underTest
|
||||
.home
|
||||
.wifiIcon
|
||||
.onEach { latestHome = it }
|
||||
.launchIn(this)
|
||||
fun wifiIcon_allLocationViewModelsReceiveSameData() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latestHome: WifiIcon? = null
|
||||
val jobHome = underTest.home.wifiIcon.onEach { latestHome = it }.launchIn(this)
|
||||
|
||||
var latestKeyguard: WifiIcon? = null
|
||||
val jobKeyguard = underTest
|
||||
.keyguard
|
||||
.wifiIcon
|
||||
.onEach { latestKeyguard = it }
|
||||
.launchIn(this)
|
||||
var latestKeyguard: WifiIcon? = null
|
||||
val jobKeyguard =
|
||||
underTest.keyguard.wifiIcon.onEach { latestKeyguard = it }.launchIn(this)
|
||||
|
||||
var latestQs: WifiIcon? = null
|
||||
val jobQs = underTest
|
||||
.qs
|
||||
.wifiIcon
|
||||
.onEach { latestQs = it }
|
||||
.launchIn(this)
|
||||
var latestQs: WifiIcon? = null
|
||||
val jobQs = underTest.qs.wifiIcon.onEach { latestQs = it }.launchIn(this)
|
||||
|
||||
wifiRepository.setWifiNetwork(
|
||||
WifiNetworkModel.Active(
|
||||
NETWORK_ID,
|
||||
isValidated = true,
|
||||
level = 1
|
||||
wifiRepository.setWifiNetwork(
|
||||
WifiNetworkModel.Active(NETWORK_ID, isValidated = true, level = 1)
|
||||
)
|
||||
)
|
||||
yield()
|
||||
yield()
|
||||
|
||||
assertThat(latestHome).isInstanceOf(WifiIcon.Visible::class.java)
|
||||
assertThat(latestHome).isEqualTo(latestKeyguard)
|
||||
assertThat(latestKeyguard).isEqualTo(latestQs)
|
||||
assertThat(latestHome).isInstanceOf(WifiIcon.Visible::class.java)
|
||||
assertThat(latestHome).isEqualTo(latestKeyguard)
|
||||
assertThat(latestKeyguard).isEqualTo(latestQs)
|
||||
|
||||
jobHome.cancel()
|
||||
jobKeyguard.cancel()
|
||||
jobQs.cancel()
|
||||
}
|
||||
jobHome.cancel()
|
||||
jobKeyguard.cancel()
|
||||
jobQs.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activity_showActivityConfigFalse_outputsFalse() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activity_showActivityConfigFalse_outputsFalse() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var activityIn: Boolean? = null
|
||||
val activityInJob = underTest
|
||||
.home
|
||||
.isActivityInViewVisible
|
||||
.onEach { activityIn = it }
|
||||
.launchIn(this)
|
||||
var activityIn: Boolean? = null
|
||||
val activityInJob =
|
||||
underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
|
||||
|
||||
var activityOut: Boolean? = null
|
||||
val activityOutJob = underTest
|
||||
.home
|
||||
.isActivityOutViewVisible
|
||||
.onEach { activityOut = it }
|
||||
.launchIn(this)
|
||||
var activityOut: Boolean? = null
|
||||
val activityOutJob =
|
||||
underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
|
||||
|
||||
var activityContainer: Boolean? = null
|
||||
val activityContainerJob = underTest
|
||||
.home
|
||||
.isActivityContainerVisible
|
||||
.onEach { activityContainer = it }
|
||||
.launchIn(this)
|
||||
var activityContainer: Boolean? = null
|
||||
val activityContainerJob =
|
||||
underTest.home.isActivityContainerVisible
|
||||
.onEach { activityContainer = it }
|
||||
.launchIn(this)
|
||||
|
||||
// Verify that on launch, we receive false.
|
||||
assertThat(activityIn).isFalse()
|
||||
assertThat(activityOut).isFalse()
|
||||
assertThat(activityContainer).isFalse()
|
||||
// Verify that on launch, we receive false.
|
||||
assertThat(activityIn).isFalse()
|
||||
assertThat(activityOut).isFalse()
|
||||
assertThat(activityContainer).isFalse()
|
||||
|
||||
activityInJob.cancel()
|
||||
activityOutJob.cancel()
|
||||
activityContainerJob.cancel()
|
||||
}
|
||||
activityInJob.cancel()
|
||||
activityOutJob.cancel()
|
||||
activityContainerJob.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activity_showActivityConfigFalse_noUpdatesReceived() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activity_showActivityConfigFalse_noUpdatesReceived() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(false)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var activityIn: Boolean? = null
|
||||
val activityInJob = underTest
|
||||
.home
|
||||
.isActivityInViewVisible
|
||||
.onEach { activityIn = it }
|
||||
.launchIn(this)
|
||||
var activityIn: Boolean? = null
|
||||
val activityInJob =
|
||||
underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
|
||||
|
||||
var activityOut: Boolean? = null
|
||||
val activityOutJob = underTest
|
||||
.home
|
||||
.isActivityOutViewVisible
|
||||
.onEach { activityOut = it }
|
||||
.launchIn(this)
|
||||
var activityOut: Boolean? = null
|
||||
val activityOutJob =
|
||||
underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
|
||||
|
||||
var activityContainer: Boolean? = null
|
||||
val activityContainerJob = underTest
|
||||
.home
|
||||
.isActivityContainerVisible
|
||||
.onEach { activityContainer = it }
|
||||
.launchIn(this)
|
||||
var activityContainer: Boolean? = null
|
||||
val activityContainerJob =
|
||||
underTest.home.isActivityContainerVisible
|
||||
.onEach { activityContainer = it }
|
||||
.launchIn(this)
|
||||
|
||||
// WHEN we update the repo to have activity
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
// WHEN we update the repo to have activity
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
// THEN we didn't update to the new activity (because our config is false)
|
||||
assertThat(activityIn).isFalse()
|
||||
assertThat(activityOut).isFalse()
|
||||
assertThat(activityContainer).isFalse()
|
||||
// THEN we didn't update to the new activity (because our config is false)
|
||||
assertThat(activityIn).isFalse()
|
||||
assertThat(activityOut).isFalse()
|
||||
assertThat(activityContainer).isFalse()
|
||||
|
||||
activityInJob.cancel()
|
||||
activityOutJob.cancel()
|
||||
activityContainerJob.cancel()
|
||||
}
|
||||
activityInJob.cancel()
|
||||
activityOutJob.cancel()
|
||||
activityContainerJob.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activity_nullSsid_outputsFalse() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
fun activity_nullSsid_outputsFalse() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
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
|
||||
val activityInJob = underTest
|
||||
.home
|
||||
.isActivityInViewVisible
|
||||
.onEach { activityIn = it }
|
||||
.launchIn(this)
|
||||
var activityIn: Boolean? = null
|
||||
val activityInJob =
|
||||
underTest.home.isActivityInViewVisible.onEach { activityIn = it }.launchIn(this)
|
||||
|
||||
var activityOut: Boolean? = null
|
||||
val activityOutJob = underTest
|
||||
.home
|
||||
.isActivityOutViewVisible
|
||||
.onEach { activityOut = it }
|
||||
.launchIn(this)
|
||||
var activityOut: Boolean? = null
|
||||
val activityOutJob =
|
||||
underTest.home.isActivityOutViewVisible.onEach { activityOut = it }.launchIn(this)
|
||||
|
||||
var activityContainer: Boolean? = null
|
||||
val activityContainerJob = underTest
|
||||
.home
|
||||
.isActivityContainerVisible
|
||||
.onEach { activityContainer = it }
|
||||
.launchIn(this)
|
||||
var activityContainer: Boolean? = null
|
||||
val activityContainerJob =
|
||||
underTest.home.isActivityContainerVisible
|
||||
.onEach { activityContainer = it }
|
||||
.launchIn(this)
|
||||
|
||||
// WHEN we update the repo to have activity
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
// WHEN we update the repo to have activity
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
// THEN we still output false because our network's SSID is null
|
||||
assertThat(activityIn).isFalse()
|
||||
assertThat(activityOut).isFalse()
|
||||
assertThat(activityContainer).isFalse()
|
||||
// THEN we still output false because our network's SSID is null
|
||||
assertThat(activityIn).isFalse()
|
||||
assertThat(activityOut).isFalse()
|
||||
assertThat(activityContainer).isFalse()
|
||||
|
||||
activityInJob.cancel()
|
||||
activityOutJob.cancel()
|
||||
activityContainerJob.cancel()
|
||||
}
|
||||
activityInJob.cancel()
|
||||
activityOutJob.cancel()
|
||||
activityContainerJob.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activity_allLocationViewModelsReceiveSameData() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activity_allLocationViewModelsReceiveSameData() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latestHome: Boolean? = null
|
||||
val jobHome = underTest
|
||||
.home
|
||||
.isActivityInViewVisible
|
||||
.onEach { latestHome = it }
|
||||
.launchIn(this)
|
||||
var latestHome: Boolean? = null
|
||||
val jobHome =
|
||||
underTest.home.isActivityInViewVisible.onEach { latestHome = it }.launchIn(this)
|
||||
|
||||
var latestKeyguard: Boolean? = null
|
||||
val jobKeyguard = underTest
|
||||
.keyguard
|
||||
.isActivityInViewVisible
|
||||
.onEach { latestKeyguard = it }
|
||||
.launchIn(this)
|
||||
var latestKeyguard: Boolean? = null
|
||||
val jobKeyguard =
|
||||
underTest.keyguard.isActivityInViewVisible
|
||||
.onEach { latestKeyguard = it }
|
||||
.launchIn(this)
|
||||
|
||||
var latestQs: Boolean? = null
|
||||
val jobQs = underTest
|
||||
.qs
|
||||
.isActivityInViewVisible
|
||||
.onEach { latestQs = it }
|
||||
.launchIn(this)
|
||||
var latestQs: Boolean? = null
|
||||
val jobQs = underTest.qs.isActivityInViewVisible.onEach { latestQs = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latestHome).isTrue()
|
||||
assertThat(latestKeyguard).isTrue()
|
||||
assertThat(latestQs).isTrue()
|
||||
assertThat(latestHome).isTrue()
|
||||
assertThat(latestKeyguard).isTrue()
|
||||
assertThat(latestQs).isTrue()
|
||||
|
||||
jobHome.cancel()
|
||||
jobKeyguard.cancel()
|
||||
jobQs.cancel()
|
||||
}
|
||||
jobHome.cancel()
|
||||
jobKeyguard.cancel()
|
||||
jobQs.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activityIn_hasActivityInTrue_outputsTrue() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activityIn_hasActivityInTrue_outputsTrue() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.home
|
||||
.isActivityInViewVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.home.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activityIn_hasActivityInFalse_outputsFalse() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activityIn_hasActivityInFalse_outputsFalse() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.home
|
||||
.isActivityInViewVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.home.isActivityInViewVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activityOut_hasActivityOutTrue_outputsTrue() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activityOut_hasActivityOutTrue_outputsTrue() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.home
|
||||
.isActivityOutViewVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.home.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activityOut_hasActivityOutFalse_outputsFalse() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activityOut_hasActivityOutFalse_outputsFalse() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.home
|
||||
.isActivityOutViewVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.home.isActivityOutViewVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activityContainer_hasActivityInTrue_outputsTrue() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activityContainer_hasActivityInTrue_outputsTrue() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.home
|
||||
.isActivityContainerVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job =
|
||||
underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activityContainer_hasActivityOutTrue_outputsTrue() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activityContainer_hasActivityOutTrue_outputsTrue() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.home
|
||||
.isActivityContainerVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job =
|
||||
underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activityContainer_inAndOutTrue_outputsTrue() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activityContainer_inAndOutTrue_outputsTrue() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.home
|
||||
.isActivityContainerVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job =
|
||||
underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activityContainer_inAndOutFalse_outputsFalse() = runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
fun activityContainer_inAndOutFalse_outputsFalse() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true)
|
||||
createAndSetViewModel()
|
||||
wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK)
|
||||
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.home
|
||||
.isActivityContainerVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
var latest: Boolean? = null
|
||||
val job =
|
||||
underTest.home.isActivityContainerVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun airplaneSpacer_notAirplaneMode_outputsFalse() = runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.qs
|
||||
.isAirplaneSpacerVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
fun airplaneSpacer_notAirplaneMode_outputsFalse() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
airplaneModeRepository.setIsAirplaneMode(false)
|
||||
yield()
|
||||
airplaneModeRepository.setIsAirplaneMode(false)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun airplaneSpacer_airplaneForceHidden_outputsFalse() = runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.qs
|
||||
.isAirplaneSpacerVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
fun airplaneSpacer_airplaneForceHidden_outputsFalse() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
airplaneModeRepository.setIsAirplaneMode(true)
|
||||
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.AIRPLANE))
|
||||
yield()
|
||||
airplaneModeRepository.setIsAirplaneMode(true)
|
||||
connectivityRepository.setForceHiddenIcons(setOf(ConnectivitySlot.AIRPLANE))
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun airplaneSpacer_airplaneIconVisible_outputsTrue() = runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest
|
||||
.qs
|
||||
.isAirplaneSpacerVisible
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
fun airplaneSpacer_airplaneIconVisible_outputsTrue() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.qs.isAirplaneSpacerVisible.onEach { latest = it }.launchIn(this)
|
||||
|
||||
airplaneModeRepository.setIsAirplaneMode(true)
|
||||
yield()
|
||||
airplaneModeRepository.setIsAirplaneMode(true)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
private fun createAndSetViewModel() {
|
||||
// [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
|
||||
// allows tests to create the view model only after those configs are correctly set up.
|
||||
underTest = WifiViewModel(
|
||||
airplaneModeViewModel,
|
||||
connectivityConstants,
|
||||
context,
|
||||
logger,
|
||||
tableLogBuffer,
|
||||
interactor,
|
||||
scope,
|
||||
statusBarPipelineFlags,
|
||||
wifiConstants,
|
||||
)
|
||||
underTest =
|
||||
WifiViewModel(
|
||||
airplaneModeViewModel,
|
||||
connectivityConstants,
|
||||
context,
|
||||
logger,
|
||||
tableLogBuffer,
|
||||
interactor,
|
||||
scope,
|
||||
statusBarPipelineFlags,
|
||||
wifiConstants,
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
Reference in New Issue
Block a user