Merge "[Provider Model] Show carrier network to internet preference" into sc-dev
diff --git a/src/com/android/settings/network/InternetUpdater.java b/src/com/android/settings/network/InternetUpdater.java
index cb8d32c..3d97e95 100644
--- a/src/com/android/settings/network/InternetUpdater.java
+++ b/src/com/android/settings/network/InternetUpdater.java
@@ -33,6 +33,7 @@
 import android.net.ConnectivityManager.NetworkCallback;
 import android.net.Network;
 import android.net.NetworkCapabilities;
+import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.util.Log;
 
@@ -249,6 +250,9 @@
         @InternetType int internetType = INTERNET_NETWORKS_AVAILABLE;
         if (mInternetAvailable) {
             internetType = sTransportMap.get(mTransport);
+            if (internetType == INTERNET_WIFI && isCarrierWifiActive()) {
+                internetType = INTERNET_CELLULAR;
+            }
         } else if (mAirplaneModeEnabler.isAirplaneModeOn()
                 && mWifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLED) {
             internetType = INTERNET_OFF;
@@ -260,6 +264,15 @@
         }
     }
 
+    protected boolean isCarrierWifiActive() {
+        final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+        if (wifiInfo == null || !wifiInfo.isCarrierMerged()) {
+            return false;
+        }
+        Log.i(TAG, "Detect a merged carrier Wi-Fi connected.");
+        return true;
+    }
+
     /**
      * Get the internet type.
      */
diff --git a/tests/unit/src/com/android/settings/network/InternetUpdaterTest.java b/tests/unit/src/com/android/settings/network/InternetUpdaterTest.java
index 5ab2ce0..c54c3ee 100644
--- a/tests/unit/src/com/android/settings/network/InternetUpdaterTest.java
+++ b/tests/unit/src/com/android/settings/network/InternetUpdaterTest.java
@@ -39,6 +39,7 @@
 import android.content.IntentFilter;
 import android.net.ConnectivityManager;
 import android.net.NetworkCapabilities;
+import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 
 import androidx.lifecycle.Lifecycle;
@@ -194,4 +195,17 @@
 
         assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_ETHERNET);
     }
+
+    @Test
+    public void updateInternetType_carrierWifiConnected_getInternetCellular() {
+        final WifiInfo wifiInfo = mock(WifiInfo.class);
+        doReturn(wifiInfo).when(mWifiManager).getConnectionInfo();
+        doReturn(true).when(wifiInfo).isCarrierMerged();
+        mInternetUpdater.mInternetAvailable = true;
+        mInternetUpdater.mTransport = TRANSPORT_WIFI;
+
+        mInternetUpdater.updateInternetType();
+
+        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_CELLULAR);
+    }
 }