diff --git a/src/com/android/settings/network/CarrierWifiTogglePreferenceController.java b/src/com/android/settings/network/CarrierWifiTogglePreferenceController.java
index af2c0a5..ce225b4 100644
--- a/src/com/android/settings/network/CarrierWifiTogglePreferenceController.java
+++ b/src/com/android/settings/network/CarrierWifiTogglePreferenceController.java
@@ -23,7 +23,6 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
-import com.android.settings.Utils;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.wifi.WifiPickerTrackerHelper;
 import com.android.wifitrackerlib.WifiPickerTracker;
@@ -65,7 +64,7 @@
 
     @Override
     public boolean isChecked() {
-        return mWifiPickerTrackerHelper.isCarrierNetworkEnabled(mSubId);
+        return mWifiPickerTrackerHelper.isCarrierNetworkEnabled();
     }
 
     @Override
diff --git a/src/com/android/settings/wifi/WifiPickerTrackerHelper.java b/src/com/android/settings/wifi/WifiPickerTrackerHelper.java
index 1be71c8..3aa7b83 100644
--- a/src/com/android/settings/wifi/WifiPickerTrackerHelper.java
+++ b/src/com/android/settings/wifi/WifiPickerTrackerHelper.java
@@ -117,16 +117,25 @@
     }
 
     /** Return the enabled/disabled state of the carrier network */
-    public boolean isCarrierNetworkEnabled(int subId) {
-        return mWifiManager.isCarrierNetworkOffloadEnabled(subId, true /* merged */);
+    public boolean isCarrierNetworkEnabled() {
+        final MergedCarrierEntry mergedCarrierEntry = mWifiPickerTracker.getMergedCarrierEntry();
+        if (mergedCarrierEntry == null) {
+            Log.e(TAG, "Failed to get MergedCarrierEntry to query enabled status");
+            return false;
+        }
+        final boolean isCarrierNetworkEnabled = mergedCarrierEntry.isEnabled();
+        Log.i(TAG, "isCarrierNetworkEnabled:" + isCarrierNetworkEnabled);
+        return isCarrierNetworkEnabled;
     }
 
     /** Enables/disables the carrier network */
     public void setCarrierNetworkEnabled(boolean enabled) {
         final MergedCarrierEntry mergedCarrierEntry = mWifiPickerTracker.getMergedCarrierEntry();
         if (mergedCarrierEntry == null) {
+            Log.e(TAG, "Unable to get MergedCarrierEntry to set enabled status");
             return;
         }
+        Log.i(TAG, "setCarrierNetworkEnabled:" + enabled);
         mergedCarrierEntry.setEnabled(enabled);
     }
 
diff --git a/tests/unit/src/com/android/settings/network/CarrierWifiTogglePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/CarrierWifiTogglePreferenceControllerTest.java
index 21a8444..480d744 100644
--- a/tests/unit/src/com/android/settings/network/CarrierWifiTogglePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/CarrierWifiTogglePreferenceControllerTest.java
@@ -107,14 +107,14 @@
 
     @Test
     public void isChecked_carrierNetworkEnabled_returnTrue() {
-        doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkEnabled(SUB_ID);
+        doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkEnabled();
 
         assertThat(mController.isChecked()).isEqualTo(true);
     }
 
     @Test
     public void isChecked_carrierNetworkDisabled_returnFalse() {
-        doReturn(false).when(mWifiPickerTrackerHelper).isCarrierNetworkEnabled(SUB_ID);
+        doReturn(false).when(mWifiPickerTrackerHelper).isCarrierNetworkEnabled();
 
         assertThat(mController.isChecked()).isEqualTo(false);
     }
diff --git a/tests/unit/src/com/android/settings/wifi/WifiPickerTrackerHelperTest.java b/tests/unit/src/com/android/settings/wifi/WifiPickerTrackerHelperTest.java
index 1c0cf04..b79dd45 100644
--- a/tests/unit/src/com/android/settings/wifi/WifiPickerTrackerHelperTest.java
+++ b/tests/unit/src/com/android/settings/wifi/WifiPickerTrackerHelperTest.java
@@ -24,7 +24,6 @@
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -135,14 +134,13 @@
 
     @Test
     public void isCarrierNetworkEnabled_returnCorrect() {
-        doReturn(true).when(mWifiManager).isCarrierNetworkOffloadEnabled(SUB_ID, true /* merged */);
+        when(mMergedCarrierEntry.isEnabled()).thenReturn(true);
 
-        assertThat(mWifiPickerTrackerHelper.isCarrierNetworkEnabled(SUB_ID)).isTrue();
+        assertThat(mWifiPickerTrackerHelper.isCarrierNetworkEnabled()).isTrue();
 
-        doReturn(false).when(mWifiManager)
-                .isCarrierNetworkOffloadEnabled(SUB_ID, true /* merged */);
+        when(mMergedCarrierEntry.isEnabled()).thenReturn(false);
 
-        assertThat(mWifiPickerTrackerHelper.isCarrierNetworkEnabled(SUB_ID)).isFalse();
+        assertThat(mWifiPickerTrackerHelper.isCarrierNetworkEnabled()).isFalse();
     }
 
     @Test
