Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt +13 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 } Loading @@ -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) } } Loading @@ -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 = Loading @@ -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 } Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt +25 −3 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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() = Loading @@ -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) Loading @@ -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) Loading Loading @@ -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) Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt +75 −22 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading Loading @@ -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 { Loading @@ -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) } Loading @@ -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) } Loading Loading @@ -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) Loading Loading @@ -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) Loading @@ -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) Loading @@ -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) Loading @@ -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) Loading Loading @@ -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) Loading @@ -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 Loading @@ -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) Loading Loading @@ -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) Loading Loading @@ -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) Loading @@ -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) Loading @@ -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) Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt +13 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 } Loading @@ -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) } } Loading @@ -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 = Loading @@ -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 } Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt +25 −3 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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() = Loading @@ -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) Loading @@ -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) Loading Loading @@ -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) Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt +75 −22 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading Loading @@ -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 { Loading @@ -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) } Loading @@ -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) } Loading Loading @@ -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) Loading Loading @@ -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) Loading @@ -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) Loading @@ -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) Loading @@ -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) Loading Loading @@ -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) Loading @@ -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 Loading @@ -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) Loading Loading @@ -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) Loading Loading @@ -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) Loading @@ -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) Loading @@ -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) Loading