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

Commit 321dd53f authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[Status bar] Expose a #isWifiConnected API on WifiRepository.

Bug:  275317488
Test: atest WifiRepositoryImplTest WifiInteractorImplTest
WifiNetworkModelTest

Change-Id: Ib0a75bcb3b5fc5d6935f58ae681bd436e7da2aa1
parent c4fa3f8f
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)
+144 −0
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
@@ -1088,6 +1089,149 @@ 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() =
        testScope.runTest {
+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