Merge "Add the error dialogs" into main
diff --git a/src/com/android/settings/network/SimOnboardingActivity.kt b/src/com/android/settings/network/SimOnboardingActivity.kt
index 1b71161..98bb5d7 100644
--- a/src/com/android/settings/network/SimOnboardingActivity.kt
+++ b/src/com/android/settings/network/SimOnboardingActivity.kt
@@ -45,6 +45,7 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@@ -63,7 +64,10 @@
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.AlertDialogButton
import com.android.settingslib.spa.widget.dialog.getDialogWidth
+import com.android.settingslib.spa.widget.dialog.rememberAlertDialogPresenter
+import com.android.settingslib.spa.widget.editor.SettingsOutlinedTextField
import com.android.settingslib.spa.widget.ui.SettingsTitle
import com.android.settingslib.spaprivileged.framework.common.userManager
import kotlinx.coroutines.CoroutineScope
@@ -77,7 +81,7 @@
class SimOnboardingActivity : SpaBaseDialogActivity() {
lateinit var scope: CoroutineScope
lateinit var showBottomSheet: MutableState<Boolean>
- lateinit var showError: MutableState<Boolean>
+ lateinit var showError: MutableState<ErrorType>
lateinit var showProgressDialog: MutableState<Boolean>
private var switchToEuiccSubscriptionSidecar: SwitchToEuiccSubscriptionSidecar? = null
@@ -121,15 +125,14 @@
super.finish()
}
- var callbackListener: (Int) -> Unit = {
+ var callbackListener: (CallbackType) -> Unit = {
Log.d(TAG, "Receive the CALLBACK: $it")
when (it) {
- CALLBACK_ERROR -> {
+ CallbackType.CALLBACK_ERROR -> {
setProgressDialog(false)
- showError.value = true
}
- CALLBACK_ONBOARDING_COMPLETE -> {
+ CallbackType.CALLBACK_ONBOARDING_COMPLETE -> {
showBottomSheet.value = false
setProgressDialog(true)
scope.launch {
@@ -139,19 +142,19 @@
}
}
- CALLBACK_SETUP_NAME -> {
+ CallbackType.CALLBACK_SETUP_NAME -> {
scope.launch {
onboardingService.startSetupName()
}
}
- CALLBACK_SETUP_PRIMARY_SIM -> {
+ CallbackType.CALLBACK_SETUP_PRIMARY_SIM -> {
scope.launch {
onboardingService.startSetupPrimarySim(this@SimOnboardingActivity)
}
}
- CALLBACK_FINISH -> {
+ CallbackType.CALLBACK_FINISH -> {
finish()
}
}
@@ -174,16 +177,14 @@
@Composable
override fun Content() {
showBottomSheet = remember { mutableStateOf(false) }
- showError = remember { mutableStateOf(false) }
+ showError = remember { mutableStateOf(ErrorType.ERROR_NONE) }
showProgressDialog = remember { mutableStateOf(false) }
scope = rememberCoroutineScope()
registerSidecarReceiverFlow()
- if(showError.value){
- // show error
- return
- }
+ ErrorDialogImpl()
+
LaunchedEffect(Unit) {
if (onboardingService.activeSubInfoList.isNotEmpty()) {
showBottomSheet.value = true
@@ -251,6 +252,56 @@
}
@Composable
+ fun ErrorDialogImpl(){
+ // EuiccSlotSidecar showErrorDialog
+ val errorDialogPresenterForEuiccSlotSidecar = rememberAlertDialogPresenter(
+ confirmButton = AlertDialogButton(
+ stringResource(android.R.string.ok)
+ ) {
+ finish()
+ },
+ title = stringResource(R.string.privileged_action_disable_fail_title),
+ text = {
+ Text(stringResource(R.string.privileged_action_disable_fail_text))
+ },
+ )
+
+ // RemovableSlotSidecar showErrorDialog
+ val errorDialogPresenterForRemovableSlotSidecar = rememberAlertDialogPresenter(
+ confirmButton = AlertDialogButton(
+ stringResource(android.R.string.ok)
+ ) {
+ finish()
+ },
+ title = stringResource(R.string.sim_action_enable_sim_fail_title),
+ text = {
+ Text(stringResource(R.string.sim_action_enable_sim_fail_text))
+ },
+ )
+
+ // enableDSDS showErrorDialog
+ val errorDialogPresenterForMultiSimSidecar = rememberAlertDialogPresenter(
+ confirmButton = AlertDialogButton(
+ stringResource(android.R.string.ok)
+ ) {
+ finish()
+ },
+ title = stringResource(R.string.dsds_activation_failure_title),
+ text = {
+ Text(stringResource(R.string.dsds_activation_failure_body_msg2))
+ },
+ )
+
+ // show error
+ when (showError.value) {
+ ErrorType.ERROR_EUICC_SLOT -> errorDialogPresenterForEuiccSlotSidecar.open()
+ ErrorType.ERROR_REMOVABLE_SLOT -> errorDialogPresenterForRemovableSlotSidecar.open()
+ ErrorType.ERROR_ENABLE_DSDS -> errorDialogPresenterForMultiSimSidecar.open()
+ else -> {}
+ }
+ }
+
+ @Composable
fun registerSidecarReceiverFlow(){
switchToEuiccSubscriptionSidecar?.sidecarReceiverFlow()
?.collectLatestWithLifecycle(LocalLifecycleOwner.current) {
@@ -317,13 +368,14 @@
SidecarFragment.State.SUCCESS -> {
Log.i(TAG, "Successfully enable the eSIM profile.")
switchToEuiccSubscriptionSidecar!!.reset()
- callbackListener(CALLBACK_SETUP_NAME)
+ callbackListener(CallbackType.CALLBACK_SETUP_NAME)
}
SidecarFragment.State.ERROR -> {
Log.i(TAG, "Failed to enable the eSIM profile.")
switchToEuiccSubscriptionSidecar!!.reset()
- callbackListener(CALLBACK_ERROR)
+ showError.value = ErrorType.ERROR_EUICC_SLOT
+ callbackListener(CallbackType.CALLBACK_ERROR)
// TODO: showErrorDialog and using privileged_action_disable_fail_title and
// privileged_action_disable_fail_text
}
@@ -336,13 +388,14 @@
Log.i(TAG, "Successfully switched to removable slot.")
switchToRemovableSlotSidecar!!.reset()
onboardingService.handleTogglePsimAction()
- callbackListener(CALLBACK_SETUP_NAME)
+ callbackListener(CallbackType.CALLBACK_SETUP_NAME)
}
SidecarFragment.State.ERROR -> {
Log.e(TAG, "Failed switching to removable slot.")
switchToRemovableSlotSidecar!!.reset()
- callbackListener(CALLBACK_ERROR)
+ showError.value = ErrorType.ERROR_REMOVABLE_SLOT
+ callbackListener(CallbackType.CALLBACK_ERROR)
// TODO: showErrorDialog and using sim_action_enable_sim_fail_title and
// sim_action_enable_sim_fail_text
}
@@ -360,7 +413,8 @@
SidecarFragment.State.ERROR -> {
enableMultiSimSidecar!!.reset()
Log.i(TAG, "Failed to switch to DSDS without rebooting.")
- callbackListener(CALLBACK_ERROR)
+ showError.value = ErrorType.ERROR_ENABLE_DSDS
+ callbackListener(CallbackType.CALLBACK_ERROR)
// TODO: showErrorDialog and using dsds_activation_failure_title and
// dsds_activation_failure_body_msg2
}
@@ -383,7 +437,7 @@
}
Log.i(TAG, "DSDS enabled, start to enable pSIM profile.")
onboardingService.handleTogglePsimAction()
- callbackListener(CALLBACK_FINISH)
+ callbackListener(CallbackType.CALLBACK_FINISH)
}
@Composable
@@ -439,7 +493,7 @@
Log.i(TAG, "setProgressState:$state")
}
- fun initServiceData(context: Context,targetSubId: Int, callback:(Int)->Unit) {
+ fun initServiceData(context: Context,targetSubId: Int, callback:(CallbackType)->Unit) {
onboardingService.initData(targetSubId, context,callback)
}
@@ -458,10 +512,20 @@
var onboardingService:SimOnboardingService = SimOnboardingService()
const val TAG = "SimOnboardingActivity"
const val SUB_ID = "sub_id"
- const val CALLBACK_ERROR = -1
- const val CALLBACK_ONBOARDING_COMPLETE = 1
- const val CALLBACK_SETUP_NAME = 2
- const val CALLBACK_SETUP_PRIMARY_SIM = 3
- const val CALLBACK_FINISH = 4
+
+ enum class ErrorType(val value:Int){
+ ERROR_NONE(-1),
+ ERROR_EUICC_SLOT(1),
+ ERROR_REMOVABLE_SLOT(2),
+ ERROR_ENABLE_DSDS(3)
+ }
+
+ enum class CallbackType(val value:Int){
+ CALLBACK_ERROR(-1),
+ CALLBACK_ONBOARDING_COMPLETE(1),
+ CALLBACK_SETUP_NAME(2),
+ CALLBACK_SETUP_PRIMARY_SIM(3),
+ CALLBACK_FINISH(4)
+ }
}
}
\ No newline at end of file
diff --git a/src/com/android/settings/network/SimOnboardingService.kt b/src/com/android/settings/network/SimOnboardingService.kt
index 5387ad4..962741f 100644
--- a/src/com/android/settings/network/SimOnboardingService.kt
+++ b/src/com/android/settings/network/SimOnboardingService.kt
@@ -23,6 +23,7 @@
import android.telephony.UiccCardInfo
import android.telephony.UiccSlotInfo
import android.util.Log
+import com.android.settings.network.SimOnboardingActivity.Companion.CallbackType
import com.android.settings.spa.network.setAutomaticData
import com.android.settings.spa.network.setDefaultData
import com.android.settings.spa.network.setDefaultSms
@@ -31,7 +32,6 @@
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
-
private const val TAG = "SimOnboardingService"
private const val INVALID = SubscriptionManager.INVALID_SUBSCRIPTION_ID
@@ -60,7 +60,7 @@
.map { it.subscriptionId }
.firstOrNull() ?: SubscriptionManager.INVALID_SUBSCRIPTION_ID
}
- var callback: (Int) -> Unit = {}
+ var callback: (CallbackType) -> Unit = {}
var isMultipleEnabledProfilesSupported: Boolean = false
get() {
@@ -135,7 +135,9 @@
userSelectedSubInfoList.clear()
}
- fun initData(inputTargetSubId:Int,context: Context, callback: (Int) -> Unit) {
+ fun initData(inputTargetSubId: Int,
+ context: Context,
+ callback: (CallbackType) -> Unit) {
this.callback = callback
targetSubId = inputTargetSubId
subscriptionManager = context.getSystemService(SubscriptionManager::class.java)
@@ -261,7 +263,7 @@
fun startActivatingSim(){
// TODO: start to activate sim
- callback(SimOnboardingActivity.CALLBACK_FINISH)
+ callback(CallbackType.CALLBACK_FINISH)
}
suspend fun startSetupName() {
@@ -273,7 +275,7 @@
)
}
// next action is SETUP_PRIMARY_SIM
- callback(SimOnboardingActivity.CALLBACK_SETUP_PRIMARY_SIM)
+ callback(CallbackType.CALLBACK_SETUP_PRIMARY_SIM)
}
}
@@ -302,7 +304,7 @@
}
// no next action, send finish
- callback(SimOnboardingActivity.CALLBACK_FINISH)
+ callback(CallbackType.CALLBACK_FINISH)
}
}
}
\ No newline at end of file
diff --git a/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt b/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
index cc17f93..838154f 100644
--- a/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
+++ b/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
@@ -34,6 +34,7 @@
import androidx.navigation.navArgument
import com.android.settings.R
import com.android.settings.network.SimOnboardingActivity
+import com.android.settings.network.SimOnboardingActivity.Companion.CallbackType
import com.android.settings.network.SimOnboardingService
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import com.android.settingslib.spa.framework.common.SettingsPageProvider
@@ -93,7 +94,7 @@
val context = LocalContext.current
var finishOnboarding: () -> Unit = {
context.getActivity()?.finish()
- onboardingService.callback(SimOnboardingActivity.CALLBACK_FINISH)
+ onboardingService.callback(CallbackType.CALLBACK_FINISH)
}
NavHost(
@@ -120,7 +121,7 @@
composable(route = SimOnboardingScreen.PrimarySim.name) {
SimOnboardingPrimarySimImpl(
nextAction = {
- onboardingService.callback(SimOnboardingActivity.CALLBACK_ONBOARDING_COMPLETE)
+ onboardingService.callback(CallbackType.CALLBACK_ONBOARDING_COMPLETE)
context.getActivity()?.finish()
},
cancelAction = finishOnboarding,