Merge changes from topic "wifi-data-activity-model" into tm-qpr-dev
* changes: [Sb refactor] Move WifiActivityModel to shared [Status bar refactor] Add Roaming to the mobile pipeline
This commit is contained in:
@@ -41,6 +41,7 @@ import com.android.systemui.statusbar.pipeline.mobile.data.model.DataConnectionS
|
||||
data class MobileConnectionModel(
|
||||
/** From [ServiceStateListener.onServiceStateChanged] */
|
||||
val isEmergencyOnly: Boolean = false,
|
||||
val isRoaming: Boolean = false,
|
||||
|
||||
/** From [SignalStrengthsListener.onSignalStrengthsChanged] */
|
||||
val isGsm: Boolean = false,
|
||||
|
||||
@@ -50,4 +50,12 @@ interface MobileConnectionRepository {
|
||||
* [SubscriptionManager.getDefaultDataSubscriptionId]
|
||||
*/
|
||||
val isDefaultDataSubscription: StateFlow<Boolean>
|
||||
|
||||
/**
|
||||
* See [TelephonyManager.getCdmaEnhancedRoamingIndicatorDisplayNumber]. This bit only matters if
|
||||
* the connection type is CDMA.
|
||||
*
|
||||
* True if the Enhanced Roaming Indicator (ERI) display number is not [TelephonyManager.ERI_OFF]
|
||||
*/
|
||||
val cdmaRoaming: StateFlow<Boolean>
|
||||
}
|
||||
|
||||
@@ -186,6 +186,7 @@ constructor(
|
||||
connection.dataEnabled.value = true
|
||||
connection.isDefaultDataSubscription.value = state.dataType != null
|
||||
|
||||
connection.cdmaRoaming.value = state.roaming
|
||||
connection.connectionInfo.value = state.toMobileConnectionModel()
|
||||
}
|
||||
|
||||
@@ -229,6 +230,7 @@ constructor(
|
||||
private fun Mobile.toMobileConnectionModel(): MobileConnectionModel {
|
||||
return MobileConnectionModel(
|
||||
isEmergencyOnly = false, // TODO(b/261029387): not yet supported
|
||||
isRoaming = roaming,
|
||||
isGsm = false, // TODO(b/261029387): not yet supported
|
||||
cdmaLevel = level ?: 0,
|
||||
primaryLevel = level ?: 0,
|
||||
@@ -260,4 +262,6 @@ class DemoMobileConnectionRepository(override val subId: Int) : MobileConnection
|
||||
override val dataEnabled = MutableStateFlow(true)
|
||||
|
||||
override val isDefaultDataSubscription = MutableStateFlow(true)
|
||||
|
||||
override val cdmaRoaming = MutableStateFlow(false)
|
||||
}
|
||||
|
||||
@@ -98,6 +98,7 @@ constructor(
|
||||
val inflateStrength = getString("inflate")?.toBoolean()
|
||||
val activity = getString("activity")?.toActivity()
|
||||
val carrierNetworkChange = getString("carriernetworkchange") == "show"
|
||||
val roaming = getString("roam") == "show"
|
||||
|
||||
return Mobile(
|
||||
level = level,
|
||||
@@ -107,6 +108,7 @@ constructor(
|
||||
inflateStrength = inflateStrength,
|
||||
activity = activity,
|
||||
carrierNetworkChange = carrierNetworkChange,
|
||||
roaming = roaming,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ sealed interface FakeNetworkEventModel {
|
||||
val inflateStrength: Boolean?,
|
||||
@DataActivityType val activity: Int?,
|
||||
val carrierNetworkChange: Boolean,
|
||||
val roaming: Boolean,
|
||||
) : FakeNetworkEventModel
|
||||
|
||||
data class MobileDisabled(
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.telephony.TelephonyCallback
|
||||
import android.telephony.TelephonyDisplayInfo
|
||||
import android.telephony.TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE
|
||||
import android.telephony.TelephonyManager
|
||||
import android.telephony.TelephonyManager.ERI_OFF
|
||||
import android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN
|
||||
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
|
||||
import com.android.systemui.dagger.qualifiers.Application
|
||||
@@ -95,7 +96,11 @@ class MobileConnectionRepositoryImpl(
|
||||
TelephonyCallback.CarrierNetworkListener,
|
||||
TelephonyCallback.DisplayInfoListener {
|
||||
override fun onServiceStateChanged(serviceState: ServiceState) {
|
||||
state = state.copy(isEmergencyOnly = serviceState.isEmergencyOnly)
|
||||
state =
|
||||
state.copy(
|
||||
isEmergencyOnly = serviceState.isEmergencyOnly,
|
||||
isRoaming = serviceState.roaming,
|
||||
)
|
||||
trySend(state)
|
||||
}
|
||||
|
||||
@@ -208,6 +213,11 @@ class MobileConnectionRepositoryImpl(
|
||||
globalMobileDataSettingChangedEvent,
|
||||
)
|
||||
|
||||
override val cdmaRoaming: StateFlow<Boolean> =
|
||||
telephonyPollingEvent
|
||||
.mapLatest { telephonyManager.cdmaEnhancedRoamingIndicatorDisplayNumber != ERI_OFF }
|
||||
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
|
||||
|
||||
override val dataEnabled: StateFlow<Boolean> =
|
||||
telephonyPollingEvent
|
||||
.mapLatest { dataConnectionAllowed() }
|
||||
|
||||
@@ -54,6 +54,13 @@ interface MobileIconInteractor {
|
||||
/** True if this line of service is emergency-only */
|
||||
val isEmergencyOnly: StateFlow<Boolean>
|
||||
|
||||
/**
|
||||
* True if this connection is considered roaming. The roaming bit can come from [ServiceState],
|
||||
* or directly from the telephony manager's CDMA ERI number value. Note that we don't consider a
|
||||
* connection to be roaming while carrier network change is active
|
||||
*/
|
||||
val isRoaming: StateFlow<Boolean>
|
||||
|
||||
/** Int describing the connection strength. 0-4 OR 1-5. See [numberOfLevels] */
|
||||
val level: StateFlow<Int>
|
||||
|
||||
@@ -95,6 +102,18 @@ class MobileIconInteractorImpl(
|
||||
.mapLatest { it.isEmergencyOnly }
|
||||
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
|
||||
|
||||
override val isRoaming: StateFlow<Boolean> =
|
||||
combine(connectionInfo, connectionRepository.cdmaRoaming) { connection, cdmaRoaming ->
|
||||
if (connection.carrierNetworkChangeActive) {
|
||||
false
|
||||
} else if (connection.isGsm) {
|
||||
connection.isRoaming
|
||||
} else {
|
||||
cdmaRoaming
|
||||
}
|
||||
}
|
||||
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
|
||||
|
||||
override val level: StateFlow<Int> =
|
||||
connectionInfo
|
||||
.mapLatest { connection ->
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.view.View.GONE
|
||||
import android.view.View.VISIBLE
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.Space
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
@@ -29,7 +30,6 @@ import com.android.systemui.R
|
||||
import com.android.systemui.common.ui.binder.IconViewBinder
|
||||
import com.android.systemui.lifecycle.repeatWhenAttached
|
||||
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconViewModel
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@@ -43,6 +43,8 @@ object MobileIconBinder {
|
||||
val networkTypeView = view.requireViewById<ImageView>(R.id.mobile_type)
|
||||
val iconView = view.requireViewById<ImageView>(R.id.mobile_signal)
|
||||
val mobileDrawable = SignalDrawable(view.context).also { iconView.setImageDrawable(it) }
|
||||
val roamingView = view.requireViewById<ImageView>(R.id.mobile_roaming)
|
||||
val roamingSpace = view.requireViewById<Space>(R.id.mobile_roaming_space)
|
||||
|
||||
view.isVisible = true
|
||||
iconView.isVisible = true
|
||||
@@ -64,12 +66,21 @@ object MobileIconBinder {
|
||||
}
|
||||
}
|
||||
|
||||
// Set the roaming indicator
|
||||
launch {
|
||||
viewModel.roaming.distinctUntilChanged().collect { isRoaming ->
|
||||
roamingView.isVisible = isRoaming
|
||||
roamingSpace.isVisible = isRoaming
|
||||
}
|
||||
}
|
||||
|
||||
// Set the tint
|
||||
launch {
|
||||
viewModel.tint.collect { tint ->
|
||||
val tintList = ColorStateList.valueOf(tint)
|
||||
iconView.imageTintList = tintList
|
||||
networkTypeView.imageTintList = tintList
|
||||
roamingView.imageTintList = tintList
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,5 +87,7 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
val roaming: Flow<Boolean> = iconInteractor.isRoaming
|
||||
|
||||
val tint: Flow<Int> = flowOf(Color.CYAN)
|
||||
}
|
||||
|
||||
@@ -14,20 +14,19 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.statusbar.pipeline.wifi.shared.model
|
||||
package com.android.systemui.statusbar.pipeline.shared.data.model
|
||||
|
||||
import com.android.systemui.log.table.Diffable
|
||||
import com.android.systemui.log.table.TableRowLogger
|
||||
|
||||
/** Provides information on the current wifi activity. */
|
||||
data class WifiActivityModel(
|
||||
/** True if the wifi has activity in (download). */
|
||||
/** Provides information about the current data activity direction */
|
||||
data class DataActivityModel(
|
||||
/** True if the connection has activity in (download). */
|
||||
val hasActivityIn: Boolean,
|
||||
/** True if the wifi has activity out (upload). */
|
||||
/** True if the connection has activity out (upload). */
|
||||
val hasActivityOut: Boolean,
|
||||
) : Diffable<WifiActivityModel> {
|
||||
|
||||
override fun logDiffs(prevVal: WifiActivityModel, row: TableRowLogger) {
|
||||
) : Diffable<DataActivityModel> {
|
||||
override fun logDiffs(prevVal: DataActivityModel, row: TableRowLogger) {
|
||||
if (prevVal.hasActivityIn != hasActivityIn) {
|
||||
row.logChange(COL_ACTIVITY_IN, hasActivityIn)
|
||||
}
|
||||
@@ -42,6 +41,6 @@ data class WifiActivityModel(
|
||||
}
|
||||
}
|
||||
|
||||
const val ACTIVITY_PREFIX = "wifiActivity"
|
||||
const val ACTIVITY_PREFIX = "dataActivity"
|
||||
private const val COL_ACTIVITY_IN = "in"
|
||||
private const val COL_ACTIVITY_OUT = "out"
|
||||
@@ -42,9 +42,8 @@ import com.android.systemui.statusbar.pipeline.dagger.WifiTableLog
|
||||
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
|
||||
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.SB_LOGGING_TAG
|
||||
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.wifi.data.model.WifiNetworkModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.ACTIVITY_PREFIX
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel
|
||||
import java.util.concurrent.Executor
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -74,7 +73,7 @@ interface WifiRepository {
|
||||
val wifiNetwork: StateFlow<WifiNetworkModel>
|
||||
|
||||
/** Observable for the current wifi network activity. */
|
||||
val wifiActivity: StateFlow<WifiActivityModel>
|
||||
val wifiActivity: StateFlow<DataActivityModel>
|
||||
}
|
||||
|
||||
/** Real implementation of [WifiRepository]. */
|
||||
@@ -230,7 +229,7 @@ class WifiRepositoryImpl @Inject constructor(
|
||||
initialValue = WIFI_NETWORK_DEFAULT
|
||||
)
|
||||
|
||||
override val wifiActivity: StateFlow<WifiActivityModel> =
|
||||
override val wifiActivity: StateFlow<DataActivityModel> =
|
||||
if (wifiManager == null) {
|
||||
Log.w(SB_LOGGING_TAG, "Null WifiManager; skipping activity callback")
|
||||
flowOf(ACTIVITY_DEFAULT)
|
||||
@@ -238,7 +237,7 @@ class WifiRepositoryImpl @Inject constructor(
|
||||
conflatedCallbackFlow {
|
||||
val callback = TrafficStateCallback { state ->
|
||||
logger.logInputChange("onTrafficStateChange", prettyPrintActivity(state))
|
||||
trySend(trafficStateToWifiActivityModel(state))
|
||||
trySend(trafficStateToDataActivityModel(state))
|
||||
}
|
||||
wifiManager.registerTrafficStateCallback(mainExecutor, callback)
|
||||
awaitClose { wifiManager.unregisterTrafficStateCallback(callback) }
|
||||
@@ -256,7 +255,9 @@ class WifiRepositoryImpl @Inject constructor(
|
||||
)
|
||||
|
||||
companion object {
|
||||
val ACTIVITY_DEFAULT = WifiActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
private const val ACTIVITY_PREFIX = "wifiActivity"
|
||||
|
||||
val ACTIVITY_DEFAULT = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
// Start out with no known wifi network.
|
||||
// Note: [WifiStatusTracker] (the old implementation of connectivity logic) does do an
|
||||
// initial fetch to get a starting wifi network. But, it uses a deprecated API
|
||||
@@ -265,8 +266,8 @@ class WifiRepositoryImpl @Inject constructor(
|
||||
// NetworkCallback inside [wifiNetwork] for our wifi network information.
|
||||
val WIFI_NETWORK_DEFAULT = WifiNetworkModel.Inactive
|
||||
|
||||
private fun trafficStateToWifiActivityModel(state: Int): WifiActivityModel {
|
||||
return WifiActivityModel(
|
||||
private fun trafficStateToDataActivityModel(state: Int): DataActivityModel {
|
||||
return DataActivityModel(
|
||||
hasActivityIn = state == TrafficStateCallback.DATA_ACTIVITY_IN ||
|
||||
state == TrafficStateCallback.DATA_ACTIVITY_INOUT,
|
||||
hasActivityOut = state == TrafficStateCallback.DATA_ACTIVITY_OUT ||
|
||||
|
||||
@@ -19,10 +19,10 @@ package com.android.systemui.statusbar.pipeline.wifi.domain.interactor
|
||||
import android.net.wifi.WifiManager
|
||||
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.WifiActivityModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
@@ -50,8 +50,8 @@ interface WifiInteractor {
|
||||
/** Our current wifi network. See [WifiNetworkModel]. */
|
||||
val wifiNetwork: Flow<WifiNetworkModel>
|
||||
|
||||
/** Our current wifi activity. See [WifiActivityModel]. */
|
||||
val activity: StateFlow<WifiActivityModel>
|
||||
/** Our current wifi activity. See [DataActivityModel]. */
|
||||
val activity: StateFlow<DataActivityModel>
|
||||
|
||||
/** True if we're configured to force-hide the wifi icon and false otherwise. */
|
||||
val isForceHidden: Flow<Boolean>
|
||||
@@ -82,7 +82,7 @@ class WifiInteractorImpl @Inject constructor(
|
||||
|
||||
override val wifiNetwork: Flow<WifiNetworkModel> = wifiRepository.wifiNetwork
|
||||
|
||||
override val activity: StateFlow<WifiActivityModel> = wifiRepository.wifiActivity
|
||||
override val activity: StateFlow<DataActivityModel> = wifiRepository.wifiActivity
|
||||
|
||||
override val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots.map {
|
||||
it.contains(ConnectivitySlot.WIFI)
|
||||
|
||||
@@ -37,10 +37,10 @@ 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.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.WifiActivityModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
@@ -147,7 +147,7 @@ constructor(
|
||||
)
|
||||
|
||||
/** The wifi activity status. Null if we shouldn't display the activity status. */
|
||||
private val activity: Flow<WifiActivityModel?> =
|
||||
private val activity: Flow<DataActivityModel?> =
|
||||
if (!wifiConstants.shouldShowActivityConfig) {
|
||||
flowOf(null)
|
||||
} else {
|
||||
|
||||
@@ -30,6 +30,8 @@ class FakeMobileConnectionRepository(override val subId: Int) : MobileConnection
|
||||
private val _isDefaultDataSubscription = MutableStateFlow(true)
|
||||
override val isDefaultDataSubscription = _isDefaultDataSubscription
|
||||
|
||||
override val cdmaRoaming = MutableStateFlow(false)
|
||||
|
||||
fun setConnectionInfo(model: MobileConnectionModel) {
|
||||
_connectionInfo.value = model
|
||||
}
|
||||
|
||||
@@ -95,6 +95,7 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
inflateStrength = testCase.inflateStrength,
|
||||
activity = testCase.activity,
|
||||
carrierNetworkChange = testCase.carrierNetworkChange,
|
||||
roaming = testCase.roaming,
|
||||
)
|
||||
|
||||
fakeNetworkEventFlow.value = networkModel
|
||||
@@ -116,6 +117,7 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
assertThat(connectionInfo.dataActivityDirection).isEqualTo(model.activity)
|
||||
assertThat(connectionInfo.carrierNetworkChangeActive)
|
||||
.isEqualTo(model.carrierNetworkChange)
|
||||
assertThat(connectionInfo.isRoaming).isEqualTo(model.roaming)
|
||||
|
||||
// TODO(b/261029387): check these once we start handling them
|
||||
assertThat(connectionInfo.isEmergencyOnly).isFalse()
|
||||
@@ -138,6 +140,7 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
val inflateStrength: Boolean,
|
||||
@Annotation.DataActivityType val activity: Int,
|
||||
val carrierNetworkChange: Boolean,
|
||||
val roaming: Boolean,
|
||||
) {
|
||||
override fun toString(): String {
|
||||
return "INPUT(level=$level, " +
|
||||
@@ -146,7 +149,8 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
"carrierId=$carrierId, " +
|
||||
"inflateStrength=$inflateStrength, " +
|
||||
"activity=$activity, " +
|
||||
"carrierNetworkChange=$carrierNetworkChange)"
|
||||
"carrierNetworkChange=$carrierNetworkChange, " +
|
||||
"roaming=$roaming)"
|
||||
}
|
||||
|
||||
// Convenience for iterating test data and creating new cases
|
||||
@@ -158,6 +162,7 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
inflateStrength: Boolean? = null,
|
||||
@Annotation.DataActivityType activity: Int? = null,
|
||||
carrierNetworkChange: Boolean? = null,
|
||||
roaming: Boolean? = null,
|
||||
): TestCase =
|
||||
TestCase(
|
||||
level = level ?: this.level,
|
||||
@@ -166,7 +171,8 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
carrierId = carrierId ?: this.carrierId,
|
||||
inflateStrength = inflateStrength ?: this.inflateStrength,
|
||||
activity = activity ?: this.activity,
|
||||
carrierNetworkChange = carrierNetworkChange ?: this.carrierNetworkChange
|
||||
carrierNetworkChange = carrierNetworkChange ?: this.carrierNetworkChange,
|
||||
roaming = roaming ?: this.roaming,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -193,6 +199,8 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
TelephonyManager.DATA_ACTIVITY_INOUT
|
||||
)
|
||||
private val carrierNetworkChange = booleanList
|
||||
// false first so the base case doesn't have roaming set (more common)
|
||||
private val roaming = listOf(false, true)
|
||||
|
||||
@Parameters(name = "{0}") @JvmStatic fun data() = testData()
|
||||
|
||||
@@ -226,7 +234,8 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
carrierIds.first(),
|
||||
inflateStrength.first(),
|
||||
activity.first(),
|
||||
carrierNetworkChange.first()
|
||||
carrierNetworkChange.first(),
|
||||
roaming.first(),
|
||||
)
|
||||
|
||||
val tail =
|
||||
@@ -237,6 +246,7 @@ internal class DemoMobileConnectionParameterizedTest(private val testCase: TestC
|
||||
inflateStrength.map { baseCase.modifiedBy(inflateStrength = it) },
|
||||
activity.map { baseCase.modifiedBy(activity = it) },
|
||||
carrierNetworkChange.map { baseCase.modifiedBy(carrierNetworkChange = it) },
|
||||
roaming.map { baseCase.modifiedBy(roaming = it) }
|
||||
)
|
||||
.flatten()
|
||||
|
||||
|
||||
@@ -292,6 +292,7 @@ class DemoMobileConnectionsRepositoryTest : SysuiTestCase() {
|
||||
assertThat(connectionInfo.dataActivityDirection).isEqualTo(model.activity)
|
||||
assertThat(connectionInfo.carrierNetworkChangeActive)
|
||||
.isEqualTo(model.carrierNetworkChange)
|
||||
assertThat(connectionInfo.isRoaming).isEqualTo(model.roaming)
|
||||
|
||||
// TODO(b/261029387) check these once we start handling them
|
||||
assertThat(connectionInfo.isEmergencyOnly).isFalse()
|
||||
@@ -313,6 +314,7 @@ fun validMobileEvent(
|
||||
inflateStrength: Boolean? = false,
|
||||
activity: Int? = null,
|
||||
carrierNetworkChange: Boolean = false,
|
||||
roaming: Boolean = false,
|
||||
): FakeNetworkEventModel =
|
||||
FakeNetworkEventModel.Mobile(
|
||||
level = level,
|
||||
@@ -322,4 +324,5 @@ fun validMobileEvent(
|
||||
inflateStrength = inflateStrength,
|
||||
activity = activity,
|
||||
carrierNetworkChange = carrierNetworkChange,
|
||||
roaming = roaming,
|
||||
)
|
||||
|
||||
@@ -32,6 +32,8 @@ import android.telephony.TelephonyManager.DATA_CONNECTING
|
||||
import android.telephony.TelephonyManager.DATA_DISCONNECTED
|
||||
import android.telephony.TelephonyManager.DATA_DISCONNECTING
|
||||
import android.telephony.TelephonyManager.DATA_UNKNOWN
|
||||
import android.telephony.TelephonyManager.ERI_OFF
|
||||
import android.telephony.TelephonyManager.ERI_ON
|
||||
import android.telephony.TelephonyManager.NETWORK_TYPE_LTE
|
||||
import android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN
|
||||
import androidx.test.filters.SmallTest
|
||||
@@ -402,6 +404,61 @@ class MobileConnectionRepositoryTest : SysuiTestCase() {
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `roaming - cdma - queries telephony manager`() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
// Start the telephony collection job so that cdmaRoaming starts updating
|
||||
val telephonyJob = underTest.connectionInfo.launchIn(this)
|
||||
val job = underTest.cdmaRoaming.onEach { latest = it }.launchIn(this)
|
||||
|
||||
val cb = getTelephonyCallbackForType<ServiceStateListener>()
|
||||
|
||||
val serviceState = ServiceState()
|
||||
serviceState.roaming = false
|
||||
|
||||
// CDMA roaming is off, GSM roaming is off
|
||||
whenever(telephonyManager.cdmaEnhancedRoamingIndicatorDisplayNumber).thenReturn(ERI_OFF)
|
||||
cb.onServiceStateChanged(serviceState)
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
// CDMA roaming is off, GSM roaming is on
|
||||
whenever(telephonyManager.cdmaEnhancedRoamingIndicatorDisplayNumber).thenReturn(ERI_ON)
|
||||
cb.onServiceStateChanged(serviceState)
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
telephonyJob.cancel()
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `roaming - gsm - queries service state`() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.connectionInfo.onEach { latest = it.isRoaming }.launchIn(this)
|
||||
|
||||
val serviceState = ServiceState()
|
||||
serviceState.roaming = false
|
||||
|
||||
val cb = getTelephonyCallbackForType<ServiceStateListener>()
|
||||
|
||||
// CDMA roaming is off, GSM roaming is off
|
||||
whenever(telephonyManager.cdmaEnhancedRoamingIndicatorDisplayNumber).thenReturn(ERI_OFF)
|
||||
cb.onServiceStateChanged(serviceState)
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
// CDMA roaming is off, GSM roaming is on
|
||||
serviceState.roaming = true
|
||||
cb.onServiceStateChanged(serviceState)
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
private fun getTelephonyCallbacks(): List<TelephonyCallback> {
|
||||
val callbackCaptor = argumentCaptor<TelephonyCallback>()
|
||||
Mockito.verify(telephonyManager).registerTelephonyCallback(any(), callbackCaptor.capture())
|
||||
|
||||
@@ -30,6 +30,8 @@ class FakeMobileIconInteractor : MobileIconInteractor {
|
||||
private val _isEmergencyOnly = MutableStateFlow(false)
|
||||
override val isEmergencyOnly = _isEmergencyOnly
|
||||
|
||||
override val isRoaming = MutableStateFlow(false)
|
||||
|
||||
private val _isFailedConnection = MutableStateFlow(false)
|
||||
override val isDefaultConnectionFailed = _isFailedConnection
|
||||
|
||||
|
||||
@@ -298,6 +298,100 @@ class MobileIconInteractorTest : SysuiTestCase() {
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `roaming - is gsm - uses connection model`() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.isRoaming.onEach { latest = it }.launchIn(this)
|
||||
|
||||
connectionRepository.cdmaRoaming.value = true
|
||||
connectionRepository.setConnectionInfo(
|
||||
MobileConnectionModel(
|
||||
isGsm = true,
|
||||
isRoaming = false,
|
||||
)
|
||||
)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
connectionRepository.setConnectionInfo(
|
||||
MobileConnectionModel(
|
||||
isGsm = true,
|
||||
isRoaming = true,
|
||||
)
|
||||
)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `roaming - is cdma - uses cdma roaming bit`() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.isRoaming.onEach { latest = it }.launchIn(this)
|
||||
|
||||
connectionRepository.cdmaRoaming.value = false
|
||||
connectionRepository.setConnectionInfo(
|
||||
MobileConnectionModel(
|
||||
isGsm = false,
|
||||
isRoaming = true,
|
||||
)
|
||||
)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
connectionRepository.cdmaRoaming.value = true
|
||||
connectionRepository.setConnectionInfo(
|
||||
MobileConnectionModel(
|
||||
isGsm = false,
|
||||
isRoaming = false,
|
||||
)
|
||||
)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `roaming - false while carrierNetworkChangeActive`() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.isRoaming.onEach { latest = it }.launchIn(this)
|
||||
|
||||
connectionRepository.cdmaRoaming.value = true
|
||||
connectionRepository.setConnectionInfo(
|
||||
MobileConnectionModel(
|
||||
isGsm = false,
|
||||
isRoaming = true,
|
||||
carrierNetworkChangeActive = true,
|
||||
)
|
||||
)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
connectionRepository.cdmaRoaming.value = true
|
||||
connectionRepository.setConnectionInfo(
|
||||
MobileConnectionModel(
|
||||
isGsm = true,
|
||||
isRoaming = true,
|
||||
carrierNetworkChangeActive = true,
|
||||
)
|
||||
)
|
||||
yield()
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val IMMEDIATE = Dispatchers.Main.immediate
|
||||
|
||||
|
||||
@@ -234,6 +234,22 @@ class MobileIconViewModelTest : SysuiTestCase() {
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun roaming() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
interactor.isRoaming.value = true
|
||||
var latest: Boolean? = null
|
||||
val job = underTest.roaming.onEach { latest = it }.launchIn(this)
|
||||
|
||||
assertThat(latest).isTrue()
|
||||
|
||||
interactor.isRoaming.value = false
|
||||
|
||||
assertThat(latest).isFalse()
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
/** Convenience constructor for these tests */
|
||||
private fun defaultSignal(
|
||||
level: Int = 1,
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
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.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
@@ -35,7 +35,7 @@ class FakeWifiRepository : WifiRepository {
|
||||
override val wifiNetwork: StateFlow<WifiNetworkModel> = _wifiNetwork
|
||||
|
||||
private val _wifiActivity = MutableStateFlow(ACTIVITY_DEFAULT)
|
||||
override val wifiActivity: StateFlow<WifiActivityModel> = _wifiActivity
|
||||
override val wifiActivity: StateFlow<DataActivityModel> = _wifiActivity
|
||||
|
||||
fun setIsWifiEnabled(enabled: Boolean) {
|
||||
_isWifiEnabled.value = enabled
|
||||
@@ -49,7 +49,7 @@ class FakeWifiRepository : WifiRepository {
|
||||
_wifiNetwork.value = wifiNetworkModel
|
||||
}
|
||||
|
||||
fun setWifiActivity(activity: WifiActivityModel) {
|
||||
fun setWifiActivity(activity: DataActivityModel) {
|
||||
_wifiActivity.value = activity
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,10 +31,10 @@ import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher
|
||||
import com.android.systemui.log.table.TableLogBuffer
|
||||
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
|
||||
import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT
|
||||
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositoryImpl.Companion.WIFI_NETWORK_DEFAULT
|
||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel
|
||||
import com.android.systemui.util.concurrency.FakeExecutor
|
||||
import com.android.systemui.util.mockito.any
|
||||
import com.android.systemui.util.mockito.argumentCaptor
|
||||
@@ -724,7 +724,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
fun wifiActivity_nullWifiManager_receivesDefault() = runBlocking(IMMEDIATE) {
|
||||
underTest = createRepo(wifiManagerToUse = null)
|
||||
|
||||
var latest: WifiActivityModel? = null
|
||||
var latest: DataActivityModel? = null
|
||||
val job = underTest
|
||||
.wifiActivity
|
||||
.onEach { latest = it }
|
||||
@@ -737,7 +737,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
|
||||
@Test
|
||||
fun wifiActivity_callbackGivesNone_activityFlowHasNone() = runBlocking(IMMEDIATE) {
|
||||
var latest: WifiActivityModel? = null
|
||||
var latest: DataActivityModel? = null
|
||||
val job = underTest
|
||||
.wifiActivity
|
||||
.onEach { latest = it }
|
||||
@@ -746,7 +746,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_NONE)
|
||||
|
||||
assertThat(latest).isEqualTo(
|
||||
WifiActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
DataActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
)
|
||||
|
||||
job.cancel()
|
||||
@@ -754,7 +754,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
|
||||
@Test
|
||||
fun wifiActivity_callbackGivesIn_activityFlowHasIn() = runBlocking(IMMEDIATE) {
|
||||
var latest: WifiActivityModel? = null
|
||||
var latest: DataActivityModel? = null
|
||||
val job = underTest
|
||||
.wifiActivity
|
||||
.onEach { latest = it }
|
||||
@@ -763,7 +763,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_IN)
|
||||
|
||||
assertThat(latest).isEqualTo(
|
||||
WifiActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
)
|
||||
|
||||
job.cancel()
|
||||
@@ -771,7 +771,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
|
||||
@Test
|
||||
fun wifiActivity_callbackGivesOut_activityFlowHasOut() = runBlocking(IMMEDIATE) {
|
||||
var latest: WifiActivityModel? = null
|
||||
var latest: DataActivityModel? = null
|
||||
val job = underTest
|
||||
.wifiActivity
|
||||
.onEach { latest = it }
|
||||
@@ -780,7 +780,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_OUT)
|
||||
|
||||
assertThat(latest).isEqualTo(
|
||||
WifiActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
)
|
||||
|
||||
job.cancel()
|
||||
@@ -788,7 +788,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
|
||||
@Test
|
||||
fun wifiActivity_callbackGivesInout_activityFlowHasInAndOut() = runBlocking(IMMEDIATE) {
|
||||
var latest: WifiActivityModel? = null
|
||||
var latest: DataActivityModel? = null
|
||||
val job = underTest
|
||||
.wifiActivity
|
||||
.onEach { latest = it }
|
||||
@@ -796,7 +796,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
|
||||
|
||||
getTrafficStateCallback().onStateChanged(TrafficStateCallback.DATA_ACTIVITY_INOUT)
|
||||
|
||||
assertThat(latest).isEqualTo(WifiActivityModel(hasActivityIn = true, hasActivityOut = true))
|
||||
assertThat(latest).isEqualTo(DataActivityModel(hasActivityIn = true, hasActivityOut = true))
|
||||
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
@@ -20,10 +20,10 @@ import android.net.wifi.WifiManager
|
||||
import androidx.test.filters.SmallTest
|
||||
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.WifiActivityModel
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
@@ -225,23 +225,23 @@ class WifiInteractorImplTest : SysuiTestCase() {
|
||||
|
||||
@Test
|
||||
fun activity_matchesRepoWifiActivity() = runBlocking(IMMEDIATE) {
|
||||
var latest: WifiActivityModel? = null
|
||||
var latest: DataActivityModel? = null
|
||||
val job = underTest
|
||||
.activity
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity1 = WifiActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
val activity1 = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity1)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity1)
|
||||
|
||||
val activity2 = WifiActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
val activity2 = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity2)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity2)
|
||||
|
||||
val activity3 = WifiActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
val activity3 = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity3)
|
||||
yield()
|
||||
assertThat(latest).isEqualTo(activity3)
|
||||
|
||||
@@ -27,13 +27,13 @@ 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.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.WifiActivityModel
|
||||
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -209,7 +209,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.launchIn(this)
|
||||
|
||||
// WHEN we update the repo to have activity
|
||||
val activity = WifiActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -252,7 +252,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.launchIn(this)
|
||||
|
||||
// WHEN we update the repo to have activity
|
||||
val activity = WifiActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -293,7 +293,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latestQs = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -319,7 +319,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -341,7 +341,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -363,7 +363,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -385,7 +385,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -407,7 +407,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -429,7 +429,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -451,7 +451,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
@@ -473,7 +473,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
||||
.onEach { latest = it }
|
||||
.launchIn(this)
|
||||
|
||||
val activity = WifiActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false)
|
||||
wifiRepository.setWifiActivity(activity)
|
||||
yield()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user