[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