diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index e75ae3b542..ba01d15297 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -119,7 +119,7 @@ class RootFlowNode @AssistedInject constructor( private fun isUserLoggedInFlow(): Flow { return combine( authenticationService.isLoggedIn(), - loginUserStory.loginFlowIsDone() + loginUserStory.loginFlowIsDone ) { isLoggedIn, loginFlowIsDone -> isLoggedIn && loginFlowIsDone } diff --git a/features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginUserStory.kt b/features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginUserStory.kt index 7a6a704d0f..3a4cc54563 100644 --- a/features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginUserStory.kt +++ b/features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginUserStory.kt @@ -16,8 +16,8 @@ package io.element.android.features.login.api -import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow interface LoginUserStory { - fun loginFlowIsDone(): Flow + val loginFlowIsDone: StateFlow } diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt index aef32f0890..26b00068bc 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt @@ -20,7 +20,6 @@ import com.squareup.anvil.annotations.ContributesBinding import io.element.android.features.login.api.LoginUserStory import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.SingleIn -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import javax.inject.Inject @@ -28,9 +27,7 @@ import javax.inject.Inject @ContributesBinding(AppScope::class) class DefaultLoginUserStory @Inject constructor() : LoginUserStory { // True by default, will be set to false when the login user story is started, and set to true again once it's done. - private val loginFlowIsDone: MutableStateFlow = MutableStateFlow(true) - - override fun loginFlowIsDone(): Flow = loginFlowIsDone + override val loginFlowIsDone: MutableStateFlow = MutableStateFlow(true) fun setLoginFlowIsDone(value: Boolean) { loginFlowIsDone.value = value diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt index 166c090e04..afd4b542e4 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt @@ -31,7 +31,6 @@ import io.element.android.libraries.matrix.test.A_SESSION_ID import io.element.android.libraries.matrix.test.A_THROWABLE import io.element.android.libraries.matrix.test.A_USER_NAME import io.element.android.libraries.matrix.test.auth.FakeAuthenticationService -import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import org.junit.Test @@ -97,7 +96,7 @@ class LoginPasswordPresenterTest { moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { - assertThat(loginUserStory.loginFlowIsDone().first()).isFalse() + assertThat(loginUserStory.loginFlowIsDone.value).isFalse() val initialState = awaitItem() initialState.eventSink.invoke(LoginPasswordEvents.SetLogin(A_USER_NAME)) initialState.eventSink.invoke(LoginPasswordEvents.SetPassword(A_PASSWORD)) @@ -108,7 +107,7 @@ class LoginPasswordPresenterTest { assertThat(submitState.loginAction).isInstanceOf(Async.Loading::class.java) val loggedInState = awaitItem() assertThat(loggedInState.loginAction).isEqualTo(Async.Success(A_SESSION_ID)) - assertThat(loginUserStory.loginFlowIsDone().first()).isTrue() + assertThat(loginUserStory.loginFlowIsDone.value).isTrue() } } diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/waitlistscreen/WaitListPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/waitlistscreen/WaitListPresenterTest.kt index 4a06fdf4f0..389ac52176 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/waitlistscreen/WaitListPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/waitlistscreen/WaitListPresenterTest.kt @@ -30,7 +30,6 @@ import io.element.android.libraries.matrix.test.A_THROWABLE import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.auth.FakeAuthenticationService import io.element.android.libraries.matrix.test.core.aBuildMeta -import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import org.junit.Test @@ -101,7 +100,7 @@ class WaitListPresenterTest { moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { - assertThat(loginUserStory.loginFlowIsDone().first()).isFalse() + assertThat(loginUserStory.loginFlowIsDone.value).isFalse() val initialState = awaitItem() // First usage of AttemptLogin, nothing should happen initialState.eventSink.invoke(WaitListEvents.AttemptLogin) @@ -111,9 +110,9 @@ class WaitListPresenterTest { assertThat(submitState.loginAction).isInstanceOf(Async.Loading::class.java) val successState = awaitItem() assertThat(successState.loginAction).isEqualTo(Async.Success(A_USER_ID)) - assertThat(loginUserStory.loginFlowIsDone().first()).isFalse() + assertThat(loginUserStory.loginFlowIsDone.value).isFalse() successState.eventSink.invoke(WaitListEvents.Continue) - assertThat(loginUserStory.loginFlowIsDone().first()).isTrue() + assertThat(loginUserStory.loginFlowIsDone.value).isTrue() } } }