diff --git a/res/values/strings.xml b/res/values/strings.xml
index daccf46e22b..4d0b92dda95 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13186,4 +13186,7 @@
Clean your screen near the sensor and try again
+
+
+ Converted to eSIM. Remove and discard.
diff --git a/src/com/android/settings/network/NetworkProviderSimListController.java b/src/com/android/settings/network/NetworkProviderSimListController.java
index 02b19802df2..46a66a6cba4 100644
--- a/src/com/android/settings/network/NetworkProviderSimListController.java
+++ b/src/com/android/settings/network/NetworkProviderSimListController.java
@@ -44,6 +44,7 @@ public class NetworkProviderSimListController extends BasePreferenceController i
DefaultLifecycleObserver, MobileNetworkRepository.MobileNetworkCallback,
DefaultSubscriptionReceiver.DefaultSubscriptionListener {
+ private static final String TAG = "NetworkProviderSimListController";
private final SubscriptionManager mSubscriptionManager;
@Nullable
private PreferenceCategory mPreferenceCategory;
@@ -104,16 +105,21 @@ public class NetworkProviderSimListController extends BasePreferenceController i
final Drawable drawable = mContext.getDrawable(
info.isEmbedded ? R.drawable.ic_sim_card_download : R.drawable.ic_sim_card);
pref.setIcon(drawable);
- pref.setOnPreferenceClickListener(clickedPref -> {
- if (!info.isEmbedded && !isActiveSubscriptionId
- && !SubscriptionUtil.showToggleForPhysicalSim(mSubscriptionManager)) {
- SubscriptionUtil.startToggleSubscriptionDialogActivity(mContext, subId,
- true);
- } else {
- MobileNetworkUtils.launchMobileNetworkSettings(mContext, info);
- }
- return true;
- });
+ if (SubscriptionUtil.isConvertedPsimSubscription(mContext, subId)) {
+ // If the subscription has been converted, disable the profile menu.
+ pref.setEnabled(false);
+ } else {
+ pref.setOnPreferenceClickListener(clickedPref -> {
+ if (!info.isEmbedded && !isActiveSubscriptionId
+ && !SubscriptionUtil.showToggleForPhysicalSim(mSubscriptionManager)) {
+ SubscriptionUtil.startToggleSubscriptionDialogActivity(mContext, subId,
+ true);
+ } else {
+ MobileNetworkUtils.launchMobileNetworkSettings(mContext, info);
+ }
+ return true;
+ });
+ }
mPreferences.put(subId, pref);
}
for (RestrictedPreference pref : existingPreferences.values()) {
@@ -122,6 +128,10 @@ public class NetworkProviderSimListController extends BasePreferenceController i
}
public CharSequence getSummary(SubscriptionInfoEntity subInfo, CharSequence displayName) {
+ if (!subInfo.isEmbedded
+ && SubscriptionUtil.isConvertedPsimSubscription(mContext, subInfo.getSubId())) {
+ return mContext.getString(R.string.sim_category_converted_sim);
+ }
if (subInfo.isActiveSubscriptionId) {
CharSequence config = SubscriptionUtil.getDefaultSimConfig(mContext,
subInfo.getSubId());
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 56381e263b3..1ab3ed56e6b 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -18,6 +18,7 @@ package com.android.settings.network;
import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX;
import static android.telephony.SubscriptionManager.PROFILE_CLASS_PROVISIONING;
+import static android.telephony.SubscriptionManager.TRANSFER_STATUS_CONVERTED;
import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT;
import static com.android.internal.util.CollectionUtils.emptyIfNull;
@@ -905,4 +906,27 @@ public class SubscriptionUtil {
context.getSystemService(ConnectivityManager.class);
return connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
}
+
+ /**
+ * Checks if the subscription with the given subId is converted pSIM.
+ *
+ * @param context {@code Context}
+ * @param subId The subscription ID.
+ */
+ static boolean isConvertedPsimSubscription(@NonNull Context context, int subId) {
+ SubscriptionManager subscriptionManager = context.getSystemService(
+ SubscriptionManager.class);
+ List allSubInofs = subscriptionManager.getAllSubscriptionInfoList();
+ for (SubscriptionInfo subInfo : allSubInofs) {
+ if (subInfo != null) {
+ if (com.android.internal.telephony.flags.Flags.supportPsimToEsimConversion()
+ && subInfo.getSubscriptionId() == subId
+ && !subInfo.isEmbedded()
+ && subInfo.getTransferStatus() == TRANSFER_STATUS_CONVERTED) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
}
diff --git a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java
index 08e993b6cde..cf1350c8cb9 100644
--- a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java
+++ b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java
@@ -34,6 +34,7 @@ import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.euicc.EuiccManager;
import android.text.TextUtils;
+import android.util.Log;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.LifecycleObserver;
@@ -42,22 +43,20 @@ import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.util.TelephonyUtils;
-import com.android.settings.R;
import com.android.settings.network.MobileNetworkRepository;
-import com.android.settings.network.SubscriptionUtil;
import com.android.settingslib.core.lifecycle.Lifecycle;
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
LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback {
-
+ private static final String TAG = "ConvertToEsimPreference";
private Preference mPreference;
private LifecycleOwner mLifecycleOwner;
private MobileNetworkRepository mMobileNetworkRepository;
@@ -113,14 +112,27 @@ 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)
- || !isPsimConversionSupport(subId)) {
+ if (!Flags.supportPsimToEsimConversion()) {
+ Log.d(TAG, "supportPsimToEsimConversion flag is not enabled");
+ return CONDITIONALLY_UNAVAILABLE;
+ }
+
+ SubscriptionManager subscriptionManager = mContext.getSystemService(
+ SubscriptionManager.class);
+ SubscriptionInfo subInfo = subscriptionManager.getActiveSubscriptionInfo(subId);
+ if (subInfo == null) {
+ return CONDITIONALLY_UNAVAILABLE;
+ }
+ EuiccManager euiccManager = (EuiccManager)
+ mContext.getSystemService(Context.EUICC_SERVICE);
+ if (!euiccManager.isPsimConversionSupported(subInfo.getCarrierId())) {
+ Log.i(TAG, "subId is not matched with pSIM conversion"
+ + " supported carriers:" + subInfo.getCarrierId());
return CONDITIONALLY_UNAVAILABLE;
}
if (findConversionSupportComponent()) {
return mSubscriptionInfoEntity != null && mSubscriptionInfoEntity.isActiveSubscriptionId
&& !mSubscriptionInfoEntity.isEmbedded && isActiveSubscription(subId)
- && !hasActiveEsimProfiles()
? AVAILABLE
: CONDITIONALLY_UNAVAILABLE;
}
@@ -174,24 +186,6 @@ public class ConvertToEsimPreferenceController extends TelephonyBasePreferenceCo
return true;
}
- private boolean hasActiveEsimProfiles() {
- SubscriptionManager subscriptionManager = mContext.getSystemService(
- SubscriptionManager.class);
- List subscriptionInfoList =
- SubscriptionUtil.getActiveSubscriptions(subscriptionManager);
- if (subscriptionInfoList == null || subscriptionInfoList.isEmpty()) {
- return false;
- }
- int activatedEsimCount = (int) subscriptionInfoList
- .stream()
- .filter(SubscriptionInfo::isEmbedded)
- .count();
- if (activatedEsimCount > 0) {
- return true;
- }
- return false;
- }
-
private boolean findConversionSupportComponent() {
Intent intent = new Intent(EuiccService.ACTION_CONVERT_TO_EMBEDDED_SUBSCRIPTION);
PackageManager packageManager = mContext.getPackageManager();
@@ -242,16 +236,4 @@ 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());
- }
}
diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java
index 9b235cea931..2a05105ff37 100644
--- a/src/com/android/settings/sim/SimSelectNotification.java
+++ b/src/com/android/settings/sim/SimSelectNotification.java
@@ -33,7 +33,6 @@ import static android.telephony.TelephonyManager.EXTRA_SUBSCRIPTION_ID;
import static android.telephony.data.ApnSetting.TYPE_MMS;
import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
-import static com.android.settings.sim.SimDialogActivity.PICK_DISMISS;
import android.app.Notification;
import android.app.NotificationChannel;