Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 975e7616 authored by SongFerng Wang's avatar SongFerng Wang Committed by Android (Google) Code Review
Browse files

Merge "Add the error dialogs" into main

parents af5bbc50 a9695c40
Loading
Loading
Loading
Loading
+89 −25
Original line number Diff line number Diff line
@@ -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)
        }
    }
}
 No newline at end of file
+8 −6
Original line number Diff line number Diff line
@@ -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)
        }
    }
}
 No newline at end of file
+3 −2
Original line number Diff line number Diff line
@@ -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,