Reuse the active esim slot
If there is the active esim slot in SS mode, the settings should reuse it and does not change the sim slot mapping. Bug: 229803628 Test: manually test. Change-Id: I6daa38f54abfaf67c7640d9dc8be0da02eb59554
This commit is contained in:
@@ -21,12 +21,14 @@ import android.app.PendingIntent;
|
|||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.UiccCardInfo;
|
import android.telephony.UiccCardInfo;
|
||||||
|
import android.telephony.UiccSlotMapping;
|
||||||
import android.telephony.euicc.EuiccManager;
|
import android.telephony.euicc.EuiccManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.settings.SidecarFragment;
|
import com.android.settings.SidecarFragment;
|
||||||
import com.android.settings.network.telephony.EuiccOperationSidecar;
|
import com.android.settings.network.telephony.EuiccOperationSidecar;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -94,7 +96,7 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar {
|
|||||||
|
|
||||||
// To check whether the esim slot's port is active. If yes, skip setSlotMapping. If no,
|
// To check whether the esim slot's port is active. If yes, skip setSlotMapping. If no,
|
||||||
// set this slot+port into setSimSlotMapping.
|
// set this slot+port into setSimSlotMapping.
|
||||||
mPort = (port < 0) ? getTargetPortId(removedSubInfo) : port;
|
mPort = (port < 0) ? getTargetPortId(targetSlot, removedSubInfo) : port;
|
||||||
mRemovedSubInfo = removedSubInfo;
|
mRemovedSubInfo = removedSubInfo;
|
||||||
Log.d(TAG,
|
Log.d(TAG,
|
||||||
String.format("set esim into the SubId%d Slot%d:Port%d",
|
String.format("set esim into the SubId%d Slot%d:Port%d",
|
||||||
@@ -114,12 +116,24 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getTargetPortId(SubscriptionInfo removedSubInfo) {
|
private int getTargetPortId(int physicalEsimSlotIndex, SubscriptionInfo removedSubInfo) {
|
||||||
if (!mTelephonyManager.isMultiSimEnabled() || !isMultipleEnabledProfilesSupported()) {
|
if (!isMultipleEnabledProfilesSupported()) {
|
||||||
// In the 'SS mode' or 'DSDS+no MEP', the port is 0.
|
Log.d(TAG, "The device is no MEP, port is 0");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mTelephonyManager.isMultiSimEnabled()) {
|
||||||
|
// In the 'SS mode'
|
||||||
|
// If there is the esim slot is active, the port is from the current esim slot.
|
||||||
|
// If there is no esim slot in device, then the esim's port is 0.
|
||||||
|
Collection<UiccSlotMapping> uiccSlotMappings = mTelephonyManager.getSimSlotMapping();
|
||||||
|
Log.d(TAG, "In SS mode, the UiccSlotMapping: " + uiccSlotMappings);
|
||||||
|
return uiccSlotMappings.stream()
|
||||||
|
.filter(i -> i.getPhysicalSlotIndex() == physicalEsimSlotIndex)
|
||||||
|
.mapToInt(i -> i.getPortIndex())
|
||||||
|
.findFirst().orElse(0);
|
||||||
|
}
|
||||||
|
|
||||||
// In the 'DSDS+MEP', if the removedSubInfo is esim, then the port is
|
// In the 'DSDS+MEP', if the removedSubInfo is esim, then the port is
|
||||||
// removedSubInfo's port.
|
// removedSubInfo's port.
|
||||||
if (removedSubInfo != null && removedSubInfo.isEmbedded()) {
|
if (removedSubInfo != null && removedSubInfo.isEmbedded()) {
|
||||||
|
@@ -282,6 +282,21 @@ public class UiccSlotUtil {
|
|||||||
// 1. pSIM's logical slots always is [RIL 0].
|
// 1. pSIM's logical slots always is [RIL 0].
|
||||||
// 2. assign the new active port to the same stack that will be de-activated
|
// 2. assign the new active port to the same stack that will be de-activated
|
||||||
// For example: mode#3->mode#4
|
// For example: mode#3->mode#4
|
||||||
|
// 3. Add an eSIM carrier or enable eSIM carrier. The cases are at the below.
|
||||||
|
// 1) 1 => 2 / 2.1 / 3 / 3.1
|
||||||
|
// 2) 2 => 1 / 3 / 3.2
|
||||||
|
// 3) 2.1 => 3.1 / 4
|
||||||
|
// 4) 3 => 4
|
||||||
|
// 5) 3.1 => 3.2
|
||||||
|
// Note:
|
||||||
|
// 1) 2 <=> 2.1 blocked by LPA (reason: existing active port in SS so just re-use)
|
||||||
|
// 2) 3 <=> 3.1 blocked by LPA (reason: if pSIM+an active port, re-use the active port)
|
||||||
|
// 4. pSIM insertion or enabling
|
||||||
|
// 1) 2 => 1 / 3
|
||||||
|
// 2) 2.1 => 1 / 3.1
|
||||||
|
// 3) 3.2 => 3 / 3.1
|
||||||
|
// 4) 4 => 3 / 3.1
|
||||||
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static Collection<UiccSlotMapping> prepareUiccSlotMappings(
|
static Collection<UiccSlotMapping> prepareUiccSlotMappings(
|
||||||
|
Reference in New Issue
Block a user