summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2023-04-07 20:09:57 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-04-07 20:09:57 +0000
commit1ee0fb9a5f0b490eec00c77ff1f980e5b4a93572 (patch)
tree85478172ef3d2719b7db6df4c7d565a9a4527d27
parent613c69a8f7b2c0cb2ca5450d50739ab8c0612c4e (diff)
parent321dd53f3655e240d15df6f575c1607e77c7b4e6 (diff)
Merge changes Ib0a75bcb,I0169622c into udc-dev
* changes: [Status bar] Expose a #isWifiConnected API on WifiRepository. [SB Refactor] Move WifiRepositoryImplTest to TestScope.
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModel.kt6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt257
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModelTest.kt37
5 files changed, 249 insertions, 63 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt
index 08c14e743bb6..f800cf496ca9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt
@@ -33,6 +33,15 @@ interface WifiRepository {
/** Observable for the current wifi network activity. */
val wifiActivity: StateFlow<DataActivityModel>
+
+ /**
+ * Returns true if the device is currently connected to a wifi network with a valid SSID and
+ * false otherwise.
+ */
+ fun isWifiConnectedWithValidSsid(): Boolean {
+ val currentNetwork = wifiNetwork.value
+ return currentNetwork is WifiNetworkModel.Active && currentNetwork.hasValidSsid()
+ }
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt
index 96ab074c6e56..1a41abf031bf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt
@@ -16,7 +16,6 @@
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
@@ -76,7 +75,7 @@ constructor(
when {
info.isPasspointAccessPoint || info.isOnlineSignUpForPasspointAccessPoint ->
info.passpointProviderFriendlyName
- info.ssid != WifiManager.UNKNOWN_SSID -> info.ssid
+ info.hasValidSsid() -> info.ssid
else -> null
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModel.kt
index 0923d7848d8c..4b33c88cea30 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModel.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.pipeline.wifi.shared.model
+import android.net.wifi.WifiManager.UNKNOWN_SSID
import android.telephony.SubscriptionManager
import androidx.annotation.VisibleForTesting
import com.android.systemui.log.table.Diffable
@@ -223,6 +224,11 @@ sealed class WifiNetworkModel : Diffable<WifiNetworkModel> {
}
}
+ /** Returns true if this network has a valid SSID and false otherwise. */
+ fun hasValidSsid(): Boolean {
+ return ssid != null && ssid != UNKNOWN_SSID
+ }
+
override fun logDiffs(prevVal: WifiNetworkModel, row: TableRowLogger) {
if (prevVal !is Active) {
logFull(row)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt
index ddc6d484d93f..d30e0246c2dd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt
@@ -29,6 +29,7 @@ import android.net.vcn.VcnTransportInfo
import android.net.wifi.WifiInfo
import android.net.wifi.WifiManager
import android.net.wifi.WifiManager.TrafficStateCallback
+import android.net.wifi.WifiManager.UNKNOWN_SSID
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
@@ -49,16 +50,14 @@ import com.android.systemui.util.mockito.nullable
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import java.util.concurrent.Executor
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
-import kotlinx.coroutines.runBlocking
-import org.junit.After
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.mockito.ArgumentMatchers.anyInt
@@ -80,9 +79,10 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Mock private lateinit var connectivityManager: ConnectivityManager
@Mock private lateinit var wifiManager: WifiManager
private lateinit var executor: Executor
- private lateinit var scope: CoroutineScope
private lateinit var connectivityRepository: ConnectivityRepository
+ private val testScope = TestScope(UnconfinedTestDispatcher())
+
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
@@ -96,7 +96,6 @@ class WifiRepositoryImplTest : SysuiTestCase() {
)
.thenReturn(flowOf(Unit))
executor = FakeExecutor(FakeSystemClock())
- scope = CoroutineScope(IMMEDIATE)
connectivityRepository =
ConnectivityRepositoryImpl(
@@ -105,21 +104,16 @@ class WifiRepositoryImplTest : SysuiTestCase() {
context,
mock(),
mock(),
- scope,
+ testScope.backgroundScope,
mock(),
)
underTest = createRepo()
}
- @After
- fun tearDown() {
- scope.cancel()
- }
-
@Test
fun isWifiEnabled_initiallyGetsWifiManagerValue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
whenever(wifiManager.isWifiEnabled).thenReturn(true)
underTest = createRepo()
@@ -129,7 +123,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiEnabled_networkCapabilitiesChanged_valueUpdated() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
// We need to call launch on the flows so that they start updating
val networkJob = underTest.wifiNetwork.launchIn(this)
val enabledJob = underTest.isWifiEnabled.launchIn(this)
@@ -152,7 +146,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiEnabled_networkLost_valueUpdated() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
// We need to call launch on the flows so that they start updating
val networkJob = underTest.wifiNetwork.launchIn(this)
val enabledJob = underTest.isWifiEnabled.launchIn(this)
@@ -173,7 +167,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiEnabled_intentsReceived_valueUpdated() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val intentFlow = MutableSharedFlow<Unit>()
whenever(
broadcastDispatcher.broadcastFlow(
@@ -203,7 +197,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiEnabled_bothIntentAndNetworkUpdates_valueAlwaysUpdated() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val intentFlow = MutableSharedFlow<Unit>()
whenever(
broadcastDispatcher.broadcastFlow(
@@ -242,7 +236,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_initiallyGetsDefault() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
assertThat(underTest.isWifiDefault.value).isFalse()
@@ -252,7 +246,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_wifiNetwork_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val wifiInfo = mock<WifiInfo>().apply { whenever(this.ssid).thenReturn(SSID) }
@@ -268,7 +262,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
/** Regression test for b/266628069. */
@Test
fun isWifiDefault_transportInfoIsNotWifi_andNoWifiTransport_false() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val transportInfo =
@@ -294,7 +288,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
/** Regression test for b/266628069. */
@Test
fun isWifiDefault_transportInfoIsNotWifi_butHasWifiTransport_true() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val transportInfo =
@@ -319,7 +313,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_carrierMergedViaCellular_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val carrierMergedInfo =
@@ -341,7 +335,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_carrierMergedViaCellular_withVcnTransport_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val capabilities =
@@ -360,7 +354,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_carrierMergedViaWifi_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val carrierMergedInfo =
@@ -382,7 +376,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_carrierMergedViaWifi_withVcnTransport_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val capabilities =
@@ -401,7 +395,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_cellularAndWifiTransports_usesCellular_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val capabilities =
@@ -420,7 +414,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_cellularNotVcnNetwork_isFalse() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val capabilities =
@@ -438,7 +432,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_isCarrierMergedViaUnderlyingWifi_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val underlyingNetwork = mock<Network>()
@@ -473,7 +467,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_isCarrierMergedViaUnderlyingCellular_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
val underlyingCarrierMergedNetwork = mock<Network>()
@@ -507,7 +501,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun isWifiDefault_wifiNetworkLost_isFalse() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val job = underTest.isWifiDefault.launchIn(this)
// First, add a network
@@ -526,7 +520,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_initiallyGetsDefault() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -537,7 +531,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_primaryWifiNetworkAdded_flowHasNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -561,7 +555,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_isCarrierMerged_flowHasCarrierMerged() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -581,7 +575,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_isCarrierMergedViaUnderlyingWifi_flowHasCarrierMerged() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -618,7 +612,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_isCarrierMergedViaUnderlyingCellular_flowHasCarrierMerged() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -656,7 +650,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_carrierMergedButInvalidSubId_flowHasInvalid() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -680,7 +674,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_isCarrierMerged_getsCorrectValues() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -715,7 +709,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_notValidated_networkNotValidated() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -732,7 +726,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_validated_networkValidated() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -749,7 +743,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_nonPrimaryWifiNetworkAdded_flowHasNoNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -770,7 +764,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
/** Regression test for b/266628069. */
@Test
fun wifiNetwork_transportInfoIsNotWifi_flowHasNoNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -789,7 +783,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_cellularVcnNetworkAdded_flowHasNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -811,7 +805,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_nonPrimaryCellularVcnNetworkAdded_flowHasNoNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -835,7 +829,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_cellularNotVcnNetworkAdded_flowHasNoNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -854,7 +848,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_cellularAndWifiTransports_usesCellular() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -877,7 +871,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_newPrimaryWifiNetwork_flowHasNewNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -910,7 +904,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_newNonPrimaryWifiNetwork_flowHasOldNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -943,7 +937,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_newNetworkCapabilities_flowHasNewData() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -986,7 +980,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_noCurrentNetwork_networkLost_flowHasNoNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -1001,7 +995,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_currentNetworkLost_flowHasNoNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -1020,7 +1014,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_unknownNetworkLost_flowHasPreviousNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -1043,7 +1037,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiNetwork_notCurrentNetworkLost_flowHasCurrentNetwork() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -1069,7 +1063,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
/** Regression test for b/244173280. */
@Test
fun wifiNetwork_multipleSubscribers_newSubscribersGetCurrentValue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest1: WifiNetworkModel? = null
val job1 = underTest.wifiNetwork.onEach { latest1 = it }.launchIn(this)
@@ -1096,8 +1090,151 @@ class WifiRepositoryImplTest : SysuiTestCase() {
}
@Test
+ fun isWifiConnectedWithValidSsid_inactiveNetwork_false() =
+ testScope.runTest {
+ val job = underTest.wifiNetwork.launchIn(this)
+
+ val wifiInfo =
+ mock<WifiInfo>().apply {
+ whenever(this.ssid).thenReturn(SSID)
+ // A non-primary network is inactive
+ whenever(this.isPrimary).thenReturn(false)
+ }
+
+ getNetworkCallback()
+ .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
+
+ assertThat(underTest.isWifiConnectedWithValidSsid()).isFalse()
+
+ job.cancel()
+ }
+
+ @Test
+ fun isWifiConnectedWithValidSsid_carrierMergedNetwork_false() =
+ testScope.runTest {
+ val job = underTest.wifiNetwork.launchIn(this)
+
+ val wifiInfo =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.isCarrierMerged).thenReturn(true)
+ }
+
+ getNetworkCallback()
+ .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
+
+ assertThat(underTest.isWifiConnectedWithValidSsid()).isFalse()
+
+ job.cancel()
+ }
+
+ @Test
+ fun isWifiConnectedWithValidSsid_invalidNetwork_false() =
+ testScope.runTest {
+ val job = underTest.wifiNetwork.launchIn(this)
+
+ val wifiInfo =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.isCarrierMerged).thenReturn(true)
+ whenever(this.subscriptionId).thenReturn(INVALID_SUBSCRIPTION_ID)
+ }
+
+ getNetworkCallback()
+ .onCapabilitiesChanged(
+ NETWORK,
+ createWifiNetworkCapabilities(wifiInfo),
+ )
+
+ assertThat(underTest.isWifiConnectedWithValidSsid()).isFalse()
+
+ job.cancel()
+ }
+
+ @Test
+ fun isWifiConnectedWithValidSsid_activeNetwork_nullSsid_false() =
+ testScope.runTest {
+ val job = underTest.wifiNetwork.launchIn(this)
+
+ val wifiInfo =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.ssid).thenReturn(null)
+ }
+
+ getNetworkCallback()
+ .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
+
+ assertThat(underTest.isWifiConnectedWithValidSsid()).isFalse()
+
+ job.cancel()
+ }
+
+ @Test
+ fun isWifiConnectedWithValidSsid_activeNetwork_unknownSsid_false() =
+ testScope.runTest {
+ val job = underTest.wifiNetwork.launchIn(this)
+
+ val wifiInfo =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.ssid).thenReturn(UNKNOWN_SSID)
+ }
+
+ getNetworkCallback()
+ .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
+
+ assertThat(underTest.isWifiConnectedWithValidSsid()).isFalse()
+
+ job.cancel()
+ }
+
+ @Test
+ fun isWifiConnectedWithValidSsid_activeNetwork_validSsid_true() =
+ testScope.runTest {
+ val job = underTest.wifiNetwork.launchIn(this)
+
+ val wifiInfo =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.ssid).thenReturn("FakeSsid")
+ }
+
+ getNetworkCallback()
+ .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
+
+ assertThat(underTest.isWifiConnectedWithValidSsid()).isTrue()
+
+ job.cancel()
+ }
+
+ @Test
+ fun isWifiConnectedWithValidSsid_activeToInactive_trueToFalse() =
+ testScope.runTest {
+ val job = underTest.wifiNetwork.launchIn(this)
+
+ // Start with active
+ val wifiInfo =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.ssid).thenReturn("FakeSsid")
+ }
+ getNetworkCallback()
+ .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
+ assertThat(underTest.isWifiConnectedWithValidSsid()).isTrue()
+
+ // WHEN the network is lost
+ getNetworkCallback().onLost(NETWORK)
+
+ // THEN the isWifiConnected updates
+ assertThat(underTest.isWifiConnectedWithValidSsid()).isFalse()
+
+ job.cancel()
+ }
+
+ @Test
fun wifiActivity_callbackGivesNone_activityFlowHasNone() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: DataActivityModel? = null
val job = underTest.wifiActivity.onEach { latest = it }.launchIn(this)
@@ -1111,7 +1248,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiActivity_callbackGivesIn_activityFlowHasIn() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: DataActivityModel? = null
val job = underTest.wifiActivity.onEach { latest = it }.launchIn(this)
@@ -1125,7 +1262,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiActivity_callbackGivesOut_activityFlowHasOut() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: DataActivityModel? = null
val job = underTest.wifiActivity.onEach { latest = it }.launchIn(this)
@@ -1139,7 +1276,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
@Test
fun wifiActivity_callbackGivesInout_activityFlowHasInAndOut() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
var latest: DataActivityModel? = null
val job = underTest.wifiActivity.onEach { latest = it }.launchIn(this)
@@ -1159,7 +1296,7 @@ class WifiRepositoryImplTest : SysuiTestCase() {
logger,
tableLogger,
executor,
- scope,
+ testScope.backgroundScope,
wifiManager,
)
}
@@ -1204,5 +1341,3 @@ class WifiRepositoryImplTest : SysuiTestCase() {
}
}
}
-
-private val IMMEDIATE = Dispatchers.Main.immediate
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModelTest.kt
index ab4e93ceee84..4e0c309512e8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/shared/model/WifiNetworkModelTest.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.pipeline.wifi.shared.model
+import android.net.wifi.WifiManager.UNKNOWN_SSID
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
@@ -50,6 +51,42 @@ class WifiNetworkModelTest : SysuiTestCase() {
WifiNetworkModel.CarrierMerged(NETWORK_ID, INVALID_SUBSCRIPTION_ID, 1)
}
+ @Test
+ fun active_hasValidSsid_nullSsid_false() {
+ val network =
+ WifiNetworkModel.Active(
+ NETWORK_ID,
+ level = MAX_VALID_LEVEL,
+ ssid = null,
+ )
+
+ assertThat(network.hasValidSsid()).isFalse()
+ }
+
+ @Test
+ fun active_hasValidSsid_unknownSsid_false() {
+ val network =
+ WifiNetworkModel.Active(
+ NETWORK_ID,
+ level = MAX_VALID_LEVEL,
+ ssid = UNKNOWN_SSID,
+ )
+
+ assertThat(network.hasValidSsid()).isFalse()
+ }
+
+ @Test
+ fun active_hasValidSsid_validSsid_true() {
+ val network =
+ WifiNetworkModel.Active(
+ NETWORK_ID,
+ level = MAX_VALID_LEVEL,
+ ssid = "FakeSsid",
+ )
+
+ assertThat(network.hasValidSsid()).isTrue()
+ }
+
// Non-exhaustive logDiffs test -- just want to make sure the logging logic isn't totally broken
@Test