Merge "Fix checkSimIsReadyAndGoNext()" into main

This commit is contained in:
Chaohui Wang
2024-12-02 03:46:37 +00:00
committed by Android (Google) Code Review

View File

@@ -56,6 +56,7 @@ import com.android.settings.R
import com.android.settings.SidecarFragment import com.android.settings.SidecarFragment
import com.android.settings.network.telephony.SimRepository import com.android.settings.network.telephony.SimRepository
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.network.telephony.requireSubscriptionManager
import com.android.settings.spa.SpaActivity.Companion.startSpaActivity import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
@@ -79,8 +80,10 @@ 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.flow.firstOrNull
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeoutOrNull
class SimOnboardingActivity : SpaBaseDialogActivity() { class SimOnboardingActivity : SpaBaseDialogActivity() {
lateinit var scope: CoroutineScope lateinit var scope: CoroutineScope
@@ -490,31 +493,25 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
} }
} }
suspend fun checkSimIsReadyAndGoNext() { private suspend fun checkSimIsReadyAndGoNext() {
withContext(Dispatchers.Default) { withContext(Dispatchers.Default) {
val isEnabled = context.requireSubscriptionManager() val waitingTimeMillis =
.isSubscriptionEnabled(onboardingService.targetSubId) Settings.Global.getLong(
if (!isEnabled) { context.contentResolver,
val latch = CountDownLatch(1) Settings.Global.EUICC_SWITCH_SLOT_TIMEOUT_MILLIS,
val receiver = CarrierConfigChangedReceiver(latch) UiccSlotUtil.DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS,
try { )
val waitingTimeMillis = Log.d(TAG, "Start waiting, waitingTime is $waitingTimeMillis")
Settings.Global.getLong( val isTimeout =
context.contentResolver, withTimeoutOrNull(waitingTimeMillis) {
Settings.Global.EUICC_SWITCH_SLOT_TIMEOUT_MILLIS, SubscriptionRepository(context)
UiccSlotUtil.DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS .isSubscriptionEnabledFlow(onboardingService.targetSubId)
) .firstOrNull { it }
receiver.registerOn(context) } == null
Log.d(TAG, "Start waiting, waitingTime is $waitingTimeMillis") Log.d(
latch.await(waitingTimeMillis, TimeUnit.MILLISECONDS) TAG,
} catch (e: InterruptedException) { if (isTimeout) "Sim is not ready after timeout" else "Sim is ready then go to next",
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) callbackListener(CallbackType.CALLBACK_SETUP_NAME)
} }
} }