Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/AccountSetupModule.kt +8 −14 Original line number Diff line number Diff line Loading @@ -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(), Loading @@ -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> { Loading @@ -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> { Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupContract.kt +0 −2 Original line number Diff line number Diff line Loading @@ -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 } Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupScreen.kt +6 −2 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 @@ -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 Loading Loading @@ -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)), ) } Loading @@ -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)), ) } Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModel.kt +3 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading Loading @@ -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) Loading @@ -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) } Loading @@ -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) } Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/preview/PreviewAccountSetupStateRepository.kt +25 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/AccountSetupModule.kt +8 −14 Original line number Diff line number Diff line Loading @@ -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(), Loading @@ -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> { Loading @@ -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> { Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupContract.kt +0 −2 Original line number Diff line number Diff line Loading @@ -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 } Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupScreen.kt +6 −2 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 @@ -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 Loading Loading @@ -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)), ) } Loading @@ -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)), ) } Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModel.kt +3 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading Loading @@ -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) Loading @@ -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) } Loading @@ -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) } Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/preview/PreviewAccountSetupStateRepository.kt +25 −1 Original line number Diff line number Diff line Loading @@ -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