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

Commit 8c868a06 authored by Yan Yan's avatar Yan Yan Committed by Gerrit Code Review
Browse files

Merge "Remove hidden API usages backed by VcnTransportInfo" into main

parents da86eed6 dac8d3f5
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
import android.net.NetworkCapabilities.TRANSPORT_ETHERNET
import android.net.NetworkCapabilities.TRANSPORT_WIFI
import android.net.vcn.VcnTransportInfo
import android.net.vcn.VcnUtils
import android.net.wifi.WifiInfo
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import androidx.annotation.ArrayRes
@@ -160,7 +161,9 @@ constructor(
        defaultNetworkCapabilities
            .map { networkCapabilities ->
                networkCapabilities?.run {
                    val subId = (transportInfo as? VcnTransportInfo)?.subId
                    val subId =
                        VcnUtils.getSubIdFromVcnCaps(connectivityManager, networkCapabilities)

                    // Never return an INVALID_SUBSCRIPTION_ID (-1)
                    if (subId != INVALID_SUBSCRIPTION_ID) {
                        subId
@@ -244,9 +247,9 @@ constructor(
         * info.
         */
        fun NetworkCapabilities.getMainOrUnderlyingWifiInfo(
            connectivityManager: ConnectivityManager,
            connectivityManager: ConnectivityManager
        ): WifiInfo? {
            val mainWifiInfo = this.getMainWifiInfo()
            val mainWifiInfo = this.getMainWifiInfo(connectivityManager)
            if (mainWifiInfo != null) {
                return mainWifiInfo
            }
@@ -260,7 +263,9 @@ constructor(
            // eventually traced to a wifi or carrier merged connection. So, check those underlying
            // networks for possible wifi information as well. See b/225902574.
            return this.underlyingNetworks?.firstNotNullOfOrNull { underlyingNetwork ->
                connectivityManager.getNetworkCapabilities(underlyingNetwork)?.getMainWifiInfo()
                connectivityManager
                    .getNetworkCapabilities(underlyingNetwork)
                    ?.getMainWifiInfo(connectivityManager)
            }
        }

@@ -268,7 +273,9 @@ constructor(
         * Checks the network capabilities for wifi info, but does *not* check the underlying
         * networks. See [getMainOrUnderlyingWifiInfo].
         */
        private fun NetworkCapabilities.getMainWifiInfo(): WifiInfo? {
        private fun NetworkCapabilities.getMainWifiInfo(
            connectivityManager: ConnectivityManager
        ): WifiInfo? {
            // Wifi info can either come from a WIFI Transport, or from a CELLULAR transport for
            // virtual networks like VCN.
            val canHaveWifiInfo =
@@ -282,7 +289,7 @@ constructor(
                // [com.android.settingslib.Utils.tryGetWifiInfoForVcn]. It's copied instead of
                // re-used because it makes the logic here clearer, and because the method will be
                // removed once this pipeline is fully launched.
                is VcnTransportInfo -> currentTransportInfo.wifiInfo
                is VcnTransportInfo -> VcnUtils.getWifiInfoFromVcnCaps(connectivityManager, this)
                is WifiInfo -> currentTransportInfo
                else -> null
            }
+1 −1
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
    private static final int MIN_RSSI = -100;
    private static final int MAX_RSSI = -55;
    private WifiInfo mWifiInfo = mock(WifiInfo.class);
    private VcnTransportInfo mVcnTransportInfo = mock(VcnTransportInfo.class);
    private VcnTransportInfo mVcnTransportInfo = new VcnTransportInfo.Builder().build();

    @Before
    public void setUp() throws Exception {
+25 −3
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() {
    private val wifiLogBuffer = LogBuffer("wifi", maxSize = 100, logcatEchoTracker = mock())
    private val wifiPickerTrackerCallback =
        argumentCaptor<WifiPickerTracker.WifiPickerTrackerCallback>()
    private val vcnTransportInfo = VcnTransportInfo.Builder().build()

    private val testDispatcher = StandardTestDispatcher()
    private val testScope = TestScope(testDispatcher)
@@ -987,6 +988,18 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() {
            assertThat(latest).isTrue()
        }

    private fun newWifiNetwork(wifiInfo: WifiInfo): Network {
        val network = mock<Network>()
        val capabilities =
            mock<NetworkCapabilities>().also {
                whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
                whenever(it.transportInfo).thenReturn(wifiInfo)
            }
        whenever(connectivityManager.getNetworkCapabilities(network)).thenReturn(capabilities)

        return network
    }

    /** Regression test for b/272586234. */
    @Test
    fun hasCarrierMergedConnection_carrierMergedViaWifiWithVcnTransport_isTrue() =
@@ -996,10 +1009,12 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() {
                    whenever(this.isCarrierMerged).thenReturn(true)
                    whenever(this.isPrimary).thenReturn(true)
                }
            val underlyingWifi = newWifiNetwork(carrierMergedInfo)
            val caps =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingWifi))
                }

            val latest by collectLastValue(underTest.hasCarrierMergedConnection)
@@ -1018,10 +1033,12 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() {
                    whenever(this.isCarrierMerged).thenReturn(true)
                    whenever(this.isPrimary).thenReturn(true)
                }
            val underlyingWifi = newWifiNetwork(carrierMergedInfo)
            val caps =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingWifi))
                }

            val latest by collectLastValue(underTest.hasCarrierMergedConnection)
@@ -1078,10 +1095,15 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() {
                    whenever(this.isCarrierMerged).thenReturn(true)
                    whenever(this.isPrimary).thenReturn(true)
                }

            // The Wifi network that is under the VCN network
            val physicalWifiNetwork = newWifiNetwork(carrierMergedInfo)

            val underlyingCapabilities =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(physicalWifiNetwork))
                }
            whenever(connectivityManager.getNetworkCapabilities(underlyingCarrierMergedNetwork))
                .thenReturn(underlyingCapabilities)
+75 −22
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.net.NetworkCapabilities
import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
import android.net.NetworkCapabilities.TRANSPORT_ETHERNET
import android.net.NetworkCapabilities.TRANSPORT_WIFI
import android.net.TelephonyNetworkSpecifier
import android.net.vcn.VcnTransportInfo
import android.net.wifi.WifiInfo
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
@@ -68,6 +69,8 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
    private lateinit var testScope: TestScope
    @Mock private lateinit var tunerService: TunerService

    private val vcnTransportInfo = VcnTransportInfo.Builder().build()

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
@@ -376,6 +379,30 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
            job.cancel()
        }

    private fun newWifiNetwork(wifiInfo: WifiInfo): Network {
        val network = mock<Network>()
        val capabilities =
            mock<NetworkCapabilities>().also {
                whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
                whenever(it.transportInfo).thenReturn(wifiInfo)
            }
        whenever(connectivityManager.getNetworkCapabilities(network)).thenReturn(capabilities)

        return network
    }

    private fun newCellNetwork(subId: Int): Network {
        val network = mock<Network>()
        val capabilities =
            mock<NetworkCapabilities>().also {
                whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                whenever(it.networkSpecifier).thenReturn(TelephonyNetworkSpecifier(subId))
            }
        whenever(connectivityManager.getNetworkCapabilities(network)).thenReturn(capabilities)

        return network
    }

    @Test
    fun defaultConnections_carrierMergedViaWifiWithVcnTransport_wifiAndCarrierMergedDefault() =
        testScope.runTest {
@@ -384,10 +411,12 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {

            val carrierMergedInfo =
                mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
            val underlyingWifi = newWifiNetwork(carrierMergedInfo)
            val capabilities =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingWifi))
                    whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(false)
                    whenever(it.hasTransport(TRANSPORT_ETHERNET)).thenReturn(false)
                }
@@ -409,10 +438,12 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {

            val carrierMergedInfo =
                mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
            val underlyingWifi = newWifiNetwork(carrierMergedInfo)
            val capabilities =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingWifi))
                    whenever(it.hasTransport(TRANSPORT_ETHERNET)).thenReturn(false)
                    whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(false)
                }
@@ -572,10 +603,12 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
            val underlyingCarrierMergedNetwork = mock<Network>()
            val carrierMergedInfo =
                mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
            val underlyingWifi = newWifiNetwork(carrierMergedInfo)
            val underlyingCapabilities =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingWifi))
                }
            whenever(connectivityManager.getNetworkCapabilities(underlyingCarrierMergedNetwork))
                .thenReturn(underlyingCapabilities)
@@ -664,7 +697,7 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
    @Test
    fun vcnSubId_tracksVcnTransportInfo() =
        testScope.runTest {
            val vcnInfo = VcnTransportInfo(SUB_1_ID)
            val underlyingCell = newCellNetwork(SUB_1_ID)

            var latest: Int? = null
            val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)
@@ -672,7 +705,8 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
            val capabilities =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(vcnInfo)
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingCell))
                }

            getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
@@ -684,7 +718,7 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
    @Test
    fun vcnSubId_filersOutInvalid() =
        testScope.runTest {
            val vcnInfo = VcnTransportInfo(INVALID_SUBSCRIPTION_ID)
            val underlyingCell = newCellNetwork(INVALID_SUBSCRIPTION_ID)

            var latest: Int? = null
            val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)
@@ -692,7 +726,8 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
            val capabilities =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(vcnInfo)
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingCell))
                }

            getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
@@ -729,11 +764,12 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
            val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)

            val wifiInfo = mock<WifiInfo>()
            val vcnInfo = VcnTransportInfo(wifiInfo)
            val underlyingWifi = newWifiNetwork(wifiInfo)
            val capabilities =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(vcnInfo)
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingWifi))
                }

            getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
@@ -749,14 +785,15 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
            val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)

            val wifiInfo = mock<WifiInfo>()
            val wifiVcnInfo = VcnTransportInfo(wifiInfo)
            val sub1VcnInfo = VcnTransportInfo(SUB_1_ID)
            val sub2VcnInfo = VcnTransportInfo(SUB_2_ID)
            val underlyingWifi = newWifiNetwork(wifiInfo)
            val underlyingCell1 = newCellNetwork(SUB_1_ID)
            val underlyingCell2 = newCellNetwork(SUB_2_ID)

            val capabilities =
                mock<NetworkCapabilities>().also {
                    whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
                    whenever(it.transportInfo).thenReturn(wifiVcnInfo)
                    whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                    whenever(it.underlyingNetworks).thenReturn(listOf(underlyingWifi))
                }

            // WIFI VCN info
@@ -766,14 +803,16 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {

            // Cellular VCN info with subId 1
            whenever(capabilities.hasTransport(eq(TRANSPORT_CELLULAR))).thenReturn(true)
            whenever(capabilities.transportInfo).thenReturn(sub1VcnInfo)
            whenever(capabilities.transportInfo).thenReturn(vcnTransportInfo)
            whenever(capabilities.underlyingNetworks).thenReturn(listOf(underlyingCell1))

            getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)

            assertThat(latest).isEqualTo(SUB_1_ID)

            // Cellular VCN info with subId 2
            whenever(capabilities.transportInfo).thenReturn(sub2VcnInfo)
            whenever(capabilities.transportInfo).thenReturn(vcnTransportInfo)
            whenever(capabilities.underlyingNetworks).thenReturn(listOf(underlyingCell2))

            getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)

@@ -806,11 +845,12 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
    @Test
    fun getMainOrUnderlyingWifiInfo_vcnWithWifi_hasInfo() {
        val wifiInfo = mock<WifiInfo>()
        val vcnInfo = VcnTransportInfo(wifiInfo)
        val underlyingWifi = newWifiNetwork(wifiInfo)
        val capabilities =
            mock<NetworkCapabilities>().also {
                whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
                whenever(it.transportInfo).thenReturn(vcnInfo)
                whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                whenever(it.underlyingNetworks).thenReturn(listOf(underlyingWifi))
            }

        val result = capabilities.getMainOrUnderlyingWifiInfo(connectivityManager)
@@ -889,11 +929,15 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
    fun getMainOrUnderlyingWifiInfo_cellular_underlyingVcnWithWifi_hasInfo() {
        val wifiInfo = mock<WifiInfo>()
        val underlyingNetwork = mock<Network>()
        val underlyingVcnInfo = VcnTransportInfo(wifiInfo)

        // The Wifi network that is under the VCN network
        val physicalWifiNetwork = newWifiNetwork(wifiInfo)

        val underlyingWifiCapabilities =
            mock<NetworkCapabilities>().also {
                whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
                whenever(it.transportInfo).thenReturn(underlyingVcnInfo)
                whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                whenever(it.underlyingNetworks).thenReturn(listOf(physicalWifiNetwork))
            }
        whenever(connectivityManager.getNetworkCapabilities(underlyingNetwork))
            .thenReturn(underlyingWifiCapabilities)
@@ -915,11 +959,15 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
    @Test
    fun getMainOrUnderlyingWifiInfo_notCellular_underlyingVcnWithWifi_noInfo() {
        val underlyingNetwork = mock<Network>()
        val underlyingVcnInfo = VcnTransportInfo(mock<WifiInfo>())

        // The Wifi network that is under the VCN network
        val physicalWifiNetwork = newWifiNetwork(mock<WifiInfo>())

        val underlyingWifiCapabilities =
            mock<NetworkCapabilities>().also {
                whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
                whenever(it.transportInfo).thenReturn(underlyingVcnInfo)
                whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                whenever(it.underlyingNetworks).thenReturn(listOf(physicalWifiNetwork))
            }
        whenever(connectivityManager.getNetworkCapabilities(underlyingNetwork))
            .thenReturn(underlyingWifiCapabilities)
@@ -945,10 +993,15 @@ class ConnectivityRepositoryImplTest : SysuiTestCase() {
        val underlyingCarrierMergedNetwork = mock<Network>()
        val carrierMergedInfo =
            mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }

        // The Wifi network that is under the VCN network
        val physicalWifiNetwork = newWifiNetwork(carrierMergedInfo)

        val underlyingCapabilities =
            mock<NetworkCapabilities>().also {
                whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
                whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
                whenever(it.transportInfo).thenReturn(vcnTransportInfo)
                whenever(it.underlyingNetworks).thenReturn(listOf(physicalWifiNetwork))
            }
        whenever(connectivityManager.getNetworkCapabilities(underlyingCarrierMergedNetwork))
            .thenReturn(underlyingCapabilities)