[Settings] eSIM existance detection rule change
1. eSIM retrieved from SubscriptionManager#getAvailableSubscriptionInfoList()
should be considered as existed all the time.
2. When SIM are both inactive(or active), sorted the ordering based on ordering provided by telephony framework.
Bug: 195090132
Bug: 195091953
Test: local
Change-Id: I2fe43a35e5b7965bde3b579e2297e9cdd89ec228
(cherry picked from commit 848d097b94c0adb73d88db14e46e5f103fe8b9d1)
(cherry picked from commit 824deb0ee3727f23ab68a75176825c4c73f482a9)
(cherry picked from commit 9ff7a65ff909cc478d0bd0fee9e4c90f34254475)
diff --git a/src/com/android/settings/network/helper/SubscriptionAnnotation.java b/src/com/android/settings/network/helper/SubscriptionAnnotation.java
index 29d4fb5..79fbf68 100644
--- a/src/com/android/settings/network/helper/SubscriptionAnnotation.java
+++ b/src/com/android/settings/network/helper/SubscriptionAnnotation.java
@@ -90,16 +90,15 @@
mOrderWithinList = subInfoIndex;
mType = mSubInfo.isEmbedded() ? TYPE_ESIM : TYPE_PSIM;
+ mIsExisted = true;
if (mType == TYPE_ESIM) {
int cardId = mSubInfo.getCardId();
- mIsExisted = eSimCardId.contains(cardId);
mIsActive = activeSimSlotIndexList.contains(mSubInfo.getSimSlotIndex());
mIsAllowToDisplay = (cardId < 0) // always allow when eSIM not in slot
|| isDisplayAllowed(context);
return;
}
- mIsExisted = true;
mIsActive = (mSubInfo.getSimSlotIndex() > SubscriptionManager.INVALID_SIM_SLOT_INDEX)
&& activeSimSlotIndexList.contains(mSubInfo.getSimSlotIndex());
mIsAllowToDisplay = isDisplayAllowed(context);
diff --git a/src/com/android/settings/network/helper/SubscriptionGrouping.java b/src/com/android/settings/network/helper/SubscriptionGrouping.java
index cfb5ea9..c4e0fd7 100644
--- a/src/com/android/settings/network/helper/SubscriptionGrouping.java
+++ b/src/com/android/settings/network/helper/SubscriptionGrouping.java
@@ -16,6 +16,7 @@
package com.android.settings.network.helper;
import android.os.ParcelUuid;
+import android.util.Log;
import androidx.annotation.Keep;
import androidx.annotation.VisibleForTesting;
@@ -44,9 +45,12 @@
*/
public class SubscriptionGrouping
implements UnaryOperator<List<SubscriptionAnnotation>> {
+ private static final String LOG_TAG = "SubscriptionGrouping";
// implementation of UnaryOperator
public List<SubscriptionAnnotation> apply(List<SubscriptionAnnotation> listOfSubscriptions) {
+ Log.d(LOG_TAG, "Grouping " + listOfSubscriptions);
+
// group by GUID
Map<ParcelUuid, List<SubscriptionAnnotation>> groupedSubInfoList =
listOfSubscriptions.stream()
@@ -89,8 +93,8 @@
annoSelector = annoSelector
// eSIM in front of pSIM
.thenComparingInt(anno -> -anno.getType())
- // subscription ID in reverse order
- .thenComparingInt(anno -> -anno.getSubscriptionId());
+ // maintain the ordering given within constructor
+ .thenComparingInt(anno -> annoList.indexOf(anno));
return annoList.stream().sorted(annoSelector).findFirst().orElse(null);
}
}
diff --git a/tests/unit/src/com/android/settings/network/helper/SubscriptionGroupingTest.java b/tests/unit/src/com/android/settings/network/helper/SubscriptionGroupingTest.java
index 97bdb74..bea7209 100644
--- a/tests/unit/src/com/android/settings/network/helper/SubscriptionGroupingTest.java
+++ b/tests/unit/src/com/android/settings/network/helper/SubscriptionGroupingTest.java
@@ -68,7 +68,7 @@
List<SubscriptionAnnotation> result = mTarget
.apply(Arrays.asList(subAnno2, subAnno1, subAnno3));
assertThat(result.size()).isEqualTo(1);
- assertThat(result.get(0)).isEqualTo(subAnno3);
+ assertThat(result.get(0)).isEqualTo(subAnno1);
}
@Test