diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt index 84cbcd52b01f8a3720ab1d9833eb82657299551a..30ef23fa0e851de82de5014f77cc0988e7f40ac5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt @@ -125,4 +125,7 @@ interface RegistrationWizard { * called successfully. */ fun isRegistrationStarted(): Boolean + + //Added to support few registration flows + suspend fun getAllRegistrationFlows(): List<List<Stage>> } \ No newline at end of file diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt index dac75cfd1d56b282399e0279c7b9b366bf79d189..3077f8953c8241e5b0c399a4331a348e94939984 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt @@ -20,7 +20,12 @@ import kotlinx.coroutines.delay import org.matrix.android.sdk.api.auth.LoginType import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.auth.data.LoginFlowTypes -import org.matrix.android.sdk.api.auth.registration.* +import org.matrix.android.sdk.api.auth.registration.RegisterThreePid +import org.matrix.android.sdk.api.auth.registration.RegistrationAvailability +import org.matrix.android.sdk.api.auth.registration.RegistrationResult +import org.matrix.android.sdk.api.auth.registration.RegistrationWizard +import org.matrix.android.sdk.api.auth.registration.Stage +import org.matrix.android.sdk.api.auth.registration.toFlowResult import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.failure.Failure.RegistrationFlowError import org.matrix.android.sdk.api.util.JsonDict @@ -265,4 +270,38 @@ internal class DefaultRegistrationWizard( override suspend fun registrationAvailable(userName: String): RegistrationAvailability { return registerAvailableTask.execute(RegisterAvailableTask.Params(userName)) } + + //Added to support few registration flows + override suspend fun getAllRegistrationFlows(): List<List<Stage>> { + try { + registerTask.execute(RegisterTask.Params(RegistrationParams())) + } catch (exception: Throwable) { + return if (exception is RegistrationFlowError) { + pendingSessionData = + pendingSessionData.copy(currentSession = exception.registrationFlowResponse.session) + .also { pendingSessionStore.savePendingSessionData(it) } + val flowResponse = exception.registrationFlowResponse + val missingStages = flowResponse.toFlowResult().missingStages + + val flowsWithStages = flowResponse.flows?.mapNotNull { it.stages }?.map { flow -> + flow.mapNotNull { type -> missingStages.findStageForType(type) } + } ?: emptyList() + + flowsWithStages + } else { + emptyList() + } + } + return emptyList() + } + + //Added to support few registration flows + private fun List<Stage>.findStageForType(type: String): Stage? = when (type) { + LoginFlowTypes.RECAPTCHA -> firstOrNull { it is Stage.ReCaptcha } + LoginFlowTypes.DUMMY -> firstOrNull { it is Stage.Dummy } + LoginFlowTypes.TERMS -> firstOrNull { it is Stage.Terms } + LoginFlowTypes.EMAIL_IDENTITY -> firstOrNull { it is Stage.Email } + LoginFlowTypes.MSISDN -> firstOrNull { it is Stage.Msisdn } + else -> firstOrNull { (it as? Stage.Other)?.type == type } + } } \ No newline at end of file