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:
committed by
SongFerng Wang
parent
c59c3a3d4f
commit
a9695c40e7
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@@ -23,6 +23,7 @@ import android.telephony.TelephonyManager
|
||||
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 com.android.settingslib.utils.ThreadUtils
|
||||
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 @@ class SimOnboardingService {
|
||||
.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 @@ class SimOnboardingService {
|
||||
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 @@ class SimOnboardingService {
|
||||
|
||||
fun startActivatingSim(){
|
||||
// TODO: start to activate sim
|
||||
callback(SimOnboardingActivity.CALLBACK_FINISH)
|
||||
callback(CallbackType.CALLBACK_FINISH)
|
||||
}
|
||||
|
||||
suspend fun startSetupName() {
|
||||
@@ -273,7 +275,7 @@ class SimOnboardingService {
|
||||
)
|
||||
}
|
||||
// next action is SETUP_PRIMARY_SIM
|
||||
callback(SimOnboardingActivity.CALLBACK_SETUP_PRIMARY_SIM)
|
||||
callback(CallbackType.CALLBACK_SETUP_PRIMARY_SIM)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,7 +304,7 @@ class SimOnboardingService {
|
||||
}
|
||||
|
||||
// no next action, send finish
|
||||
callback(SimOnboardingActivity.CALLBACK_FINISH)
|
||||
callback(CallbackType.CALLBACK_FINISH)
|
||||
}
|
||||
}
|
||||
}
|
@@ -34,6 +34,7 @@ import androidx.navigation.compose.rememberNavController
|
||||
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 @@ fun PageImpl(onboardingService:SimOnboardingService,navHostController: NavHostCo
|
||||
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 @@ fun PageImpl(onboardingService:SimOnboardingService,navHostController: NavHostCo
|
||||
composable(route = SimOnboardingScreen.PrimarySim.name) {
|
||||
SimOnboardingPrimarySimImpl(
|
||||
nextAction = {
|
||||
onboardingService.callback(SimOnboardingActivity.CALLBACK_ONBOARDING_COMPLETE)
|
||||
onboardingService.callback(CallbackType.CALLBACK_ONBOARDING_COMPLETE)
|
||||
context.getActivity()?.finish()
|
||||
},
|
||||
cancelAction = finishOnboarding,
|
||||
|
Reference in New Issue
Block a user