diff --git a/res/values/config.xml b/res/values/config.xml index 6f784dd7705..f3e2a7ac042 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -793,4 +793,8 @@ false + + + + diff --git a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java index 27b8c16e109..441c2498152 100644 --- a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java +++ b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java @@ -51,6 +51,7 @@ import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; 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 @@ public class ConvertToEsimPreferenceController extends TelephonyBasePreferenceCo * 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 @@ public class ConvertToEsimPreferenceController extends TelephonyBasePreferenceCo } 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()); + } }