Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/AccountSetupModule.kt +13 −17 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading @@ -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(), Loading Loading @@ -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(), ) } Loading @@ -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, ) Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/data/InMemoryAccountSetupStateRepository.kt +10 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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)) } } feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupContract.kt +0 −4 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -19,7 +16,6 @@ interface AccountSetupContract { } interface ViewModel : UnidirectionalViewModel<State, Event, Effect> { val outgoingViewModel: AccountOutgoingConfigContract.ViewModel val optionsViewModel: AccountOptionsContract.ViewModel } Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupScreen.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -70,7 +71,7 @@ fun AccountSetupScreen( AccountOutgoingConfigScreen( onNext = { dispatch(Event.OnNext) }, onBack = { dispatch(Event.OnBack) }, viewModel = viewModel.outgoingViewModel, viewModel = koinViewModel<AccountOutgoingConfigViewModel>(), ) } Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModel.kt +1 −6 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -133,7 +129,6 @@ class AccountSetupViewModel( } private fun onFinish() { val outgoingState = outgoingViewModel.state.value val optionsState = optionsViewModel.state.value val accountSetupState = accountSetupStateRepository.getState() Loading @@ -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 Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/AccountSetupModule.kt +13 −17 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading @@ -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(), Loading Loading @@ -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(), ) } Loading @@ -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, ) Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/data/InMemoryAccountSetupStateRepository.kt +10 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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)) } }
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupContract.kt +0 −4 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -19,7 +16,6 @@ interface AccountSetupContract { } interface ViewModel : UnidirectionalViewModel<State, Event, Effect> { val outgoingViewModel: AccountOutgoingConfigContract.ViewModel val optionsViewModel: AccountOptionsContract.ViewModel } Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupScreen.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -70,7 +71,7 @@ fun AccountSetupScreen( AccountOutgoingConfigScreen( onNext = { dispatch(Event.OnNext) }, onBack = { dispatch(Event.OnBack) }, viewModel = viewModel.outgoingViewModel, viewModel = koinViewModel<AccountOutgoingConfigViewModel>(), ) } Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModel.kt +1 −6 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -133,7 +129,6 @@ class AccountSetupViewModel( } private fun onFinish() { val outgoingState = outgoingViewModel.state.value val optionsState = optionsViewModel.state.value val accountSetupState = accountSetupStateRepository.getState() Loading @@ -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