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

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

Change AccountValidation to use AccountSetupState

parent 69ad9c52
Loading
Loading
Loading
Loading
+8 −14
Original line number Diff line number Diff line
@@ -92,9 +92,7 @@ val featureAccountSetupModule: Module = module {

        AccountSetupViewModel(
            createAccount = get(),
            incomingValidationViewModel = get(named(NAME_INCOMING_VALIDATION)) { parametersOf(authStateStorage) },
            outgoingViewModel = get(),
            outgoingValidationViewModel = get(named(NAME_OUTGOING_VALIDATION)) { parametersOf(authStateStorage) },
            optionsViewModel = get(),
            authStateStorage = authStateStorage,
            accountSetupStateRepository = get(),
@@ -113,14 +111,13 @@ val featureAccountSetupModule: Module = module {
            accountSetupStateRepository = get(),
        )
    }
    factory<AccountValidationContract.ViewModel>(named(NAME_INCOMING_VALIDATION)) {
            (authStateStorage: AuthStateStorage) ->

    viewModel(named(NAME_INCOMING_VALIDATION)) { (authStateStorage: AuthStateStorage) ->
        AccountValidationViewModel(
            validateServerSettings = get { parametersOf(authStateStorage) },
            initialState = AccountValidationContract.State(
            accountSetupStateRepository = get(),
            authorizationStateRepository = get(),
            oAuthViewModel = get(),
            isIncomingValidation = true,
            ),
        )
    }
    factory<AccountOutgoingConfigContract.ViewModel> {
@@ -128,14 +125,11 @@ val featureAccountSetupModule: Module = module {
            validator = get(),
        )
    }
    factory<AccountValidationContract.ViewModel>(named(NAME_OUTGOING_VALIDATION)) {
            (authStateStorage: AuthStateStorage) ->

    viewModel(named(NAME_OUTGOING_VALIDATION)) { (authStateStorage: AuthStateStorage) ->
        AccountValidationViewModel(
            validateServerSettings = get { parametersOf(authStateStorage) },
            initialState = AccountValidationContract.State(
            accountSetupStateRepository = get(),
            isIncomingValidation = false,
            ),
        )
    }
    factory<AccountOptionsContract.ViewModel> {
+0 −2
Original line number Diff line number Diff line
@@ -19,9 +19,7 @@ interface AccountSetupContract {
    }

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

+6 −2
Original line number Diff line number Diff line
@@ -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
@@ -14,7 +16,9 @@ import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigViewMod
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.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")
@Composable
@@ -58,7 +62,7 @@ fun AccountSetupScreen(
            AccountValidationScreen(
                onNext = { dispatch(Event.OnNext) },
                onBack = { dispatch(Event.OnBack) },
                viewModel = viewModel.incomingValidationViewModel,
                viewModel = koinViewModel<AccountValidationViewModel>(named(NAME_INCOMING_VALIDATION)),
            )
        }

@@ -74,7 +78,7 @@ fun AccountSetupScreen(
            AccountValidationScreen(
                onNext = { dispatch(Event.OnNext) },
                onBack = { dispatch(Event.OnBack) },
                viewModel = viewModel.outgoingValidationViewModel,
                viewModel = koinViewModel<AccountValidationViewModel>(named(NAME_OUTGOING_VALIDATION)),
            )
        }

+3 −12
Original line number Diff line number Diff line
@@ -10,14 +10,10 @@ import app.k9mail.feature.account.setup.ui.AccountSetupContract.SetupStep
import app.k9mail.feature.account.setup.ui.AccountSetupContract.State
import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryContract
import app.k9mail.feature.account.setup.ui.autodiscovery.toAccountSetupState
import app.k9mail.feature.account.setup.ui.incoming.AccountIncomingConfigContract
import app.k9mail.feature.account.setup.ui.incoming.toServerSettings
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.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.outgoing.toValidationState
import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract
import com.fsck.k9.mail.oauth.AuthStateStorage
import kotlinx.coroutines.launch
@@ -25,9 +21,7 @@ import kotlinx.coroutines.launch
@Suppress("LongParameterList")
class AccountSetupViewModel(
    private val createAccount: UseCase.CreateAccount,
    override val incomingValidationViewModel: AccountValidationContract.ViewModel,
    override val outgoingViewModel: AccountOutgoingConfigContract.ViewModel,
    override val outgoingValidationViewModel: AccountValidationContract.ViewModel,
    override val optionsViewModel: AccountOptionsContract.ViewModel,
    private val authStateStorage: AuthStateStorage,
    private val accountSetupStateRepository: DomainContract.AccountSetupStateRepository,
@@ -64,9 +58,7 @@ class AccountSetupViewModel(
        when (state.value.setupStep) {
            SetupStep.AUTO_CONFIG -> {
                if (state.value.isAutomaticConfig) {
                    // TODO add state for incoming server settings
//                    incomingValidationViewModel.initState(incomingViewModel.state.value.toValidationState())
                    outgoingValidationViewModel.initState(outgoingViewModel.state.value.toValidationState())
                    // TODO save state for incoming/outgoing server settings
                    changeToSetupStep(SetupStep.INCOMING_VALIDATION)
                } else {
                    changeToSetupStep(SetupStep.INCOMING_CONFIG)
@@ -74,8 +66,7 @@ class AccountSetupViewModel(
            }

            SetupStep.INCOMING_CONFIG -> {
                // TODO add state for incoming server settings
//                incomingValidationViewModel.initState(incomingViewModel.state.value.toValidationState())
                // TODO save state for incoming server settings
                changeToSetupStep(SetupStep.INCOMING_VALIDATION)
            }

@@ -88,7 +79,7 @@ class AccountSetupViewModel(
            }

            SetupStep.OUTGOING_CONFIG -> {
                outgoingValidationViewModel.initState(outgoingViewModel.state.value.toValidationState())
                // TODO save state for outgoing server settings
                changeToSetupStep(SetupStep.OUTGOING_VALIDATION)
            }

+25 −1
Original line number Diff line number Diff line
@@ -4,10 +4,34 @@ import app.k9mail.feature.account.oauth.domain.entity.AuthorizationState
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 app.k9mail.feature.account.setup.domain.entity.MailConnectionSecurity
import com.fsck.k9.mail.AuthType
import com.fsck.k9.mail.ServerSettings

class PreviewAccountSetupStateRepository : DomainContract.AccountSetupStateRepository {
    override fun getState(): AccountSetupState = AccountSetupState()
    override fun getState(): AccountSetupState = AccountSetupState(
        emailAddress = "test@example.com",
        incomingServerSettings = ServerSettings(
            type = "imap",
            host = "imap.example.com",
            port = 993,
            connectionSecurity = MailConnectionSecurity.SSL_TLS_REQUIRED,
            authenticationType = AuthType.PLAIN,
            username = "test",
            password = "password",
            clientCertificateAlias = null,
        ),
        outgoingServerSettings = ServerSettings(
            type = "smtp",
            host = "smtp.example.com",
            port = 465,
            connectionSecurity = MailConnectionSecurity.SSL_TLS_REQUIRED,
            authenticationType = AuthType.PLAIN,
            username = "test",
            password = "password",
            clientCertificateAlias = null,
        ),
    )

    override fun save(accountSetupState: AccountSetupState) = Unit

Loading