Add new dialogue and RAC logic.

A new dialogue will pop up if the eSIM that is being deleted has carrier
Vodafone DE and does not have wifi connection or connection from another
sim.

Test: make, atest SubscriptionUtilTest and tested manually
Bug: 316419093
Change-Id: I957b67339a0ab651f38984e7d1061a8aff8fe2a1
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
     }
 }