Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/AccountSetupModule.kt +20 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import app.k9mail.feature.account.setup.ui.options.AccountOptionsViewModel import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigContract import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigValidator import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigViewModel import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract import app.k9mail.feature.account.setup.ui.validation.AccountValidationViewModel import com.fsck.k9.mail.store.imap.ImapServerSettingsValidator import com.fsck.k9.mail.store.pop3.Pop3ServerSettingsValidator Loading @@ -29,6 +30,7 @@ import com.fsck.k9.mail.transport.smtp.SmtpServerSettingsValidator import okhttp3.OkHttpClient import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.core.module.Module import org.koin.core.qualifier.named import org.koin.dsl.module val featureAccountSetupModule: Module = module { Loading Loading @@ -111,20 +113,29 @@ val featureAccountSetupModule: Module = module { ) } viewModel { AccountIncomingConfigViewModel( validator = get(), ) } viewModel(named(NAME_INCOMING_VALIDATION)) { AccountValidationViewModel( validateServerSettings = get(), initialState = AccountValidationContract.State( isIncomingValidation = true, ), ) } viewModel { AccountIncomingConfigViewModel( AccountOutgoingConfigViewModel( validator = get(), checkIncomingServerConfig = get(), ) } viewModel { AccountOutgoingConfigViewModel( validator = get(), checkOutgoingServerConfig = get(), viewModel(named(NAME_OUTGOING_VALIDATION)) { AccountValidationViewModel( validateServerSettings = get(), initialState = AccountValidationContract.State( isIncomingValidation = false, ), ) } viewModel { Loading @@ -133,3 +144,6 @@ val featureAccountSetupModule: Module = module { ) } } internal const val NAME_INCOMING_VALIDATION = "incoming_validation" internal const val NAME_OUTGOING_VALIDATION = "outgoing_validation" feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupContract.kt +8 −0 Original line number Diff line number Diff line Loading @@ -11,7 +11,9 @@ interface AccountSetupContract { enum class SetupStep { AUTO_CONFIG, INCOMING_CONFIG, INCOMING_VALIDATION, OUTGOING_CONFIG, OUTGOING_VALIDATION, OPTIONS, } Loading @@ -19,6 +21,7 @@ interface AccountSetupContract { data class State( val setupStep: SetupStep = SetupStep.AUTO_CONFIG, val isAutomaticConfig: Boolean = false, ) sealed interface Event { Loading @@ -26,6 +29,7 @@ interface AccountSetupContract { data class OnAutoDiscoveryFinished( val state: AccountAutoDiscoveryContract.State, val isAutomaticConfig: Boolean, ) : Event data class OnStateCollected( Loading @@ -44,10 +48,14 @@ interface AccountSetupContract { val state: AccountIncomingConfigContract.State, ) : Effect object UpdateIncomingConfigValidation : Effect data class UpdateOutgoingConfig( val state: AccountOutgoingConfigContract.State, ) : Effect object UpdateOutgoingConfigValidation : Effect data class UpdateOptions( val state: AccountOptionsContract.State, ) : Effect Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupScreen.kt +51 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ package app.k9mail.feature.account.setup.ui import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.feature.account.setup.NAME_INCOMING_VALIDATION import app.k9mail.feature.account.setup.NAME_OUTGOING_VALIDATION import app.k9mail.feature.account.setup.ui.AccountSetupContract.Effect import app.k9mail.feature.account.setup.ui.AccountSetupContract.Event import app.k9mail.feature.account.setup.ui.AccountSetupContract.SetupStep Loading @@ -13,14 +15,21 @@ import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryVie import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigContract import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigScreen import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigViewModel import app.k9mail.feature.account.setup.ui.incoming.toValidationState import app.k9mail.feature.account.setup.ui.options.AccountOptionsContract import app.k9mail.feature.account.setup.ui.options.AccountOptionsScreen import app.k9mail.feature.account.setup.ui.options.AccountOptionsViewModel import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigContract import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigScreen import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigViewModel import app.k9mail.feature.account.setup.ui.outgoing.toValidationState import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract import app.k9mail.feature.account.setup.ui.validation.AccountValidationScreen import app.k9mail.feature.account.setup.ui.validation.AccountValidationViewModel import org.koin.androidx.compose.koinViewModel import org.koin.core.qualifier.named @Suppress("LongMethod", "CyclomaticComplexMethod") @Composable fun AccountSetupScreen( onFinish: (String) -> Unit, Loading @@ -28,13 +37,31 @@ fun AccountSetupScreen( viewModel: ViewModel = koinViewModel<AccountSetupViewModel>(), autoDiscoveryViewModel: AccountAutoDiscoveryContract.ViewModel = koinViewModel<AccountAutoDiscoveryViewModel>(), incomingViewModel: AccountIncomingConfigContract.ViewModel = koinViewModel<AccountIncomingConfigViewModel>(), incomingValidationViewModel: AccountValidationContract.ViewModel = koinViewModel<AccountValidationViewModel>( named( NAME_INCOMING_VALIDATION, ), ), outgoingViewModel: AccountOutgoingConfigContract.ViewModel = koinViewModel<AccountOutgoingConfigViewModel>(), outgoingValidationViewModel: AccountValidationContract.ViewModel = koinViewModel<AccountValidationViewModel>( named( NAME_OUTGOING_VALIDATION, ), ), optionsViewModel: AccountOptionsContract.ViewModel = koinViewModel<AccountOptionsViewModel>(), ) { val (state, dispatch) = viewModel.observe { effect -> when (effect) { is Effect.UpdateIncomingConfig -> incomingViewModel.initState(effect.state) is Effect.UpdateIncomingConfigValidation -> { incomingValidationViewModel.initState(incomingViewModel.state.value.toValidationState()) } is Effect.UpdateOutgoingConfig -> outgoingViewModel.initState(effect.state) is Effect.UpdateOutgoingConfigValidation -> { outgoingValidationViewModel.initState(outgoingViewModel.state.value.toValidationState()) } is Effect.UpdateOptions -> optionsViewModel.initState(effect.state) is Effect.CollectExternalStates -> viewModel.event( Event.OnStateCollected( Loading @@ -53,7 +80,14 @@ fun AccountSetupScreen( when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> { AccountAutoDiscoveryScreen( onNext = { dispatch(Event.OnAutoDiscoveryFinished(it)) }, onNext = { autoDiscoveryState, isAutomaticConfig -> dispatch( Event.OnAutoDiscoveryFinished( autoDiscoveryState, isAutomaticConfig, ), ) }, onBack = { dispatch(Event.OnBack) }, viewModel = autoDiscoveryViewModel, ) Loading @@ -67,6 +101,14 @@ fun AccountSetupScreen( ) } SetupStep.INCOMING_VALIDATION -> { AccountValidationScreen( onNext = { dispatch(Event.OnNext) }, onBack = { dispatch(Event.OnBack) }, viewModel = incomingValidationViewModel, ) } SetupStep.OUTGOING_CONFIG -> { AccountOutgoingConfigScreen( onNext = { dispatch(Event.OnNext) }, Loading @@ -75,6 +117,14 @@ fun AccountSetupScreen( ) } SetupStep.OUTGOING_VALIDATION -> { AccountValidationScreen( onNext = { dispatch(Event.OnNext) }, onBack = { dispatch(Event.OnBack) }, viewModel = outgoingValidationViewModel, ) } SetupStep.OPTIONS -> { AccountOptionsScreen( onNext = { dispatch(Event.OnNext) }, Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModel.kt +62 −7 Original line number Diff line number Diff line Loading @@ -27,7 +27,15 @@ class AccountSetupViewModel( override fun event(event: Event) { when (event) { is Event.OnAutoDiscoveryFinished -> onAutoDiscoveryFinished(event.state) is Event.OnAutoDiscoveryFinished -> { updateState { it.copy( isAutomaticConfig = event.isAutomaticConfig, ) } onAutoDiscoveryFinished(event.state) } is Event.OnStateCollected -> onStateCollected( autoDiscoveryState = event.autoDiscoveryState, incomingState = event.incomingState, Loading @@ -40,7 +48,9 @@ class AccountSetupViewModel( } } private fun onAutoDiscoveryFinished(autoDiscoveryState: AccountAutoDiscoveryContract.State) { private fun onAutoDiscoveryFinished( autoDiscoveryState: AccountAutoDiscoveryContract.State, ) { emitEffect(Effect.UpdateIncomingConfig(autoDiscoveryState.toIncomingConfigState())) emitEffect(Effect.UpdateOutgoingConfig(autoDiscoveryState.toOutgoingConfigState())) emitEffect(Effect.UpdateOptions(autoDiscoveryState.toOptionsState())) Loading @@ -51,16 +61,61 @@ class AccountSetupViewModel( when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> navigateBack() SetupStep.INCOMING_CONFIG -> changeToSetupStep(SetupStep.AUTO_CONFIG) SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.INCOMING_CONFIG) SetupStep.OPTIONS -> changeToSetupStep(SetupStep.OUTGOING_CONFIG) SetupStep.INCOMING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.INCOMING_CONFIG) } } SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.INCOMING_VALIDATION) SetupStep.OUTGOING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } SetupStep.OPTIONS -> changeToSetupStep(SetupStep.OUTGOING_VALIDATION) } } private fun onNext() { when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> changeToSetupStep(SetupStep.INCOMING_CONFIG) SetupStep.INCOMING_CONFIG -> changeToSetupStep(SetupStep.OUTGOING_CONFIG) SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.OPTIONS) SetupStep.AUTO_CONFIG -> { if (state.value.isAutomaticConfig) { emitEffect(Effect.UpdateIncomingConfigValidation) emitEffect(Effect.UpdateOutgoingConfigValidation) changeToSetupStep(SetupStep.INCOMING_VALIDATION) } else { changeToSetupStep(SetupStep.INCOMING_CONFIG) } } SetupStep.INCOMING_CONFIG -> { emitEffect(Effect.UpdateIncomingConfigValidation) changeToSetupStep(SetupStep.INCOMING_VALIDATION) } SetupStep.INCOMING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.OUTGOING_VALIDATION) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } SetupStep.OUTGOING_CONFIG -> { emitEffect(Effect.UpdateOutgoingConfigValidation) changeToSetupStep(SetupStep.OUTGOING_VALIDATION) } SetupStep.OUTGOING_VALIDATION -> { changeToSetupStep(SetupStep.OPTIONS) } SetupStep.OPTIONS -> onFinish() } } Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContract.kt +3 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,9 @@ interface AccountAutoDiscoveryContract { } sealed class Effect { object NavigateNext : Effect() data class NavigateNext( val isAutomaticConfig: Boolean, ) : Effect() object NavigateBack : Effect() } Loading Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/AccountSetupModule.kt +20 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import app.k9mail.feature.account.setup.ui.options.AccountOptionsViewModel import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigContract import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigValidator import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigViewModel import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract import app.k9mail.feature.account.setup.ui.validation.AccountValidationViewModel import com.fsck.k9.mail.store.imap.ImapServerSettingsValidator import com.fsck.k9.mail.store.pop3.Pop3ServerSettingsValidator Loading @@ -29,6 +30,7 @@ import com.fsck.k9.mail.transport.smtp.SmtpServerSettingsValidator import okhttp3.OkHttpClient import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.core.module.Module import org.koin.core.qualifier.named import org.koin.dsl.module val featureAccountSetupModule: Module = module { Loading Loading @@ -111,20 +113,29 @@ val featureAccountSetupModule: Module = module { ) } viewModel { AccountIncomingConfigViewModel( validator = get(), ) } viewModel(named(NAME_INCOMING_VALIDATION)) { AccountValidationViewModel( validateServerSettings = get(), initialState = AccountValidationContract.State( isIncomingValidation = true, ), ) } viewModel { AccountIncomingConfigViewModel( AccountOutgoingConfigViewModel( validator = get(), checkIncomingServerConfig = get(), ) } viewModel { AccountOutgoingConfigViewModel( validator = get(), checkOutgoingServerConfig = get(), viewModel(named(NAME_OUTGOING_VALIDATION)) { AccountValidationViewModel( validateServerSettings = get(), initialState = AccountValidationContract.State( isIncomingValidation = false, ), ) } viewModel { Loading @@ -133,3 +144,6 @@ val featureAccountSetupModule: Module = module { ) } } internal const val NAME_INCOMING_VALIDATION = "incoming_validation" internal const val NAME_OUTGOING_VALIDATION = "outgoing_validation"
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupContract.kt +8 −0 Original line number Diff line number Diff line Loading @@ -11,7 +11,9 @@ interface AccountSetupContract { enum class SetupStep { AUTO_CONFIG, INCOMING_CONFIG, INCOMING_VALIDATION, OUTGOING_CONFIG, OUTGOING_VALIDATION, OPTIONS, } Loading @@ -19,6 +21,7 @@ interface AccountSetupContract { data class State( val setupStep: SetupStep = SetupStep.AUTO_CONFIG, val isAutomaticConfig: Boolean = false, ) sealed interface Event { Loading @@ -26,6 +29,7 @@ interface AccountSetupContract { data class OnAutoDiscoveryFinished( val state: AccountAutoDiscoveryContract.State, val isAutomaticConfig: Boolean, ) : Event data class OnStateCollected( Loading @@ -44,10 +48,14 @@ interface AccountSetupContract { val state: AccountIncomingConfigContract.State, ) : Effect object UpdateIncomingConfigValidation : Effect data class UpdateOutgoingConfig( val state: AccountOutgoingConfigContract.State, ) : Effect object UpdateOutgoingConfigValidation : Effect data class UpdateOptions( val state: AccountOptionsContract.State, ) : Effect Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupScreen.kt +51 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ package app.k9mail.feature.account.setup.ui import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.feature.account.setup.NAME_INCOMING_VALIDATION import app.k9mail.feature.account.setup.NAME_OUTGOING_VALIDATION import app.k9mail.feature.account.setup.ui.AccountSetupContract.Effect import app.k9mail.feature.account.setup.ui.AccountSetupContract.Event import app.k9mail.feature.account.setup.ui.AccountSetupContract.SetupStep Loading @@ -13,14 +15,21 @@ import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryVie import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigContract import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigScreen import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigViewModel import app.k9mail.feature.account.setup.ui.incoming.toValidationState import app.k9mail.feature.account.setup.ui.options.AccountOptionsContract import app.k9mail.feature.account.setup.ui.options.AccountOptionsScreen import app.k9mail.feature.account.setup.ui.options.AccountOptionsViewModel import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigContract import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigScreen import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigViewModel import app.k9mail.feature.account.setup.ui.outgoing.toValidationState import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract import app.k9mail.feature.account.setup.ui.validation.AccountValidationScreen import app.k9mail.feature.account.setup.ui.validation.AccountValidationViewModel import org.koin.androidx.compose.koinViewModel import org.koin.core.qualifier.named @Suppress("LongMethod", "CyclomaticComplexMethod") @Composable fun AccountSetupScreen( onFinish: (String) -> Unit, Loading @@ -28,13 +37,31 @@ fun AccountSetupScreen( viewModel: ViewModel = koinViewModel<AccountSetupViewModel>(), autoDiscoveryViewModel: AccountAutoDiscoveryContract.ViewModel = koinViewModel<AccountAutoDiscoveryViewModel>(), incomingViewModel: AccountIncomingConfigContract.ViewModel = koinViewModel<AccountIncomingConfigViewModel>(), incomingValidationViewModel: AccountValidationContract.ViewModel = koinViewModel<AccountValidationViewModel>( named( NAME_INCOMING_VALIDATION, ), ), outgoingViewModel: AccountOutgoingConfigContract.ViewModel = koinViewModel<AccountOutgoingConfigViewModel>(), outgoingValidationViewModel: AccountValidationContract.ViewModel = koinViewModel<AccountValidationViewModel>( named( NAME_OUTGOING_VALIDATION, ), ), optionsViewModel: AccountOptionsContract.ViewModel = koinViewModel<AccountOptionsViewModel>(), ) { val (state, dispatch) = viewModel.observe { effect -> when (effect) { is Effect.UpdateIncomingConfig -> incomingViewModel.initState(effect.state) is Effect.UpdateIncomingConfigValidation -> { incomingValidationViewModel.initState(incomingViewModel.state.value.toValidationState()) } is Effect.UpdateOutgoingConfig -> outgoingViewModel.initState(effect.state) is Effect.UpdateOutgoingConfigValidation -> { outgoingValidationViewModel.initState(outgoingViewModel.state.value.toValidationState()) } is Effect.UpdateOptions -> optionsViewModel.initState(effect.state) is Effect.CollectExternalStates -> viewModel.event( Event.OnStateCollected( Loading @@ -53,7 +80,14 @@ fun AccountSetupScreen( when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> { AccountAutoDiscoveryScreen( onNext = { dispatch(Event.OnAutoDiscoveryFinished(it)) }, onNext = { autoDiscoveryState, isAutomaticConfig -> dispatch( Event.OnAutoDiscoveryFinished( autoDiscoveryState, isAutomaticConfig, ), ) }, onBack = { dispatch(Event.OnBack) }, viewModel = autoDiscoveryViewModel, ) Loading @@ -67,6 +101,14 @@ fun AccountSetupScreen( ) } SetupStep.INCOMING_VALIDATION -> { AccountValidationScreen( onNext = { dispatch(Event.OnNext) }, onBack = { dispatch(Event.OnBack) }, viewModel = incomingValidationViewModel, ) } SetupStep.OUTGOING_CONFIG -> { AccountOutgoingConfigScreen( onNext = { dispatch(Event.OnNext) }, Loading @@ -75,6 +117,14 @@ fun AccountSetupScreen( ) } SetupStep.OUTGOING_VALIDATION -> { AccountValidationScreen( onNext = { dispatch(Event.OnNext) }, onBack = { dispatch(Event.OnBack) }, viewModel = outgoingValidationViewModel, ) } SetupStep.OPTIONS -> { AccountOptionsScreen( onNext = { dispatch(Event.OnNext) }, Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModel.kt +62 −7 Original line number Diff line number Diff line Loading @@ -27,7 +27,15 @@ class AccountSetupViewModel( override fun event(event: Event) { when (event) { is Event.OnAutoDiscoveryFinished -> onAutoDiscoveryFinished(event.state) is Event.OnAutoDiscoveryFinished -> { updateState { it.copy( isAutomaticConfig = event.isAutomaticConfig, ) } onAutoDiscoveryFinished(event.state) } is Event.OnStateCollected -> onStateCollected( autoDiscoveryState = event.autoDiscoveryState, incomingState = event.incomingState, Loading @@ -40,7 +48,9 @@ class AccountSetupViewModel( } } private fun onAutoDiscoveryFinished(autoDiscoveryState: AccountAutoDiscoveryContract.State) { private fun onAutoDiscoveryFinished( autoDiscoveryState: AccountAutoDiscoveryContract.State, ) { emitEffect(Effect.UpdateIncomingConfig(autoDiscoveryState.toIncomingConfigState())) emitEffect(Effect.UpdateOutgoingConfig(autoDiscoveryState.toOutgoingConfigState())) emitEffect(Effect.UpdateOptions(autoDiscoveryState.toOptionsState())) Loading @@ -51,16 +61,61 @@ class AccountSetupViewModel( when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> navigateBack() SetupStep.INCOMING_CONFIG -> changeToSetupStep(SetupStep.AUTO_CONFIG) SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.INCOMING_CONFIG) SetupStep.OPTIONS -> changeToSetupStep(SetupStep.OUTGOING_CONFIG) SetupStep.INCOMING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.INCOMING_CONFIG) } } SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.INCOMING_VALIDATION) SetupStep.OUTGOING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } SetupStep.OPTIONS -> changeToSetupStep(SetupStep.OUTGOING_VALIDATION) } } private fun onNext() { when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> changeToSetupStep(SetupStep.INCOMING_CONFIG) SetupStep.INCOMING_CONFIG -> changeToSetupStep(SetupStep.OUTGOING_CONFIG) SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.OPTIONS) SetupStep.AUTO_CONFIG -> { if (state.value.isAutomaticConfig) { emitEffect(Effect.UpdateIncomingConfigValidation) emitEffect(Effect.UpdateOutgoingConfigValidation) changeToSetupStep(SetupStep.INCOMING_VALIDATION) } else { changeToSetupStep(SetupStep.INCOMING_CONFIG) } } SetupStep.INCOMING_CONFIG -> { emitEffect(Effect.UpdateIncomingConfigValidation) changeToSetupStep(SetupStep.INCOMING_VALIDATION) } SetupStep.INCOMING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.OUTGOING_VALIDATION) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } SetupStep.OUTGOING_CONFIG -> { emitEffect(Effect.UpdateOutgoingConfigValidation) changeToSetupStep(SetupStep.OUTGOING_VALIDATION) } SetupStep.OUTGOING_VALIDATION -> { changeToSetupStep(SetupStep.OPTIONS) } SetupStep.OPTIONS -> onFinish() } } Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContract.kt +3 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,9 @@ interface AccountAutoDiscoveryContract { } sealed class Effect { object NavigateNext : Effect() data class NavigateNext( val isAutomaticConfig: Boolean, ) : Effect() object NavigateBack : Effect() } Loading