diff --git a/java/com/android/dialer/app/DevicePolicyResources.java b/java/com/android/dialer/app/DevicePolicyResources.java
deleted file mode 100644
index c783f0b..0000000
--- a/java/com/android/dialer/app/DevicePolicyResources.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer.app;
-
-import android.app.admin.DevicePolicyManager;
-
-/**
- * Class containing the required identifiers to update device management resources.
- *
- * <p>See {@link DevicePolicyManager#getDrawable} and {@link DevicePolicyManager#getString}.
- */
-public class DevicePolicyResources {
-
-    private static final String PREFIX = "Dialer.";
-
-    /**
-     * The title of the in-call notification for an incoming work call.
-     */
-    public static final String NOTIFICATION_INCOMING_WORK_CALL_TITLE =
-            PREFIX + "NOTIFICATION_INCOMING_WORK_CALL_TITLE";
-
-    /**
-     * The title of the in-call notification for an ongoing work call.
-     */
-    public static final String NOTIFICATION_ONGOING_WORK_CALL_TITLE =
-            PREFIX + "NOTIFICATION_ONGOING_WORK_CALL_TITLE";
-
-    /**
-     * Missed call notification label, used when there's exactly one missed call from work
-     * contact.
-     */
-    public static final String NOTIFICATION_MISSED_WORK_CALL_TITLE =
-            PREFIX + "NOTIFICATION_MISSED_WORK_CALL_TITLE";
-
-    /**
-     * Label for notification indicating that call is being made over wifi.
-     */
-    public static final String NOTIFICATION_WIFI_WORK_CALL_LABEL =
-            PREFIX + "NOTIFICATION_WIFI_WORK_CALL_LABEL";
-}
diff --git a/java/com/android/dialer/app/calllog/MissedCallNotifier.java b/java/com/android/dialer/app/calllog/MissedCallNotifier.java
index f2d2af8..ffa92d9 100644
--- a/java/com/android/dialer/app/calllog/MissedCallNotifier.java
+++ b/java/com/android/dialer/app/calllog/MissedCallNotifier.java
@@ -15,7 +15,7 @@
  */
 package com.android.dialer.app.calllog;
 
-import static com.android.dialer.app.DevicePolicyResources.NOTIFICATION_MISSED_WORK_CALL_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Dialer.NOTIFICATION_MISSED_WORK_CALL_TITLE;
 
 import android.app.Notification;
 import android.app.Notification.Builder;
@@ -172,7 +172,7 @@
           callLogNotificationsQueryHelper.getContactInfo(
               call.number, call.numberPresentation, call.countryIso);
       if (contactInfo.userType == ContactsUtils.USER_TYPE_WORK) {
-        titleText = context.getSystemService(DevicePolicyManager.class).getResources().getString(
+        titleText = context.getSystemService(DevicePolicyManager.class).getString(
                 NOTIFICATION_MISSED_WORK_CALL_TITLE,
                 () -> context.getString(R.string.notification_missedWorkCallTitle));
       } else {
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index 3942851..c689fdb 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -16,11 +16,11 @@
 
 package com.android.incallui;
 
+import static android.app.admin.DevicePolicyResources.Strings.Dialer.NOTIFICATION_INCOMING_WORK_CALL_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Dialer.NOTIFICATION_ONGOING_WORK_CALL_TITLE;
+import static android.app.admin.DevicePolicyResources.Strings.Dialer.NOTIFICATION_WIFI_WORK_CALL_LABEL;
 import static android.telecom.Call.Details.PROPERTY_HIGH_DEF_AUDIO;
 import static com.android.contacts.common.compat.CallCompat.Details.PROPERTY_ENTERPRISE_CALL;
-import static com.android.dialer.app.DevicePolicyResources.NOTIFICATION_INCOMING_WORK_CALL_TITLE;
-import static com.android.dialer.app.DevicePolicyResources.NOTIFICATION_ONGOING_WORK_CALL_TITLE;
-import static com.android.dialer.app.DevicePolicyResources.NOTIFICATION_WIFI_WORK_CALL_LABEL;
 import static com.android.incallui.NotificationBroadcastReceiver.ACTION_ACCEPT_VIDEO_UPGRADE_REQUEST;
 import static com.android.incallui.NotificationBroadcastReceiver.ACTION_ANSWER_SPEAKEASY_CALL;
 import static com.android.incallui.NotificationBroadcastReceiver.ACTION_ANSWER_VIDEO_INCOMING_CALL;
@@ -737,7 +737,7 @@
   private String getOngoingCallNotificationMessage(boolean isWorkCall) {
     if (isWorkCall) {
       DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
-      return dpm.getResources().getString(NOTIFICATION_ONGOING_WORK_CALL_TITLE, () ->
+      return dpm.getString(NOTIFICATION_ONGOING_WORK_CALL_TITLE, () ->
               context.getString(R.string.notification_ongoing_work_call));
     } else {
       return context.getString(R.string.notification_ongoing_call);
@@ -747,7 +747,7 @@
   private String getIncomingCallNotificationMessage(boolean isWorkCall) {
     if (isWorkCall) {
       DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
-      return dpm.getResources().getString(NOTIFICATION_INCOMING_WORK_CALL_TITLE, () ->
+      return dpm.getString(NOTIFICATION_INCOMING_WORK_CALL_TITLE, () ->
               context.getString(R.string.notification_incoming_work_call));
     } else {
       return context.getString(R.string.notification_incoming_call);
@@ -757,7 +757,7 @@
   private String getWifiBrand(boolean isWorkCall) {
     if (isWorkCall) {
       DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
-      return dpm.getResources().getString(NOTIFICATION_WIFI_WORK_CALL_LABEL, () ->
+      return dpm.getString(NOTIFICATION_WIFI_WORK_CALL_LABEL, () ->
               context.getString(R.string.notification_call_wifi_work_brand));
     } else {
       return context.getString(R.string.notification_call_wifi_brand);
