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());
+ }
}