Merge "Fix checkSimIsReadyAndGoNext()" into main
diff --git a/src/com/android/settings/network/SimOnboardingActivity.kt b/src/com/android/settings/network/SimOnboardingActivity.kt
index 8f9cc8f..8d8fcba 100644
--- a/src/com/android/settings/network/SimOnboardingActivity.kt
+++ b/src/com/android/settings/network/SimOnboardingActivity.kt
@@ -56,6 +56,7 @@
import com.android.settings.SidecarFragment
import com.android.settings.network.telephony.SimRepository
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.requireSubscriptionManager
import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
@@ -79,8 +80,10 @@
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.conflate
+import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
+import kotlinx.coroutines.withTimeoutOrNull
class SimOnboardingActivity : SpaBaseDialogActivity() {
lateinit var scope: CoroutineScope
@@ -490,31 +493,25 @@
}
}
- suspend fun checkSimIsReadyAndGoNext() {
+ private 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")
+ val waitingTimeMillis =
+ Settings.Global.getLong(
+ context.contentResolver,
+ Settings.Global.EUICC_SWITCH_SLOT_TIMEOUT_MILLIS,
+ UiccSlotUtil.DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS,
+ )
+ Log.d(TAG, "Start waiting, waitingTime is $waitingTimeMillis")
+ val isTimeout =
+ withTimeoutOrNull(waitingTimeMillis) {
+ SubscriptionRepository(context)
+ .isSubscriptionEnabledFlow(onboardingService.targetSubId)
+ .firstOrNull { it }
+ } == null
+ Log.d(
+ TAG,
+ if (isTimeout) "Sim is not ready after timeout" else "Sim is ready then go to next",
+ )
callbackListener(CallbackType.CALLBACK_SETUP_NAME)
}
}