diff --git a/Android.bp b/Android.bp
index 1887a8a..0be0e4d 100644
--- a/Android.bp
+++ b/Android.bp
@@ -23,6 +23,7 @@
         "voip-common",
         "ims-common",
         "libprotobuf-java-lite",
+        "telephony-resources",
         "unsupportedappusage",
     ],
 
diff --git a/sip/src/com/android/services/telephony/sip/SipUtil.java b/sip/src/com/android/services/telephony/sip/SipUtil.java
index 828174e..ce75dc7 100644
--- a/sip/src/com/android/services/telephony/sip/SipUtil.java
+++ b/sip/src/com/android/services/telephony/sip/SipUtil.java
@@ -33,6 +33,7 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 import com.android.phone.PhoneGlobals;
 
 import java.io.IOException;
@@ -51,9 +52,9 @@
     }
 
     public static boolean isVoipSupported(Context context) {
-        return SipManager.isVoipSupported(context) &&
-                context.getResources().getBoolean(
-                        com.android.internal.R.bool.config_built_in_sip_phone)
+        return SipManager.isVoipSupported(context)
+                && TelephonyResourceUtils.getTelephonyResources(context).getBoolean(
+                        com.android.telephony.resources.R.bool.config_built_in_sip_phone)
                 && ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE))
                         .isVoiceCapable();
     }
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 5b14591..a609f98 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -43,6 +43,7 @@
 import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaDisplayInfoRec;
 import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaSignalInfoRec;
 import com.android.internal.telephony.cdma.SignalToneUtil;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -652,16 +653,16 @@
         int resId = 0;
         switch (((Integer)r.result).intValue()) {
             case TelecomManager.TTY_MODE_FULL:
-                resId = com.android.internal.R.string.peerTtyModeFull;
+                resId = com.android.telephony.resources.R.string.peerTtyModeFull;
                 break;
             case TelecomManager.TTY_MODE_HCO:
-                resId = com.android.internal.R.string.peerTtyModeHco;
+                resId = com.android.telephony.resources.R.string.peerTtyModeHco;
                 break;
             case TelecomManager.TTY_MODE_VCO:
-                resId = com.android.internal.R.string.peerTtyModeVco;
+                resId = com.android.telephony.resources.R.string.peerTtyModeVco;
                 break;
             case TelecomManager.TTY_MODE_OFF:
-                resId = com.android.internal.R.string.peerTtyModeOff;
+                resId = com.android.telephony.resources.R.string.peerTtyModeOff;
                 break;
             default:
                 Log.e(LOG_TAG, "Unsupported TTY mode: " + r.result);
@@ -669,7 +670,7 @@
         }
         if (resId != 0) {
             PhoneDisplayMessage.displayNetworkMessage(mApplication,
-                    mApplication.getResources().getString(resId));
+                    TelephonyResourceUtils.getTelephonyResources(mApplication).getString(resId));
 
             // start a timer that kills the dialog
             sendEmptyMessageDelayed(INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE,
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 66017e4..4befa61 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -60,6 +60,7 @@
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.TelephonyCapabilities;
 import com.android.internal.telephony.util.NotificationChannelController;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 import com.android.phone.settings.VoicemailSettingsActivity;
 
 import java.util.ArrayList;
@@ -817,8 +818,10 @@
                 boolean isManualSelection;
                 // if restoring manual selection is controlled by framework, then get network
                 // selection from shared preference, otherwise get from real network indicators.
-                boolean restoreSelection = !mContext.getResources().getBoolean(
-                        com.android.internal.R.bool.skip_restoring_network_selection);
+                boolean restoreSelection = !TelephonyResourceUtils.getTelephonyResources(mContext)
+                        .getBoolean(
+                            com.android.telephony.resources.R.bool
+                                .skip_restoring_network_selection);
                 if (restoreSelection) {
                     isManualSelection = !TextUtils.isEmpty(selectedNetworkOperatorName);
                 } else {
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index db74270..b5884eb 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -171,6 +171,7 @@
 import com.android.internal.telephony.uicc.UiccProfile;
 import com.android.internal.telephony.uicc.UiccSlot;
 import com.android.internal.telephony.util.LocaleUtils;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 import com.android.internal.telephony.util.VoicemailNotificationSettingsUtil;
 import com.android.internal.util.HexDump;
 import com.android.phone.settings.PickSmsSubscriptionActivity;
@@ -8307,8 +8308,10 @@
         //TODO investigate if this API should require proper permission check in R b/133791609
         final long identity = Binder.clearCallingIdentity();
         try {
-            return SubscriptionManager.getResourcesForSubId(getDefaultPhone().getContext(), subId)
-                    .getString(com.android.internal.R.string.config_mms_user_agent_profile_url);
+            return TelephonyResourceUtils
+                    .getResourcesForSubId(getDefaultPhone().getContext(), subId)
+                    .getString(com.android.telephony.resources.R.string
+                            .config_mms_user_agent_profile_url);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
@@ -8319,8 +8322,9 @@
         //TODO investigate if this API should require proper permission check in R b/133791609
         final long identity = Binder.clearCallingIdentity();
         try {
-            return SubscriptionManager.getResourcesForSubId(getDefaultPhone().getContext(), subId)
-                    .getString(com.android.internal.R.string.config_mms_user_agent);
+            return TelephonyResourceUtils
+                    .getResourcesForSubId(getDefaultPhone().getContext(), subId)
+                    .getString(com.android.telephony.resources.R.string.config_mms_user_agent);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index 20a818e..ef49ca3 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -31,7 +31,6 @@
 import android.telecom.VideoProfile;
 import android.telephony.CarrierConfigManager;
 import android.telephony.PhoneNumberUtils;
-import com.android.telephony.Rlog;
 import android.telephony.SubscriptionManager;
 import android.text.TextUtils;
 import android.util.Log;
@@ -52,7 +51,9 @@
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.TelephonyCapabilities;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 import com.android.phone.settings.SuppServicesUiUtil;
+import com.android.telephony.Rlog;
 
 import java.util.List;
 
@@ -296,7 +297,7 @@
             AlertDialog previousAlert) {
         final PhoneGlobals app = PhoneGlobals.getInstance();
         CharSequence text;
-        int title = 0;  // title for the progress dialog, if needed.
+        CharSequence title = "";  // title for the progress dialog, if needed.
         MmiCode.State state = mmiCode.getState();
 
         log("displayMMIComplete: state=" + state);
@@ -330,7 +331,8 @@
                 if (app.getPUKEntryActivity() != null) {
                     // if an attempt to unPUK the device was made, we specify
                     // the title and the message here.
-                    title = com.android.internal.R.string.PinMmi;
+                    title = TelephonyResourceUtils.getTelephonyResources(context)
+                            .getText(com.android.telephony.resources.R.string.PinMmi);
                     text = context.getText(R.string.puk_unlocked);
                     break;
                 }
diff --git a/src/com/android/phone/settings/RadioInfo.java b/src/com/android/phone/settings/RadioInfo.java
index 77f1135..748c9fb 100644
--- a/src/com/android/phone/settings/RadioInfo.java
+++ b/src/com/android/phone/settings/RadioInfo.java
@@ -89,6 +89,7 @@
 import com.android.ims.ImsManager;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 import com.android.phone.R;
 
 import java.io.IOException;
@@ -1708,8 +1709,8 @@
     };
 
     boolean isCbrsSupported() {
-        return getResources().getBoolean(
-              com.android.internal.R.bool.config_cbrs_supported);
+        return TelephonyResourceUtils.getTelephonyResources(mPhone.getContext())
+              .getBoolean(com.android.telephony.resources.R.bool.config_cbrs_supported);
     }
 
     void updateCbrsDataState(boolean state) {
diff --git a/src/com/android/phone/settings/SuppServicesUiUtil.java b/src/com/android/phone/settings/SuppServicesUiUtil.java
index 4e9841f..dbc2054 100644
--- a/src/com/android/phone/settings/SuppServicesUiUtil.java
+++ b/src/com/android/phone/settings/SuppServicesUiUtil.java
@@ -29,6 +29,7 @@
 
 import com.android.internal.telephony.MmiCode;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 import com.android.phone.CarrierXmlParser;
 import com.android.phone.GsmUmtsAdditionalCallOptions;
 import com.android.phone.GsmUmtsCallOptions;
@@ -237,8 +238,8 @@
 
             return "";
         } else {
-            return context.getText(
-                    com.android.internal.R.string.mmiError);
+            return TelephonyResourceUtils.getTelephonyResources(context).getText(
+                    com.android.telephony.resources.R.string.mmiError);
         }
     }
 }
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index d46c715..e8dad8c 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -26,6 +26,7 @@
 import com.android.internal.telephony.CallFailCause;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 import com.android.phone.ImsUtil;
 import com.android.phone.PhoneGlobals;
 import com.android.phone.common.R;
@@ -730,8 +731,8 @@
                 resourceId = R.string.callFailed_data_limit_reached_description;
                 break;
             case android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING:
-                resourceId = com.android.internal.R.string.mmiErrorWhileRoaming;
-                break;
+                return TelephonyResourceUtils.getTelephonyResources(context).getString(
+                        com.android.telephony.resources.R.string.mmiErrorWhileRoaming);
 
             case android.telephony.DisconnectCause.IMEI_NOT_ACCEPTED:
                 resourceId = R.string.callFailed_imei_not_accepted;
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 29b65d0..963b2ce 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -40,7 +40,6 @@
 import android.telephony.CarrierConfigManager;
 import android.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
-import com.android.telephony.Rlog;
 import android.telephony.ServiceState;
 import android.telephony.ServiceState.RilRadioTechnology;
 import android.telephony.SubscriptionManager;
@@ -65,10 +64,12 @@
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.imsphone.ImsPhoneCallTracker;
 import com.android.internal.telephony.imsphone.ImsPhoneConnection;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 import com.android.phone.ImsUtil;
 import com.android.phone.PhoneGlobals;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
+import com.android.telephony.Rlog;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -1613,8 +1614,8 @@
         if (phone == null) {
             return true;
         }
-        return phone.getContext().getResources().getBoolean(
-                com.android.internal.R.bool.config_device_respects_hold_carrier_config);
+        return TelephonyResourceUtils.getTelephonyResources(phone.getContext()).getBoolean(
+            com.android.telephony.resources.R.bool.config_device_respects_hold_carrier_config);
     }
 
     /**
diff --git a/tests/src/com/android/services/telephony/TestTelephonyConnection.java b/tests/src/com/android/services/telephony/TestTelephonyConnection.java
index 5b31c0f..1eb460a 100644
--- a/tests/src/com/android/services/telephony/TestTelephonyConnection.java
+++ b/tests/src/com/android/services/telephony/TestTelephonyConnection.java
@@ -16,12 +16,6 @@
 
 package com.android.services.telephony;
 
-import android.content.Context;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.os.PersistableBundle;
-import android.telecom.PhoneAccountHandle;
-
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
@@ -29,11 +23,19 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.telecom.PhoneAccountHandle;
+
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.Connection;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.emergency.EmergencyNumberTracker;
+import com.android.internal.telephony.util.TelephonyResourceUtils;
 
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
@@ -60,6 +62,9 @@
     Resources mMockResources;
 
     @Mock
+    PackageManager mMockPackageManager;
+
+    @Mock
     EmergencyNumberTracker mEmergencyNumberTracker;
 
     private Phone mMockPhone;
@@ -95,6 +100,14 @@
         when(mMockPhone.getContext()).thenReturn(mMockContext);
         when(mMockPhone.getCurrentSubscriberUris()).thenReturn(null);
         when(mMockContext.getResources()).thenReturn(mMockResources);
+        when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
+        try {
+            when(mMockPackageManager.getResourcesForApplication(
+                    TelephonyResourceUtils.TELEPHONY_RESOURCE_PACKAGE))
+                        .thenReturn(mMockResources);
+        } catch (Exception e) {
+            // Needed to make compiler happy.
+        }
         when(mMockResources.getBoolean(anyInt())).thenReturn(false);
         when(mMockPhone.getDefaultPhone()).thenReturn(mMockPhone);
         when(mMockPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_IMS);
