diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/DefaultAuthenticationService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/DefaultAuthenticationService.kt index 60b51d1858..e4ea40abd4 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/DefaultAuthenticationService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/DefaultAuthenticationService.kt @@ -31,11 +31,11 @@ import im.vector.matrix.android.internal.auth.data.LoginFlowResponse import im.vector.matrix.android.internal.auth.login.DefaultLoginWizard import im.vector.matrix.android.internal.auth.registration.DefaultRegistrationWizard import im.vector.matrix.android.internal.di.Unauthenticated -import im.vector.matrix.android.internal.extensions.foldToCallback import im.vector.matrix.android.internal.network.RetrofitFactory import im.vector.matrix.android.internal.network.executeRequest -import im.vector.matrix.android.internal.util.CancelableCoroutine +import im.vector.matrix.android.internal.task.launchToCallback import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers +import im.vector.matrix.android.internal.util.toCancelable import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -70,7 +70,7 @@ internal class DefaultAuthenticationService @Inject constructor(@Unauthenticated override fun getLoginFlow(homeServerConnectionConfig: HomeServerConnectionConfig, callback: MatrixCallback): Cancelable { currentHomeServerConnectionConfig = null - val job = GlobalScope.launch(coroutineDispatchers.main) { + return GlobalScope.launch(coroutineDispatchers.main) { val result = runCatching { getLoginFlowInternal(homeServerConnectionConfig) } @@ -85,7 +85,7 @@ internal class DefaultAuthenticationService @Inject constructor(@Unauthenticated } ) } - return CancelableCoroutine(job) + .toCancelable() } private suspend fun getLoginFlowInternal(homeServerConnectionConfig: HomeServerConnectionConfig) = withContext(coroutineDispatchers.io) { @@ -126,13 +126,9 @@ internal class DefaultAuthenticationService @Inject constructor(@Unauthenticated override fun createSessionFromSso(homeServerConnectionConfig: HomeServerConnectionConfig, credentials: Credentials, callback: MatrixCallback): Cancelable { - val job = GlobalScope.launch(coroutineDispatchers.main) { - val sessionOrFailure = runCatching { - createSessionFromSso(credentials, homeServerConnectionConfig) - } - sessionOrFailure.foldToCallback(callback) + return GlobalScope.launchToCallback(coroutineDispatchers.main, callback) { + createSessionFromSso(credentials, homeServerConnectionConfig) } - return CancelableCoroutine(job) } private suspend fun createSessionFromSso(credentials: Credentials, diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/DefaultRegistrationWizard.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/DefaultRegistrationWizard.kt index 72a2206fb9..b991fce93d 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/DefaultRegistrationWizard.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/DefaultRegistrationWizard.kt @@ -34,7 +34,8 @@ import im.vector.matrix.android.internal.auth.data.LoginFlowTypes import im.vector.matrix.android.internal.network.RetrofitFactory import im.vector.matrix.android.internal.task.launchToCallback import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers -import kotlinx.coroutines.* +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay import okhttp3.OkHttpClient import java.util.* @@ -160,6 +161,7 @@ internal class DefaultRegistrationWizard(private val homeServerConnectionConfig: ) // Store data currentThreePidData = ThreePidData(threePid, response, params) + // and send the sid a first time return performRegistrationRequest(params) } @@ -169,7 +171,7 @@ internal class DefaultRegistrationWizard(private val homeServerConnectionConfig: return NoOpCancellable } return GlobalScope.launchToCallback(coroutineDispatchers.main, callback) { - performRegistrationRequest(safeParam) + performRegistrationRequest(safeParam, delayMillis) } } @@ -190,9 +192,12 @@ internal class DefaultRegistrationWizard(private val homeServerConnectionConfig: ) val validationResponse = validateCodeTask.execute(ValidateCodeTask.Params(url, validationBody)) if (validationResponse.success == true) { + // The entered code is correct + // Same than validate email return performRegistrationRequest(registrationParams, 3_000) } else { - throw Failure.SuccessError + // The code is not correct + throw Failure.SuccessError } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/task/CoroutineToCallback.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/task/CoroutineToCallback.kt index 2d0457cb7c..54c19bd86f 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/task/CoroutineToCallback.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/task/CoroutineToCallback.kt @@ -20,7 +20,9 @@ import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.util.Cancelable import im.vector.matrix.android.internal.extensions.foldToCallback import im.vector.matrix.android.internal.util.toCancelable -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.CoroutineStart +import kotlinx.coroutines.launch import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/CancelableCoroutine.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/CancelableCoroutine.kt index c2f138e04c..53bec0d621 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/CancelableCoroutine.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/CancelableCoroutine.kt @@ -23,7 +23,10 @@ internal fun Job.toCancelable(): Cancelable { return CancelableCoroutine(this) } -internal class CancelableCoroutine(private val job: Job) : Cancelable { +/** + * Private, use the extension above + */ +private class CancelableCoroutine(private val job: Job) : Cancelable { override fun cancel() { if (!job.isCancelled) {