Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8510b8b0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes Ib0a75bcb,I0169622c into udc-dev am: 1ee0fb9a

parents 5b54d892 1ee0fb9a
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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()
    }
}

/**
+1 −2
Original line number Diff line number Diff line
@@ -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
                    }
            }
+6 −0
Original line number Diff line number Diff line
@@ -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)
+196 −61
Original line number Diff line number Diff line
@@ -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)

@@ -1095,9 +1089,152 @@ class WifiRepositoryImplTest : SysuiTestCase() {
            job2.cancel()
        }

    @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
+37 −0
Original line number Diff line number Diff line
@@ -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