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

Unverified Commit 009e7f88 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé Committed by GitHub
Browse files

Merge pull request #9150 from wmontwe/add-account-name-to-general-settings

Add account name to general settings
parents 8e2656e4 0921d1f0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ dependencies {
    implementation(projects.core.ui.compose.navigation)
    implementation(projects.core.ui.compose.preference)
    implementation(projects.core.ui.legacy.theme2.common)
    implementation(libs.timber)

    testImplementation(projects.core.ui.compose.testing)
}
+8 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import net.thunderbird.feature.account.settings.api.AccountSettingsNavigation
import net.thunderbird.feature.account.settings.impl.DefaultAccountSettingsNavigation
import net.thunderbird.feature.account.settings.impl.domain.AccountSettingsDomainContract.ResourceProvider
import net.thunderbird.feature.account.settings.impl.domain.AccountSettingsDomainContract.UseCase
import net.thunderbird.feature.account.settings.impl.domain.usecase.GetAccountName
import net.thunderbird.feature.account.settings.impl.domain.usecase.GetGeneralPreferences
import net.thunderbird.feature.account.settings.impl.domain.usecase.UpdateGeneralPreferences
import net.thunderbird.feature.account.settings.impl.ui.general.GeneralResourceProvider
@@ -21,6 +22,12 @@ val featureAccountSettingsModule = module {
        )
    }

    factory<UseCase.GetAccountName> {
        GetAccountName(
            repository = get(),
        )
    }

    factory<UseCase.GetGeneralPreferences> {
        GetGeneralPreferences(
            repository = get(),
@@ -37,6 +44,7 @@ val featureAccountSettingsModule = module {
    viewModel { params ->
        GeneralSettingsViewModel(
            accountId = params.get(),
            getAccountName = get(),
            getGeneralPreferences = get(),
            updateGeneralPreferences = get(),
        )
+5 −0
Original line number Diff line number Diff line
@@ -11,12 +11,17 @@ import net.thunderbird.core.ui.compose.preference.api.PreferenceSetting
import net.thunderbird.feature.account.api.AccountId
import net.thunderbird.feature.account.settings.impl.domain.AccountSettingsDomainContract.SettingsError

internal typealias AccountNameOutcome = Outcome<String, SettingsError>
internal typealias AccountSettingsOutcome = Outcome<ImmutableList<Preference>, SettingsError>

internal interface AccountSettingsDomainContract {

    interface UseCase {

        fun interface GetAccountName {
            operator fun invoke(accountId: AccountId): Flow<AccountNameOutcome>
        }

        fun interface GetGeneralPreferences {
            operator fun invoke(accountId: AccountId): Flow<AccountSettingsOutcome>
        }
+29 −0
Original line number Diff line number Diff line
package net.thunderbird.feature.account.settings.impl.domain.usecase

import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import net.thunderbird.core.outcome.Outcome
import net.thunderbird.feature.account.api.AccountId
import net.thunderbird.feature.account.api.profile.AccountProfileRepository
import net.thunderbird.feature.account.settings.impl.domain.AccountNameOutcome
import net.thunderbird.feature.account.settings.impl.domain.AccountSettingsDomainContract
import net.thunderbird.feature.account.settings.impl.domain.AccountSettingsDomainContract.UseCase

internal class GetAccountName(
    private val repository: AccountProfileRepository,
) : UseCase.GetAccountName {

    override fun invoke(accountId: AccountId): Flow<AccountNameOutcome> {
        return repository.getById(accountId).map { profile ->
            if (profile != null) {
                Outcome.success(profile.name)
            } else {
                Outcome.failure(
                    AccountSettingsDomainContract.SettingsError.NotFound(
                        message = "Account profile not found for accountId: ${accountId.value}",
                    ),
                )
            }
        }
    }
}
+25 −1
Original line number Diff line number Diff line
@@ -6,19 +6,37 @@ import kotlinx.coroutines.launch
import net.thunderbird.core.outcome.handle
import net.thunderbird.core.ui.compose.preference.api.PreferenceSetting
import net.thunderbird.feature.account.api.AccountId
import net.thunderbird.feature.account.settings.impl.domain.AccountSettingsDomainContract.SettingsError
import net.thunderbird.feature.account.settings.impl.domain.AccountSettingsDomainContract.UseCase
import net.thunderbird.feature.account.settings.impl.ui.general.GeneralSettingsContract.Effect
import net.thunderbird.feature.account.settings.impl.ui.general.GeneralSettingsContract.Event
import net.thunderbird.feature.account.settings.impl.ui.general.GeneralSettingsContract.State
import timber.log.Timber

internal class GeneralSettingsViewModel(
    private val accountId: AccountId,
    private val getAccountName: UseCase.GetAccountName,
    private val getGeneralPreferences: UseCase.GetGeneralPreferences,
    private val updateGeneralPreferences: UseCase.UpdateGeneralPreferences,
    initialState: State = State(),
) : BaseViewModel<State, Event, Effect>(initialState), GeneralSettingsContract.ViewModel {

    init {
        viewModelScope.launch {
            getAccountName(accountId).collect { outcome ->
                outcome.handle(
                    onSuccess = { accountName ->
                        updateState { state ->
                            state.copy(
                                subtitle = accountName,
                            )
                        }
                    },
                    onFailure = { handleError(it) },
                )
            }
        }

        viewModelScope.launch {
            getGeneralPreferences(accountId).collect { outcome ->
                outcome.handle(
@@ -29,7 +47,7 @@ internal class GeneralSettingsViewModel(
                            )
                        }
                    },
                    onFailure = {},
                    onFailure = { handleError(it) },
                )
            }
        }
@@ -47,4 +65,10 @@ internal class GeneralSettingsViewModel(
            updateGeneralPreferences(accountId, preference)
        }
    }

    private fun handleError(error: SettingsError) {
        when (error) {
            is SettingsError.NotFound -> Timber.w(error.message)
        }
    }
}
Loading