diff --git a/src/com/android/settings/network/InternetPreferenceRepository.kt b/src/com/android/settings/network/InternetPreferenceRepository.kt index 229213b331e..41a2fccea5a 100644 --- a/src/com/android/settings/network/InternetPreferenceRepository.kt +++ b/src/com/android/settings/network/InternetPreferenceRepository.kt @@ -18,6 +18,7 @@ package com.android.settings.network import android.content.Context import android.net.NetworkCapabilities +import android.net.wifi.WifiInfo import android.net.wifi.WifiManager import android.provider.Settings import android.util.Log @@ -68,6 +69,11 @@ class InternetPreferenceRepository( hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ) { + val transportInfo = transportInfo + if (transportInfo is WifiInfo && transportInfo.isCarrierMerged) { + Log.i(TAG, "Detect a merged carrier Wi-Fi connected.") + return cellularDisplayInfoFlow() + } for (transportType in transportTypes) { when (transportType) { NetworkCapabilities.TRANSPORT_WIFI -> return wifiDisplayInfoFlow() diff --git a/tests/spa_unit/src/com/android/settings/network/InternetPreferenceRepositoryTest.kt b/tests/spa_unit/src/com/android/settings/network/InternetPreferenceRepositoryTest.kt index 5288202cfa0..a2542b59a84 100644 --- a/tests/spa_unit/src/com/android/settings/network/InternetPreferenceRepositoryTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/InternetPreferenceRepositoryTest.kt @@ -18,6 +18,7 @@ package com.android.settings.network import android.content.Context import android.net.NetworkCapabilities +import android.net.wifi.WifiInfo import android.net.wifi.WifiManager import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -32,6 +33,7 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.runBlocking import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.stub @@ -81,6 +83,36 @@ class InternetPreferenceRepositoryTest { ) } + @Test + fun displayInfoFlow_carrierMergedWifi_asCellular() = runBlocking { + val wifiInfo = + mock { + on { isCarrierMerged } doReturn true + on { makeCopy(any()) } doReturn mock + } + val wifiNetworkCapabilities = + NetworkCapabilities.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + .setTransportInfo(wifiInfo) + .build() + mockConnectivityRepository.stub { + on { networkCapabilitiesFlow() } doReturn flowOf(wifiNetworkCapabilities) + } + mockDataSubscriptionRepository.stub { on { dataSummaryFlow() } doReturn flowOf(SUMMARY) } + + val displayInfo = repository.displayInfoFlow().firstWithTimeoutOrNull() + + assertThat(displayInfo) + .isEqualTo( + InternetPreferenceRepository.DisplayInfo( + summary = SUMMARY, + iconResId = R.drawable.ic_network_cell, + ) + ) + } + @Test fun displayInfoFlow_cellular() = runBlocking { val wifiNetworkCapabilities =