Loading app-feature-preview/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ dependencies { implementation(projects.feature.onboarding) implementation(projects.feature.account.setup) implementation(projects.feature.account.edit) implementation(libs.appauth) implementation(libs.okhttp) Loading app-feature-preview/src/main/java/app/k9mail/feature/preview/FeatureModule.kt +14 −3 Original line number Diff line number Diff line package app.k9mail.feature.preview import app.k9mail.core.common.oauth.OAuthConfigurationFactory import app.k9mail.feature.account.edit.AccountEditExternalContract import app.k9mail.feature.account.setup.AccountSetupExternalContract import app.k9mail.feature.account.setup.featureAccountSetupModule import app.k9mail.feature.preview.account.AccountCreator import app.k9mail.feature.preview.account.AccountOwnerNameProvider import app.k9mail.feature.preview.account.InMemoryAccountStore import app.k9mail.feature.preview.auth.AndroidKeyStoreDirectoryProvider import app.k9mail.feature.preview.auth.AppOAuthConfigurationFactory import app.k9mail.feature.preview.auth.DefaultTrustedSocketFactory Loading @@ -15,11 +16,18 @@ import com.fsck.k9.mail.ssl.LocalKeyStore import com.fsck.k9.mail.ssl.TrustManagerFactory import com.fsck.k9.mail.ssl.TrustedSocketFactory import org.koin.core.module.Module import org.koin.dsl.binds import org.koin.dsl.module val accountModule: Module = module { single { InMemoryAccountStore() } .binds( arrayOf( AccountSetupExternalContract.AccountCreator::class, AccountEditExternalContract.AccountUpdater::class, ), ) factory<AccountSetupExternalContract.AccountOwnerNameProvider> { AccountOwnerNameProvider() } factory<AccountSetupExternalContract.AccountCreator> { AccountCreator() } } val featureModule: Module = module { Loading @@ -31,5 +39,8 @@ val featureModule: Module = module { single<TrustedSocketFactory> { DefaultTrustedSocketFactory(get(), get()) } single<OAuth2TokenProviderFactory> { RealOAuth2TokenProviderFactory(context = get()) } includes(featureAccountSetupModule, accountModule) includes( accountModule, featureAccountSetupModule, ) } app-feature-preview/src/main/java/app/k9mail/feature/preview/account/AccountCreator.kt→app-feature-preview/src/main/java/app/k9mail/feature/preview/account/InMemoryAccountStore.kt +28 −0 Original line number Diff line number Diff line package app.k9mail.feature.preview.account import app.k9mail.feature.account.common.domain.entity.Account import app.k9mail.feature.account.setup.AccountSetupExternalContract import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater.AccountUpdaterResult import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator.AccountCreatorResult import java.util.UUID class AccountCreator : AccountSetupExternalContract.AccountCreator { class InMemoryAccountStore( private val accountMap: MutableMap<String, Account> = mutableMapOf(), ) : AccountCreator, AccountUpdater { override suspend fun createAccount(account: Account): AccountCreatorResult { return AccountCreatorResult.Success(UUID.randomUUID().toString()) accountMap[account.uuid] = account return AccountCreatorResult.Success(account.uuid) } override suspend fun updateAccount(account: Account): AccountUpdaterResult { return if (!accountMap.containsKey(account.uuid)) { AccountUpdaterResult.Error("Account not found") } else { accountMap[account.uuid] = account AccountUpdaterResult.Success(account.uuid) } } } app/core/src/main/java/com/fsck/k9/Preferences.kt +4 −1 Original line number Diff line number Diff line Loading @@ -122,7 +122,6 @@ class Preferences internal constructor( } } @OptIn(ExperimentalCoroutinesApi::class) override fun getAccountFlow(accountUuid: String): Flow<Account> { return callbackFlow { val initialAccount = getAccount(accountUuid) Loading Loading @@ -169,6 +168,10 @@ class Preferences internal constructor( fun newAccount(): Account { val accountUuid = UUID.randomUUID().toString() return newAccount(accountUuid) } fun newAccount(accountUuid: String): Account { val account = Account(accountUuid) accountPreferenceSerializer.loadDefaults(account) Loading app/k9mail/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ dependencies { implementation(projects.feature.launcher) implementation(projects.feature.account.setup) implementation(projects.feature.account.edit) implementation(libs.androidx.appcompat) implementation(libs.androidx.core.ktx) Loading Loading
app-feature-preview/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ dependencies { implementation(projects.feature.onboarding) implementation(projects.feature.account.setup) implementation(projects.feature.account.edit) implementation(libs.appauth) implementation(libs.okhttp) Loading
app-feature-preview/src/main/java/app/k9mail/feature/preview/FeatureModule.kt +14 −3 Original line number Diff line number Diff line package app.k9mail.feature.preview import app.k9mail.core.common.oauth.OAuthConfigurationFactory import app.k9mail.feature.account.edit.AccountEditExternalContract import app.k9mail.feature.account.setup.AccountSetupExternalContract import app.k9mail.feature.account.setup.featureAccountSetupModule import app.k9mail.feature.preview.account.AccountCreator import app.k9mail.feature.preview.account.AccountOwnerNameProvider import app.k9mail.feature.preview.account.InMemoryAccountStore import app.k9mail.feature.preview.auth.AndroidKeyStoreDirectoryProvider import app.k9mail.feature.preview.auth.AppOAuthConfigurationFactory import app.k9mail.feature.preview.auth.DefaultTrustedSocketFactory Loading @@ -15,11 +16,18 @@ import com.fsck.k9.mail.ssl.LocalKeyStore import com.fsck.k9.mail.ssl.TrustManagerFactory import com.fsck.k9.mail.ssl.TrustedSocketFactory import org.koin.core.module.Module import org.koin.dsl.binds import org.koin.dsl.module val accountModule: Module = module { single { InMemoryAccountStore() } .binds( arrayOf( AccountSetupExternalContract.AccountCreator::class, AccountEditExternalContract.AccountUpdater::class, ), ) factory<AccountSetupExternalContract.AccountOwnerNameProvider> { AccountOwnerNameProvider() } factory<AccountSetupExternalContract.AccountCreator> { AccountCreator() } } val featureModule: Module = module { Loading @@ -31,5 +39,8 @@ val featureModule: Module = module { single<TrustedSocketFactory> { DefaultTrustedSocketFactory(get(), get()) } single<OAuth2TokenProviderFactory> { RealOAuth2TokenProviderFactory(context = get()) } includes(featureAccountSetupModule, accountModule) includes( accountModule, featureAccountSetupModule, ) }
app-feature-preview/src/main/java/app/k9mail/feature/preview/account/AccountCreator.kt→app-feature-preview/src/main/java/app/k9mail/feature/preview/account/InMemoryAccountStore.kt +28 −0 Original line number Diff line number Diff line package app.k9mail.feature.preview.account import app.k9mail.feature.account.common.domain.entity.Account import app.k9mail.feature.account.setup.AccountSetupExternalContract import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater.AccountUpdaterResult import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator.AccountCreatorResult import java.util.UUID class AccountCreator : AccountSetupExternalContract.AccountCreator { class InMemoryAccountStore( private val accountMap: MutableMap<String, Account> = mutableMapOf(), ) : AccountCreator, AccountUpdater { override suspend fun createAccount(account: Account): AccountCreatorResult { return AccountCreatorResult.Success(UUID.randomUUID().toString()) accountMap[account.uuid] = account return AccountCreatorResult.Success(account.uuid) } override suspend fun updateAccount(account: Account): AccountUpdaterResult { return if (!accountMap.containsKey(account.uuid)) { AccountUpdaterResult.Error("Account not found") } else { accountMap[account.uuid] = account AccountUpdaterResult.Success(account.uuid) } } }
app/core/src/main/java/com/fsck/k9/Preferences.kt +4 −1 Original line number Diff line number Diff line Loading @@ -122,7 +122,6 @@ class Preferences internal constructor( } } @OptIn(ExperimentalCoroutinesApi::class) override fun getAccountFlow(accountUuid: String): Flow<Account> { return callbackFlow { val initialAccount = getAccount(accountUuid) Loading Loading @@ -169,6 +168,10 @@ class Preferences internal constructor( fun newAccount(): Account { val accountUuid = UUID.randomUUID().toString() return newAccount(accountUuid) } fun newAccount(accountUuid: String): Account { val account = Account(accountUuid) accountPreferenceSerializer.loadDefaults(account) Loading
app/k9mail/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ dependencies { implementation(projects.feature.launcher) implementation(projects.feature.account.setup) implementation(projects.feature.account.edit) implementation(libs.androidx.appcompat) implementation(libs.androidx.core.ktx) Loading