Merge "Check active state of opportunistic subscription before returning its port index." into tm-qpr-dev am: b5f5eb3fa5
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/AlternativeNetworkAccess/+/19458812
Change-Id: I2c74bf84131a0b14569016eb201ea91025b4dc16
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/ons/ONSProfileSelector.java b/src/com/android/ons/ONSProfileSelector.java
index 261a7ef..95287fc 100644
--- a/src/com/android/ons/ONSProfileSelector.java
+++ b/src/com/android/ons/ONSProfileSelector.java
@@ -378,19 +378,27 @@
protected int getAvailableESIMPortIndex() {
//Check if an opportunistic subscription is already active. If yes then, use the same port.
List<SubscriptionInfo> subscriptionInfos = mSubscriptionManager
- .getOpportunisticSubscriptions();
- if (subscriptionInfos != null && subscriptionInfos.size() > 0) {
- return subscriptionInfos.get(0).getPortIndex();
+ .getCompleteActiveSubscriptionInfoList();
+ if (subscriptionInfos != null) {
+ logDebug("[getAvailableESIMPortIndex] subscriptionInfos size:"
+ + subscriptionInfos.size());
+ for (SubscriptionInfo subscriptionInfo : subscriptionInfos) {
+ if (subscriptionInfo.isEmbedded() && subscriptionInfo.isOpportunistic()) {
+ return subscriptionInfo.getPortIndex();
+ }
+ }
}
//Look for available port.
for (UiccCardInfo uiccCardInfo : mTelephonyManager.getUiccCardsInfo()) {
+ logDebug("[getAvailableESIMPortIndex] CardInfo: " + uiccCardInfo.toString());
if (!uiccCardInfo.isEuicc()) {
continue;
}
EuiccManager euiccManager = mEuiccManager.createForCardId(uiccCardInfo.getCardId());
for (UiccPortInfo uiccPortInfo : uiccCardInfo.getPorts()) {
+ logDebug("[getAvailableESIMPortIndex] PortInfo: " + uiccPortInfo.toString());
//Port is available if no profiles enabled on it.
if (euiccManager.isSimPortAvailable(uiccPortInfo.getPortIndex())) {
return uiccPortInfo.getPortIndex();
@@ -398,6 +406,7 @@
}
}
+ logDebug("[getAvailableESIMPortIndex] No Port is available.");
return TelephonyManager.INVALID_PORT_INDEX;
}
diff --git a/tests/src/com/android/ons/ONSProfileSelectorTest.java b/tests/src/com/android/ons/ONSProfileSelectorTest.java
index 116d1a5..68925f7 100644
--- a/tests/src/com/android/ons/ONSProfileSelectorTest.java
+++ b/tests/src/com/android/ons/ONSProfileSelectorTest.java
@@ -268,6 +268,8 @@
.getOpportunisticSubscriptions();
doReturn(activeSubscriptionInfoList).when(mSubscriptionManager)
.getActiveSubscriptionInfoList();
+ doReturn(activeSubscriptionInfoList).when(mSubscriptionManager)
+ .getCompleteActiveSubscriptionInfoList();
doReturn(true).when(mSubscriptionManager).isActiveSubId(subId);
doReturn(true).when(mSubscriptionBoundTelephonyManager).enableModemForSlot(
anyInt(), anyBoolean());
@@ -310,13 +312,18 @@
List<SubscriptionInfo> subscriptionInfoList = new ArrayList<SubscriptionInfo>();
SubscriptionInfo subscriptionInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
- "123", 1, null, "310", "210", "", false, null, "1");
+ "123", 1, null, "310", "210", "", true, null, "1", 1, true, null, false, 1, 1, 1,
+ null, null, false, 0);
subscriptionInfoList.add(subscriptionInfo);
SubscriptionInfo subscriptionInfo_2 = new SubscriptionInfo(8, "", 1, "Vzw", "Vzw", 1, 1,
- "123", 1, null, "311", "480", "", false, null, "1");
+ "456", 1, null, "311", "480", "", true, null, "1", 1, true, null, false, 1, 1, 1,
+ null, null, false, 1);
subscriptionInfoList.add(subscriptionInfo_2);
doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
doReturn(subscriptionInfo_2).when(mSubscriptionManager).getActiveSubscriptionInfo(8);
+ doReturn(subscriptionInfoList).when(mSubscriptionManager)
+ .getCompleteActiveSubscriptionInfoList();
+ doReturn(subscriptionInfoList).when(mSubscriptionManager).getOpportunisticSubscriptions();
List<CellInfo> results2 = new ArrayList<CellInfo>();
CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
@@ -353,8 +360,6 @@
@Override
public void run() {
Looper.prepare();
- doReturn(subscriptionInfoList).when(mSubscriptionManager)
- .getOpportunisticSubscriptions();
doReturn(true).when(mSubscriptionManager).isActiveSubId(anyInt());
doReturn(true).when(mSubscriptionBoundTelephonyManager).enableModemForSlot(
anyInt(), anyBoolean());
@@ -628,7 +633,7 @@
activeSubscriptionInfoList.add(subscriptionInfo1);
activeSubscriptionInfoList.add(subscriptionInfo2);
doReturn(activeSubscriptionInfoList).when(mSubscriptionManager)
- .getActiveSubscriptionInfoList();
+ .getCompleteActiveSubscriptionInfoList();
List<CellInfo> results2 = new ArrayList<CellInfo>();
CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
@@ -821,31 +826,43 @@
}).start();
waitUntilReady();
waitForMs(500);
- assertEquals(mONSProfileSelector.getCurrentPreferredData(), 5);
+ assertEquals(5, mONSProfileSelector.getCurrentPreferredData());
}
@Test
public void testAvailablePortWhenTwoPrimarySIMsAreActive() {
+ /**
+ * 2 - Primary active subscriptions and
+ * 1 - Inactive opportunistic subscription
+ */
+
List<SubscriptionInfo> activeSubscriptionInfoList = new ArrayList<SubscriptionInfo>();
List<SubscriptionInfo> opportunisticInfoList = new ArrayList<SubscriptionInfo>();
- SubscriptionInfo subscriptionInfo1 = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
- "123", 1, null, "310", "210", "", true, null, "1", 1, false, null, false, 1839, 1,
- 1, null, null, false, 1);
- SubscriptionInfo subscriptionInfo2 = new SubscriptionInfo(6, "", 1, "TMO", "TMO", 1, 1,
- "456", 1, null, "310", "211", "", true, null, "1", 1, false, null, false, 1839, 1,
- 1, null, null, false, 2);
+ SubscriptionInfo oppSubInfo = new SubscriptionInfo(4, "", -1, "TMO", "TMO", 1, 1,
+ "001", 1, null, "110", "210", "", true, null, "1", 1, true, null, false, 2839, 1,
+ 1, null, null, false, TelephonyManager.INVALID_PORT_INDEX);
- activeSubscriptionInfoList.add(subscriptionInfo1);
- activeSubscriptionInfoList.add(subscriptionInfo2);
+ SubscriptionInfo primarySubInfo1 = new SubscriptionInfo(5, "", 0, "TMO", "TMO", 1, 1,
+ "123", 1, null, "310", "210", "", true, null, "1", 1, false, null, false, 1839, 1,
+ 1, null, null, false, 0);
+ SubscriptionInfo primarySubInfo2 = new SubscriptionInfo(6, "", 0, "TMO", "TMO", 1, 1,
+ "456", 1, null, "310", "211", "", true, null, "1", 1, false, null, false, 1839, 1,
+ 1, null, null, false, 1);
+
+ activeSubscriptionInfoList.add(primarySubInfo1);
+ activeSubscriptionInfoList.add(primarySubInfo2);
+ opportunisticInfoList.add(oppSubInfo);
doReturn(opportunisticInfoList).when(mSubscriptionManager).getOpportunisticSubscriptions();
doReturn(activeSubscriptionInfoList).when(mSubscriptionManager)
- .getActiveSubscriptionInfoList();
+ .getCompleteActiveSubscriptionInfoList();
- UiccPortInfo uiccPortInfo = new UiccPortInfo("", 1, 1, true);
+ UiccPortInfo uiccPortInfo1 = new UiccPortInfo("", 0, 0, true);
+ UiccPortInfo uiccPortInfo2 = new UiccPortInfo("", 1, 0, true);
ArrayList<UiccPortInfo> uiccPortInfoList = new ArrayList<>();
- uiccPortInfoList.add(uiccPortInfo);
+ uiccPortInfoList.add(uiccPortInfo1);
+ uiccPortInfoList.add(uiccPortInfo2);
UiccCardInfo uiccCardInfo = new UiccCardInfo(true, 1, "", 0, false, true, uiccPortInfoList);
ArrayList<UiccCardInfo> uiccCardInfoList = new ArrayList<>();
@@ -853,34 +870,177 @@
doReturn(uiccCardInfoList).when(mMockTelephonyManager).getUiccCardsInfo();
doReturn(mMockEuiccManager).when(mMockEuiccManager).createForCardId(1);
+ doReturn(false).when(mMockEuiccManager).isSimPortAvailable(0);
doReturn(false).when(mMockEuiccManager).isSimPortAvailable(1);
mONSProfileSelector = new MyONSProfileSelector(mContext, null);
+ mONSProfileSelector.mTelephonyManager = mMockTelephonyManager;
+ mONSProfileSelector.mEuiccManager = mMockEuiccManager;
+
int portIdx = mONSProfileSelector.getAvailableESIMPortIndex();
- assertEquals(portIdx, TelephonyManager.INVALID_PORT_INDEX);
+ assertEquals(TelephonyManager.INVALID_PORT_INDEX, portIdx);
}
@Test
public void testAvailablePortWhenOpportunisticEsimIsActive() {
+ /**
+ * 1 - Primary active subscriptions and
+ * 1 - Active opportunistic subscription
+ */
+
List<SubscriptionInfo> activeSubscriptionInfoList = new ArrayList<SubscriptionInfo>();
List<SubscriptionInfo> opportunisticInfoList = new ArrayList<SubscriptionInfo>();
- SubscriptionInfo subscriptionInfo1 = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
+ SubscriptionInfo oppSubInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "210", "", true, null, "1", 1, true, null, false, 1839, 1,
- 1, null, null, false, 1);
- SubscriptionInfo subscriptionInfo2 = new SubscriptionInfo(6, "", 1, "TMO", "TMO", 1, 1,
+ 1, null, null, false, 0);
+
+ SubscriptionInfo primarySubInfo = new SubscriptionInfo(6, "", 1, "TMO", "TMO", 1, 1,
"456", 1, null, "310", "211", "", true, null, "1", 1, false, null, false, 1839, 1,
- 1, null, null, false, 2);
+ 1, null, null, false, 1);
- opportunisticInfoList.add(subscriptionInfo1);
- activeSubscriptionInfoList.add(subscriptionInfo1);
- activeSubscriptionInfoList.add(subscriptionInfo2);
+ opportunisticInfoList.add(oppSubInfo);
+ activeSubscriptionInfoList.add(oppSubInfo);
+ activeSubscriptionInfoList.add(primarySubInfo);
- doReturn(opportunisticInfoList).when(mSubscriptionManager).getOpportunisticSubscriptions();
+ doReturn(opportunisticInfoList).when(mSubscriptionManager)
+ .getOpportunisticSubscriptions();
+ doReturn(activeSubscriptionInfoList).when(mSubscriptionManager)
+ .getCompleteActiveSubscriptionInfoList();
mONSProfileSelector = new MyONSProfileSelector(mContext, null);
int portIdx = mONSProfileSelector.getAvailableESIMPortIndex();
- assertEquals(portIdx, 1);
+ assertEquals(0, portIdx);
+ }
+
+ @Test
+ public void testAvailablePortWhenTwoOpportunisticEsimsAreActive() {
+ /**
+ * 2 - Active opportunistic subscriptions.
+ */
+
+ List<SubscriptionInfo> activeSubscriptionInfoList = new ArrayList<SubscriptionInfo>();
+ List<SubscriptionInfo> opportunisticInfoList = new ArrayList<SubscriptionInfo>();
+
+ SubscriptionInfo opportunisticSubInfo1 = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
+ "123", 1, null, "310", "210", "", true, null, "1", 1, true, null, false, 1839, 1,
+ 1, null, null, false, 0);
+
+ SubscriptionInfo opportunisticSubInfo2 = new SubscriptionInfo(6, "", 1, "TMO", "TMO", 1, 1,
+ "456", 1, null, "310", "211", "", true, null, "1", 1, true, null, false, 1839, 1,
+ 1, null, null, false, 1);
+
+ opportunisticInfoList.add(opportunisticSubInfo1);
+ opportunisticInfoList.add(opportunisticSubInfo2);
+ activeSubscriptionInfoList.add(opportunisticSubInfo1);
+ activeSubscriptionInfoList.add(opportunisticSubInfo2);
+
+ doReturn(opportunisticInfoList).when(mSubscriptionManager)
+ .getOpportunisticSubscriptions();
+ doReturn(activeSubscriptionInfoList).when(mSubscriptionManager)
+ .getCompleteActiveSubscriptionInfoList();
+
+ mONSProfileSelector = new MyONSProfileSelector(mContext, null);
+ int portIdx = mONSProfileSelector.getAvailableESIMPortIndex();
+
+ /* one of the opportunistic eSIM port should be selected */
+ assertTrue(portIdx == 0 || portIdx == 1);
+ }
+
+ @Test
+ public void testAvailablePortWhenOpportunisticEsimIsActiveAndInactiveSubscriptions() {
+ /**
+ * 1 - Primary active subscription and
+ * 1 - Active opportunistic subscription and
+ * 2 - Inactive opportunistic subscriptions
+ */
+
+ List<SubscriptionInfo> activeSubscriptionInfoList = new ArrayList<SubscriptionInfo>();
+ List<SubscriptionInfo> opportunisticInfoList = new ArrayList<SubscriptionInfo>();
+
+ SubscriptionInfo opportunisticSubInfo1 = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
+ "123", 1, null, "310", "210", "", true, null, "1", 1, true, null, false, 1839, 1,
+ 1, null, null, false, 1);
+ SubscriptionInfo primarySubInfo = new SubscriptionInfo(6, "", 1, "TMO", "TMO", 1, 1,
+ "456", 1, null, "310", "211", "", true, null, "1", 1, false, null, false, 1839, 1,
+ 1, null, null, false, 0);
+
+ SubscriptionInfo opportunisticSubInfo2 = new SubscriptionInfo(7, "", 1, "TMO", "TMO", 1, 1,
+ "789", 1, null, "310", "210", "", true, null, "1", 1, true, null, false, 1839, 1,
+ 1, null, null, false, TelephonyManager.INVALID_PORT_INDEX);
+
+ SubscriptionInfo oppSubInfo3 = new SubscriptionInfo(8, "", 1, "TMO", "TMO", 1, 1,
+ "012", 1, null, "310", "210", "", true, null, "1", 1, true, null, false, 1839, 1,
+ 1, null, null, false, TelephonyManager.INVALID_PORT_INDEX);
+
+ opportunisticInfoList.add(opportunisticSubInfo1);
+ opportunisticInfoList.add(opportunisticSubInfo2);
+ opportunisticInfoList.add(oppSubInfo3);
+ activeSubscriptionInfoList.add(opportunisticSubInfo1);
+ activeSubscriptionInfoList.add(primarySubInfo);
+
+ doReturn(opportunisticInfoList).when(mSubscriptionManager)
+ .getOpportunisticSubscriptions();
+ doReturn(activeSubscriptionInfoList).when(mSubscriptionManager)
+ .getCompleteActiveSubscriptionInfoList();
+
+ mONSProfileSelector = new MyONSProfileSelector(mContext, null);
+ int portIdx = mONSProfileSelector.getAvailableESIMPortIndex();
+ assertEquals(1, portIdx);
+ }
+
+ @Test
+ public void testAvailablePortWhenOnlyInactiveSubscriptions() {
+ /**
+ * 1 - Primary inactive subscription and
+ * 2 - Inactive opportunistic subscriptions
+ */
+
+ List<SubscriptionInfo> activeSubscriptionInfoList = new ArrayList<SubscriptionInfo>();
+ List<SubscriptionInfo> opportunisticInfoList = new ArrayList<SubscriptionInfo>();
+
+ SubscriptionInfo oppSubInfo1 = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
+ "123", 1, null, "310", "210", "", true, null, "1", 1, true, null, false, 1839, 1,
+ 1, null, null, false, TelephonyManager.INVALID_PORT_INDEX);
+
+ // Not used in activeSubscriptionInfoList or opportunisticInfoList
+ /*SubscriptionInfo primarySubInfo = new SubscriptionInfo(6, "", 1, "TMO", "TMO", 1, 1,
+ "456", 1, null, "310", "211", "", true, null, "1", 1, false, null, false, 1839, 1,
+ 1, null, null, false, 2);*/
+
+ SubscriptionInfo oppSubInfo2 = new SubscriptionInfo(7, "", 1, "TMO", "TMO", 1, 1,
+ "789", 1, null, "310", "210", "", true, null, "1", 1, true, null, false, 1839, 1,
+ 1, null, null, false, TelephonyManager.INVALID_PORT_INDEX);
+
+ opportunisticInfoList.add(oppSubInfo1);
+ opportunisticInfoList.add(oppSubInfo2);
+
+ doReturn(opportunisticInfoList).when(mSubscriptionManager)
+ .getOpportunisticSubscriptions();
+ doReturn(activeSubscriptionInfoList).when(mSubscriptionManager)
+ .getCompleteActiveSubscriptionInfoList();
+
+ UiccPortInfo uiccPortInfo1 = new UiccPortInfo("", 0, 0, false);
+ UiccPortInfo uiccPortInfo2 = new UiccPortInfo("", 1, 0, false);
+ ArrayList<UiccPortInfo> uiccPortInfoList = new ArrayList<>();
+ uiccPortInfoList.add(uiccPortInfo1);
+ uiccPortInfoList.add(uiccPortInfo2);
+
+ UiccCardInfo uiccCardInfo = new UiccCardInfo(true, 1, "", 0, false, true, uiccPortInfoList);
+ ArrayList<UiccCardInfo> uiccCardInfoList = new ArrayList<>();
+ uiccCardInfoList.add(uiccCardInfo);
+
+ doReturn(uiccCardInfoList).when(mMockTelephonyManager).getUiccCardsInfo();
+ doReturn(mMockEuiccManager).when(mMockEuiccManager).createForCardId(1);
+ doReturn(true).when(mMockEuiccManager).isSimPortAvailable(0);
+ doReturn(true).when(mMockEuiccManager).isSimPortAvailable(1);
+
+ mONSProfileSelector = new MyONSProfileSelector(mContext, null);
+ mONSProfileSelector.mTelephonyManager = mMockTelephonyManager;
+ mONSProfileSelector.mEuiccManager = mMockEuiccManager;
+
+ int portIdx = mONSProfileSelector.getAvailableESIMPortIndex();
+ assertTrue(portIdx == 0 || portIdx == 1);
}
@Test