Loading src/com/android/settings/network/SimOnboardingActivity.kt +40 −16 Original line number Diff line number Diff line Loading @@ -22,19 +22,25 @@ import android.content.Intent import android.os.Bundle import android.telephony.SubscriptionManager import android.util.Log import android.view.MotionEvent import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.SignalCellularAlt import androidx.compose.material3.AlertDialogDefaults import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.SheetState import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable Loading @@ -58,6 +64,7 @@ import com.android.settings.spa.network.SimOnboardingPageProvider.getRoute import com.android.settingslib.spa.SpaBaseDialogActivity import com.android.settingslib.spa.framework.theme.SettingsDimension import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spa.widget.dialog.getDialogWidth import com.android.settingslib.spa.widget.ui.SettingsTitle import com.android.settingslib.spaprivileged.framework.common.userManager import kotlinx.coroutines.CoroutineScope Loading Loading @@ -193,26 +200,43 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun ProgressDialogImpl() { // TODO: 1. Create the SPA's ProgressDialog and using SPA's widget val dialog: ProgressDialog = object : ProgressDialog(this) { override fun onTouchEvent(event: MotionEvent): Boolean { return true } } dialog.setMessage( if(showDialog.value) { // TODO: Create the SPA's ProgressDialog and using SPA's widget BasicAlertDialog( onDismissRequest = {}, modifier = Modifier.width( getDialogWidth() ), ) { Surface( color = AlertDialogDefaults.containerColor, shape = AlertDialogDefaults.shape ) { 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 ?: "" ) ) dialog.setCancelable(false) if(showDialog.value) { dialog.show() } } } } } } @Composable fun registerSidecarReceiverFlow(){ switchToEuiccSubscriptionSidecar?.sidecarReceiverFlow() Loading src/com/android/settings/network/SimOnboardingService.kt +20 −15 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ class SimOnboardingService { var activeSubInfoList: List<SubscriptionInfo> = listOf() var slotInfoList: List<UiccSlotInfo> = listOf() var uiccCardInfoList: List<UiccCardInfo> = listOf() var selectedSubInfoList: MutableList<SubscriptionInfo> = mutableListOf() var targetPrimarySimCalls: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimTexts: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimMobileData: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID Loading @@ -56,10 +55,8 @@ class SimOnboardingService { Log.w(TAG, "No DDS") return SubscriptionManager.INVALID_SUBSCRIPTION_ID } return selectedSubInfoList .filter { info -> (info.simSlotIndex != -1) && (info.subscriptionId != targetPrimarySimMobileData) } return userSelectedSubInfoList .filter { info -> info.subscriptionId != targetPrimarySimMobileData } .map { it.subscriptionId } .firstOrNull() ?: SubscriptionManager.INVALID_SUBSCRIPTION_ID } Loading Loading @@ -118,7 +115,6 @@ class SimOnboardingService { && targetSubInfo != null && activeSubInfoList.isNotEmpty() && slotInfoList.isNotEmpty() && selectedSubInfoList.isNotEmpty() } fun clear() { Loading @@ -128,7 +124,6 @@ class SimOnboardingService { activeSubInfoList = listOf() slotInfoList = listOf() uiccCardInfoList = listOf() selectedSubInfoList = mutableListOf() targetPrimarySimCalls = -1 targetPrimarySimTexts = -1 targetPrimarySimMobileData = -1 Loading @@ -151,7 +146,8 @@ class SimOnboardingService { ThreadUtils.postOnBackgroundThread { activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager) availableSubInfoList = SubscriptionUtil.getAvailableSubscriptions(context) targetSubInfo = availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId } targetSubInfo = availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId } targetSubInfo?.let { userSelectedSubInfoList.add(it) } Log.d( TAG, "targetSubId: $targetSubId" + ", targetSubInfo: $targetSubInfo" + Loading Loading @@ -186,7 +182,6 @@ class SimOnboardingService { targetSubInfo?.let { list.add(it) } } Log.d(TAG, "list: $list") return list.toList() } Loading @@ -206,7 +201,10 @@ class SimOnboardingService { return } renameMutableMap[subInfo.subscriptionId] = newName Log.d(TAG, "renameMutableMap add ${subInfo.subscriptionId} & $newName into: $renameMutableMap") Log.d( TAG, "renameMutableMap add ${subInfo.subscriptionId} & $newName into: $renameMutableMap" ) } fun getSubscriptionInfoDisplayName(subInfo: SubscriptionInfo): String { Loading Loading @@ -278,11 +276,18 @@ class SimOnboardingService { targetPrimarySimMobileData ) var nonDds = targetNonDds Log.d( TAG, "setAutomaticData: targetNonDds: $nonDds," + " targetPrimarySimAutoDataSwitch: $targetPrimarySimAutoDataSwitch" ) if (nonDds != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { val telephonyManagerForNonDds: TelephonyManager? = context.getSystemService(TelephonyManager::class.java) ?.createForSubscriptionId(targetNonDds) ?.createForSubscriptionId(nonDds) setAutomaticData(telephonyManagerForNonDds, targetPrimarySimAutoDataSwitch) } // no next action, send finish callback(SimOnboardingActivity.CALLBACK_FINISH) Loading tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingLabelSimTest.kt +0 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ class SimOnboardingLabelSimTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) Loading tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPageProviderTest.kt +0 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ class SimOnboardingPageProviderTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) Loading tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPrimarySimTest.kt +0 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,6 @@ class SimOnboardingPrimarySimTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) Loading Loading
src/com/android/settings/network/SimOnboardingActivity.kt +40 −16 Original line number Diff line number Diff line Loading @@ -22,19 +22,25 @@ import android.content.Intent import android.os.Bundle import android.telephony.SubscriptionManager import android.util.Log import android.view.MotionEvent import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.SignalCellularAlt import androidx.compose.material3.AlertDialogDefaults import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.SheetState import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable Loading @@ -58,6 +64,7 @@ import com.android.settings.spa.network.SimOnboardingPageProvider.getRoute import com.android.settingslib.spa.SpaBaseDialogActivity import com.android.settingslib.spa.framework.theme.SettingsDimension import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spa.widget.dialog.getDialogWidth import com.android.settingslib.spa.widget.ui.SettingsTitle import com.android.settingslib.spaprivileged.framework.common.userManager import kotlinx.coroutines.CoroutineScope Loading Loading @@ -193,26 +200,43 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun ProgressDialogImpl() { // TODO: 1. Create the SPA's ProgressDialog and using SPA's widget val dialog: ProgressDialog = object : ProgressDialog(this) { override fun onTouchEvent(event: MotionEvent): Boolean { return true } } dialog.setMessage( if(showDialog.value) { // TODO: Create the SPA's ProgressDialog and using SPA's widget BasicAlertDialog( onDismissRequest = {}, modifier = Modifier.width( getDialogWidth() ), ) { Surface( color = AlertDialogDefaults.containerColor, shape = AlertDialogDefaults.shape ) { 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 ?: "" ) ) dialog.setCancelable(false) if(showDialog.value) { dialog.show() } } } } } } @Composable fun registerSidecarReceiverFlow(){ switchToEuiccSubscriptionSidecar?.sidecarReceiverFlow() Loading
src/com/android/settings/network/SimOnboardingService.kt +20 −15 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ class SimOnboardingService { var activeSubInfoList: List<SubscriptionInfo> = listOf() var slotInfoList: List<UiccSlotInfo> = listOf() var uiccCardInfoList: List<UiccCardInfo> = listOf() var selectedSubInfoList: MutableList<SubscriptionInfo> = mutableListOf() var targetPrimarySimCalls: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimTexts: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimMobileData: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID Loading @@ -56,10 +55,8 @@ class SimOnboardingService { Log.w(TAG, "No DDS") return SubscriptionManager.INVALID_SUBSCRIPTION_ID } return selectedSubInfoList .filter { info -> (info.simSlotIndex != -1) && (info.subscriptionId != targetPrimarySimMobileData) } return userSelectedSubInfoList .filter { info -> info.subscriptionId != targetPrimarySimMobileData } .map { it.subscriptionId } .firstOrNull() ?: SubscriptionManager.INVALID_SUBSCRIPTION_ID } Loading Loading @@ -118,7 +115,6 @@ class SimOnboardingService { && targetSubInfo != null && activeSubInfoList.isNotEmpty() && slotInfoList.isNotEmpty() && selectedSubInfoList.isNotEmpty() } fun clear() { Loading @@ -128,7 +124,6 @@ class SimOnboardingService { activeSubInfoList = listOf() slotInfoList = listOf() uiccCardInfoList = listOf() selectedSubInfoList = mutableListOf() targetPrimarySimCalls = -1 targetPrimarySimTexts = -1 targetPrimarySimMobileData = -1 Loading @@ -151,7 +146,8 @@ class SimOnboardingService { ThreadUtils.postOnBackgroundThread { activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager) availableSubInfoList = SubscriptionUtil.getAvailableSubscriptions(context) targetSubInfo = availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId } targetSubInfo = availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId } targetSubInfo?.let { userSelectedSubInfoList.add(it) } Log.d( TAG, "targetSubId: $targetSubId" + ", targetSubInfo: $targetSubInfo" + Loading Loading @@ -186,7 +182,6 @@ class SimOnboardingService { targetSubInfo?.let { list.add(it) } } Log.d(TAG, "list: $list") return list.toList() } Loading @@ -206,7 +201,10 @@ class SimOnboardingService { return } renameMutableMap[subInfo.subscriptionId] = newName Log.d(TAG, "renameMutableMap add ${subInfo.subscriptionId} & $newName into: $renameMutableMap") Log.d( TAG, "renameMutableMap add ${subInfo.subscriptionId} & $newName into: $renameMutableMap" ) } fun getSubscriptionInfoDisplayName(subInfo: SubscriptionInfo): String { Loading Loading @@ -278,11 +276,18 @@ class SimOnboardingService { targetPrimarySimMobileData ) var nonDds = targetNonDds Log.d( TAG, "setAutomaticData: targetNonDds: $nonDds," + " targetPrimarySimAutoDataSwitch: $targetPrimarySimAutoDataSwitch" ) if (nonDds != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { val telephonyManagerForNonDds: TelephonyManager? = context.getSystemService(TelephonyManager::class.java) ?.createForSubscriptionId(targetNonDds) ?.createForSubscriptionId(nonDds) setAutomaticData(telephonyManagerForNonDds, targetPrimarySimAutoDataSwitch) } // no next action, send finish callback(SimOnboardingActivity.CALLBACK_FINISH) Loading
tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingLabelSimTest.kt +0 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ class SimOnboardingLabelSimTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) Loading
tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPageProviderTest.kt +0 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ class SimOnboardingPageProviderTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) Loading
tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPrimarySimTest.kt +0 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,6 @@ class SimOnboardingPrimarySimTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) Loading