From 1fa6ecb3b02cf4376686852e47e43860ac89bc7e Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Wed, 28 Feb 2024 16:53:18 +0200 Subject: [PATCH] UIaProvider create --- .../circles/auth/feature/log_in/LoginDataSource.kt | 9 ++++++--- .../circles/auth/feature/sign_up/SignUpDataSource.kt | 9 ++++++--- .../circles/auth/feature/uia/UIADataSourceProvider.kt | 11 +++++------ .../uia/flow/reauth/AuthConfirmationProvider.kt | 9 ++++++--- 4 files changed, 23 insertions(+), 15 deletions(-) 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 88d4aff1f..2a826f042 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 20d57016c..8841a4ead 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 e64865609..1471183a5 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 c93abbff8..a3eb2d620 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, -- GitLab