Merge changes I0d3c2163,I5602713b,Ica2a26ea into main

* changes:
  Fix PrimarySim show the same sim in the preference list
  Start simOnboarding when active sim > 0
  [SimOnbarding] correct the sim name at the Primary Sim
diff --git a/src/com/android/settings/network/SimOnboardingActivity.kt b/src/com/android/settings/network/SimOnboardingActivity.kt
index abeeb6c..6347d7b 100644
--- a/src/com/android/settings/network/SimOnboardingActivity.kt
+++ b/src/com/android/settings/network/SimOnboardingActivity.kt
@@ -16,7 +16,6 @@
 
 package com.android.settings.network
 
-import android.app.ProgressDialog
 import android.content.Context
 import android.content.Intent
 import android.os.Bundle
@@ -51,7 +50,6 @@
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalLifecycleOwner
 import androidx.compose.ui.res.stringResource
 import androidx.compose.ui.text.style.TextAlign
@@ -59,6 +57,7 @@
 import com.android.settings.R
 import com.android.settings.SidecarFragment
 import com.android.settings.network.telephony.SubscriptionActionDialogActivity
+import com.android.settings.network.telephony.ToggleSubscriptionDialogActivity
 import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
 import com.android.settings.spa.network.SimOnboardingPageProvider.getRoute
 import com.android.settingslib.spa.SpaBaseDialogActivity
@@ -79,7 +78,7 @@
     lateinit var scope: CoroutineScope
     lateinit var showBottomSheet: MutableState<Boolean>
     lateinit var showError: MutableState<Boolean>
-    lateinit var showDialog: MutableState<Boolean>
+    lateinit var showProgressDialog: MutableState<Boolean>
 
     private var switchToEuiccSubscriptionSidecar: SwitchToEuiccSubscriptionSidecar? = null
     private var switchToRemovableSlotSidecar: SwitchToRemovableSlotSidecar? = null
@@ -101,6 +100,16 @@
             return
         }
 
+        if (onboardingService.activeSubInfoList.isEmpty()) {
+            // TODO: refactor and replace the ToggleSubscriptionDialogActivity
+            Log.e(TAG, "onboardingService.activeSubInfoList is empty" +
+                    ", start ToggleSubscriptionDialogActivity")
+            this.startActivity(ToggleSubscriptionDialogActivity
+                    .getIntent(this.applicationContext, targetSubId, true))
+            finish()
+            return
+        }
+
         switchToEuiccSubscriptionSidecar = SwitchToEuiccSubscriptionSidecar.get(fragmentManager)
         switchToRemovableSlotSidecar = SwitchToRemovableSlotSidecar.get(fragmentManager)
         enableMultiSimSidecar = EnableMultiSimSidecar.get(fragmentManager)
@@ -153,7 +162,10 @@
     }
 
     fun setProgressDialog(enable: Boolean) {
-        showDialog.value = enable
+        if (!this::showProgressDialog.isInitialized) {
+            return
+        }
+        showProgressDialog.value = enable
         val progressState = if (enable) {
             SubscriptionActionDialogActivity.PROGRESS_IS_SHOWING
         } else {
@@ -165,9 +177,9 @@
     @OptIn(ExperimentalMaterial3Api::class)
     @Composable
     override fun Content() {
-        showBottomSheet = remember { mutableStateOf(true) }
+        showBottomSheet = remember { mutableStateOf(false) }
         showError = remember { mutableStateOf(false) }
-        showDialog = remember { mutableStateOf(false) }
+        showProgressDialog = remember { mutableStateOf(false) }
         scope = rememberCoroutineScope()
 
         registerSidecarReceiverFlow()
@@ -176,6 +188,11 @@
             // show error
             return
         }
+        LaunchedEffect(Unit) {
+            if (onboardingService.activeSubInfoList.isNotEmpty()) {
+                showBottomSheet.value = true
+            }
+        }
 
         if (showBottomSheet.value) {
             var sheetState = rememberModalBottomSheetState()
@@ -195,7 +212,9 @@
                 },
                 cancelAction = { finish() },
             )
-        } else {
+        }
+
+        if(showProgressDialog.value) {
             ProgressDialogImpl()
         }
     }
@@ -203,34 +222,32 @@
     @OptIn(ExperimentalMaterial3Api::class)
     @Composable
     fun ProgressDialogImpl() {
-        if(showDialog.value) {
-            // TODO: Create the SPA's ProgressDialog and using SPA's widget
-            BasicAlertDialog(
-                onDismissRequest = {},
-                modifier = Modifier.width(
-                    getDialogWidth()
-                ),
+        // TODO: Create the SPA's ProgressDialog and using SPA's widget
+        BasicAlertDialog(
+            onDismissRequest = {},
+            modifier = Modifier.width(
+                getDialogWidth()
+            ),
+        ) {
+            Surface(
+                color = AlertDialogDefaults.containerColor,
+                shape = AlertDialogDefaults.shape
             ) {
-                Surface(
-                    color = AlertDialogDefaults.containerColor,
-                    shape = AlertDialogDefaults.shape
-                ) {
-                    Row(
-                        modifier = Modifier
+                Row(
+                    modifier = Modifier
                             .fillMaxWidth()
                             .padding(SettingsDimension.itemPaddingStart),
-                        verticalAlignment = Alignment.CenterVertically
-                    ) {
-                        CircularProgressIndicator()
-                        Column(modifier = Modifier
-                                .padding(start = SettingsDimension.itemPaddingStart)) {
-                            SettingsTitle(
-                                stringResource(
-                                    R.string.sim_onboarding_progressbar_turning_sim_on,
-                                    onboardingService.targetSubInfo?.displayName ?: ""
-                                )
+                    verticalAlignment = Alignment.CenterVertically
+                ) {
+                    CircularProgressIndicator()
+                    Column(modifier = Modifier
+                            .padding(start = SettingsDimension.itemPaddingStart)) {
+                        SettingsTitle(
+                            stringResource(
+                                R.string.sim_onboarding_progressbar_turning_sim_on,
+                                onboardingService.targetSubInfo?.displayName ?: ""
                             )
-                        }
+                        )
                     }
                 }
             }
diff --git a/src/com/android/settings/network/SimOnboardingService.kt b/src/com/android/settings/network/SimOnboardingService.kt
index f33abf6..5387ad4 100644
--- a/src/com/android/settings/network/SimOnboardingService.kt
+++ b/src/com/android/settings/network/SimOnboardingService.kt
@@ -141,18 +141,16 @@
         subscriptionManager = context.getSystemService(SubscriptionManager::class.java)
         telephonyManager = context.getSystemService(TelephonyManager::class.java)
         Log.d(
-            TAG, "startInit: targetSubId:$targetSubId"
+            TAG, "startInit: targetSubId:$targetSubId, activeSubInfoList: $activeSubInfoList"
         )
+        activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager)
+
         ThreadUtils.postOnBackgroundThread {
-            activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager)
             availableSubInfoList = SubscriptionUtil.getAvailableSubscriptions(context)
             targetSubInfo =
                 availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId }
             targetSubInfo?.let { userSelectedSubInfoList.add(it) }
-            Log.d(
-                TAG, "targetSubId: $targetSubId" + ", targetSubInfo: $targetSubInfo" +
-                    ". activeSubInfoList: $activeSubInfoList"
-            )
+            Log.d(TAG, "targetSubId: $targetSubId , targetSubInfo: $targetSubInfo")
             slotInfoList = telephonyManager?.uiccSlotsInfo?.toList() ?: listOf()
             Log.d(TAG, "slotInfoList: $slotInfoList.")
             uiccCardInfoList = telephonyManager?.uiccCardsInfo!!
@@ -196,6 +194,16 @@
         return userSelectedSubInfoList.toList()
     }
 
+    fun getSelectedSubscriptionInfoListWithRenaming(): List<SubscriptionInfo> {
+        if (userSelectedSubInfoList.isEmpty()){
+            Log.d(TAG, "userSelectedSubInfoList is empty")
+            return activeSubInfoList
+        }
+        return userSelectedSubInfoList.map {
+            SubscriptionInfo.Builder(it).setDisplayName(getSubscriptionInfoDisplayName(it)).build()
+        }.toList()
+    }
+
     fun addItemForRenaming(subInfo: SubscriptionInfo, newName: String) {
         if (subInfo.displayName == newName) {
             return
@@ -211,8 +219,12 @@
         return renameMutableMap[subInfo.subscriptionId] ?: subInfo.displayName.toString()
     }
 
-    fun addCurrentItemForSelectedSim(){
-        userSelectedSubInfoList.addAll(activeSubInfoList)
+    fun addCurrentItemForSelectedSim() {
+        if (userSelectedSubInfoList.size < getActiveModemCount) {
+            userSelectedSubInfoList.addAll(activeSubInfoList)
+            Log.d(TAG, "addCurrentItemForSelectedSim: userSelectedSubInfoList:" +
+                    ", $userSelectedSubInfoList")
+        }
     }
 
     fun addItemForSelectedSim(selectedSubInfo: SubscriptionInfo) {
diff --git a/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt b/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
index c60ac88..cc17f93 100644
--- a/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
+++ b/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
@@ -24,6 +24,7 @@
 import android.util.Log
 import androidx.annotation.VisibleForTesting
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.ui.platform.LocalContext
 import androidx.navigation.NavHostController
 import androidx.navigation.NavType
@@ -101,10 +102,13 @@
     ) {
         composable(route = SimOnboardingScreen.LabelSim.name) {
             val nextPage =
-                if (onboardingService.isMultipleEnabledProfilesSupported && onboardingService.isAllOfSlotAssigned) {
+                if (onboardingService.isMultipleEnabledProfilesSupported
+                            && onboardingService.isAllOfSlotAssigned) {
                     SimOnboardingScreen.SelectSim.name
                 } else {
-                    onboardingService.addCurrentItemForSelectedSim()
+                    LaunchedEffect(Unit) {
+                        onboardingService.addCurrentItemForSelectedSim()
+                    }
                     SimOnboardingScreen.PrimarySim.name
                 }
             SimOnboardingLabelSimImpl(
diff --git a/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt b/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt
index a5f55d0..b984966 100644
--- a/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt
+++ b/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt
@@ -77,7 +77,8 @@
             SettingsBody(stringResource(id = R.string.sim_onboarding_primary_sim_msg))
         }
 
-        var selectedSubscriptionInfoList = onboardingService.getSelectedSubscriptionInfoList()
+        var selectedSubscriptionInfoList =
+                onboardingService.getSelectedSubscriptionInfoListWithRenaming()
         callsSelectedId.intValue = onboardingService.targetPrimarySimCalls
         textsSelectedId.intValue = onboardingService.targetPrimarySimTexts
         mobileDataSelectedId.intValue = onboardingService.targetPrimarySimMobileData