Merge "Add the condtions to show the pSIM conversion menu" into main
diff --git a/res/values/config.xml b/res/values/config.xml
index 6f784dd..f3e2a7a 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -793,4 +793,8 @@
 
     <!-- Whether to display pSIM conversion menu in Settings.-->
     <bool name="config_psim_conversion_menu_enabled">false</bool>
+
+    <!-- Array of carrier id to allow the pSIM conversion-->
+    <integer-array name="config_psim_conversion_menu_enabled_carrier" translatable="false">
+    </integer-array>
 </resources>
diff --git a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java
index 27b8c16..441c249 100644
--- a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java
+++ b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java
@@ -51,6 +51,7 @@
 import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 public class ConvertToEsimPreferenceController extends TelephonyBasePreferenceController implements
@@ -111,7 +112,8 @@
          * To avoid showing users dialogs that can cause confusion,
          * add conditions to allow conversion in the absence of active eSIM.
          */
-        if (!mContext.getResources().getBoolean(R.bool.config_psim_conversion_menu_enabled)) {
+        if (!mContext.getResources().getBoolean(R.bool.config_psim_conversion_menu_enabled)
+                || !isPsimConversionSupport(subId)) {
             return CONDITIONALLY_UNAVAILABLE;
         }
         if (findConversionSupportComponent()) {
@@ -238,4 +240,16 @@
         }
         return true;
     }
+
+    private boolean isPsimConversionSupport(int subId) {
+        SubscriptionManager subscriptionManager = mContext.getSystemService(
+                SubscriptionManager.class);
+        SubscriptionInfo subInfo = subscriptionManager.getActiveSubscriptionInfo(subId);
+        if (subInfo == null) {
+            return false;
+        }
+        final int[] supportedCarriers = mContext.getResources().getIntArray(
+                R.array.config_psim_conversion_menu_enabled_carrier);
+        return Arrays.stream(supportedCarriers).anyMatch(id -> id == subInfo.getCarrierId());
+    }
 }