Merge "Fix checkSimIsReadyAndGoNext()" into main
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user