diff --git a/src/com/android/settings/network/SimOnboardingActivity.kt b/src/com/android/settings/network/SimOnboardingActivity.kt index abeeb6c733a..6347d7b62f4 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.remember 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 androidx.compose.ui.text.style.TextOverflow 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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { lateinit var scope: CoroutineScope lateinit var showBottomSheet: MutableState lateinit var showError: MutableState - lateinit var showDialog: MutableState + lateinit var showProgressDialog: MutableState private var switchToEuiccSubscriptionSidecar: SwitchToEuiccSubscriptionSidecar? = null private var switchToRemovableSlotSidecar: SwitchToRemovableSlotSidecar? = null @@ -101,6 +100,16 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { 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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { } 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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { @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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { // show error return } + LaunchedEffect(Unit) { + if (onboardingService.activeSubInfoList.isNotEmpty()) { + showBottomSheet.value = true + } + } if (showBottomSheet.value) { var sheetState = rememberModalBottomSheetState() @@ -195,7 +212,9 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { }, cancelAction = { finish() }, ) - } else { + } + + if(showProgressDialog.value) { ProgressDialogImpl() } } @@ -203,34 +222,32 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { @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 f33abf67b64..5387ad45d8d 100644 --- a/src/com/android/settings/network/SimOnboardingService.kt +++ b/src/com/android/settings/network/SimOnboardingService.kt @@ -141,18 +141,16 @@ class SimOnboardingService { 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 @@ class SimOnboardingService { return userSelectedSubInfoList.toList() } + fun getSelectedSubscriptionInfoListWithRenaming(): List { + 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 @@ class SimOnboardingService { 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 c60ac883637..cc17f93e424 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.os.Bundle 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 @@ fun PageImpl(onboardingService:SimOnboardingService,navHostController: NavHostCo ) { 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 a5f55d09ff5..b9849666e53 100644 --- a/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt +++ b/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt @@ -77,7 +77,8 @@ fun SimOnboardingPrimarySimImpl( 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