diff --git a/auth/src/main/java/org/futo/circles/auth/feature/log_in/LoginDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/log_in/LoginDataSource.kt index 88d4aff1fbd4be7e2bef2d5e78a287d291f85dde..2a826f042f0b0af71c88bf80291e8d077107fca0 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/log_in/LoginDataSource.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/log_in/LoginDataSource.kt @@ -12,7 +12,8 @@ import org.futo.circles.auth.feature.uia.UIADataSource.Companion.REGISTRATION_BS import org.futo.circles.auth.feature.uia.UIADataSource.Companion.REGISTRATION_EMAIL_SUBMIT_TOKEN_TYPE import org.futo.circles.auth.feature.uia.UIADataSource.Companion.TYPE_PARAM_KEY import org.futo.circles.auth.feature.uia.UIADataSource.Companion.USER_PARAM_KEY -import org.futo.circles.auth.feature.uia.UIAFlowType +import org.futo.circles.auth.feature.uia.UIADataSourceProvider +import org.futo.circles.auth.model.UIAFlowType import org.futo.circles.core.extensions.createResult import org.futo.circles.core.provider.MatrixInstanceProvider import org.futo.circles.core.utils.HomeServerUtils.buildHomeServerConfigFromDomain @@ -21,10 +22,12 @@ import javax.inject.Inject class LoginDataSource @Inject constructor( @ApplicationContext private val context: Context, - private val uiaFactory: UIADataSource.Factory + uiaFactory: UIADataSource.Factory ) { - private val uiaDataSource by lazy { uiaFactory.create(UIAFlowType.Login) } + private val uiaDataSource by lazy { + UIADataSourceProvider.create(UIAFlowType.Login, uiaFactory) + } private val authService by lazy { MatrixInstanceProvider.matrix.authenticationService() } suspend fun startLogin( diff --git a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpDataSource.kt index 20d57016c2b90e31fba4619df7cce5f3339ded0d..8841a4ead076e435f19e47271daef34f8e6ae535 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpDataSource.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpDataSource.kt @@ -6,7 +6,8 @@ import org.futo.circles.auth.R import org.futo.circles.auth.feature.uia.UIADataSource import org.futo.circles.auth.feature.uia.UIADataSource.Companion.REGISTRATION_FREE_TYPE import org.futo.circles.auth.feature.uia.UIADataSource.Companion.REGISTRATION_SUBSCRIPTION_TYPE -import org.futo.circles.auth.feature.uia.UIAFlowType +import org.futo.circles.auth.feature.uia.UIADataSourceProvider +import org.futo.circles.auth.model.UIAFlowType import org.futo.circles.core.base.CirclesAppConfig import org.futo.circles.core.extensions.createResult import org.futo.circles.core.provider.MatrixInstanceProvider @@ -16,12 +17,14 @@ import javax.inject.Inject class SignUpDataSource @Inject constructor( @ApplicationContext private val context: Context, - private val uiaFactory: UIADataSource.Factory + uiaFactory: UIADataSource.Factory ) { private var registrationFlowsForDomain: Pair<String, List<List<Stage>>>? = null - private val uiaDataSource by lazy { uiaFactory.create(UIAFlowType.Signup) } + private val uiaDataSource by lazy { + UIADataSourceProvider.create(UIAFlowType.Signup, uiaFactory) + } suspend fun getAuthFlowsFor(domain: String) = createResult { registrationFlowsForDomain = null diff --git a/auth/src/main/java/org/futo/circles/auth/feature/uia/UIADataSourceProvider.kt b/auth/src/main/java/org/futo/circles/auth/feature/uia/UIADataSourceProvider.kt index e6486560973eda424d4b96c246a2362ab90ccec0..1471183a5a5440df0f238434b7bf2b3f36766bb3 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/uia/UIADataSourceProvider.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/uia/UIADataSourceProvider.kt @@ -1,11 +1,11 @@ package org.futo.circles.auth.feature.uia -enum class UIAFlowType { Login, Signup, ReAuth, ForgotPassword } +import org.futo.circles.auth.model.UIAFlowType + object UIADataSourceProvider { - var activeFlowDataSource: UIADataSource? = null - private set + private var activeFlowDataSource: UIADataSource? = null var activeFlowType: UIAFlowType? = null private set @@ -14,9 +14,8 @@ object UIADataSourceProvider { activeFlowDataSource ?: throw IllegalArgumentException("Flow is not active") - fun startUIAFlow(flowType: UIAFlowType, factory: UIADataSource.Factory) { + fun create(flowType: UIAFlowType, factory: UIADataSource.Factory): UIADataSource { activeFlowType = flowType - activeFlowDataSource = factory.create(flowType) - + return factory.create(flowType).also { activeFlowDataSource = it } } } diff --git a/auth/src/main/java/org/futo/circles/auth/feature/uia/flow/reauth/AuthConfirmationProvider.kt b/auth/src/main/java/org/futo/circles/auth/feature/uia/flow/reauth/AuthConfirmationProvider.kt index c93abbff8618e2d36ee073970ab45f1632c20a1c..a3eb2d6204aedd4cf84a6fb10d845aad556a870b 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/uia/flow/reauth/AuthConfirmationProvider.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/uia/flow/reauth/AuthConfirmationProvider.kt @@ -4,7 +4,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch import org.futo.circles.auth.feature.uia.UIADataSource -import org.futo.circles.auth.feature.uia.UIAFlowType +import org.futo.circles.auth.feature.uia.UIADataSourceProvider +import org.futo.circles.auth.model.UIAFlowType import org.futo.circles.core.base.SingleEventLiveData import org.matrix.android.sdk.api.auth.UIABaseAuth import org.matrix.android.sdk.api.auth.UserInteractiveAuthInterceptor @@ -15,11 +16,13 @@ import kotlin.coroutines.Continuation import kotlin.coroutines.resumeWithException class AuthConfirmationProvider @Inject constructor( - private val uiaFactory: UIADataSource.Factory + uiaFactory: UIADataSource.Factory ) : UserInteractiveAuthInterceptor { val startReAuthEventLiveData = SingleEventLiveData<Unit>() - private val uiaDataSource by lazy { uiaFactory.create(UIAFlowType.ReAuth) } + private val uiaDataSource by lazy { + UIADataSourceProvider.create(UIAFlowType.ReAuth, uiaFactory) + } override fun performStage( flowResponse: RegistrationFlowResponse,