Skip to content

Commit f280b89

Browse files
committed
Improve API of LoginHelper and AccountProviderDataSource
1 parent 5e8f062 commit f280b89

File tree

6 files changed

+20
-17
lines changed

6 files changed

+20
-17
lines changed

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ import io.element.android.libraries.architecture.NodeInputs
4343
import io.element.android.libraries.architecture.callback
4444
import io.element.android.libraries.architecture.createNode
4545
import io.element.android.libraries.architecture.inputs
46+
import io.element.android.libraries.di.annotations.AppCoroutineScope
4647
import io.element.android.libraries.matrix.api.auth.OidcDetails
4748
import io.element.android.libraries.oidc.api.OidcAction
4849
import io.element.android.libraries.oidc.api.OidcActionFlow
50+
import kotlinx.coroutines.CoroutineScope
4951
import kotlinx.coroutines.delay
5052
import kotlinx.coroutines.launch
5153
import kotlinx.parcelize.Parcelize
@@ -57,6 +59,8 @@ class LoginFlowNode(
5759
@Assisted plugins: List<Plugin>,
5860
private val accountProviderDataSource: AccountProviderDataSource,
5961
private val oidcActionFlow: OidcActionFlow,
62+
@AppCoroutineScope
63+
private val appCoroutineScope: CoroutineScope,
6064
) : BaseFlowNode<LoginFlowNode.NavTarget>(
6165
backstack = BackStack(
6266
initialElement = NavTarget.OnBoarding,
@@ -268,7 +272,9 @@ class LoginFlowNode(
268272
DisposableEffect(Unit) {
269273
onDispose {
270274
activity = null
271-
accountProviderDataSource.reset()
275+
appCoroutineScope.launch {
276+
accountProviderDataSource.reset()
277+
}
272278
}
273279
}
274280
BackstackView()

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ class AccountProviderDataSource(
3131

3232
val flow: StateFlow<AccountProvider> = accountProvider.asStateFlow()
3333

34-
fun reset() {
35-
accountProvider.tryEmit(defaultAccountProvider)
34+
suspend fun reset() {
35+
accountProvider.emit(defaultAccountProvider)
3636
}
3737

38-
fun setUrl(url: String) {
38+
suspend fun setUrl(url: String) {
3939
setAccountProvider(createAccountProvider(url))
4040
}
4141

42-
fun setAccountProvider(data: AccountProvider) {
43-
accountProvider.tryEmit(data)
42+
suspend fun setAccountProvider(data: AccountProvider) {
43+
accountProvider.emit(data)
4444
}
4545

4646
private fun createAccountProvider(url: String): AccountProvider {

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
2525
import io.element.android.libraries.matrix.api.auth.OidcPrompt
2626
import io.element.android.libraries.oidc.api.OidcAction
2727
import io.element.android.libraries.oidc.api.OidcActionFlow
28-
import kotlinx.coroutines.CoroutineScope
29-
import kotlinx.coroutines.launch
3028

3129
/**
3230
* This class is responsible for managing the login flow, including handling OIDC actions and
@@ -58,12 +56,11 @@ class LoginHelper(
5856
loginModeState.value = AsyncData.Uninitialized
5957
}
6058

61-
fun submit(
62-
coroutineScope: CoroutineScope,
59+
suspend fun submit(
6360
isAccountCreation: Boolean,
6461
homeserverUrl: String,
6562
loginHint: String?,
66-
) = coroutineScope.launch {
63+
) {
6764
suspend {
6865
authenticationService.setHomeserver(homeserverUrl).map { matrixHomeServerDetails ->
6966
if (matrixHomeServerDetails.supportsOidcLogin) {

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import io.element.android.libraries.architecture.AsyncData
2222
import io.element.android.libraries.architecture.Presenter
2323
import io.element.android.libraries.core.uri.ensureProtocol
2424
import kotlinx.collections.immutable.toImmutableList
25+
import kotlinx.coroutines.launch
2526

2627
@Inject
2728
class ChooseAccountProviderPresenter(
@@ -37,10 +38,9 @@ class ChooseAccountProviderPresenter(
3738

3839
fun handleEvent(event: ChooseAccountProviderEvents) {
3940
when (event) {
40-
ChooseAccountProviderEvents.Continue -> {
41+
ChooseAccountProviderEvents.Continue -> localCoroutineScope.launch {
4142
selectedAccountProvider?.let {
4243
loginHelper.submit(
43-
coroutineScope = localCoroutineScope,
4444
isAccountCreation = false,
4545
homeserverUrl = it.url,
4646
loginHint = null,

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import dev.zacsweers.metro.AssistedInject
1717
import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource
1818
import io.element.android.features.login.impl.login.LoginHelper
1919
import io.element.android.libraries.architecture.Presenter
20+
import kotlinx.coroutines.launch
2021

2122
@AssistedInject
2223
class ConfirmAccountProviderPresenter(
@@ -42,9 +43,8 @@ class ConfirmAccountProviderPresenter(
4243

4344
fun handleEvents(event: ConfirmAccountProviderEvents) {
4445
when (event) {
45-
ConfirmAccountProviderEvents.Continue -> {
46+
ConfirmAccountProviderEvents.Continue -> localCoroutineScope.launch {
4647
loginHelper.submit(
47-
coroutineScope = localCoroutineScope,
4848
isAccountCreation = params.isAccountCreation,
4949
homeserverUrl = accountProvider.url,
5050
loginHint = null,

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import io.element.android.libraries.architecture.Presenter
3030
import io.element.android.libraries.core.meta.BuildMeta
3131
import io.element.android.libraries.sessionstorage.api.SessionStore
3232
import io.element.android.libraries.ui.utils.MultipleTapToUnlock
33+
import kotlinx.coroutines.launch
3334

3435
@AssistedInject
3536
class OnBoardingPresenter(
@@ -99,11 +100,10 @@ class OnBoardingPresenter(
99100

100101
fun handleEvent(event: OnBoardingEvents) {
101102
when (event) {
102-
is OnBoardingEvents.OnSignIn -> {
103+
is OnBoardingEvents.OnSignIn -> localCoroutineScope.launch {
103104
// Ensure that the current account provider is set
104105
accountProviderDataSource.setUrl(event.defaultAccountProvider)
105106
loginHelper.submit(
106-
coroutineScope = localCoroutineScope,
107107
isAccountCreation = false,
108108
homeserverUrl = event.defaultAccountProvider,
109109
loginHint = params.loginHint?.takeIf { forcedAccountProvider == null },

0 commit comments

Comments
 (0)