diff --git a/res/values/config.xml b/res/values/config.xml
index afd6fdd..9e91dcc 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -808,4 +808,8 @@
     <!-- Array of carrier id to allow the pSIM conversion-->
     <integer-array name="config_psim_conversion_menu_enabled_carrier" translatable="false">
     </integer-array>
+
+    <!-- Array of carrier id that uses reusable activation code-->
+    <integer-array name="config_carrier_use_rac" translatable="false">
+    </integer-array>
 </resources>
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 2498ec9..83f6c38 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -49,9 +49,11 @@
 import com.android.settings.network.helper.SelectableSubscriptions;
 import com.android.settings.network.helper.SubscriptionAnnotation;
 import com.android.settings.network.telephony.DeleteEuiccSubscriptionDialogActivity;
+import com.android.settings.network.telephony.EuiccRacConnectivityDialogActivity;
 import com.android.settings.network.telephony.ToggleSubscriptionDialogActivity;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -557,13 +559,21 @@
      * @param context {@code Context}
      * @param subId The id of subscription need to be deleted.
      */
-    public static void startDeleteEuiccSubscriptionDialogActivity(Context context, int subId) {
+    public static void startDeleteEuiccSubscriptionDialogActivity(Context context, int subId,
+            int carrierId) {
         if (!SubscriptionManager.isUsableSubscriptionId(subId)) {
             Log.i(TAG, "Unable to delete subscription due to invalid subscription ID.");
             return;
         }
-        // TODO(b/325693582): Add verification if carrier is RAC and logic for new dialog
-        context.startActivity(DeleteEuiccSubscriptionDialogActivity.getIntent(context, subId));
+        final int[] carriersThatUseRAC = context.getResources().getIntArray(
+                R.array.config_carrier_use_rac);
+        boolean isCarrierRac = Arrays.stream(carriersThatUseRAC).anyMatch(cid -> cid == carrierId);
+
+        if (isCarrierRac && !isConnectedToWifiOrDifferentSubId(context, subId)) {
+            context.startActivity(EuiccRacConnectivityDialogActivity.getIntent(context, subId));
+        } else {
+            context.startActivity(DeleteEuiccSubscriptionDialogActivity.getIntent(context, subId));
+        }
     }
 
     /**
diff --git a/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.kt b/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.kt
index 64f9730..b7ee41d 100644
--- a/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.kt
+++ b/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.kt
@@ -33,6 +33,7 @@
 class DeleteSimProfilePreferenceController(context: Context, preferenceKey: String) :
     BasePreferenceController(context, preferenceKey) {
     private var subscriptionId: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
+    private var carrierId: Int = TelephonyManager.UNKNOWN_CARRIER_ID
     private var subscriptionInfo: SubscriptionInfo? = null
     private lateinit var preference: Preference
 
@@ -40,6 +41,9 @@
         this.subscriptionId = subscriptionId
         subscriptionInfo = SubscriptionUtil.getAvailableSubscriptions(mContext)
             .find { it.subscriptionId == subscriptionId && it.isEmbedded }
+        subscriptionInfo?.let {
+            carrierId = it.carrierId
+        }
     }
 
     override fun getAvailabilityStatus() = when (subscriptionInfo) {
@@ -67,7 +71,8 @@
     }
 
     private fun deleteSim() {
-        SubscriptionUtil.startDeleteEuiccSubscriptionDialogActivity(mContext, subscriptionId)
+        SubscriptionUtil.startDeleteEuiccSubscriptionDialogActivity(mContext, subscriptionId,
+                carrierId)
         // result handled in MobileNetworkSettings
     }
 }
