diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 8936930..4bd2c20 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -115,8 +115,6 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.dataconnection.ApnSettingUtils;
-import com.android.internal.telephony.uicc.IccRecords;
 import com.android.internal.telephony.uicc.UiccController;
 import com.android.internal.util.XmlUtils;
 import android.service.carrier.IApnSourceService;
@@ -3082,13 +3080,6 @@
         int mvnoDataIndex = ret.getColumnIndex(MVNO_MATCH_DATA);
         int carrierIdIndex = ret.getColumnIndex(CARRIER_ID);
 
-        IccRecords iccRecords = UiccController.getInstance().getIccRecords(
-                SubscriptionManager.getPhoneId(subId), UiccController.APP_FAM_3GPP);
-        if (iccRecords == null) {
-            loge("iccRecords is null");
-            return null;
-        }
-
         //Separate the result into MatrixCursor
         while (ret.moveToNext()) {
             List<String> data = new ArrayList<>();
@@ -3097,17 +3088,17 @@
             }
 
             if (!TextUtils.isEmpty(ret.getString(numericIndex)) &&
-                    ApnSettingUtils.mvnoMatches(iccRecords,
-                            getMvnoTypeIntFromString(ret.getString(mvnoIndex)),
-                            ret.getString(mvnoDataIndex))) {
+                tm.isCurrentSimOperator(ret.getString(numericIndex),
+                    getMvnoTypeIntFromString(ret.getString(mvnoIndex)),
+                    ret.getString(mvnoDataIndex))) {
                 // 1. The APN that query based on legacy SIM MCC/MCC and MVNO
                 currentCursor.addRow(data);
             } else if (!TextUtils.isEmpty(ret.getString(numericIndex))
-                    && TextUtils.isEmpty(ret.getString(mvnoIndex))) {
+                && TextUtils.isEmpty(ret.getString(mvnoIndex))) {
                 // 2. The APN that query based on SIM MCC/MNC
                 parentCursor.addRow(data);
             } else if (!TextUtils.isEmpty(ret.getString(carrierIdIndex))
-                    && ret.getString(carrierIdIndex).equals(String.valueOf(carrierId))) {
+                && ret.getString(carrierIdIndex).equals(String.valueOf(carrierId))) {
                 // The APN that query based on carrier Id (not include the MVNO or MNO APN)
                 carrierIdCursor.addRow(data);
             }
@@ -3892,10 +3883,6 @@
     }
 
     private String getWhereClauseForRestoreDefaultApn(SQLiteDatabase db, int subId) {
-        IccRecords iccRecords = getIccRecords(subId);
-        if (iccRecords == null) {
-            return null;
-        }
         TelephonyManager telephonyManager =
             getContext().getSystemService(TelephonyManager.class).createForSubscriptionId(subId);
         String simOperator = telephonyManager.getSimOperator();
@@ -3909,8 +3896,8 @@
                 String mvnoType = cursor.getString(0 /* MVNO_TYPE index */);
                 String mvnoMatchData = cursor.getString(1 /* MVNO_MATCH_DATA index */);
                 if (!TextUtils.isEmpty(mvnoType) && !TextUtils.isEmpty(mvnoMatchData)
-                        && ApnSettingUtils.mvnoMatches(iccRecords,
-                        getMvnoTypeIntFromString(mvnoType), mvnoMatchData)) {
+                        && telephonyManager.isCurrentSimOperator(simOperator,
+                            getMvnoTypeIntFromString(mvnoType), mvnoMatchData)) {
                     where = NUMERIC + "='" + simOperator + "'"
                             + " AND " + MVNO_TYPE + "='" + mvnoType + "'"
                             + " AND " + MVNO_MATCH_DATA + "='" + mvnoMatchData + "'"
@@ -3930,16 +3917,6 @@
         return where;
     }
 
-    @VisibleForTesting
-    IccRecords getIccRecords(int subId) {
-        TelephonyManager telephonyManager =
-            getContext().getSystemService(TelephonyManager.class).createForSubscriptionId(subId);
-        int family = telephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_GSM ?
-                UiccController.APP_FAM_3GPP : UiccController.APP_FAM_3GPP2;
-        return UiccController.getInstance().getIccRecords(
-                SubscriptionManager.getPhoneId(subId), family);
-    }
-
     private synchronized void updateApnDb() {
         if (apnSourceServiceExists(getContext())) {
             loge("called updateApnDb when apn source service exists");
diff --git a/tests/src/com/android/providers/telephony/TelephonyProviderTest.java b/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
index 4b61798..efd5120 100644
--- a/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
+++ b/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
@@ -17,7 +17,9 @@
 package com.android.providers.telephony;
 
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 
 
@@ -46,9 +48,6 @@
 
 import androidx.test.InstrumentationRegistry;
 
-import com.android.internal.telephony.uicc.IccRecords;
-import com.android.internal.telephony.uicc.UiccController;
-
 import junit.framework.TestCase;
 
 import org.junit.Test;
@@ -80,12 +79,6 @@
     private MockContentResolver mContentResolver;
     private TelephonyProviderTestable mTelephonyProviderTestable;
 
-    @Mock
-    private UiccController mUiccController;
-
-    @Mock
-    private IccRecords mIcRecords;
-
     private int notifyChangeCount;
     private int notifyChangeRestoreCount;
     private int notifyWfcCount;
@@ -156,9 +149,6 @@
 
             doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(anyInt());
             doReturn(TEST_OPERATOR).when(mTelephonyManager).getSimOperator();
-            doReturn(mIcRecords).when(mUiccController).getIccRecords(anyInt(), anyInt());
-            doReturn(TEST_SPN).when(mIcRecords).getServiceProviderName();
-            doReturn(TEST_SPN).when(mIcRecords).getServiceProviderNameWithBrandOverride();
             doReturn(TEST_CARRIERID).when(mTelephonyManager).getSimCarrierId();
 
             // Add authority="telephony" to given telephonyProvider
@@ -235,7 +225,6 @@
         mTelephonyProviderTestable = new TelephonyProviderTestable();
         mContext = new MockContextWithProvider(mTelephonyProviderTestable);
         mContentResolver = (MockContentResolver) mContext.getContentResolver();
-        replaceInstance(UiccController.class, "mInstance", null, mUiccController);
         notifyChangeCount = 0;
         notifyChangeRestoreCount = 0;
     }
@@ -1374,6 +1363,11 @@
         otherValues.put(Carriers.MVNO_TYPE, otherMvnoTyp);
         otherValues.put(Carriers.MVNO_MATCH_DATA, otherMvnoMatchData);
 
+        doReturn(true).when(telephonyManager).isCurrentSimOperator(
+            anyString(), anyInt(), eq(TelephonyProviderTestable.TEST_SPN));
+        doReturn(false).when(telephonyManager).isCurrentSimOperator(
+            anyString(), anyInt(), eq(otherMvnoMatchData));
+
         // insert APNs
         Log.d(TAG, "testRestoreDefaultApn: Bulk inserting contentValues=" + targetValues + ", "
                 + otherValues);
@@ -1484,14 +1478,6 @@
         assertEquals(0, notifyWfcCountWithTestSubId);
     }
 
-    protected void replaceInstance(final Class c, final String instanceName,
-            final Object obj, final Object newValue)
-            throws Exception {
-        Field field = c.getDeclaredField(instanceName);
-        field.setAccessible(true);
-        field.set(obj, newValue);
-    }
-
     @Test
     @SmallTest
     public void testSIMAPNLIST_MatchTheMVNOAPN() {
@@ -1518,6 +1504,13 @@
         contentValues.put(Carriers.NUMERIC, numeric);
         mContentResolver.insert(Carriers.CONTENT_URI, contentValues);
 
+        TelephonyManager telephonyManager =
+            (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        doReturn(true).when(telephonyManager).isCurrentSimOperator(
+            anyString(), anyInt(), eq(mvnoData));
+        doReturn(false).when(telephonyManager).isCurrentSimOperator(
+            anyString(), anyInt(), eq(""));
+
         // Query DB
         final String[] testProjection =
                 {
diff --git a/tests/src/com/android/providers/telephony/TelephonyProviderTestable.java b/tests/src/com/android/providers/telephony/TelephonyProviderTestable.java
index d9f6ee3..eca7830 100644
--- a/tests/src/com/android/providers/telephony/TelephonyProviderTestable.java
+++ b/tests/src/com/android/providers/telephony/TelephonyProviderTestable.java
@@ -27,7 +27,6 @@
 import androidx.test.InstrumentationRegistry;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.telephony.uicc.IccRecords;
 import com.android.providers.telephony.TelephonyProvider;
 
 /**
@@ -87,15 +86,6 @@
         return false;
     }
 
-    @Override
-    IccRecords getIccRecords(int subId) {
-        Log.d(TAG, "getIccRecords called");
-        IccRecords iccRecords = mock(IccRecords.class);
-        doReturn(TEST_SPN).when(iccRecords).getServiceProviderName();
-        doReturn(TEST_SPN).when(iccRecords).getServiceProviderNameWithBrandOverride();
-        return iccRecords;
-    }
-
     public void fakeCallingUid(int uid) {
         mMockInjector.fakeCallingUid(uid);
     }
