Add the timer for waiting sim ready
When the sim onboarding setup the primary sim, the psim is not ready. Bug: 346623465 Test: verified this case. Change-Id: Ide5a5de4f19deb7de6dd093df4dd267329b82046
This commit is contained in:
committed by
SongFerng Wang
parent
b3aae5aaf1
commit
d73f0e3c77
@@ -19,6 +19,7 @@ package com.android.settings.network
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.provider.Settings
|
||||||
import android.telephony.SubscriptionManager
|
import android.telephony.SubscriptionManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
@@ -41,7 +42,6 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@@ -54,7 +54,9 @@ import androidx.lifecycle.LifecycleRegistry
|
|||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
import com.android.settings.SidecarFragment
|
import com.android.settings.SidecarFragment
|
||||||
import com.android.settings.network.telephony.SubscriptionActionDialogActivity
|
import com.android.settings.network.telephony.SubscriptionActionDialogActivity
|
||||||
|
import com.android.settings.network.telephony.SubscriptionRepository
|
||||||
import com.android.settings.network.telephony.ToggleSubscriptionDialogActivity
|
import com.android.settings.network.telephony.ToggleSubscriptionDialogActivity
|
||||||
|
import com.android.settings.network.telephony.requireSubscriptionManager
|
||||||
import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
|
import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
|
||||||
import com.android.settings.spa.network.SimOnboardingPageProvider.getRoute
|
import com.android.settings.spa.network.SimOnboardingPageProvider.getRoute
|
||||||
import com.android.settings.wifi.WifiPickerTrackerHelper
|
import com.android.settings.wifi.WifiPickerTrackerHelper
|
||||||
@@ -67,13 +69,17 @@ import com.android.settingslib.spa.widget.dialog.getDialogWidth
|
|||||||
import com.android.settingslib.spa.widget.dialog.rememberAlertDialogPresenter
|
import com.android.settingslib.spa.widget.dialog.rememberAlertDialogPresenter
|
||||||
import com.android.settingslib.spa.widget.ui.SettingsTitle
|
import com.android.settingslib.spa.widget.ui.SettingsTitle
|
||||||
import com.android.settingslib.spaprivileged.framework.common.userManager
|
import com.android.settingslib.spaprivileged.framework.common.userManager
|
||||||
|
import java.util.concurrent.CountDownLatch
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.callbackFlow
|
import kotlinx.coroutines.flow.callbackFlow
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import kotlinx.coroutines.flow.conflate
|
import kotlinx.coroutines.flow.conflate
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
class SimOnboardingActivity : SpaBaseDialogActivity() {
|
class SimOnboardingActivity : SpaBaseDialogActivity() {
|
||||||
lateinit var scope: CoroutineScope
|
lateinit var scope: CoroutineScope
|
||||||
@@ -441,7 +447,9 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
|
|||||||
SidecarFragment.State.SUCCESS -> {
|
SidecarFragment.State.SUCCESS -> {
|
||||||
Log.i(TAG, "Successfully enable the eSIM profile.")
|
Log.i(TAG, "Successfully enable the eSIM profile.")
|
||||||
switchToEuiccSubscriptionSidecar!!.reset()
|
switchToEuiccSubscriptionSidecar!!.reset()
|
||||||
callbackListener(CallbackType.CALLBACK_SETUP_NAME)
|
scope.launch {
|
||||||
|
checkSimIsReadyAndGoNext()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SidecarFragment.State.ERROR -> {
|
SidecarFragment.State.ERROR -> {
|
||||||
@@ -459,7 +467,9 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
|
|||||||
Log.i(TAG, "Successfully switched to removable slot.")
|
Log.i(TAG, "Successfully switched to removable slot.")
|
||||||
switchToRemovableSlotSidecar!!.reset()
|
switchToRemovableSlotSidecar!!.reset()
|
||||||
onboardingService.handleTogglePsimAction()
|
onboardingService.handleTogglePsimAction()
|
||||||
callbackListener(CallbackType.CALLBACK_SETUP_NAME)
|
scope.launch {
|
||||||
|
checkSimIsReadyAndGoNext()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SidecarFragment.State.ERROR -> {
|
SidecarFragment.State.ERROR -> {
|
||||||
@@ -491,6 +501,35 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun checkSimIsReadyAndGoNext() {
|
||||||
|
withContext(Dispatchers.Default) {
|
||||||
|
val isEnabled = context.requireSubscriptionManager()
|
||||||
|
.isSubscriptionEnabled(onboardingService.targetSubId)
|
||||||
|
if (!isEnabled) {
|
||||||
|
val latch = CountDownLatch(1)
|
||||||
|
val receiver = CarrierConfigChangedReceiver(latch)
|
||||||
|
try {
|
||||||
|
val waitingTimeMillis =
|
||||||
|
Settings.Global.getLong(
|
||||||
|
context.contentResolver,
|
||||||
|
Settings.Global.EUICC_SWITCH_SLOT_TIMEOUT_MILLIS,
|
||||||
|
UiccSlotUtil.DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS
|
||||||
|
)
|
||||||
|
receiver.registerOn(context)
|
||||||
|
Log.d(TAG, "Start waiting, waitingTime is $waitingTimeMillis")
|
||||||
|
latch.await(waitingTimeMillis, TimeUnit.MILLISECONDS)
|
||||||
|
} catch (e: InterruptedException) {
|
||||||
|
Thread.currentThread().interrupt()
|
||||||
|
Log.e(TAG, "Failed switching to physical slot.", e)
|
||||||
|
} finally {
|
||||||
|
context.unregisterReceiver(receiver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Log.d(TAG, "Sim is ready then go to next")
|
||||||
|
callbackListener(CallbackType.CALLBACK_SETUP_NAME)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun StartingDialogImpl(
|
fun StartingDialogImpl(
|
||||||
nextAction: () -> Unit,
|
nextAction: () -> Unit,
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class UiccSlotUtil {
|
|||||||
|
|
||||||
private static final String TAG = "UiccSlotUtil";
|
private static final String TAG = "UiccSlotUtil";
|
||||||
|
|
||||||
private static final long DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS = 25 * 1000L;
|
static final long DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS = 25 * 1000L;
|
||||||
|
|
||||||
public static final int INVALID_LOGICAL_SLOT_ID = -1;
|
public static final int INVALID_LOGICAL_SLOT_ID = -1;
|
||||||
public static final int INVALID_PHYSICAL_SLOT_ID = -1;
|
public static final int INVALID_PHYSICAL_SLOT_ID = -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user