Add the error dialogs

When system activate the sim faild, then it shows the error dialog

Bug: 318310357
Bug: 298898436
Bug: 298891941
Test: manual test, verify the error dialog UI
Change-Id: I90d7aa5d3f3ad36d949a505377466f8cdf63b6b4
This commit is contained in:
songferngwang
2024-02-29 09:12:03 +00:00
committed by SongFerng Wang
parent c59c3a3d4f
commit a9695c40e7
3 changed files with 100 additions and 33 deletions

View File

@@ -45,6 +45,7 @@ import androidx.compose.material3.rememberModalBottomSheetState
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.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.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 @@ import kotlinx.coroutines.launch
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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
}
}
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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
@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
@@ -250,6 +251,56 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
}
}
@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()
@@ -317,13 +368,14 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
}
Log.i(TAG, "DSDS enabled, start to enable pSIM profile.")
onboardingService.handleTogglePsimAction()
callbackListener(CALLBACK_FINISH)
callbackListener(CallbackType.CALLBACK_FINISH)
}
@Composable
@@ -439,7 +493,7 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
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 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
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)
}
}
}