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

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

Add AccountUpdater contract and implementation

parent 5694e093
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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)
+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
@@ -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 {
@@ -31,5 +39,8 @@ val featureModule: Module = module {
    single<TrustedSocketFactory> { DefaultTrustedSocketFactory(get(), get()) }
    single<OAuth2TokenProviderFactory> { RealOAuth2TokenProviderFactory(context = get()) }

    includes(featureAccountSetupModule, accountModule)
    includes(
        accountModule,
        featureAccountSetupModule,
    )
}
+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)
        }
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -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)
+7 −0
Original line number Diff line number Diff line
package com.fsck.k9.account

import app.k9mail.feature.account.edit.AccountEditExternalContract
import app.k9mail.feature.account.setup.AccountSetupExternalContract
import org.koin.android.ext.koin.androidApplication
import org.koin.dsl.module
@@ -19,4 +20,10 @@ val newAccountModule = module {
            context = androidApplication(),
        )
    }

    factory<AccountEditExternalContract.AccountUpdater> {
        AccountUpdater(
            preferences = get(),
        )
    }
}
Loading