Allow Device Management Role Holder to update Settings strings.

Test: manual
Bug: 188414370
Change-Id: I6e1a06619799a9e99382d791e72e2e4518f93cac
diff --git a/src/com/android/settings/MainClear.java b/src/com/android/settings/MainClear.java
index a7aa8ea..7eb4a5d 100644
--- a/src/com/android/settings/MainClear.java
+++ b/src/com/android/settings/MainClear.java
@@ -16,6 +16,9 @@
 
 package com.android.settings;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
+
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
 import android.accounts.Account;
@@ -23,6 +26,7 @@
 import android.accounts.AuthenticatorDescription;
 import android.app.ActionBar;
 import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -491,8 +495,17 @@
             if (profilesSize > 1) {
                 View titleView = Utils.inflateCategoryHeader(inflater, contents);
                 final TextView titleText = (TextView) titleView.findViewById(android.R.id.title);
-                titleText.setText(userInfo.isManagedProfile() ? R.string.category_work
-                        : R.string.category_personal);
+
+                DevicePolicyManager devicePolicyManager =
+                        context.getSystemService(DevicePolicyManager.class);
+
+                if (userInfo.isManagedProfile()) {
+                    titleText.setText(devicePolicyManager.getString(
+                            WORK_CATEGORY_HEADER, () -> getString(R.string.category_work)));
+                } else {
+                    titleText.setText(devicePolicyManager.getString(
+                            PERSONAL_CATEGORY_HEADER, () -> getString(R.string.category_personal)));
+                }
                 contents.addView(titleView);
             }
 
diff --git a/src/com/android/settings/RemoteBugreportActivity.java b/src/com/android/settings/RemoteBugreportActivity.java
index 2c88ec3..12dce90 100644
--- a/src/com/android/settings/RemoteBugreportActivity.java
+++ b/src/com/android/settings/RemoteBugreportActivity.java
@@ -15,6 +15,11 @@
  */
 package com.android.settings;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SHARE_REMOTE_BUGREPORT_DIALOG_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SHARE_REMOTE_BUGREPORT_FINISHED_REQUEST_CONSENT;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SHARE_REMOTE_BUGREPORT_NOT_FINISHED_REQUEST_CONSENT;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SHARING_REMOTE_BUGREPORT_MESSAGE;
+
 import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.admin.DevicePolicyManager;
@@ -42,12 +47,16 @@
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
+
         final int notificationType = getIntent().getIntExtra(
                 DevicePolicyManager.EXTRA_BUGREPORT_NOTIFICATION_TYPE, -1);
 
         if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_ACCEPTED_NOT_FINISHED) {
             AlertDialog dialog = new AlertDialog.Builder(this)
-                    .setMessage(R.string.sharing_remote_bugreport_dialog_message)
+                    .setMessage(devicePolicyManager.getString(
+                            SHARING_REMOTE_BUGREPORT_MESSAGE,
+                            () -> getString(R.string.sharing_remote_bugreport_dialog_message)))
                     .setOnDismissListener(new DialogInterface.OnDismissListener() {
                         @Override
                         public void onDismiss(DialogInterface dialog) {
@@ -65,12 +74,21 @@
         } else if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
                 || notificationType
                         == DevicePolicyManager.NOTIFICATION_BUGREPORT_FINISHED_NOT_ACCEPTED) {
+
+            int defaultMessageId =  notificationType
+                    == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
+                    ? R.string.share_remote_bugreport_dialog_message
+                    : R.string.share_remote_bugreport_dialog_message_finished;
+            String overrideMessageId = notificationType
+                    == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
+                    ? SHARE_REMOTE_BUGREPORT_NOT_FINISHED_REQUEST_CONSENT
+                    : SHARE_REMOTE_BUGREPORT_FINISHED_REQUEST_CONSENT;
+
             AlertDialog dialog = new AlertDialog.Builder(this)
-                    .setTitle(R.string.share_remote_bugreport_dialog_title)
-                    .setMessage(notificationType
-                                    == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
-                            ? R.string.share_remote_bugreport_dialog_message
-                            : R.string.share_remote_bugreport_dialog_message_finished)
+                    .setTitle(devicePolicyManager.getString(SHARE_REMOTE_BUGREPORT_DIALOG_TITLE,
+                            () -> getString(R.string.share_remote_bugreport_dialog_title)))
+                    .setMessage(devicePolicyManager.getString(overrideMessageId,
+                            () -> getString(defaultMessageId)))
                     .setOnDismissListener(new DialogInterface.OnDismissListener() {
                         @Override
                         public void onDismiss(DialogInterface dialog) {
diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java
index ae25ba9..fffb8eb 100644
--- a/src/com/android/settings/TrustedCredentialsSettings.java
+++ b/src/com/android/settings/TrustedCredentialsSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.settings;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
 import static android.widget.LinearLayout.LayoutParams.MATCH_PARENT;
 import static android.widget.LinearLayout.LayoutParams.WRAP_CONTENT;
 
@@ -82,6 +84,7 @@
 
     private static final String TAG = "TrustedCredentialsSettings";
 
+    private DevicePolicyManager mDevicePolicyManager;
     private UserManager mUserManager;
     private KeyguardManager mKeyguardManager;
     private int mTrustAllCaUserId;
@@ -179,6 +182,7 @@
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         final Activity activity = getActivity();
+        mDevicePolicyManager = activity.getSystemService(DevicePolicyManager.class);
         mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
         mKeyguardManager = (KeyguardManager) activity
                 .getSystemService(Context.KEYGUARD_SERVICE);
@@ -385,9 +389,12 @@
 
             final TextView title = (TextView) convertView.findViewById(android.R.id.title);
             if (getUserInfoByGroup(groupPosition).isManagedProfile()) {
-                title.setText(R.string.category_work);
+                title.setText(mDevicePolicyManager.getString(WORK_CATEGORY_HEADER,
+                        () -> getString(R.string.category_work)));
             } else {
-                title.setText(R.string.category_personal);
+                title.setText(mDevicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
+                        () -> getString(R.string.category_personal)));
+
             }
             title.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
 
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index 42b2334..8f387d4 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -16,6 +16,14 @@
 
 package com.android.settings.accounts;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ACCESSIBILITY_CATEGORY_PERSONAL;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ACCESSIBILITY_CATEGORY_WORK;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_BY;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_PROFILE_SETTINGS_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_WORK_PROFILE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOT_AVAILABLE;
 import static android.content.Intent.EXTRA_USER;
 import static android.os.UserManager.DISALLOW_MODIFY_ACCOUNTS;
 import static android.os.UserManager.DISALLOW_REMOVE_MANAGED_PROFILE;
@@ -24,6 +32,7 @@
 
 import android.accounts.Account;
 import android.accounts.AccountManager;
+import android.app.admin.DevicePolicyManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -85,6 +94,7 @@
     private static final String PREF_KEY_WORK_PROFILE_SETTING = "work_profile_setting";
 
     private UserManager mUm;
+    private DevicePolicyManager mDpm;
     private SparseArray<ProfileData> mProfiles = new SparseArray<ProfileData>();
     private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver =
             new ManagedProfileBroadcastReceiver();
@@ -146,6 +156,7 @@
             @ProfileSelectFragment.ProfileType int type) {
         super(context);
         mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        mDpm = context.getSystemService(DevicePolicyManager.class);
         mAuthorities = authorities;
         mFragment = parent;
         if (mAuthorities != null) {
@@ -188,13 +199,16 @@
                         UserHandle.myUserId())) {
                     final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
                     data.key = PREF_KEY_REMOVE_PROFILE;
-                    data.title = res.getString(R.string.remove_managed_profile_label);
+                    data.title = mDpm.getString(
+                            REMOVE_WORK_PROFILE,
+                            () -> res.getString(R.string.remove_managed_profile_label));
                     data.screenTitle = screenTitle;
                     rawData.add(data);
                 }
                 final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
                 data.key = PREF_KEY_WORK_PROFILE_SETTING;
-                data.title = res.getString(R.string.managed_profile_settings_title);
+                data.title = mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
+                        () -> res.getString(R.string.managed_profile_settings_title));
                 data.screenTitle = screenTitle;
                 rawData.add(data);
             }
@@ -253,7 +267,8 @@
                 new SubSettingLauncher(mContext)
                         .setSourceMetricsCategory(metricsCategory)
                         .setDestination(ManagedProfileSettings.class.getName())
-                        .setTitleRes(R.string.managed_profile_settings_title)
+                        .setTitleText(mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
+                                () -> mContext.getString(R.string.managed_profile_settings_title)))
                         .setArguments(arguments)
                         .launch();
 
@@ -331,11 +346,15 @@
             preferenceGroup.setContentDescription(title);
         } else if (userInfo.isManagedProfile()) {
             if (mType == ProfileSelectFragment.ProfileType.ALL) {
-                preferenceGroup.setTitle(R.string.category_work);
+                preferenceGroup.setTitle(
+                        mDpm.getString(WORK_CATEGORY_HEADER,
+                                () -> mContext.getString(R.string.category_work)));
                 final String workGroupSummary = getWorkGroupSummary(context, userInfo);
                 preferenceGroup.setSummary(workGroupSummary);
                 preferenceGroup.setContentDescription(
-                        mContext.getString(R.string.accessibility_category_work, workGroupSummary));
+                        mDpm.getString(ACCESSIBILITY_CATEGORY_WORK, () ->
+                        mContext.getString(
+                                R.string.accessibility_category_work, workGroupSummary)));
             }
             profileData.removeWorkProfilePreference = newRemoveWorkProfilePreference();
             mHelper.enforceRestrictionOnPreference(profileData.removeWorkProfilePreference,
@@ -343,9 +362,12 @@
             profileData.managedProfilePreference = newManagedProfileSettings();
         } else {
             if (mType == ProfileSelectFragment.ProfileType.ALL) {
-                preferenceGroup.setTitle(R.string.category_personal);
+                preferenceGroup.setTitle(
+                        mDpm.getString(PERSONAL_CATEGORY_HEADER,
+                                () -> mContext.getString(R.string.category_personal)));
                 preferenceGroup.setContentDescription(
-                        mContext.getString(R.string.accessibility_category_personal));
+                        mDpm.getString(ACCESSIBILITY_CATEGORY_PERSONAL, () ->
+                        mContext.getString(R.string.accessibility_category_personal)));
             }
         }
         final PreferenceScreen screen = mFragment.getPreferenceScreen();
@@ -378,7 +400,9 @@
         RestrictedPreference preference = new RestrictedPreference(
                 mFragment.getPreferenceManager().getContext());
         preference.setKey(PREF_KEY_REMOVE_PROFILE);
-        preference.setTitle(R.string.remove_managed_profile_label);
+        preference.setTitle(
+                mDpm.getString(REMOVE_WORK_PROFILE,
+                        () -> mContext.getString(R.string.remove_managed_profile_label)));
         preference.setIcon(R.drawable.ic_delete);
         preference.setOnPreferenceClickListener(this);
         preference.setOrder(ORDER_LAST);
@@ -389,7 +413,8 @@
     private Preference newManagedProfileSettings() {
         Preference preference = new Preference(mFragment.getPreferenceManager().getContext());
         preference.setKey(PREF_KEY_WORK_PROFILE_SETTING);
-        preference.setTitle(R.string.managed_profile_settings_title);
+        preference.setTitle(mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
+                () -> mContext.getString(R.string.managed_profile_settings_title)));
         preference.setIcon(R.drawable.ic_settings_24dp);
         preference.setOnPreferenceClickListener(this);
         preference.setOrder(ORDER_NEXT_TO_LAST);
@@ -403,7 +428,8 @@
             return null;
         }
         CharSequence appLabel = packageManager.getApplicationLabel(adminApplicationInfo);
-        return mContext.getString(R.string.managing_admin, appLabel);
+        return mDpm.getString(MANAGED_BY,
+                () -> mContext.getString(R.string.managing_admin, appLabel), appLabel);
     }
 
     void cleanUpPreferences() {
@@ -482,7 +508,9 @@
             mProfileNotAvailablePreference.setIcon(R.drawable.empty_icon);
             mProfileNotAvailablePreference.setTitle(null);
             mProfileNotAvailablePreference.setSummary(
-                    R.string.managed_profile_not_available_label);
+                    mDpm.getString(
+                            WORK_PROFILE_NOT_AVAILABLE, () -> mContext.getString(
+                    R.string.managed_profile_not_available_label)));
             profileData.preferenceGroup.addPreference(mProfileNotAvailablePreference);
         }
         if (profileData.removeWorkProfilePreference != null) {
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 23b6157..7c72d6c 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -16,10 +16,14 @@
 
 package com.android.settings.accounts;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ACCESSIBILITY_PERSONAL_ACCOUNT_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ACCESSIBILITY_WORK_ACCOUNT_TITLE;
+
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.app.Activity;
 import android.app.Dialog;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -154,10 +158,20 @@
         UserInfo user = um.getUserInfo(mUserHandle.getIdentifier());
         boolean isWorkProfile = user != null ? user.isManagedProfile() : false;
         CharSequence currentTitle = getActivity().getTitle();
+
+        DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
+
         String accessibilityTitle =
-                getString(isWorkProfile
-                        ? R.string.accessibility_work_account_title
-                        : R.string.accessibility_personal_account_title, currentTitle);
+                isWorkProfile
+                        ? devicePolicyManager.getString(ACCESSIBILITY_WORK_ACCOUNT_TITLE,
+                                () -> getString(R.string.accessibility_work_account_title,
+                                        currentTitle), currentTitle)
+                                : devicePolicyManager.getString(
+                                        ACCESSIBILITY_PERSONAL_ACCOUNT_TITLE,
+                                        () -> getString(
+                                                R.string.accessibility_personal_account_title,
+                                                currentTitle), currentTitle);
+
         getActivity().setTitle(Utils.createAccessibleSequence(currentTitle, accessibilityTitle));
     }
 
diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
index 2ce2206..58ef7f1 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -15,12 +15,15 @@
  */
 package com.android.settings.accounts;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_ACCOUNT_FAILED_ADMIN_RESTRICTION;
+
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AuthenticatorException;
 import android.accounts.OperationCanceledException;
 import android.app.Activity;
 import android.app.Dialog;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -213,7 +216,9 @@
 
             return new AlertDialog.Builder(context)
                     .setTitle(R.string.remove_account_label)
-                    .setMessage(R.string.remove_account_failed)
+                    .setMessage(getContext().getSystemService(DevicePolicyManager.class)
+                            .getString(REMOVE_ACCOUNT_FAILED_ADMIN_RESTRICTION,
+                                    () -> getString(R.string.remove_account_failed)))
                     .setPositiveButton(android.R.string.ok, null)
                     .create();
         }
diff --git a/src/com/android/settings/accounts/WorkModePreferenceController.java b/src/com/android/settings/accounts/WorkModePreferenceController.java
index 11a620b..aa54d33 100644
--- a/src/com/android/settings/accounts/WorkModePreferenceController.java
+++ b/src/com/android/settings/accounts/WorkModePreferenceController.java
@@ -13,6 +13,10 @@
  */
 package com.android.settings.accounts;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SETTING_OFF_SUMMARY;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SETTING_ON_SUMMARY;
+
+import android.app.admin.DevicePolicyManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -40,6 +44,7 @@
 
     private UserManager mUserManager;
     private UserHandle mManagedUser;
+    private DevicePolicyManager mDevicePolicyManager;
 
     private Preference mPreference;
     private IntentFilter mIntentFilter;
@@ -47,6 +52,7 @@
     public WorkModePreferenceController(Context context, String key) {
         super(context, key);
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
         mIntentFilter = new IntentFilter();
         mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
         mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
@@ -80,9 +86,15 @@
 
     @Override
     public CharSequence getSummary() {
-        return mContext.getText(isChecked()
-                ? R.string.work_mode_on_summary
-                : R.string.work_mode_off_summary);
+        if (isChecked()) {
+            return mDevicePolicyManager
+                    .getString(WORK_PROFILE_SETTING_ON_SUMMARY,
+                            () -> mContext.getString(R.string.work_mode_on_summary));
+        }
+
+        return mDevicePolicyManager
+                .getString(WORK_PROFILE_SETTING_OFF_SUMMARY,
+                        () -> mContext.getString(R.string.work_mode_off_summary));
     }
 
     private boolean isChecked() {
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index 7104340..0f21097 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -219,7 +219,7 @@
         }
     }
 
-    public static void startAppInfoFragment(Class<?> fragment, int titleRes,
+    public static void startAppInfoFragment(Class<?> fragment, String title,
             String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) {
         final Bundle args = new Bundle();
         args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
@@ -228,7 +228,7 @@
         new SubSettingLauncher(source.getContext())
                 .setDestination(fragment.getName())
                 .setSourceMetricsCategory(sourceMetricsCategory)
-                .setTitleRes(titleRes)
+                .setTitleText(title)
                 .setArguments(args)
                 .setUserHandle(new UserHandle(UserHandle.getUserId(uid)))
                 .setResultListener(source, request)
diff --git a/src/com/android/settings/applications/AppsPreferenceController.java b/src/com/android/settings/applications/AppsPreferenceController.java
index 9fbd5c1..fad513e 100644
--- a/src/com/android/settings/applications/AppsPreferenceController.java
+++ b/src/com/android/settings/applications/AppsPreferenceController.java
@@ -211,7 +211,8 @@
                 pref.setOrder(showAppsCount++);
                 pref.setOnPreferenceClickListener(preference -> {
                     AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class,
-                            R.string.application_info_label, pkgName, appEntry.info.uid,
+                            mContext.getString(R.string.application_info_label),
+                            pkgName, appEntry.info.uid,
                             mHost, 1001 /*RequestCode*/, getMetricsCategory());
                     return true;
                 });
diff --git a/src/com/android/settings/applications/UsageAccessDetails.java b/src/com/android/settings/applications/UsageAccessDetails.java
index 4681fd8..ef259d2 100644
--- a/src/com/android/settings/applications/UsageAccessDetails.java
+++ b/src/com/android/settings/applications/UsageAccessDetails.java
@@ -17,6 +17,7 @@
 
 import static android.app.AppOpsManager.OP_GET_USAGE_STATS;
 import static android.app.AppOpsManager.OP_LOADER_USAGE_STATS;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_DISABLE_USAGE_ACCESS_WARNING;
 
 import android.Manifest;
 import android.app.AppOpsManager;
@@ -96,7 +97,8 @@
                     new AlertDialog.Builder(getContext())
                             .setIcon(com.android.internal.R.drawable.ic_dialog_alert_material)
                             .setTitle(android.R.string.dialog_alert_title)
-                            .setMessage(R.string.work_profile_usage_access_warning)
+                            .setMessage(mDpm.getString(WORK_PROFILE_DISABLE_USAGE_ACCESS_WARNING,
+                                    () -> getString(R.string.work_profile_usage_access_warning)))
                             .setPositiveButton(R.string.okay, null)
                             .show();
                 }
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 01bc2f1..93b7c10 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -645,8 +645,8 @@
     }
 
     private void startAppInfoFragment(Class<?> fragment, int titleRes) {
-        AppInfoBase.startAppInfoFragment(fragment, titleRes, mCurrentPkgName, mCurrentUid, this,
-                INSTALLED_APP_DETAILS, getMetricsCategory());
+        AppInfoBase.startAppInfoFragment(fragment, getString(titleRes), mCurrentPkgName,
+                mCurrentUid, this, INSTALLED_APP_DETAILS, getMetricsCategory());
     }
 
     @Override
diff --git a/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceController.java b/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceController.java
index 07c4858..eae1d06 100644
--- a/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceController.java
+++ b/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceController.java
@@ -70,7 +70,8 @@
     public boolean handlePreferenceTreeClick(Preference preference) {
         if (preference instanceof DomainAppPreference) {
             ApplicationsState.AppEntry entry = ((DomainAppPreference) preference).getEntry();
-            AppInfoBase.startAppInfoFragment(AppLaunchSettings.class, R.string.auto_launch_label,
+            AppInfoBase.startAppInfoFragment(AppLaunchSettings.class,
+                    mContext.getString(R.string.auto_launch_label),
                     entry.info.packageName, entry.info.uid, mFragment,
                     INSTALLED_APP_DETAILS, mMetricsCategory);
             return true;
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index 7b2f4ba..e133c62 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -17,6 +17,18 @@
 package com.android.settings.applications.specialaccess.deviceadmin;
 
 import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ACTIVATE_DEVICE_ADMIN_APP;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ACTIVATE_THIS_DEVICE_ADMIN_APP;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ACTIVE_DEVICE_ADMIN_WARNING;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.DEVICE_ADMIN_POLICIES_WARNING;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.NEW_DEVICE_ADMIN_WARNING;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.NEW_DEVICE_ADMIN_WARNING_SIMPLIFIED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_AND_UNINSTALL_DEVICE_ADMIN;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_DEVICE_ADMIN;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_WORK_PROFILE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_PROFILE_OWNER_DIALOG_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.USER_ADMIN_POLICIES_WARNING;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_ADMIN_POLICIES_WARNING;
 
 import android.app.Activity;
 import android.app.ActivityManager;
@@ -318,7 +330,8 @@
 
             // Build and show the simplified dialog
             final Dialog dialog = new AlertDialog.Builder(this)
-                    .setTitle(getText(R.string.profile_owner_add_title_simplified))
+                    .setTitle(mDPM.getString(SET_PROFILE_OWNER_DIALOG_TITLE,
+                            () -> getString(R.string.profile_owner_add_title_simplified)))
                     .setView(R.layout.profile_owner_add)
                     .setPositiveButton(R.string.allow, new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog, int which) {
@@ -339,8 +352,10 @@
             mAddMsg = dialog.findViewById(R.id.add_msg_simplified);
             mAddMsg.setText(mAddMsgText);
             mAdminWarning = dialog.findViewById(R.id.admin_warning_simplified);
-            mAdminWarning.setText(getString(R.string.device_admin_warning_simplified,
-                    mProfileOwnerName));
+            mAdminWarning.setText(
+                    mDPM.getString(NEW_DEVICE_ADMIN_WARNING_SIMPLIFIED, () ->
+                    getString(R.string.device_admin_warning_simplified,
+                    mProfileOwnerName), mProfileOwnerName));
             return;
         }
         setContentView(R.layout.device_admin_add);
@@ -655,8 +670,10 @@
             final boolean isManagedProfile = isManagedProfile(mDeviceAdmin);
             if (isProfileOwner && isManagedProfile) {
                 // Profile owner in a managed profile, user can remove profile to disable admin.
-                mAdminWarning.setText(R.string.admin_profile_owner_message);
-                mActionButton.setText(R.string.remove_managed_profile_label);
+                mAdminWarning.setText(mDPM.getString(WORK_PROFILE_ADMIN_POLICIES_WARNING,
+                        () -> getString(R.string.admin_profile_owner_message)));
+                mActionButton.setText(mDPM.getString(REMOVE_WORK_PROFILE,
+                        () -> getString(R.string.remove_managed_profile_label)));
 
                 final EnforcedAdmin admin = getAdminEnforcingCantRemoveProfile();
                 final boolean hasBaseRestriction = hasBaseCantRemoveProfileRestriction();
@@ -670,27 +687,33 @@
                 // Profile owner in a user or device owner, user can't disable admin.
                 if (isProfileOwner) {
                     // Show profile owner in a user description.
-                    mAdminWarning.setText(R.string.admin_profile_owner_user_message);
+                    mAdminWarning.setText(mDPM.getString(USER_ADMIN_POLICIES_WARNING,
+                            () -> getString(R.string.admin_profile_owner_user_message)));
                 } else {
                     // Show device owner description.
                     if (isFinancedDevice()) {
                         mAdminWarning.setText(R.string.admin_financed_message);
                     } else {
-                        mAdminWarning.setText(R.string.admin_device_owner_message);
+                        mAdminWarning.setText(mDPM.getString(DEVICE_ADMIN_POLICIES_WARNING,
+                                () -> getString(R.string.admin_device_owner_message)));
                     }
                 }
-                mActionButton.setText(R.string.remove_device_admin);
+                mActionButton.setText(mDPM.getString(REMOVE_DEVICE_ADMIN,
+                        () -> getString(R.string.remove_device_admin)));
                 mActionButton.setEnabled(false);
             } else {
                 addDeviceAdminPolicies(false /* showDescription */);
-                mAdminWarning.setText(getString(R.string.device_admin_status,
-                        mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(
-                        getPackageManager())));
+                CharSequence label = mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(
+                        getPackageManager());
+                mAdminWarning.setText(mDPM.getString(ACTIVE_DEVICE_ADMIN_WARNING,
+                        () -> getString(R.string.device_admin_status, label), label));
                 setTitle(R.string.active_device_admin_msg);
                 if (mUninstalling) {
-                    mActionButton.setText(R.string.remove_and_uninstall_device_admin);
+                    mActionButton.setText(mDPM.getString(REMOVE_AND_UNINSTALL_DEVICE_ADMIN,
+                            () -> getString(R.string.remove_and_uninstall_device_admin)));
                 } else {
-                    mActionButton.setText(R.string.remove_device_admin);
+                    mActionButton.setText(mDPM.getString(REMOVE_DEVICE_ADMIN,
+                            () -> getString(R.string.remove_device_admin)));
                 }
             }
             CharSequence supportMessage = mDPM.getLongSupportMessageForUser(
@@ -703,10 +726,16 @@
             }
         } else {
             addDeviceAdminPolicies(true /* showDescription */);
-            mAdminWarning.setText(getString(R.string.device_admin_warning,
-                    mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
-            setTitle(getText(R.string.add_device_admin_msg));
-            mActionButton.setText(getText(R.string.add_device_admin));
+            CharSequence label = mDeviceAdmin.getActivityInfo()
+                    .applicationInfo.loadLabel(getPackageManager());
+            mAdminWarning.setText(
+                    mDPM.getString(NEW_DEVICE_ADMIN_WARNING, () ->
+                    getString(R.string.device_admin_warning, label
+                    ), label));
+            setTitle(mDPM.getString(ACTIVATE_DEVICE_ADMIN_APP,
+                    () -> getString(R.string.add_device_admin_msg)));
+            mActionButton.setText(mDPM.getString(ACTIVATE_THIS_DEVICE_ADMIN_APP,
+                    () -> getString(R.string.add_device_admin)));
             if (isAdminUninstallable()) {
                 mUninstallButton.setVisibility(View.VISIBLE);
             }
diff --git a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
index 61af4f6..4e96aa3 100644
--- a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
+++ b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
@@ -15,6 +15,11 @@
  */
 package com.android.settings.applications.specialaccess.interactacrossprofiles;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.APP_CAN_ACCESS_PERSONAL_DATA;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.APP_CAN_ACCESS_PERSONAL_PERMISSIONS;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECT_APPS_DIALOG_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.INSTALL_IN_PERSONAL_PROFILE_TO_CONNECT_PROMPT;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.INSTALL_IN_WORK_PROFILE_TO_CONNECT_PROMPT;
 import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
 import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
 import static android.provider.Settings.ACTION_MANAGE_CROSS_PROFILE_ACCESS;
@@ -258,16 +263,22 @@
 
         final TextView dialogTitle = dialogView.findViewById(
                 R.id.interact_across_profiles_consent_dialog_title);
-        dialogTitle.setText(
-                getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel));
+        dialogTitle.setText(mDpm.getString(CONNECT_APPS_DIALOG_TITLE, () ->
+                getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel)));
 
         final TextView appDataSummary = dialogView.findViewById(R.id.app_data_summary);
-        appDataSummary.setText(getString(
-                R.string.interact_across_profiles_consent_dialog_app_data_summary, mAppLabel));
+        appDataSummary.setText(
+                mDpm.getString(APP_CAN_ACCESS_PERSONAL_DATA,
+                        () -> getString(
+                                R.string.interact_across_profiles_consent_dialog_app_data_summary,
+                                mAppLabel), mAppLabel));
 
         final TextView permissionsSummary = dialogView.findViewById(R.id.permissions_summary);
-        permissionsSummary.setText(getString(
-                R.string.interact_across_profiles_consent_dialog_permissions_summary, mAppLabel));
+        permissionsSummary.setText(mDpm.getString(APP_CAN_ACCESS_PERSONAL_PERMISSIONS,
+                () -> getString(
+                        R.string.interact_across_profiles_consent_dialog_permissions_summary,
+                        mAppLabel),
+                mAppLabel));
 
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         builder.setView(dialogView)
@@ -393,9 +404,12 @@
             return false;
         }
         if (!mInstalledInPersonal) {
-            mInstallBanner.setTitle(getString(
-                    R.string.interact_across_profiles_install_personal_app_title,
-                    mAppLabel));
+            mInstallBanner.setTitle(
+                    mDpm.getString(INSTALL_IN_PERSONAL_PROFILE_TO_CONNECT_PROMPT,
+                            () -> getString(
+                                    R.string.interact_across_profiles_install_personal_app_title,
+                                    mAppLabel),
+                            mAppLabel));
             if (mInstallAppIntent != null) {
                 mInstallBanner.setSummary(
                         R.string.interact_across_profiles_install_app_summary);
@@ -404,9 +418,12 @@
             return true;
         }
         if (!mInstalledInWork) {
-            mInstallBanner.setTitle(getString(
-                    R.string.interact_across_profiles_install_work_app_title,
-                    mAppLabel));
+            mInstallBanner.setTitle(
+                    mDpm.getString(INSTALL_IN_WORK_PROFILE_TO_CONNECT_PROMPT,
+                            () -> getString(
+                                    R.string.interact_across_profiles_install_work_app_title,
+                                    mAppLabel),
+                            mAppLabel));
             if (mInstallAppIntent != null) {
                 mInstallBanner.setSummary(
                         R.string.interact_across_profiles_install_app_summary);
diff --git a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettings.java b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettings.java
index ffab617..05ec3e9 100644
--- a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettings.java
+++ b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettings.java
@@ -15,9 +15,11 @@
  */
 package com.android.settings.applications.specialaccess.interactacrossprofiles;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECTED_WORK_AND_PERSONAL_APPS_TITLE;
 import static android.content.pm.PackageManager.GET_ACTIVITIES;
 
 import android.annotation.Nullable;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
@@ -51,6 +53,7 @@
     private Context mContext;
     private PackageManager mPackageManager;
     private UserManager mUserManager;
+    private DevicePolicyManager mDevicePolicyManager;
     private CrossProfileApps mCrossProfileApps;
     private IconDrawableFactory mIconDrawableFactory;
 
@@ -63,6 +66,7 @@
         mUserManager = mContext.getSystemService(UserManager.class);
         mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
         mCrossProfileApps = mContext.getSystemService(CrossProfileApps.class);
+        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
     }
 
     @Override
@@ -91,7 +95,8 @@
                 @Override
                 public boolean onPreferenceClick(Preference preference) {
                     AppInfoBase.startAppInfoFragment(InteractAcrossProfilesDetails.class,
-                            R.string.interact_across_profiles_title,
+                            mDevicePolicyManager.getString(CONNECTED_WORK_AND_PERSONAL_APPS_TITLE,
+                                    () -> getString(R.string.interact_across_profiles_title)),
                             packageName,
                             appInfo.uid,
                             InteractAcrossProfilesSettings.this/* source */,
diff --git a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java
index 57b7412..d794de6 100644
--- a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java
+++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java
@@ -168,7 +168,8 @@
                 @Override
                 public boolean onPreferenceClick(Preference preference) {
                     AppInfoBase.startAppInfoFragment(PictureInPictureDetails.class,
-                            R.string.picture_in_picture_app_detail_title, packageName, appInfo.uid,
+                            getString(R.string.picture_in_picture_app_detail_title),
+                            packageName, appInfo.uid,
                             PictureInPictureSettings.this, -1, getMetricsCategory());
                     return true;
                 }
diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
index 7f3bc87..5085172 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
@@ -88,9 +88,9 @@
     protected abstract int getHeaderResDefault();
 
     /**
-     * @return the description resource for if the biometric has been disabled by a device admin
+     * @return the description for if the biometric has been disabled by a device admin
      */
-    protected abstract int getDescriptionResDisabledByAdmin();
+    protected abstract String getDescriptionDisabledByAdmin();
 
     /**
      * @return the cancel button
@@ -414,7 +414,7 @@
         super.initViews();
 
         if (mBiometricUnlockDisabledByAdmin && !mParentalConsentRequired) {
-            setDescriptionText(getDescriptionResDisabledByAdmin());
+            setDescriptionText(getDescriptionDisabledByAdmin());
         }
     }
 
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index eadb5b8..b622c1c 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.biometrics.face;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.FACE_UNLOCK_DISABLED;
+
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Intent;
@@ -221,8 +223,11 @@
     }
 
     @Override
-    protected int getDescriptionResDisabledByAdmin() {
-        return R.string.security_settings_face_enroll_introduction_message_unlock_disabled;
+    protected String getDescriptionDisabledByAdmin() {
+        DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
+        return devicePolicyManager.getString(
+                FACE_UNLOCK_DISABLED,
+                () -> getString(R.string.security_settings_face_enroll_introduction_message_unlock_disabled));
     }
 
     @Override
diff --git a/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java b/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
index 49f128c..abfd3a2 100644
--- a/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.biometrics.face;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.FACE_SETTINGS_FOR_WORK_TITLE;
+
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.os.UserHandle;
 
@@ -27,21 +30,26 @@
 public class FaceProfileStatusPreferenceController extends FaceStatusPreferenceController {
 
     private static final String KEY_FACE_SETTINGS = "face_settings_profile";
+    private final DevicePolicyManager mDevicePolicyManager;
 
     public FaceProfileStatusPreferenceController(Context context) {
         super(context, KEY_FACE_SETTINGS);
+        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
     }
 
     public FaceProfileStatusPreferenceController(Context context, String key) {
         super(context, key);
+        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
     }
 
     public FaceProfileStatusPreferenceController(Context context, Lifecycle lifecycle) {
         super(context, KEY_FACE_SETTINGS, lifecycle);
+        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
     }
 
     public FaceProfileStatusPreferenceController(Context context, String key, Lifecycle lifecycle) {
         super(context, key, lifecycle);
+        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
     }
 
     @Override
@@ -70,7 +78,10 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-        preference.setTitle(mContext.getResources().getString(
-                R.string.security_settings_face_profile_preference_title));
+
+        preference.setTitle(
+                mDevicePolicyManager.getString(FACE_SETTINGS_FOR_WORK_TITLE, () ->
+                mContext.getResources().getString(
+                R.string.security_settings_face_profile_preference_title)));
     }
 }
diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java
index 62347ac..f3a7f2c 100644
--- a/src/com/android/settings/biometrics/face/FaceSettings.java
+++ b/src/com/android/settings/biometrics/face/FaceSettings.java
@@ -17,12 +17,14 @@
 package com.android.settings.biometrics.face;
 
 import static android.app.Activity.RESULT_OK;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.FACE_SETTINGS_FOR_WORK_TITLE;
 
 import static com.android.settings.biometrics.BiometricEnrollBase.CONFIRM_REQUEST;
 import static com.android.settings.biometrics.BiometricEnrollBase.ENROLL_REQUEST;
 import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
 import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
 
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
@@ -66,6 +68,7 @@
 
     private UserManager mUserManager;
     private FaceManager mFaceManager;
+    private DevicePolicyManager mDevicePolicyManager;
     private int mUserId;
     private int mSensorId;
     private long mChallenge;
@@ -148,6 +151,7 @@
 
         mUserManager = context.getSystemService(UserManager.class);
         mFaceManager = context.getSystemService(FaceManager.class);
+        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
         mToken = getIntent().getByteArrayExtra(KEY_TOKEN);
         mSensorId = getIntent().getIntExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, -1);
         mChallenge = getIntent().getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, 0L);
@@ -157,8 +161,10 @@
         mFaceFeatureProvider = FeatureFactory.getFactory(getContext()).getFaceFeatureProvider();
 
         if (mUserManager.getUserInfo(mUserId).isManagedProfile()) {
-            getActivity().setTitle(getActivity().getResources().getString(
-                    R.string.security_settings_face_profile_preference_title));
+            getActivity().setTitle(
+                    mDevicePolicyManager.getString(FACE_SETTINGS_FOR_WORK_TITLE, () ->
+                    getActivity().getResources().getString(
+                    R.string.security_settings_face_profile_preference_title)));
         }
 
         mLockscreenController = Utils.isMultipleBiometricsSupported(context)
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
index f70a663..2ef5446 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.biometrics.fingerprint;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.FINGERPRINT_UNLOCK_DISABLED;
+
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.ActivityNotFoundException;
@@ -57,6 +59,8 @@
     @Nullable private FooterButton mPrimaryFooterButton;
     @Nullable private FooterButton mSecondaryFooterButton;
 
+    private DevicePolicyManager mDevicePolicyManager;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         mFingerprintManager = Utils.getFingerprintManagerOrNull(this);
@@ -68,6 +72,8 @@
 
         super.onCreate(savedInstanceState);
 
+        mDevicePolicyManager = getSystemService(DevicePolicyManager.class);
+
         final ImageView iconFingerprint = findViewById(R.id.icon_fingerprint);
         final ImageView iconDeviceLocked = findViewById(R.id.icon_device_locked);
         final ImageView iconTrashCan = findViewById(R.id.icon_trash_can);
@@ -177,8 +183,10 @@
     }
 
     @Override
-    protected int getDescriptionResDisabledByAdmin() {
-        return R.string.security_settings_fingerprint_enroll_introduction_message_unlock_disabled;
+    protected String getDescriptionDisabledByAdmin() {
+        return mDevicePolicyManager.getString(
+                FINGERPRINT_UNLOCK_DISABLED,
+                () -> getString(R.string.security_settings_fingerprint_enroll_introduction_message_unlock_disabled));
     }
 
     @Override
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index 87a29b2..50e1780 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -17,6 +17,10 @@
 package com.android.settings.biometrics.fingerprint;
 
 
+import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.FINGERPRINT_UNLOCK_DISABLED_EXPLANATION;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_FINGERPRINT_LAST_DELETE_MESSAGE;
+
 import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
 
 import android.app.Activity;
@@ -356,11 +360,22 @@
                     activity, getString(getHelpResource()), activity.getClass().getName());
             final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo(
                     activity, ANNOTATION_URL, helpIntent);
-            mFooterTitle = AnnotationSpan.linkify(getText(admin != null
-                            ? R.string
-                            .security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled
-                            : R.string.security_settings_fingerprint_v2_home_screen),
-                    linkInfo, adminLinkInfo);
+
+            if (admin != null) {
+                DevicePolicyManager devicePolicyManager =
+                        getSystemService(DevicePolicyManager.class);
+                String footerText = devicePolicyManager.getString(
+                        FINGERPRINT_UNLOCK_DISABLED_EXPLANATION,
+                        () -> getString(R.string.security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled));
+
+                mFooterTitle = AnnotationSpan.linkify(footerText, linkInfo, adminLinkInfo);
+            } else {
+                mFooterTitle = AnnotationSpan.linkify(
+                        getText(R.string.security_settings_fingerprint_v2_home_screen),
+                        linkInfo, adminLinkInfo);
+            }
+
+
         }
 
         private boolean isUdfps() {
@@ -917,11 +932,20 @@
                 mFp = getArguments().getParcelable("fingerprint");
                 final boolean isProfileChallengeUser =
                         getArguments().getBoolean("isProfileChallengeUser");
+
+                DevicePolicyManager devicePolicyManager =
+                        getContext().getSystemService(DevicePolicyManager.class);
+                String messageId =
+                        isProfileChallengeUser ? WORK_PROFILE_FINGERPRINT_LAST_DELETE_MESSAGE
+                        : UNDEFINED;
+                int defaultMessageId = isProfileChallengeUser
+                        ? R.string.fingerprint_last_delete_message_profile_challenge
+                        : R.string.fingerprint_last_delete_message;
+
                 final AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
                         .setTitle(R.string.fingerprint_last_delete_title)
-                        .setMessage((isProfileChallengeUser)
-                                ? R.string.fingerprint_last_delete_message_profile_challenge
-                                : R.string.fingerprint_last_delete_message)
+                        .setMessage(devicePolicyManager.getString(
+                                messageId, () -> getContext().getString(defaultMessageId)))
                         .setPositiveButton(R.string.fingerprint_last_delete_confirm,
                                 new DialogInterface.OnClickListener() {
                                     @Override
diff --git a/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java b/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
index 9e1941a..25b15c7 100644
--- a/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
+++ b/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
@@ -16,9 +16,12 @@
 
 package com.android.settings.bugreporthandler;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_PROFILE_APP_SUBTEXT;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_APP_SUBTEXT;
 import static android.provider.Settings.ACTION_BUGREPORT_HANDLER_SETTINGS;
 
 import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
@@ -189,10 +192,15 @@
             return "";
         }
         final UserInfo userInfo = mUserManager.getUserInfo(handlerUser);
+        DevicePolicyManager devicePolicyManager =
+                context.getSystemService(DevicePolicyManager.class);
+
         if (userInfo != null && userInfo.isManagedProfile()) {
-            return context.getString(R.string.work_profile_app_subtext);
+            return devicePolicyManager.getString(WORK_PROFILE_APP_SUBTEXT,
+                    () -> context.getString(R.string.work_profile_app_subtext));
         }
-        return context.getString(R.string.personal_profile_app_subtext);
+        return devicePolicyManager.getString(PERSONAL_PROFILE_APP_SUBTEXT,
+                () -> context.getString(R.string.personal_profile_app_subtext));
     }
 
     private static class BugreportHandlerAppInfo extends DefaultAppInfo {
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
index 3b64d3d..f7a309e 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
@@ -16,10 +16,13 @@
 
 package com.android.settings.dashboard.profileselector;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
 import static android.content.Intent.EXTRA_USER_ID;
 
 import android.annotation.IntDef;
 import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.os.Bundle;
@@ -96,9 +99,6 @@
      * Used in fragment argument with Extra key {@link SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB}
      */
     public static final int WORK_TAB = 1;
-    private static final int[] LABEL = {
-            R.string.category_personal, R.string.category_work
-    };
 
     private ViewGroup mContentView;
 
@@ -233,14 +233,23 @@
 
         @Override
         public CharSequence getPageTitle(int position) {
-            return mContext.getString(LABEL[convertPosition(position)]);
+            DevicePolicyManager devicePolicyManager =
+                    mContext.getSystemService(DevicePolicyManager.class);
+
+            if (convertPosition(position) == WORK_TAB) {
+                return devicePolicyManager.getString(WORK_CATEGORY_HEADER,
+                        () -> mContext.getString(R.string.category_work));
+            }
+
+            return devicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
+                    () -> mContext.getString(R.string.category_personal));
         }
     }
 
     private static int convertPosition(int index) {
         if (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())
                 == View.LAYOUT_DIRECTION_RTL) {
-            return LABEL.length - 1 - index;
+            return 1 - index;
         }
         return index;
     }
diff --git a/src/com/android/settings/dashboard/profileselector/UserAdapter.java b/src/com/android/settings/dashboard/profileselector/UserAdapter.java
index 0b3a7fc..7057961 100644
--- a/src/com/android/settings/dashboard/profileselector/UserAdapter.java
+++ b/src/com/android/settings/dashboard/profileselector/UserAdapter.java
@@ -16,7 +16,12 @@
 
 package com.android.settings.dashboard.profileselector;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_USER_LABEL;
+
 import android.app.ActivityManager;
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.pm.UserInfo;
 import android.database.DataSetObserver;
@@ -54,7 +59,9 @@
             UserInfo userInfo = um.getUserInfo(mUserHandle.getIdentifier());
             Drawable icon;
             if (userInfo.isManagedProfile()) {
-                mName = context.getString(R.string.managed_user_title);
+                mName = context.getSystemService(DevicePolicyManager.class).getString(
+                        WORK_PROFILE_USER_LABEL,
+                        () -> context.getString(R.string.managed_user_title));
                 icon = context.getPackageManager().getUserBadgeForDensityNoBackground(
                         userHandle, /* density= */ 0);
             } else {
@@ -77,14 +84,18 @@
     }
 
     private ArrayList<UserDetails> data;
+    private final Context mContext;
     private final LayoutInflater mInflater;
+    private final DevicePolicyManager mDevicePolicyManager;
 
     public UserAdapter(Context context, ArrayList<UserDetails> users) {
         if (users == null) {
             throw new IllegalArgumentException("A list of user details must be provided");
         }
+        mContext = context;
         this.data = users;
         mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
     }
 
     public UserHandle getUserHandle(int position) {
@@ -104,13 +115,15 @@
         return row;
     }
 
-    private int getTitle(UserDetails user) {
+    private String getTitle(UserDetails user) {
         int userHandle = user.mUserHandle.getIdentifier();
         if (userHandle == UserHandle.USER_CURRENT
                 || userHandle == ActivityManager.getCurrentUser()) {
-            return R.string.category_personal;
+            return mDevicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
+                    () -> mContext.getString(R.string.category_personal));
         } else {
-            return R.string.category_work;
+            return mDevicePolicyManager.getString(WORK_CATEGORY_HEADER,
+                    () -> mContext.getString(R.string.category_work));
         }
     }
 
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
index 8dc1e2f..454de9d 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
@@ -16,9 +16,11 @@
 
 package com.android.settings.deviceinfo;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ERROR_MOVE_DEVICE_ADMIN;
 import static android.content.Intent.EXTRA_TITLE;
 import static android.content.pm.PackageManager.EXTRA_MOVE_ID;
 
+import android.app.admin.DevicePolicyManager;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.MoveCallback;
 import android.os.Bundle;
@@ -87,7 +89,9 @@
             case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE:
                 return getString(R.string.insufficient_storage);
             case PackageManager.MOVE_FAILED_DEVICE_ADMIN:
-                return getString(R.string.move_error_device_admin);
+                return getSystemService(DevicePolicyManager.class)
+                        .getString(ERROR_MOVE_DEVICE_ADMIN,
+                                () -> getString(R.string.move_error_device_admin));
             case PackageManager.MOVE_FAILED_DOESNT_EXIST:
                 return getString(R.string.does_not_exist);
             case PackageManager.MOVE_FAILED_INVALID_LOCATION:
diff --git a/src/com/android/settings/display/ScreenTimeoutPreferenceController.java b/src/com/android/settings/display/ScreenTimeoutPreferenceController.java
index 2a3359a..65f0853 100644
--- a/src/com/android/settings/display/ScreenTimeoutPreferenceController.java
+++ b/src/com/android/settings/display/ScreenTimeoutPreferenceController.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.display;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.DISABLED_BY_IT_ADMIN_TITLE;
 import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
 
 import static com.android.settings.display.ScreenTimeoutSettings.FALLBACK_SCREEN_TIMEOUT_VALUE;
@@ -60,7 +61,9 @@
         final RestrictedLockUtils.EnforcedAdmin admin = getPreferenceDisablingAdmin(maxTimeout);
         if (admin != null) {
             preference.setEnabled(false);
-            preference.setSummary(mContext.getText(R.string.disabled_by_policy_title));
+            preference.setSummary(mContext.getSystemService(DevicePolicyManager.class)
+                    .getString(DISABLED_BY_IT_ADMIN_TITLE,
+                            () -> mContext.getString(R.string.disabled_by_policy_title)));
             ((RestrictedPreference) preference).setDisabledByAdmin(admin);
         } else {
             preference.setSummary(getTimeoutSummary(maxTimeout));
diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java
index f8c03d5..43ec864 100644
--- a/src/com/android/settings/display/ScreenTimeoutSettings.java
+++ b/src/com/android/settings/display/ScreenTimeoutSettings.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.display;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.OTHER_OPTIONS_DISABLED_BY_ADMIN;
 import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
 import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
 
@@ -85,6 +86,8 @@
         }
     };
 
+    private DevicePolicyManager mDevicePolicyManager;
+
     @VisibleForTesting
     Context mContext;
 
@@ -116,6 +119,7 @@
     public void onAttach(Context context) {
         super.onAttach(context);
         mContext = context;
+        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
         mInitialEntries = getResources().getStringArray(R.array.screen_timeout_entries);
         mInitialValues = getResources().getStringArray(R.array.screen_timeout_values);
         mAdaptiveSleepController = new AdaptiveSleepPreferenceController(context);
@@ -219,8 +223,9 @@
 
     @VisibleForTesting
     void setupDisabledFooterPreference() {
-        final String textDisabledByAdmin = getResources().getString(
-                R.string.admin_disabled_other_options);
+        final String textDisabledByAdmin = mDevicePolicyManager.getString(
+                OTHER_OPTIONS_DISABLED_BY_ADMIN, () -> getResources().getString(
+                        R.string.admin_disabled_other_options));
         final String textMoreDetails = getResources().getString(R.string.admin_more_details);
 
         final SpannableString spannableString = new SpannableString(
diff --git a/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java b/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
index 1c7ff62..d5c10b4 100644
--- a/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
+++ b/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
@@ -14,6 +14,9 @@
 
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ADMIN_ACTION_NONE;
+
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.text.format.DateUtils;
 
@@ -43,11 +46,17 @@
     public void updateState(Preference preference) {
         final Date timestamp = getAdminActionTimestamp();
         preference.setSummary(timestamp == null ?
-                mContext.getString(R.string.enterprise_privacy_none) :
+                getEnterprisePrivacyNone() :
                 DateUtils.formatDateTime(mContext, timestamp.getTime(),
                         DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE));
     }
 
+    private String getEnterprisePrivacyNone() {
+        return mContext.getSystemService(DevicePolicyManager.class)
+                .getString(ADMIN_ACTION_NONE,
+                        () -> mContext.getString(R.string.enterprise_privacy_none));
+    }
+
     @Override
     public boolean isAvailable() {
         return true;
diff --git a/src/com/android/settings/enterprise/AlwaysOnVpnCurrentUserPreferenceController.java b/src/com/android/settings/enterprise/AlwaysOnVpnCurrentUserPreferenceController.java
index 696561b..e883ac3 100644
--- a/src/com/android/settings/enterprise/AlwaysOnVpnCurrentUserPreferenceController.java
+++ b/src/com/android/settings/enterprise/AlwaysOnVpnCurrentUserPreferenceController.java
@@ -13,6 +13,10 @@
  */
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ALWAYS_ON_VPN_DEVICE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ALWAYS_ON_VPN_PERSONAL_PROFILE;
+
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 
 import androidx.preference.Preference;
@@ -27,18 +31,29 @@
 
     private static final String KEY_ALWAYS_ON_VPN_PRIMARY_USER = "always_on_vpn_primary_user";
     private final EnterprisePrivacyFeatureProvider mFeatureProvider;
+    private final DevicePolicyManager mDevicePolicyManager;
 
     public AlwaysOnVpnCurrentUserPreferenceController(Context context) {
         super(context);
         mFeatureProvider = FeatureFactory.getFactory(context)
                 .getEnterprisePrivacyFeatureProvider(context);
+        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
     }
 
     @Override
     public void updateState(Preference preference) {
-        preference.setTitle(mFeatureProvider.isInCompMode()
-                ? R.string.enterprise_privacy_always_on_vpn_personal
-                : R.string.enterprise_privacy_always_on_vpn_device);
+        if (mFeatureProvider.isInCompMode()) {
+            preference.setTitle(
+                    mDevicePolicyManager.getString(
+                            ALWAYS_ON_VPN_PERSONAL_PROFILE,
+                            () -> mContext.getString(
+                                    R.string.enterprise_privacy_always_on_vpn_personal)));
+        } else {
+            preference.setTitle(
+                    mDevicePolicyManager.getString(ALWAYS_ON_VPN_DEVICE,
+                            () -> mContext.getString(
+                                    R.string.enterprise_privacy_always_on_vpn_device)));
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/enterprise/CaCertsCurrentUserPreferenceController.java b/src/com/android/settings/enterprise/CaCertsCurrentUserPreferenceController.java
index 45170b3..76aa6bc 100644
--- a/src/com/android/settings/enterprise/CaCertsCurrentUserPreferenceController.java
+++ b/src/com/android/settings/enterprise/CaCertsCurrentUserPreferenceController.java
@@ -14,6 +14,10 @@
 
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CA_CERTS_DEVICE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CA_CERTS_PERSONAL_PROFILE;
+
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 
 import androidx.annotation.VisibleForTesting;
@@ -26,8 +30,11 @@
     @VisibleForTesting
     static final String CA_CERTS_CURRENT_USER = "ca_certs_current_user";
 
+    DevicePolicyManager mDevicePolicyManager;
+
     public CaCertsCurrentUserPreferenceController(Context context) {
         super(context);
+        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
     }
 
     @Override
@@ -38,9 +45,16 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-        preference.setTitle(mFeatureProvider.isInCompMode()
-                ? R.string.enterprise_privacy_ca_certs_personal
-                : R.string.enterprise_privacy_ca_certs_device);
+
+        if (mFeatureProvider.isInCompMode()) {
+            preference.setTitle(mDevicePolicyManager.getString(
+                    CA_CERTS_PERSONAL_PROFILE,
+                    () -> mContext.getString(R.string.enterprise_privacy_ca_certs_personal)));
+        } else {
+            preference.setTitle(mDevicePolicyManager.getString(
+                    CA_CERTS_DEVICE,
+                    () -> mContext.getString(R.string.enterprise_privacy_ca_certs_device)));
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java b/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java
index 5d11d4a..696baca 100644
--- a/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java
+++ b/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java
@@ -16,8 +16,13 @@
 
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONTACT_YOUR_IT_ADMIN;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.DISABLED_BY_IT_ADMIN_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.IT_ADMIN_POLICY_DISABLING_INFO_URL;
+
 import static java.util.Objects.requireNonNull;
 
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 
 import com.android.settings.R;
@@ -25,14 +30,17 @@
 
 class DeviceAdminStringProviderImpl implements DeviceAdminStringProvider {
     private final Context mContext;
+    private final DevicePolicyManager mDevicePolicyManager;
 
     DeviceAdminStringProviderImpl(Context context) {
         mContext = requireNonNull(context);
+        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
     }
 
     @Override
     public String getDefaultDisabledByPolicyTitle() {
-        return mContext.getString(R.string.disabled_by_policy_title);
+        return mDevicePolicyManager.getString(DISABLED_BY_IT_ADMIN_TITLE,
+                () -> mContext.getString(R.string.disabled_by_policy_title));
     }
 
     @Override
@@ -67,12 +75,14 @@
 
     @Override
     public String getDefaultDisabledByPolicyContent() {
-        return mContext.getString(R.string.default_admin_support_msg);
+        return mDevicePolicyManager.getString(CONTACT_YOUR_IT_ADMIN,
+                () -> mContext.getString(R.string.default_admin_support_msg));
     }
 
     @Override
     public String getLearnMoreHelpPageUrl() {
-        return mContext.getString(R.string.help_url_action_disabled_by_it_admin);
+        return mDevicePolicyManager.getString(IT_ADMIN_POLICY_DISABLING_INFO_URL,
+                () -> mContext.getString(R.string.help_url_action_disabled_by_it_admin));
     }
 
     @Override
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
index 35ce1f1..76b2e24 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.DEVICE_MANAGED_WITHOUT_NAME;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.DEVICE_MANAGED_WITH_NAME;
+
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
@@ -95,10 +98,12 @@
         final SpannableStringBuilder disclosure = new SpannableStringBuilder();
         final CharSequence organizationName = mDpm.getDeviceOwnerOrganizationName();
         if (organizationName != null) {
-            disclosure.append(mResources.getString(R.string.do_disclosure_with_name,
-                    organizationName));
+            disclosure.append(mDpm.getString(DEVICE_MANAGED_WITH_NAME,
+                    () -> mResources.getString(R.string.do_disclosure_with_name,
+                    organizationName), organizationName));
         } else {
-            disclosure.append(mResources.getString(R.string.do_disclosure_generic));
+            disclosure.append(mDpm.getString(DEVICE_MANAGED_WITHOUT_NAME,
+                    () -> mResources.getString(R.string.do_disclosure_generic)));
         }
         return disclosure;
     }
diff --git a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceController.java b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceController.java
index c878058..34d098d 100644
--- a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceController.java
+++ b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceController.java
@@ -16,6 +16,10 @@
 
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
+
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
@@ -123,14 +127,20 @@
         if (!mEnterprisePrivacyFeatureProvider.isInCompMode() && mUsers.size() == 1) {
             createPreferences(prefContext, screen, mApps.get(0));
         } else {
+            DevicePolicyManager devicePolicyManager =
+                    mContext.getSystemService(DevicePolicyManager.class);
             for (int i = 0; i < mUsers.size(); i++) {
                 final UserInfo userInfo = mUsers.get(i);
                 final PreferenceCategory category = new PreferenceCategory(prefContext);
                 screen.addPreference(category);
                 if (userInfo.isManagedProfile()) {
-                    category.setTitle(R.string.category_work);
+                    category.setTitle(devicePolicyManager.getString(
+                            WORK_CATEGORY_HEADER,
+                            () -> mContext.getString(R.string.category_work)));
                 } else {
-                    category.setTitle(R.string.category_personal);
+                    category.setTitle(devicePolicyManager.getString(
+                            PERSONAL_CATEGORY_HEADER,
+                            () -> mContext.getString(R.string.category_personal)));
                 }
                 category.setOrder(i);
                 createPreferences(prefContext, category, mApps.get(i));
diff --git a/src/com/android/settings/enterprise/ImePreferenceController.java b/src/com/android/settings/enterprise/ImePreferenceController.java
index 51a24a2..25dcdaf 100644
--- a/src/com/android/settings/enterprise/ImePreferenceController.java
+++ b/src/com/android/settings/enterprise/ImePreferenceController.java
@@ -14,6 +14,9 @@
 
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ADMIN_ACTION_SET_INPUT_METHOD_NAME;
+
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 
 import androidx.preference.Preference;
@@ -37,9 +40,13 @@
 
     @Override
     public void updateState(Preference preference) {
-        preference.setSummary(mContext.getResources().getString(
-                R.string.enterprise_privacy_input_method_name,
-                mFeatureProvider.getImeLabelIfOwnerSet()));
+        preference.setSummary(
+                mContext.getSystemService(DevicePolicyManager.class)
+                        .getString(ADMIN_ACTION_SET_INPUT_METHOD_NAME, () ->
+                                mContext.getResources().getString(
+                                        R.string.enterprise_privacy_input_method_name,
+                                        mFeatureProvider.getImeLabelIfOwnerSet()),
+                                mFeatureProvider.getImeLabelIfOwnerSet()));
     }
 
     @Override
diff --git a/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java b/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java
index 00d17f1..934659d 100644
--- a/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java
+++ b/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java
@@ -13,6 +13,9 @@
  */
 package com.android.settings.enterprise;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.NUMBER_OF_DEVICE_ADMINS_NONE;
+
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 
 import com.android.settings.R;
@@ -23,20 +26,28 @@
 public class ManageDeviceAdminPreferenceController extends BasePreferenceController {
 
     private final EnterprisePrivacyFeatureProvider mFeatureProvider;
+    private final DevicePolicyManager mDevicePolicyManager;
 
     public ManageDeviceAdminPreferenceController(Context context, String key) {
         super(context, key);
         mFeatureProvider = FeatureFactory.getFactory(context)
                 .getEnterprisePrivacyFeatureProvider(context);
+        mDevicePolicyManager =
+                mContext.getSystemService(DevicePolicyManager.class);
     }
 
     @Override
     public CharSequence getSummary() {
         final int activeAdmins
                 = mFeatureProvider.getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile();
-        return activeAdmins == 0
-                ? mContext.getResources().getString(R.string.number_of_device_admins_none)
-                : mContext.getResources().getQuantityString(R.plurals.number_of_device_admins,
+
+        if (activeAdmins == 0) {
+            return mDevicePolicyManager.getString(NUMBER_OF_DEVICE_ADMINS_NONE,
+                    () -> mContext.getResources().getString(R.string.number_of_device_admins_none));
+        }
+
+        // TODO: override
+        return mContext.getResources().getQuantityString(R.plurals.number_of_device_admins,
                         activeAdmins, activeAdmins);
     }
 
diff --git a/src/com/android/settings/enterprise/PrivacyPreferenceControllerHelper.java b/src/com/android/settings/enterprise/PrivacyPreferenceControllerHelper.java
index fa1874a..f6070bd 100644
--- a/src/com/android/settings/enterprise/PrivacyPreferenceControllerHelper.java
+++ b/src/com/android/settings/enterprise/PrivacyPreferenceControllerHelper.java
@@ -17,6 +17,8 @@
 package com.android.settings.enterprise;
 
 import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_DEVICE_INFO_SUMMARY;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_DEVICE_INFO_SUMMARY_WITH_NAME;
 
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
@@ -50,10 +52,16 @@
 
         final String organizationName = mFeatureProvider.getDeviceOwnerOrganizationName();
         if (organizationName == null) {
-            preference.setSummary(R.string.enterprise_privacy_settings_summary_generic);
+            preference.setSummary(mDevicePolicyManager.getString(
+                    MANAGED_DEVICE_INFO_SUMMARY,
+                    () -> mContext.getString(
+                            R.string.enterprise_privacy_settings_summary_generic)));
         } else {
-            preference.setSummary(mContext.getResources().getString(
-                    R.string.enterprise_privacy_settings_summary_with_name, organizationName));
+            preference.setSummary(mDevicePolicyManager
+                    .getString(MANAGED_DEVICE_INFO_SUMMARY_WITH_NAME,
+                            () -> mContext.getResources().getString(
+                                    R.string.enterprise_privacy_settings_summary_with_name,
+                                    organizationName), organizationName));
         }
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/conditional/WorkModeConditionController.java b/src/com/android/settings/homepage/contextualcards/conditional/WorkModeConditionController.java
index 4e901fd..1927421 100644
--- a/src/com/android/settings/homepage/contextualcards/conditional/WorkModeConditionController.java
+++ b/src/com/android/settings/homepage/contextualcards/conditional/WorkModeConditionController.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.homepage.contextualcards.conditional;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_OFF_CONDITION_TITLE;
+
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -46,6 +49,7 @@
 
     private final Context mAppContext;
     private final UserManager mUm;
+    private final DevicePolicyManager mDpm;
     private final ConditionManager mConditionManager;
     private final Receiver mReceiver;
 
@@ -54,6 +58,7 @@
     public WorkModeConditionController(Context appContext, ConditionManager manager) {
         mAppContext = appContext;
         mUm = mAppContext.getSystemService(UserManager.class);
+        mDpm = mAppContext.getSystemService(DevicePolicyManager.class);
         mConditionManager = manager;
         mReceiver = new Receiver();
     }
@@ -84,13 +89,15 @@
 
     @Override
     public ContextualCard buildContextualCard() {
+        String conditionWorkTitle = mDpm.getString(WORK_PROFILE_OFF_CONDITION_TITLE,
+                () -> mAppContext.getString(R.string.condition_work_title));
         return new ConditionalContextualCard.Builder()
                 .setConditionId(ID)
                 .setMetricsConstant(SettingsEnums.SETTINGS_CONDITION_WORK_MODE)
                 .setActionText(mAppContext.getText(R.string.condition_turn_on))
                 .setName(mAppContext.getPackageName() + "/"
-                        + mAppContext.getText(R.string.condition_work_title))
-                .setTitleText(mAppContext.getText(R.string.condition_work_title).toString())
+                        + conditionWorkTitle)
+                .setTitleText(conditionWorkTitle)
                 .setSummaryText(mAppContext.getText(R.string.condition_work_summary).toString())
                 .setIconDrawable(mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable))
                 .setViewType(ConditionContextualCardRenderer.VIEW_TYPE_HALF_WIDTH)
diff --git a/src/com/android/settings/notification/NotificationAccessSettings.java b/src/com/android/settings/notification/NotificationAccessSettings.java
index 10954a1..0daa818 100644
--- a/src/com/android/settings/notification/NotificationAccessSettings.java
+++ b/src/com/android/settings/notification/NotificationAccessSettings.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.notification;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_APPS_CANNOT_ACCESS_NOTIFICATION_SETTINGS;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED;
+
 import android.annotation.Nullable;
 import android.app.NotificationManager;
 import android.app.admin.DevicePolicyManager;
@@ -103,7 +106,9 @@
 
         if (UserManager.get(mContext).isManagedProfile()) {
             // Apps in the work profile do not support notification listeners.
-            Toast.makeText(mContext, R.string.notification_settings_work_profile,
+            Toast.makeText(mContext,
+                    mDpm.getString(WORK_APPS_CANNOT_ACCESS_NOTIFICATION_SETTINGS,
+                            () -> mContext.getString(R.string.notification_settings_work_profile)),
                     Toast.LENGTH_SHORT).show();
             finish();
         }
@@ -163,7 +168,9 @@
             if (managedProfileId != UserHandle.USER_NULL
                     && !mDpm.isNotificationListenerServicePermitted(
                     service.packageName, managedProfileId)) {
-                pref.setSummary(R.string.work_profile_notification_access_blocked_summary);
+                pref.setSummary(mDpm.getString(WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED,
+                        () -> getString(
+                                R.string.work_profile_notification_access_blocked_summary)));
             }
             pref.setOnPreferenceClickListener(preference -> {
                 final Bundle args = new Bundle();
diff --git a/src/com/android/settings/notification/SoundWorkSettingsController.java b/src/com/android/settings/notification/SoundWorkSettingsController.java
index de374e9..bcaf4af 100644
--- a/src/com/android/settings/notification/SoundWorkSettingsController.java
+++ b/src/com/android/settings/notification/SoundWorkSettingsController.java
@@ -16,8 +16,13 @@
 
 package com.android.settings.notification;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_MESSAGE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_ACTIVE_SUMMARY;
+
 import android.annotation.UserIdInt;
 import android.app.Dialog;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -252,11 +257,16 @@
     private void enableWorkSyncSettings() {
         mWorkUsePersonalSounds.setChecked(true);
 
+        String summary = mContext.getSystemService(DevicePolicyManager.class).getString(
+                WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_ACTIVE_SUMMARY,
+                () -> mContext.getString(R.string.work_sound_same_as_personal)
+        );
+
         if (mWorkPhoneRingtonePreference != null) {
-            mWorkPhoneRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
+            mWorkPhoneRingtonePreference.setSummary(summary);
         }
-        mWorkNotificationRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
-        mWorkAlarmRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
+        mWorkNotificationRingtonePreference.setSummary(summary);
+        mWorkAlarmRingtonePreference.setSummary(summary);
     }
 
     private void disableWorkSync() {
@@ -339,9 +349,18 @@
 
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
+
+            Context context = getActivity().getApplicationContext();
+            DevicePolicyManager devicePolicyManager =
+                    context.getSystemService(DevicePolicyManager.class);
+
             return new AlertDialog.Builder(getActivity())
-                    .setTitle(R.string.work_sync_dialog_title)
-                    .setMessage(R.string.work_sync_dialog_message)
+                    .setTitle(devicePolicyManager.getString(
+                            ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_TITLE,
+                            () -> context.getString(R.string.work_sync_dialog_title)))
+                    .setMessage(devicePolicyManager.getString(
+                            ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_MESSAGE,
+                            () -> context.getString(R.string.work_sync_dialog_message)))
                     .setPositiveButton(R.string.work_sync_dialog_yes,
                             SoundWorkSettingsController.UnifyWorkDialogFragment.this)
                     .setNegativeButton(android.R.string.no, /* listener= */ null)
diff --git a/src/com/android/settings/notification/zen/ZenAccessSettings.java b/src/com/android/settings/notification/zen/ZenAccessSettings.java
index 1a9fb16..aac6954 100644
--- a/src/com/android/settings/notification/zen/ZenAccessSettings.java
+++ b/src/com/android/settings/notification/zen/ZenAccessSettings.java
@@ -17,7 +17,6 @@
 package com.android.settings.notification.zen;
 
 import android.annotation.Nullable;
-import android.app.ActivityManager;
 import android.app.NotificationManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
@@ -28,8 +27,8 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.util.ArraySet;
-import android.view.View;
 import android.util.Log;
+import android.view.View;
 
 import androidx.preference.PreferenceScreen;
 
@@ -138,7 +137,7 @@
             pref.setOnPreferenceClickListener(preference -> {
                 AppInfoBase.startAppInfoFragment(
                         ZenAccessDetails.class  /* fragment */,
-                        R.string.manage_zen_access_title /* titleRes */,
+                        getString(R.string.manage_zen_access_title) /* titleRes */,
                         pkg,
                         app.uid,
                         this /* source */,
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 2d6f6b0..f31abb9 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -22,6 +22,8 @@
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_LOW;
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_MEDIUM;
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE;
 
 import static com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment.RESULT_FINISHED;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
@@ -29,7 +31,6 @@
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
 
-import android.accessibilityservice.AccessibilityServiceInfo;
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.admin.DevicePolicyManager;
@@ -394,13 +395,16 @@
                 }
             } else {
                 if (mIsManagedProfile) {
-                    textView.setText(R.string.lock_settings_picker_profile_message);
+                    textView.setText(mDpm.getString(WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE,
+                            () -> getString(R.string.lock_settings_picker_profile_message)));
                 } else {
                     int profileUserId = Utils.getManagedProfileId(mUserManager, mUserId);
                     if (mController.isScreenLockRestrictedByAdmin()
                             && profileUserId != UserHandle.USER_NULL) {
-                        final StringBuilder description = new StringBuilder(getText(
-                                R.string.lock_settings_picker_admin_restricted_personal_message));
+                        final StringBuilder description = new StringBuilder(
+                                mDpm.getString(WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK, () ->
+                                getString(
+                                R.string.lock_settings_picker_admin_restricted_personal_message)));
                         final LinkifyUtils.OnClickListener clickListener = () -> {
                             final Bundle extras = new Bundle();
                             extras.putInt(Intent.EXTRA_USER_ID, profileUserId);
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index a2f9922..50a0bae 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -18,6 +18,13 @@
 
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
 import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
+import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PASSWORD_RECENTLY_USED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.PIN_RECENTLY_USED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.REENTER_WORK_PROFILE_PASSWORD_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.REENTER_WORK_PROFILE_PIN_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PASSWORD_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PIN_HEADER;
 
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
 import static com.android.internal.widget.PasswordValidationError.CONTAINS_INVALID_CHARACTERS;
@@ -259,11 +266,13 @@
 
             Introduction(
                     R.string.lockpassword_choose_your_password_header, // password
+                    SET_WORK_PROFILE_PASSWORD_HEADER,
                     R.string.lockpassword_choose_your_profile_password_header,
                     R.string.lockpassword_choose_your_password_header_for_fingerprint,
                     R.string.lockpassword_choose_your_password_header_for_face,
                     R.string.lockpassword_choose_your_password_header_for_biometrics,
                     R.string.lockpassword_choose_your_pin_header, // pin
+                    SET_WORK_PROFILE_PIN_HEADER,
                     R.string.lockpassword_choose_your_profile_pin_header,
                     R.string.lockpassword_choose_your_pin_header_for_fingerprint,
                     R.string.lockpassword_choose_your_pin_header_for_face,
@@ -274,11 +283,13 @@
 
             NeedToConfirm(
                     R.string.lockpassword_confirm_your_password_header,
+                    REENTER_WORK_PROFILE_PASSWORD_HEADER,
                     R.string.lockpassword_reenter_your_profile_password_header,
                     R.string.lockpassword_confirm_your_password_header,
                     R.string.lockpassword_confirm_your_password_header,
                     R.string.lockpassword_confirm_your_password_header,
                     R.string.lockpassword_confirm_your_pin_header,
+                    REENTER_WORK_PROFILE_PIN_HEADER,
                     R.string.lockpassword_reenter_your_profile_pin_header,
                     R.string.lockpassword_confirm_your_pin_header,
                     R.string.lockpassword_confirm_your_pin_header,
@@ -289,11 +300,13 @@
 
             ConfirmWrong(
                     R.string.lockpassword_confirm_passwords_dont_match,
+                    UNDEFINED,
                     R.string.lockpassword_confirm_passwords_dont_match,
                     R.string.lockpassword_confirm_passwords_dont_match,
                     R.string.lockpassword_confirm_passwords_dont_match,
                     R.string.lockpassword_confirm_passwords_dont_match,
                     R.string.lockpassword_confirm_pins_dont_match,
+                    UNDEFINED,
                     R.string.lockpassword_confirm_pins_dont_match,
                     R.string.lockpassword_confirm_pins_dont_match,
                     R.string.lockpassword_confirm_pins_dont_match,
@@ -303,11 +316,13 @@
                     R.string.lockpassword_confirm_label);
 
             Stage(int hintInAlpha,
+                    String hintOverrideInAlphaForProfile,
                     int hintInAlphaForProfile,
                     int hintInAlphaForFingerprint,
                     int hintInAlphaForFace,
                     int hintInAlphaForBiometrics,
                     int hintInNumeric,
+                    String hintOverrideInNumericForProfile,
                     int hintInNumericForProfile,
                     int hintInNumericForFingerprint,
                     int hintInNumericForFace,
@@ -317,12 +332,14 @@
                     int nextButtonText) {
 
                 this.alphaHint = hintInAlpha;
+                this.alphaHintOverrideForProfile = hintOverrideInAlphaForProfile;
                 this.alphaHintForProfile = hintInAlphaForProfile;
                 this.alphaHintForFingerprint = hintInAlphaForFingerprint;
                 this.alphaHintForFace = hintInAlphaForFace;
                 this.alphaHintForBiometrics = hintInAlphaForBiometrics;
 
                 this.numericHint = hintInNumeric;
+                this.numericHintOverrideForProfile = hintOverrideInNumericForProfile;
                 this.numericHintForProfile = hintInNumericForProfile;
                 this.numericHintForFingerprint = hintInNumericForFingerprint;
                 this.numericHintForFace = hintInNumericForFace;
@@ -341,6 +358,7 @@
 
             // Password header
             public final int alphaHint;
+            public final String alphaHintOverrideForProfile;
             public final int alphaHintForProfile;
             public final int alphaHintForFingerprint;
             public final int alphaHintForFace;
@@ -348,6 +366,7 @@
 
             // PIN header
             public final int numericHint;
+            public final String numericHintOverrideForProfile;
             public final int numericHintForProfile;
             public final int numericHintForFingerprint;
             public final int numericHintForFace;
@@ -361,26 +380,34 @@
 
             public final int buttonText;
 
-            public @StringRes int getHint(boolean isAlpha, int type, boolean isProfile) {
+            public String getHint(Context context, boolean isAlpha, int type, boolean isProfile) {
                 if (isAlpha) {
                     if (type == TYPE_FINGERPRINT) {
-                        return alphaHintForFingerprint;
+                        return context.getString(alphaHintForFingerprint);
                     } else if (type == TYPE_FACE) {
-                        return alphaHintForFace;
+                        return context.getString(alphaHintForFace);
                     } else if (type == TYPE_BIOMETRIC) {
-                        return alphaHintForBiometrics;
+                        return context.getString(alphaHintForBiometrics);
+                    } else if (isProfile) {
+                        return context.getSystemService(DevicePolicyManager.class)
+                                .getString(alphaHintOverrideForProfile,
+                                        () -> context.getString(alphaHintForProfile));
                     } else {
-                        return isProfile ? alphaHintForProfile : alphaHint;
+                        return context.getString(alphaHint);
                     }
                 } else {
                     if (type == TYPE_FINGERPRINT) {
-                        return numericHintForFingerprint;
+                        return context.getString(numericHintForFingerprint);
                     } else if (type == TYPE_FACE) {
-                        return numericHintForFace;
+                        return context.getString(numericHintForFace);
                     } else if (type == TYPE_BIOMETRIC) {
-                        return numericHintForBiometrics;
+                        return context.getString(numericHintForBiometrics);
+                    } else if (isProfile) {
+                        return context.getSystemService(DevicePolicyManager.class)
+                                .getString(numericHintOverrideForProfile,
+                                        () -> context.getString(numericHintForProfile));
                     } else {
-                        return isProfile ? numericHintForProfile : numericHint;
+                        return  context.getString(numericHint);
                     }
                 }
             }
@@ -556,8 +583,8 @@
 
             if (activity instanceof SettingsActivity) {
                 final SettingsActivity sa = (SettingsActivity) activity;
-                int title = Stage.Introduction.getHint(mIsAlphaMode, getStageType(),
-                        mIsManagedProfile);
+                String title = Stage.Introduction.getHint(
+                        getContext(), mIsAlphaMode, getStageType(), mIsManagedProfile);
                 sa.setTitle(title);
                 mLayout.setHeaderText(title);
             }
@@ -818,9 +845,17 @@
                         messages.add(getString(R.string.lockpassword_pin_no_sequential_digits));
                         break;
                     case RECENTLY_USED:
-                        messages.add(getString(mIsAlphaMode
-                                ? R.string.lockpassword_password_recently_used
-                                : R.string.lockpassword_pin_recently_used));
+                        DevicePolicyManager devicePolicyManager =
+                                getContext().getSystemService(DevicePolicyManager.class);
+                        if (mIsAlphaMode) {
+                            messages.add(devicePolicyManager.getString(
+                                    PASSWORD_RECENTLY_USED,
+                                    () -> getString(R.string.lockpassword_password_recently_used)));
+                        } else {
+                            messages.add(devicePolicyManager.getString(
+                                    PIN_RECENTLY_USED,
+                                    () -> getString(R.string.lockpassword_pin_recently_used)));
+                        }
                         break;
                     default:
                         Log.wtf(TAG, "unknown error validating password: " + error);
@@ -851,8 +886,8 @@
             } else {
                 // Hide password requirement view when we are just asking user to confirm the pw.
                 mPasswordRestrictionView.setVisibility(View.GONE);
-                setHeaderText(getString(mUiStage.getHint(mIsAlphaMode, getStageType(),
-                        mIsManagedProfile)));
+                setHeaderText(mUiStage.getHint(getContext(), mIsAlphaMode, getStageType(),
+                        mIsManagedProfile));
                 setNextEnabled(canInput && length >= LockPatternUtils.MIN_LOCK_PASSWORD_SIZE);
                 mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
             }
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 60b8c6c..64fe9ef 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.password;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PATTERN_HEADER;
 import static android.view.View.ACCESSIBILITY_LIVE_REGION_POLITE;
 
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL;
@@ -23,6 +24,7 @@
 
 import android.annotation.SuppressLint;
 import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
@@ -474,15 +476,18 @@
         }
 
         private void updateActivityTitle() {
-            final int msg;
+            final String msg;
             if (mForFingerprint) {
-                msg = R.string.lockpassword_choose_your_pattern_header_for_fingerprint;
+                msg = getString(R.string.lockpassword_choose_your_pattern_header_for_fingerprint);
             } else if (mForFace) {
-                msg = R.string.lockpassword_choose_your_pattern_header_for_face;
+                msg = getString(R.string.lockpassword_choose_your_pattern_header_for_face);
+            } else if (mIsManagedProfile) {
+                msg = getContext().getSystemService(DevicePolicyManager.class)
+                        .getString(SET_WORK_PROFILE_PATTERN_HEADER,
+                                () -> getString(
+                                        R.string.lockpassword_choose_your_profile_pattern_header));
             } else {
-                msg = mIsManagedProfile
-                        ? R.string.lockpassword_choose_your_profile_pattern_header
-                        : R.string.lockpassword_choose_your_pattern_header;
+                msg = getString(R.string.lockpassword_choose_your_pattern_header);
             }
             getActivity().setTitle(msg);
         }
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
index 22d87a5..4b06fe0 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
@@ -17,6 +17,13 @@
 
 package com.android.settings.password;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PASSWORD_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PATTERN_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PIN_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN;
+
 import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
 
 import android.app.Activity;
@@ -259,19 +266,36 @@
 
     private String getTitleFromCredentialType(@LockPatternUtils.CredentialType int credentialType,
             boolean isEffectiveUserManagedProfile) {
+        int overrideStringId;
+        int defaultStringId;
         switch (credentialType) {
             case LockPatternUtils.CREDENTIAL_TYPE_PIN:
-                return isEffectiveUserManagedProfile
-                        ? getString(R.string.lockpassword_confirm_your_work_pin_header)
-                        : getString(R.string.lockpassword_confirm_your_pin_header);
+
+                if (isEffectiveUserManagedProfile) {
+                    return mDevicePolicyManager.getString(
+                            CONFIRM_WORK_PROFILE_PIN_HEADER,
+                            () -> getString(R.string.lockpassword_confirm_your_work_pin_header));
+                }
+
+                return getString(R.string.lockpassword_confirm_your_pin_header);
             case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
-                return isEffectiveUserManagedProfile
-                        ? getString(R.string.lockpassword_confirm_your_work_pattern_header)
-                        : getString(R.string.lockpassword_confirm_your_pattern_header);
+                if (isEffectiveUserManagedProfile) {
+                    return mDevicePolicyManager.getString(
+                            CONFIRM_WORK_PROFILE_PATTERN_HEADER,
+                            () -> getString(
+                                    R.string.lockpassword_confirm_your_work_pattern_header));
+                }
+
+                return getString(R.string.lockpassword_confirm_your_pattern_header);
             case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
-                return isEffectiveUserManagedProfile
-                        ? getString(R.string.lockpassword_confirm_your_work_password_header)
-                        : getString(R.string.lockpassword_confirm_your_password_header);
+                if (isEffectiveUserManagedProfile) {
+                    return mDevicePolicyManager.getString(
+                            CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
+                            () -> getString(
+                                    R.string.lockpassword_confirm_your_work_password_header));
+                }
+
+                return getString(R.string.lockpassword_confirm_your_password_header);
         }
         return null;
     }
@@ -280,17 +304,29 @@
             boolean isEffectiveUserManagedProfile) {
         switch (credentialType) {
             case LockPatternUtils.CREDENTIAL_TYPE_PIN:
-                return isEffectiveUserManagedProfile
-                        ? getString(R.string.lockpassword_confirm_your_pin_generic_profile)
-                        : getString(R.string.lockpassword_confirm_your_pin_generic);
+                if (isEffectiveUserManagedProfile) {
+                    return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PIN,
+                            () -> getString(
+                                    R.string.lockpassword_confirm_your_pin_generic_profile));
+                }
+
+                return getString(R.string.lockpassword_confirm_your_pin_generic);
             case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
-                return isEffectiveUserManagedProfile
-                        ? getString(R.string.lockpassword_confirm_your_pattern_generic_profile)
-                        : getString(R.string.lockpassword_confirm_your_pattern_generic);
+                if (isEffectiveUserManagedProfile) {
+                    return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
+                            () -> getString(
+                                    R.string.lockpassword_confirm_your_pattern_generic_profile));
+                }
+
+                return getString(R.string.lockpassword_confirm_your_pattern_generic);
             case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
-                return isEffectiveUserManagedProfile
-                        ? getString(R.string.lockpassword_confirm_your_password_generic_profile)
-                        : getString(R.string.lockpassword_confirm_your_password_generic);
+                if (isEffectiveUserManagedProfile) {
+                    return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PASSWORD,
+                            () -> getString(
+                                    R.string.lockpassword_confirm_your_password_generic_profile));
+                }
+
+                return getString(R.string.lockpassword_confirm_your_password_generic);
         }
         return null;
     }
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
index 3440071..9650a4d 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
@@ -17,6 +17,8 @@
 // TODO (b/35202196): move this class out of the root of the package.
 package com.android.settings.password;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCK_ATTEMPTS_FAILED;
+
 import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
 
 import android.annotation.Nullable;
@@ -243,13 +245,16 @@
             // Last try
             final String title = getActivity().getString(
                     R.string.lock_last_attempt_before_wipe_warning_title);
-            final int messageId = getLastTryErrorMessage(userType);
-            LastTryDialog.show(fragmentManager, title, messageId,
+            final String overrideMessageId = getLastTryOverrideErrorMessageId(userType);
+            final int defaultMessageId = getLastTryDefaultErrorMessage(userType);
+            final String message = mDevicePolicyManager.getString(
+                    overrideMessageId, () -> getString(defaultMessageId));
+            LastTryDialog.show(fragmentManager, title, message,
                     android.R.string.ok, false /* dismiss */);
         } else {
             // Device, profile, or secondary user is wiped
-            final int messageId = getWipeMessage(userType);
-            LastTryDialog.show(fragmentManager, null /* title */, messageId,
+            final String message = getWipeMessage(userType);
+            LastTryDialog.show(fragmentManager, null /* title */, message,
                     R.string.lock_failed_attempts_now_wiping_dialog_dismiss, true /* dismiss */);
         }
     }
@@ -266,16 +271,18 @@
         }
     }
 
-    protected abstract int getLastTryErrorMessage(int userType);
+    protected abstract String getLastTryOverrideErrorMessageId(int userType);
+    protected abstract int getLastTryDefaultErrorMessage(int userType);
 
-    private int getWipeMessage(int userType) {
+    private String getWipeMessage(int userType) {
         switch (userType) {
             case USER_TYPE_PRIMARY:
-                return R.string.lock_failed_attempts_now_wiping_device;
+                return getString(R.string.lock_failed_attempts_now_wiping_device);
             case USER_TYPE_MANAGED_PROFILE:
-                return R.string.lock_failed_attempts_now_wiping_profile;
+                return mDevicePolicyManager.getString(WORK_PROFILE_LOCK_ATTEMPTS_FAILED,
+                        () -> getString(R.string.lock_failed_attempts_now_wiping_profile));
             case USER_TYPE_SECONDARY:
-                return R.string.lock_failed_attempts_now_wiping_user;
+                return getString(R.string.lock_failed_attempts_now_wiping_user);
             default:
                 throw new IllegalArgumentException("Unrecognized user type:" + userType);
         }
@@ -311,7 +318,7 @@
         private static final String ARG_BUTTON = "button";
         private static final String ARG_DISMISS = "dismiss";
 
-        static boolean show(FragmentManager from, String title, int message, int button,
+        static boolean show(FragmentManager from, String title, String message, int button,
                 boolean dismiss) {
             LastTryDialog existent = (LastTryDialog) from.findFragmentByTag(TAG);
             if (existent != null && !existent.isRemoving()) {
@@ -319,7 +326,7 @@
             }
             Bundle args = new Bundle();
             args.putString(ARG_TITLE, title);
-            args.putInt(ARG_MESSAGE, message);
+            args.putString(ARG_MESSAGE, message);
             args.putInt(ARG_BUTTON, button);
             args.putBoolean(ARG_DISMISS, dismiss);
 
@@ -349,7 +356,7 @@
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             Dialog dialog = new AlertDialog.Builder(getActivity())
                     .setTitle(getArguments().getString(ARG_TITLE))
-                    .setMessage(getArguments().getInt(ARG_MESSAGE))
+                    .setMessage(getArguments().getString(ARG_MESSAGE))
                     .setPositiveButton(getArguments().getInt(ARG_BUTTON), null)
                     .create();
             dialog.setCanceledOnTouchOutside(false);
diff --git a/src/com/android/settings/password/ConfirmLockPassword.java b/src/com/android/settings/password/ConfirmLockPassword.java
index de32f13..df7e2dd 100644
--- a/src/com/android/settings/password/ConfirmLockPassword.java
+++ b/src/com/android/settings/password/ConfirmLockPassword.java
@@ -16,6 +16,16 @@
 
 package com.android.settings.password;
 
+import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PASSWORD_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PIN_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PASSWORD_ATTEMPT_BEFORE_WIPE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PIN_ATTEMPT_BEFORE_WIPE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PASSWORD_REQUIRED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PIN_REQUIRED;
+
 import android.annotation.Nullable;
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
@@ -73,6 +83,17 @@
         R.string.lockpassword_strong_auth_required_work_password
     };
 
+    private static final String[] DETAIL_TEXT_OVERRIDES = new String[] {
+            UNDEFINED,
+            UNDEFINED,
+            WORK_PROFILE_CONFIRM_PIN,
+            WORK_PROFILE_CONFIRM_PASSWORD,
+            UNDEFINED,
+            UNDEFINED,
+            WORK_PROFILE_PIN_REQUIRED,
+            WORK_PROFILE_PASSWORD_REQUIRED
+    };
+
     public static class InternalActivity extends ConfirmLockPassword {
     }
 
@@ -160,10 +181,10 @@
                     headerMessage = mDevicePolicyManager.getOrganizationNameForUser(mUserId);
                 }
                 if (TextUtils.isEmpty(headerMessage)) {
-                    headerMessage = getString(getDefaultHeader());
+                    headerMessage = getDefaultHeader();
                 }
                 if (TextUtils.isEmpty(detailsMessage)) {
-                    detailsMessage = getString(getDefaultDetails());
+                    detailsMessage = getDefaultDetails();
                 }
                 mGlifLayout.setHeaderText(headerMessage);
                 mGlifLayout.setDescriptionText(detailsMessage);
@@ -228,29 +249,37 @@
             }, 5000);
         }
 
-        private int getDefaultHeader() {
+        private String getDefaultHeader() {
             if (mFrp) {
-                return mIsAlpha ? R.string.lockpassword_confirm_your_password_header_frp
-                        : R.string.lockpassword_confirm_your_pin_header_frp;
+                return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header_frp)
+                        : getString(R.string.lockpassword_confirm_your_pin_header_frp);
             }
             if (mIsManagedProfile) {
-                return mIsAlpha ? R.string.lockpassword_confirm_your_work_password_header
-                        : R.string.lockpassword_confirm_your_work_pin_header;
+                if (mIsAlpha) {
+                    return mDevicePolicyManager.getString(
+                            CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
+                            () -> getString(
+                                    R.string.lockpassword_confirm_your_work_password_header));
+                }
+                return mDevicePolicyManager.getString(
+                        CONFIRM_WORK_PROFILE_PIN_HEADER,
+                        () -> getString(R.string.lockpassword_confirm_your_work_pin_header));
             }
-            return mIsAlpha ? R.string.lockpassword_confirm_your_password_header
-                    : R.string.lockpassword_confirm_your_pin_header;
+            return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header)
+                    : getString(R.string.lockpassword_confirm_your_pin_header);
         }
 
-        private int getDefaultDetails() {
+        private String getDefaultDetails() {
             if (mFrp) {
-                return mIsAlpha ? R.string.lockpassword_confirm_your_password_details_frp
-                        : R.string.lockpassword_confirm_your_pin_details_frp;
+                return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_details_frp)
+                        : getString(R.string.lockpassword_confirm_your_pin_details_frp);
             }
             boolean isStrongAuthRequired = isStrongAuthRequired();
             // Map boolean flags to an index by isStrongAuth << 2 + isManagedProfile << 1 + isAlpha.
             int index = ((isStrongAuthRequired ? 1 : 0) << 2) + ((mIsManagedProfile ? 1 : 0) << 1)
                     + (mIsAlpha ? 1 : 0);
-            return DETAIL_TEXTS[index];
+            return mDevicePolicyManager.getString(
+                    DETAIL_TEXT_OVERRIDES[index], () -> getString(DETAIL_TEXTS[index]));
         }
 
         private int getErrorMessage() {
@@ -259,7 +288,17 @@
         }
 
         @Override
-        protected int getLastTryErrorMessage(int userType) {
+        protected String getLastTryOverrideErrorMessageId(int userType) {
+            if (userType == USER_TYPE_MANAGED_PROFILE) {
+                return mIsAlpha ?  WORK_PROFILE_LAST_PASSWORD_ATTEMPT_BEFORE_WIPE
+                        : WORK_PROFILE_LAST_PIN_ATTEMPT_BEFORE_WIPE;
+            }
+
+            return UNDEFINED;
+        }
+
+        @Override
+        protected int getLastTryDefaultErrorMessage(int userType) {
             switch (userType) {
                 case USER_TYPE_PRIMARY:
                     return mIsAlpha ? R.string.lock_last_password_attempt_before_wipe_device
diff --git a/src/com/android/settings/password/ConfirmLockPattern.java b/src/com/android/settings/password/ConfirmLockPattern.java
index 6b9140a..f20a2a2 100644
--- a/src/com/android/settings/password/ConfirmLockPattern.java
+++ b/src/com/android/settings/password/ConfirmLockPattern.java
@@ -16,6 +16,12 @@
 
 package com.android.settings.password;
 
+import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PATTERN_HEADER;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PATTERN_ATTEMPT_BEFORE_WIPE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PATTERN_REQUIRED;
+
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
 import android.app.Activity;
@@ -258,19 +264,25 @@
             mGlifLayout.getDescriptionTextView().setAlpha(0f);
         }
 
-        private int getDefaultDetails() {
+        private String getDefaultDetails() {
             if (mFrp) {
-                return R.string.lockpassword_confirm_your_pattern_details_frp;
+                return getString(R.string.lockpassword_confirm_your_pattern_details_frp);
             }
             final boolean isStrongAuthRequired = isStrongAuthRequired();
             if (mIsManagedProfile) {
-                return isStrongAuthRequired
-                        ? R.string.lockpassword_strong_auth_required_work_pattern
-                        : R.string.lockpassword_confirm_your_pattern_generic_profile;
+                if (isStrongAuthRequired) {
+                    return mDevicePolicyManager.getString(WORK_PROFILE_PATTERN_REQUIRED,
+                            () -> getString(
+                                    R.string.lockpassword_strong_auth_required_work_pattern));
+                } else {
+                    return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
+                            () -> getString(
+                                    R.string.lockpassword_confirm_your_pattern_generic_profile));
+                }
             } else {
                 return isStrongAuthRequired
-                        ? R.string.lockpassword_strong_auth_required_device_pattern
-                        : R.string.lockpassword_confirm_your_pattern_generic;
+                        ? getString(R.string.lockpassword_strong_auth_required_device_pattern)
+                        : getString(R.string.lockpassword_confirm_your_pattern_generic);
             }
         }
 
@@ -352,11 +364,16 @@
             mGlifLayout.getHeaderTextView().announceForAccessibility(mGlifLayout.getHeaderText());
         }
 
-        private int getDefaultHeader() {
-            if (mFrp) return R.string.lockpassword_confirm_your_pattern_header_frp;
-            return mIsManagedProfile
-                    ? R.string.lockpassword_confirm_your_work_pattern_header
-                    : R.string.lockpassword_confirm_your_pattern_header;
+        private String getDefaultHeader() {
+            if (mFrp) return getString(R.string.lockpassword_confirm_your_pattern_header_frp);
+
+            if (mIsManagedProfile) {
+                return mDevicePolicyManager.getString(
+                        CONFIRM_WORK_PROFILE_PATTERN_HEADER,
+                        () -> getString(R.string.lockpassword_confirm_your_work_pattern_header));
+            }
+
+            return getString(R.string.lockpassword_confirm_your_pattern_header);
         }
 
         private Runnable mClearPatternRunnable = new Runnable() {
@@ -550,7 +567,16 @@
         }
 
         @Override
-        protected int getLastTryErrorMessage(int userType) {
+        protected String getLastTryOverrideErrorMessageId(int userType) {
+            if (userType == USER_TYPE_MANAGED_PROFILE) {
+                return WORK_PROFILE_LAST_PATTERN_ATTEMPT_BEFORE_WIPE;
+            }
+
+            return UNDEFINED;
+        }
+
+        @Override
+        protected int getLastTryDefaultErrorMessage(int userType) {
             switch (userType) {
                 case USER_TYPE_PRIMARY:
                     return R.string.lock_last_pattern_attempt_before_wipe_device;
diff --git a/src/com/android/settings/security/LockUnificationPreferenceController.java b/src/com/android/settings/security/LockUnificationPreferenceController.java
index 798691f..ec7a6ed 100644
--- a/src/com/android/settings/security/LockUnificationPreferenceController.java
+++ b/src/com/android/settings/security/LockUnificationPreferenceController.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.security;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE;
+
 import static com.android.settings.security.SecuritySettings.UNIFY_LOCK_CONFIRM_PROFILE_REQUEST;
 import static com.android.settings.security.SecuritySettings.UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST;
 
@@ -190,8 +192,8 @@
      */
     public void startUnification() {
         // Confirm profile lock
-        final String title = mContext.getString(
-                R.string.unlock_set_unlock_launch_picker_title_profile);
+        final String title = mDpm.getString(WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE,
+                () -> mContext.getString(R.string.unlock_set_unlock_launch_picker_title_profile));
         final ChooseLockSettingsHelper.Builder builder =
                 new ChooseLockSettingsHelper.Builder(mHost.getActivity(), mHost);
         final boolean launched = builder.setRequestCode(UNIFY_LOCK_CONFIRM_PROFILE_REQUEST)
diff --git a/src/com/android/settings/security/UnificationConfirmationDialog.java b/src/com/android/settings/security/UnificationConfirmationDialog.java
index d8638bc..929751c 100644
--- a/src/com/android/settings/security/UnificationConfirmationDialog.java
+++ b/src/com/android/settings/security/UnificationConfirmationDialog.java
@@ -16,7 +16,11 @@
 
 package com.android.settings.security;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_UNIFY_LOCKS_DETAIL;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_UNIFY_LOCKS_NONCOMPLIANT;
+
 import android.app.Dialog;
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.DialogInterface;
 import android.os.Bundle;
@@ -53,10 +57,16 @@
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         final SecuritySettings parentFragment = ((SecuritySettings) getParentFragment());
         final boolean compliant = getArguments().getBoolean(EXTRA_COMPLIANT);
+
+        String overrideMessageId = compliant ? WORK_PROFILE_UNIFY_LOCKS_DETAIL
+                : WORK_PROFILE_UNIFY_LOCKS_NONCOMPLIANT;
+        int defaultMessageId = compliant ? R.string.lock_settings_profile_unification_dialog_body
+                : R.string.lock_settings_profile_unification_dialog_uncompliant_body;
+
         return new AlertDialog.Builder(getActivity())
                 .setTitle(R.string.lock_settings_profile_unification_dialog_title)
-                .setMessage(compliant ? R.string.lock_settings_profile_unification_dialog_body
-                        : R.string.lock_settings_profile_unification_dialog_uncompliant_body)
+                .setMessage(getContext().getSystemService(DevicePolicyManager.class)
+                        .getString(overrideMessageId, () -> getString(defaultMessageId)))
                 .setPositiveButton(
                         compliant ? R.string.lock_settings_profile_unification_dialog_confirm
                                 : R.string
diff --git a/src/com/android/settings/security/screenlock/LockAfterTimeoutPreferenceController.java b/src/com/android/settings/security/screenlock/LockAfterTimeoutPreferenceController.java
index abeef2d..17e7e01 100644
--- a/src/com/android/settings/security/screenlock/LockAfterTimeoutPreferenceController.java
+++ b/src/com/android/settings/security/screenlock/LockAfterTimeoutPreferenceController.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.security.screenlock;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.DISABLED_BY_IT_ADMIN_TITLE;
 import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
 
 import android.app.admin.DevicePolicyManager;
@@ -123,7 +124,8 @@
     private void updateLockAfterPreferenceSummary(TimeoutListPreference preference) {
         final CharSequence summary;
         if (preference.isDisabledByAdmin()) {
-            summary = mContext.getText(R.string.disabled_by_policy_title);
+            summary = mDPM.getString(DISABLED_BY_IT_ADMIN_TITLE,
+                    () -> mContext.getString(R.string.disabled_by_policy_title));
         } else {
             // Update summary message with current value
             long currentTimeout = Settings.Secure.getLong(mContext.getContentResolver(),
diff --git a/src/com/android/settings/users/UserDialogs.java b/src/com/android/settings/users/UserDialogs.java
index 6915e95..3c19d7e 100644
--- a/src/com/android/settings/users/UserDialogs.java
+++ b/src/com/android/settings/users/UserDialogs.java
@@ -16,7 +16,11 @@
 
 package com.android.settings.users;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_REMOVE_MESSAGE;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_REMOVE_TITLE;
+
 import android.app.Dialog;
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.pm.ApplicationInfo;
@@ -52,17 +56,20 @@
     public static Dialog createRemoveDialog(Context context, int removingUserId,
             DialogInterface.OnClickListener onConfirmListener) {
         UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
         UserInfo userInfo = um.getUserInfo(removingUserId);
         AlertDialog.Builder builder = new AlertDialog.Builder(context)
                 .setPositiveButton(R.string.user_delete_button, onConfirmListener)
                 .setNegativeButton(android.R.string.cancel, null);
         if (userInfo.isManagedProfile()) {
-            builder.setTitle(R.string.work_profile_confirm_remove_title);
+            builder.setTitle(dpm.getString(WORK_PROFILE_CONFIRM_REMOVE_TITLE,
+                    () -> context.getString(R.string.work_profile_confirm_remove_title)));
             View view = createRemoveManagedUserDialogView(context, removingUserId);
             if (view != null) {
                 builder.setView(view);
             } else {
-                builder.setMessage(R.string.work_profile_confirm_remove_message);
+                builder.setMessage(dpm.getString(WORK_PROFILE_CONFIRM_REMOVE_MESSAGE,
+                        () -> context.getString(R.string.work_profile_confirm_remove_message)));
             }
         } else if (UserHandle.myUserId() == removingUserId) {
             builder.setTitle(R.string.user_confirm_remove_self_title);
diff --git a/src/com/android/settings/utils/ManagedServiceSettings.java b/src/com/android/settings/utils/ManagedServiceSettings.java
index e372cb7..06a8fff 100644
--- a/src/com/android/settings/utils/ManagedServiceSettings.java
+++ b/src/com/android/settings/utils/ManagedServiceSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.utils;
 
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED;
+
 import android.annotation.Nullable;
 import android.app.Dialog;
 import android.app.admin.DevicePolicyManager;
@@ -134,7 +136,9 @@
             if (managedProfileId != UserHandle.USER_NULL
                     && !mDpm.isNotificationListenerServicePermitted(
                             service.packageName, managedProfileId)) {
-                pref.setSummary(R.string.work_profile_notification_access_blocked_summary);
+                pref.setSummary(mDpm.getString(WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED,
+                        () -> getString(
+                                R.string.work_profile_notification_access_blocked_summary)));
             }
             pref.setOnPreferenceChangeListener((preference, newValue) -> {
                 final boolean enable = (boolean) newValue;
diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java
index 791d6ca..7c3ee79 100644
--- a/src/com/android/settings/widget/EntityHeaderController.java
+++ b/src/com/android/settings/widget/EntityHeaderController.java
@@ -289,7 +289,8 @@
             @Override
             public void onClick(View v) {
                 AppInfoBase.startAppInfoFragment(
-                        AppInfoDashboardFragment.class, R.string.application_info_label,
+                        AppInfoDashboardFragment.class,
+                        mActivity.getString(R.string.application_info_label),
                         mPackageName, mUid, mFragment, 0 /* request */,
                         mMetricsCategory);
             }
diff --git a/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java b/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
index 94bb4e8..cef43dd 100644
--- a/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
+++ b/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
@@ -18,6 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import android.content.Context;
+
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 
@@ -27,9 +29,13 @@
 import org.junit.runner.RunWith;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
 public class ConfirmCredentialTest {
+
+    private Context mContext = RuntimeEnvironment.application;
+
     @Test
     public void testLastTryDialogShownExactlyOnce() {
         FragmentManager fm = Robolectric.buildActivity(FragmentActivity.class).
@@ -37,13 +43,16 @@
 
         // Launch only one instance at a time.
         assertThat(LastTryDialog.show(
-                fm, "title", android.R.string.yes, android.R.string.ok, false)).isTrue();
+                fm, "title", mContext.getString(android.R.string.yes),
+                android.R.string.ok, false)).isTrue();
         assertThat(LastTryDialog.show(
-                fm, "title", android.R.string.yes, android.R.string.ok, false)).isFalse();
+                fm, "title", mContext.getString(android.R.string.yes),
+                android.R.string.ok, false)).isFalse();
 
         // After cancelling, the dialog should be re-shown when asked for.
         LastTryDialog.hide(fm);
         assertThat(LastTryDialog.show(
-                fm, "title", android.R.string.yes, android.R.string.ok, false)).isTrue();
+                fm, "title", mContext.getString(android.R.string.yes),
+                android.R.string.ok, false)).isTrue();
     }
 }