Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 21b500c8 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé
Browse files

Change OutgoingConfig to use AccountSetupState

parent cfccc950
Loading
Loading
Loading
Loading
+13 −17
Original line number Diff line number Diff line
@@ -22,9 +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 app.k9mail.feature.account.setup.ui.validation.InMemoryAuthStateStorage
import com.fsck.k9.mail.oauth.AuthStateStorage
import com.fsck.k9.mail.store.imap.ImapServerSettingsValidator
import com.fsck.k9.mail.store.pop3.Pop3ServerSettingsValidator
@@ -32,8 +30,8 @@ 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.parameter.parametersOf
import org.koin.core.qualifier.named
import org.koin.dsl.binds
import org.koin.dsl.module

val featureAccountSetupModule: Module = module {
@@ -56,11 +54,13 @@ val featureAccountSetupModule: Module = module {
        )
    }

    single<DomainContract.AccountSetupStateRepository> { InMemoryAccountSetupStateRepository() }
    single {
        InMemoryAccountSetupStateRepository()
    }.binds(arrayOf(DomainContract.AccountSetupStateRepository::class, AuthStateStorage::class))

    factory<DomainContract.UseCase.ValidateServerSettings> { (authStateStorage: AuthStateStorage) ->
    factory<DomainContract.UseCase.ValidateServerSettings> {
        ValidateServerSettings(
            authStateStorage = authStateStorage,
            authStateStorage = get(),
            imapValidator = ImapServerSettingsValidator(
                trustedSocketFactory = get(),
                oAuth2TokenProviderFactory = get(),
@@ -88,13 +88,10 @@ val featureAccountSetupModule: Module = module {
    factory<AccountOptionsContract.Validator> { AccountOptionsValidator() }

    viewModel {
        val authStateStorage = InMemoryAuthStateStorage()

        AccountSetupViewModel(
            createAccount = get(),
            outgoingViewModel = get(),
            optionsViewModel = get(),
            authStateStorage = authStateStorage,
            authStateStorage = get(),
            accountSetupStateRepository = get(),
        )
    }
@@ -111,23 +108,22 @@ val featureAccountSetupModule: Module = module {
            accountSetupStateRepository = get(),
        )
    }
    viewModel(named(NAME_INCOMING_VALIDATION)) { (authStateStorage: AuthStateStorage) ->
    viewModel(named(NAME_INCOMING_VALIDATION)) {
        AccountValidationViewModel(
            validateServerSettings = get { parametersOf(authStateStorage) },
            validateServerSettings = get(),
            accountSetupStateRepository = get(),
            authorizationStateRepository = get(),
            oAuthViewModel = get(),
            isIncomingValidation = true,
        )
    }
    factory<AccountOutgoingConfigContract.ViewModel> {
    viewModel {
        AccountOutgoingConfigViewModel(
            validator = get(),
            accountSetupStateRepository = get(),
        )
    }
    viewModel(named(NAME_OUTGOING_VALIDATION)) { (authStateStorage: AuthStateStorage) ->
    viewModel(named(NAME_OUTGOING_VALIDATION)) {
        AccountValidationViewModel(
            validateServerSettings = get { parametersOf(authStateStorage) },
            validateServerSettings = get(),
            accountSetupStateRepository = get(),
            isIncomingValidation = false,
        )
+10 −1
Original line number Diff line number Diff line
@@ -5,10 +5,11 @@ import app.k9mail.feature.account.setup.domain.DomainContract
import app.k9mail.feature.account.setup.domain.entity.AccountOptions
import app.k9mail.feature.account.setup.domain.entity.AccountSetupState
import com.fsck.k9.mail.ServerSettings
import com.fsck.k9.mail.oauth.AuthStateStorage

class InMemoryAccountSetupStateRepository(
    private var state: AccountSetupState = AccountSetupState(),
) : DomainContract.AccountSetupStateRepository {
) : DomainContract.AccountSetupStateRepository, AuthStateStorage {

    override fun getState(): AccountSetupState {
        return state
@@ -41,4 +42,12 @@ class InMemoryAccountSetupStateRepository(
    override fun clear() {
        state = AccountSetupState()
    }

    override fun getAuthorizationState(): String? {
        return state.authorizationState?.state
    }

    override fun updateAuthorizationState(authorizationState: String?) {
        state = state.copy(authorizationState = AuthorizationState(authorizationState))
    }
}
+0 −4
Original line number Diff line number Diff line
@@ -2,10 +2,7 @@ package app.k9mail.feature.account.setup.ui

import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel
import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryContract
import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigContract
import app.k9mail.feature.account.setup.ui.options.AccountOptionsContract
import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigContract
import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract

interface AccountSetupContract {

@@ -19,7 +16,6 @@ interface AccountSetupContract {
    }

    interface ViewModel : UnidirectionalViewModel<State, Event, Effect> {
        val outgoingViewModel: AccountOutgoingConfigContract.ViewModel
        val optionsViewModel: AccountOptionsContract.ViewModel
    }

+2 −1
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ 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.options.AccountOptionsScreen
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.validation.AccountValidationScreen
import app.k9mail.feature.account.setup.ui.validation.AccountValidationViewModel
import org.koin.androidx.compose.koinViewModel
@@ -70,7 +71,7 @@ fun AccountSetupScreen(
            AccountOutgoingConfigScreen(
                onNext = { dispatch(Event.OnNext) },
                onBack = { dispatch(Event.OnBack) },
                viewModel = viewModel.outgoingViewModel,
                viewModel = koinViewModel<AccountOutgoingConfigViewModel>(),
            )
        }

+1 −6
Original line number Diff line number Diff line
@@ -12,16 +12,12 @@ import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryCon
import app.k9mail.feature.account.setup.ui.autodiscovery.toAccountSetupState
import app.k9mail.feature.account.setup.ui.options.AccountOptionsContract
import app.k9mail.feature.account.setup.ui.options.toAccountOptions
import app.k9mail.feature.account.setup.ui.outgoing.AccountOutgoingConfigContract
import app.k9mail.feature.account.setup.ui.outgoing.toServerSettings
import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract
import com.fsck.k9.mail.oauth.AuthStateStorage
import kotlinx.coroutines.launch

@Suppress("LongParameterList")
class AccountSetupViewModel(
    private val createAccount: UseCase.CreateAccount,
    override val outgoingViewModel: AccountOutgoingConfigContract.ViewModel,
    override val optionsViewModel: AccountOptionsContract.ViewModel,
    private val authStateStorage: AuthStateStorage,
    private val accountSetupStateRepository: DomainContract.AccountSetupStateRepository,
@@ -133,7 +129,6 @@ class AccountSetupViewModel(
    }

    private fun onFinish() {
        val outgoingState = outgoingViewModel.state.value
        val optionsState = optionsViewModel.state.value

        val accountSetupState = accountSetupStateRepository.getState()
@@ -142,7 +137,7 @@ class AccountSetupViewModel(
            val result = createAccount.execute(
                emailAddress = accountSetupState.emailAddress ?: "",
                incomingServerSettings = accountSetupState.incomingServerSettings!!,
                outgoingServerSettings = outgoingState.toServerSettings(),
                outgoingServerSettings = accountSetupState.outgoingServerSettings!!,
                authorizationState = authStateStorage.getAuthorizationState(),
                options = optionsState.toAccountOptions(),
            )
Loading