Repo created
This commit is contained in:
parent
75dc487a7a
commit
39c29d175b
6317 changed files with 388324 additions and 2 deletions
24
feature/account/server/validation/build.gradle.kts
Normal file
24
feature/account/server/validation/build.gradle.kts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
plugins {
|
||||
id(ThunderbirdPlugins.Library.androidCompose)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "app.k9mail.feature.account.server.validation"
|
||||
resourcePrefix = "account_server_validation_"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.core.ui.compose.designsystem)
|
||||
implementation(projects.core.common)
|
||||
|
||||
implementation(projects.mail.common)
|
||||
implementation(projects.mail.protocols.imap)
|
||||
implementation(projects.mail.protocols.pop3)
|
||||
implementation(projects.mail.protocols.smtp)
|
||||
|
||||
implementation(projects.feature.account.common)
|
||||
implementation(projects.feature.account.oauth)
|
||||
implementation(projects.feature.account.server.certificate)
|
||||
|
||||
testImplementation(projects.core.ui.compose.testing)
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
|
||||
import app.k9mail.feature.account.oauth.ui.fake.FakeAccountOAuthViewModel
|
||||
|
||||
@Composable
|
||||
@Preview(showBackground = true)
|
||||
internal fun IncomingServerValidationContentPreview() {
|
||||
PreviewWithTheme {
|
||||
ServerValidationContent(
|
||||
onEvent = { },
|
||||
state = ServerValidationContract.State(),
|
||||
isIncomingValidation = true,
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
contentPadding = PaddingValues(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@Preview(showBackground = true)
|
||||
internal fun OutgoingServerValidationContentPreview() {
|
||||
PreviewWithTheme {
|
||||
ServerValidationContent(
|
||||
onEvent = { },
|
||||
state = ServerValidationContract.State(),
|
||||
isIncomingValidation = false,
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
contentPadding = PaddingValues(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import app.k9mail.core.ui.compose.common.annotation.PreviewDevices
|
||||
import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
|
||||
import app.k9mail.feature.account.server.validation.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.validation.ui.fake.FakeBrandNameProvider
|
||||
import app.k9mail.feature.account.server.validation.ui.fake.FakeIncomingServerValidationViewModel
|
||||
import app.k9mail.feature.account.server.validation.ui.fake.FakeOutgoingServerValidationViewModel
|
||||
|
||||
@Composable
|
||||
@PreviewDevices
|
||||
internal fun IncomingServerValidationMainScreenPreview() {
|
||||
PreviewWithTheme {
|
||||
ServerValidationMainScreen(
|
||||
viewModel = FakeIncomingServerValidationViewModel(
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
),
|
||||
brandNameProvider = FakeBrandNameProvider,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@PreviewDevices
|
||||
internal fun OutgoingServerValidationMainScreenPreview() {
|
||||
PreviewWithTheme {
|
||||
ServerValidationMainScreen(
|
||||
viewModel = FakeOutgoingServerValidationViewModel(
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
),
|
||||
brandNameProvider = FakeBrandNameProvider,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import app.k9mail.core.ui.compose.common.annotation.PreviewDevices
|
||||
import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
|
||||
import app.k9mail.feature.account.common.ui.fake.FakeAccountStateRepository
|
||||
import app.k9mail.feature.account.server.certificate.data.InMemoryServerCertificateErrorRepository
|
||||
import app.k9mail.feature.account.server.validation.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.validation.ui.fake.FakeBrandNameProvider
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidationResult
|
||||
|
||||
@Composable
|
||||
@PreviewDevices
|
||||
internal fun IncomingServerValidationScreenPreview() {
|
||||
PreviewWithTheme {
|
||||
ServerValidationScreen(
|
||||
onNext = { },
|
||||
onBack = { },
|
||||
viewModel = IncomingServerValidationViewModel(
|
||||
accountStateRepository = FakeAccountStateRepository(),
|
||||
validateServerSettings = { ServerSettingsValidationResult.Success },
|
||||
authorizationStateRepository = { true },
|
||||
certificateErrorRepository = InMemoryServerCertificateErrorRepository(),
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
),
|
||||
brandNameProvider = FakeBrandNameProvider,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@PreviewDevices
|
||||
internal fun OutgoingServerValidationScreenPreview() {
|
||||
PreviewWithTheme {
|
||||
ServerValidationScreen(
|
||||
onNext = { },
|
||||
onBack = { },
|
||||
viewModel = OutgoingServerValidationViewModel(
|
||||
accountStateRepository = FakeAccountStateRepository(),
|
||||
validateServerSettings = { ServerSettingsValidationResult.Success },
|
||||
authorizationStateRepository = { true },
|
||||
certificateErrorRepository = InMemoryServerCertificateErrorRepository(),
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
),
|
||||
brandNameProvider = FakeBrandNameProvider,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import app.k9mail.core.ui.compose.common.annotation.PreviewDevices
|
||||
import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
|
||||
import app.k9mail.feature.account.server.validation.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.validation.ui.fake.FakeIncomingServerValidationViewModel
|
||||
|
||||
@Composable
|
||||
@PreviewDevices
|
||||
internal fun IncomingServerValidationToolbarScreenPreview() {
|
||||
PreviewWithTheme {
|
||||
ServerValidationToolbarScreen(
|
||||
title = "Incoming server settings",
|
||||
viewModel = FakeIncomingServerValidationViewModel(
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@PreviewDevices
|
||||
internal fun OutgoingServerValidationToolbarScreenPreview() {
|
||||
PreviewWithTheme {
|
||||
ServerValidationToolbarScreen(
|
||||
title = "Incoming server settings",
|
||||
viewModel = FakeIncomingServerValidationViewModel(
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package app.k9mail.feature.account.server.validation.ui.fake
|
||||
|
||||
import app.k9mail.core.ui.compose.common.mvi.BaseViewModel
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
|
||||
/**
|
||||
* Only for previewing the UI.
|
||||
*/
|
||||
class FakeAccountOAuthViewModel :
|
||||
BaseViewModel<AccountOAuthContract.State, AccountOAuthContract.Event, AccountOAuthContract.Effect>(
|
||||
AccountOAuthContract.State(),
|
||||
),
|
||||
AccountOAuthContract.ViewModel {
|
||||
|
||||
override fun initState(state: AccountOAuthContract.State) = Unit
|
||||
override fun event(event: AccountOAuthContract.Event) = Unit
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
package app.k9mail.feature.account.server.validation.ui.fake
|
||||
|
||||
import net.thunderbird.core.common.provider.BrandNameProvider
|
||||
|
||||
internal object FakeBrandNameProvider : BrandNameProvider {
|
||||
override val brandName: String = "Fake Brand Name"
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package app.k9mail.feature.account.server.validation.ui.fake
|
||||
|
||||
import app.k9mail.core.ui.compose.common.mvi.BaseViewModel
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.oauth.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.ViewModel
|
||||
|
||||
class FakeIncomingServerValidationViewModel(
|
||||
override val oAuthViewModel: AccountOAuthContract.ViewModel = FakeAccountOAuthViewModel(),
|
||||
override val isIncomingValidation: Boolean = true,
|
||||
initialState: State = State(),
|
||||
) : BaseViewModel<State, Event, Effect>(initialState), ServerValidationContract.IncomingViewModel {
|
||||
|
||||
val events = mutableListOf<Event>()
|
||||
|
||||
override fun event(event: Event) {
|
||||
events.add(event)
|
||||
}
|
||||
|
||||
fun effect(effect: Effect) {
|
||||
emitEffect(effect)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package app.k9mail.feature.account.server.validation.ui.fake
|
||||
|
||||
import app.k9mail.core.ui.compose.common.mvi.BaseViewModel
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.oauth.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.ViewModel
|
||||
|
||||
class FakeOutgoingServerValidationViewModel(
|
||||
override val oAuthViewModel: AccountOAuthContract.ViewModel = FakeAccountOAuthViewModel(),
|
||||
override val isIncomingValidation: Boolean = true,
|
||||
initialState: State = State(),
|
||||
) : BaseViewModel<State, Event, Effect>(initialState), ServerValidationContract.OutgoingViewModel {
|
||||
|
||||
val events = mutableListOf<Event>()
|
||||
|
||||
override fun event(event: Event) {
|
||||
events.add(event)
|
||||
}
|
||||
|
||||
fun effect(effect: Effect) {
|
||||
emitEffect(effect)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package app.k9mail.feature.account.server.validation
|
||||
|
||||
import app.k9mail.feature.account.common.featureAccountCommonModule
|
||||
import app.k9mail.feature.account.oauth.featureAccountOAuthModule
|
||||
import app.k9mail.feature.account.server.certificate.featureAccountServerCertificateModule
|
||||
import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract
|
||||
import app.k9mail.feature.account.server.validation.domain.usecase.ValidateServerSettings
|
||||
import app.k9mail.feature.account.server.validation.ui.IncomingServerValidationViewModel
|
||||
import app.k9mail.feature.account.server.validation.ui.OutgoingServerValidationViewModel
|
||||
import com.fsck.k9.mail.store.imap.ImapServerSettingsValidator
|
||||
import com.fsck.k9.mail.store.pop3.Pop3ServerSettingsValidator
|
||||
import com.fsck.k9.mail.transport.smtp.SmtpServerSettingsValidator
|
||||
import net.thunderbird.core.common.coreCommonModule
|
||||
import org.koin.core.module.dsl.viewModel
|
||||
import org.koin.core.qualifier.named
|
||||
import org.koin.dsl.module
|
||||
|
||||
val featureAccountServerValidationModule = module {
|
||||
includes(
|
||||
coreCommonModule,
|
||||
featureAccountCommonModule,
|
||||
featureAccountServerCertificateModule,
|
||||
featureAccountOAuthModule,
|
||||
)
|
||||
|
||||
factory<ServerValidationDomainContract.UseCase.ValidateServerSettings> {
|
||||
ValidateServerSettings(
|
||||
authStateStorage = get(),
|
||||
imapValidator = ImapServerSettingsValidator(
|
||||
trustedSocketFactory = get(),
|
||||
oAuth2TokenProviderFactory = get(),
|
||||
clientInfoAppName = get(named("ClientInfoAppName")),
|
||||
clientInfoAppVersion = get(named("ClientInfoAppVersion")),
|
||||
),
|
||||
pop3Validator = Pop3ServerSettingsValidator(
|
||||
trustedSocketFactory = get(),
|
||||
),
|
||||
smtpValidator = SmtpServerSettingsValidator(
|
||||
trustedSocketFactory = get(),
|
||||
oAuth2TokenProviderFactory = get(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
viewModel {
|
||||
IncomingServerValidationViewModel(
|
||||
validateServerSettings = get(),
|
||||
accountStateRepository = get(),
|
||||
authorizationStateRepository = get(),
|
||||
certificateErrorRepository = get(),
|
||||
oAuthViewModel = get(),
|
||||
)
|
||||
}
|
||||
|
||||
viewModel {
|
||||
OutgoingServerValidationViewModel(
|
||||
validateServerSettings = get(),
|
||||
accountStateRepository = get(),
|
||||
authorizationStateRepository = get(),
|
||||
certificateErrorRepository = get(),
|
||||
oAuthViewModel = get(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
package app.k9mail.feature.account.server.validation.domain
|
||||
|
||||
import com.fsck.k9.mail.ServerSettings
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidationResult
|
||||
|
||||
interface ServerValidationDomainContract {
|
||||
|
||||
interface UseCase {
|
||||
|
||||
fun interface ValidateServerSettings {
|
||||
suspend fun execute(settings: ServerSettings): ServerSettingsValidationResult
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package app.k9mail.feature.account.server.validation.domain.usecase
|
||||
|
||||
import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract
|
||||
import com.fsck.k9.mail.ServerSettings
|
||||
import com.fsck.k9.mail.oauth.AuthStateStorage
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidationResult
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidator
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class ValidateServerSettings(
|
||||
private val authStateStorage: AuthStateStorage,
|
||||
private val imapValidator: ServerSettingsValidator,
|
||||
private val pop3Validator: ServerSettingsValidator,
|
||||
private val smtpValidator: ServerSettingsValidator,
|
||||
private val coroutineDispatcher: CoroutineDispatcher = Dispatchers.IO,
|
||||
) : ServerValidationDomainContract.UseCase.ValidateServerSettings {
|
||||
override suspend fun execute(settings: ServerSettings): ServerSettingsValidationResult {
|
||||
return withContext(coroutineDispatcher) {
|
||||
when (settings.type) {
|
||||
"imap" -> imapValidator.checkServerSettings(settings, authStateStorage)
|
||||
"pop3" -> pop3Validator.checkServerSettings(settings, authStateStorage)
|
||||
"smtp" -> smtpValidator.checkServerSettings(settings, authStateStorage)
|
||||
"demo" -> ServerSettingsValidationResult.Success
|
||||
else -> {
|
||||
throw IllegalArgumentException("Unsupported server type: ${settings.type}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,223 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import app.k9mail.core.ui.compose.common.mvi.BaseViewModel
|
||||
import app.k9mail.feature.account.common.domain.AccountDomainContract
|
||||
import app.k9mail.feature.account.common.ui.WizardConstants
|
||||
import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract
|
||||
import app.k9mail.feature.account.oauth.domain.entity.OAuthResult
|
||||
import app.k9mail.feature.account.oauth.domain.entity.isOAuth
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.server.certificate.domain.ServerCertificateDomainContract
|
||||
import app.k9mail.feature.account.server.certificate.domain.entity.ServerCertificateError
|
||||
import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Error
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidationResult
|
||||
import kotlinx.coroutines.cancelChildren
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Suppress("TooManyFunctions")
|
||||
abstract class BaseServerValidationViewModel(
|
||||
private val accountStateRepository: AccountDomainContract.AccountStateRepository,
|
||||
private val validateServerSettings: ServerValidationDomainContract.UseCase.ValidateServerSettings,
|
||||
private val authorizationStateRepository: AccountOAuthDomainContract.AuthorizationStateRepository,
|
||||
private val certificateErrorRepository: ServerCertificateDomainContract.ServerCertificateErrorRepository,
|
||||
override val oAuthViewModel: AccountOAuthContract.ViewModel,
|
||||
override val isIncomingValidation: Boolean = true,
|
||||
initialState: State? = null,
|
||||
) : BaseViewModel<State, Event, Effect>(
|
||||
initialState = initialState ?: accountStateRepository.getState().toServerValidationState(isIncomingValidation),
|
||||
),
|
||||
ServerValidationContract.ViewModel {
|
||||
|
||||
override fun event(event: Event) {
|
||||
when (event) {
|
||||
Event.LoadAccountStateAndValidate -> handleOneTimeEvent(event, ::loadAccountStateAndValidate)
|
||||
is Event.OnOAuthResult -> onOAuthResult(event.result)
|
||||
Event.ValidateServerSettings -> onValidateConfig()
|
||||
Event.OnNextClicked -> navigateNext()
|
||||
Event.OnBackClicked -> onBack()
|
||||
Event.OnRetryClicked -> onRetry()
|
||||
Event.OnCertificateAccepted -> onRetry()
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadAccountStateAndValidate() {
|
||||
updateState {
|
||||
accountStateRepository.getState().toServerValidationState(isIncomingValidation)
|
||||
}
|
||||
onValidateConfig()
|
||||
}
|
||||
|
||||
private fun onValidateConfig() {
|
||||
if (state.value.isSuccess) {
|
||||
navigateNext()
|
||||
} else if (state.value.serverSettings.isOAuth()) {
|
||||
checkOAuthState()
|
||||
} else {
|
||||
validateServerSettings()
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkOAuthState() {
|
||||
val authorizationState = accountStateRepository.getState().authorizationState
|
||||
if (authorizationState != null) {
|
||||
if (authorizationStateRepository.isAuthorized(authorizationState)) {
|
||||
validateServerSettings()
|
||||
} else {
|
||||
startOAuthSignIn()
|
||||
}
|
||||
} else {
|
||||
startOAuthSignIn()
|
||||
}
|
||||
}
|
||||
|
||||
private fun startOAuthSignIn() {
|
||||
val hostname = state.value.serverSettings?.host
|
||||
val emailAddress = state.value.emailAddress
|
||||
|
||||
if (hostname == null || emailAddress == null) {
|
||||
updateError(Error.UnknownError("Hostname or email address not set"))
|
||||
return
|
||||
} else {
|
||||
updateState { state ->
|
||||
state.copy(
|
||||
needsAuthorization = true,
|
||||
)
|
||||
}
|
||||
|
||||
oAuthViewModel.initState(
|
||||
AccountOAuthContract.State(
|
||||
hostname = hostname,
|
||||
emailAddress = emailAddress,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onOAuthResult(result: OAuthResult) {
|
||||
if (result is OAuthResult.Success) {
|
||||
accountStateRepository.setAuthorizationState(result.authorizationState)
|
||||
updateState {
|
||||
it.copy(
|
||||
needsAuthorization = false,
|
||||
)
|
||||
}
|
||||
|
||||
validateServerSettings()
|
||||
}
|
||||
}
|
||||
|
||||
private fun validateServerSettings() {
|
||||
viewModelScope.launch {
|
||||
val serverSettings = state.value.serverSettings
|
||||
if (serverSettings == null) {
|
||||
updateError(Error.UnknownError("Server settings not set"))
|
||||
return@launch
|
||||
}
|
||||
|
||||
updateState {
|
||||
it.copy(isLoading = true)
|
||||
}
|
||||
|
||||
when (val result = validateServerSettings.execute(serverSettings)) {
|
||||
ServerSettingsValidationResult.Success -> updateSuccess()
|
||||
|
||||
is ServerSettingsValidationResult.AuthenticationError -> updateError(
|
||||
Error.AuthenticationError(result.serverMessage),
|
||||
)
|
||||
|
||||
is ServerSettingsValidationResult.CertificateError -> updateError(
|
||||
Error.CertificateError(result.certificateChain),
|
||||
)
|
||||
|
||||
ServerSettingsValidationResult.ClientCertificateError.ClientCertificateExpired -> updateError(
|
||||
Error.ClientCertificateExpired,
|
||||
)
|
||||
|
||||
ServerSettingsValidationResult.ClientCertificateError.ClientCertificateRetrievalFailure -> updateError(
|
||||
Error.ClientCertificateRetrievalFailure,
|
||||
)
|
||||
|
||||
is ServerSettingsValidationResult.NetworkError -> updateError(
|
||||
Error.NetworkError(result.exception),
|
||||
)
|
||||
|
||||
is ServerSettingsValidationResult.ServerError -> updateError(
|
||||
Error.ServerError(result.serverMessage),
|
||||
)
|
||||
|
||||
is ServerSettingsValidationResult.MissingServerCapabilityError -> updateError(
|
||||
Error.MissingServerCapabilityError(result.capabilityName),
|
||||
)
|
||||
|
||||
is ServerSettingsValidationResult.UnknownError -> updateError(
|
||||
Error.UnknownError(result.exception.message ?: "Unknown error"),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateSuccess() {
|
||||
updateState {
|
||||
it.copy(
|
||||
isLoading = false,
|
||||
isSuccess = true,
|
||||
)
|
||||
}
|
||||
|
||||
viewModelScope.launch {
|
||||
delay(WizardConstants.CONTINUE_NEXT_DELAY)
|
||||
navigateNext()
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateError(error: Error) {
|
||||
if (error is Error.CertificateError) {
|
||||
val serverSettings = checkNotNull(state.value.serverSettings)
|
||||
|
||||
certificateErrorRepository.setCertificateError(
|
||||
ServerCertificateError(
|
||||
hostname = serverSettings.host!!,
|
||||
port = serverSettings.port,
|
||||
certificateChain = error.certificateChain,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
updateState {
|
||||
it.copy(
|
||||
error = error,
|
||||
isLoading = false,
|
||||
isSuccess = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onBack() {
|
||||
navigateBack()
|
||||
}
|
||||
|
||||
private fun onRetry() {
|
||||
updateState {
|
||||
it.copy(
|
||||
error = null,
|
||||
)
|
||||
}
|
||||
onValidateConfig()
|
||||
}
|
||||
|
||||
private fun navigateBack() {
|
||||
viewModelScope.coroutineContext.cancelChildren()
|
||||
emitEffect(Effect.NavigateBack)
|
||||
}
|
||||
|
||||
private fun navigateNext() {
|
||||
viewModelScope.coroutineContext.cancelChildren()
|
||||
emitEffect(Effect.NavigateNext)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.feature.account.common.domain.AccountDomainContract
|
||||
import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.server.certificate.domain.ServerCertificateDomainContract
|
||||
import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract.UseCase
|
||||
|
||||
class IncomingServerValidationViewModel(
|
||||
accountStateRepository: AccountDomainContract.AccountStateRepository,
|
||||
validateServerSettings: UseCase.ValidateServerSettings,
|
||||
authorizationStateRepository: AccountOAuthDomainContract.AuthorizationStateRepository,
|
||||
certificateErrorRepository: ServerCertificateDomainContract.ServerCertificateErrorRepository,
|
||||
oAuthViewModel: AccountOAuthContract.ViewModel,
|
||||
initialState: ServerValidationContract.State? = null,
|
||||
) : BaseServerValidationViewModel(
|
||||
accountStateRepository = accountStateRepository,
|
||||
validateServerSettings = validateServerSettings,
|
||||
authorizationStateRepository = authorizationStateRepository,
|
||||
certificateErrorRepository = certificateErrorRepository,
|
||||
oAuthViewModel = oAuthViewModel,
|
||||
initialState = initialState,
|
||||
isIncomingValidation = true,
|
||||
),
|
||||
ServerValidationContract.IncomingViewModel
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.feature.account.common.domain.AccountDomainContract
|
||||
import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.server.certificate.domain.ServerCertificateDomainContract
|
||||
import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract.UseCase
|
||||
|
||||
class OutgoingServerValidationViewModel(
|
||||
accountStateRepository: AccountDomainContract.AccountStateRepository,
|
||||
validateServerSettings: UseCase.ValidateServerSettings,
|
||||
authorizationStateRepository: AccountOAuthDomainContract.AuthorizationStateRepository,
|
||||
certificateErrorRepository: ServerCertificateDomainContract.ServerCertificateErrorRepository,
|
||||
oAuthViewModel: AccountOAuthContract.ViewModel,
|
||||
initialState: ServerValidationContract.State? = null,
|
||||
) : BaseServerValidationViewModel(
|
||||
accountStateRepository = accountStateRepository,
|
||||
validateServerSettings = validateServerSettings,
|
||||
authorizationStateRepository = authorizationStateRepository,
|
||||
certificateErrorRepository = certificateErrorRepository,
|
||||
oAuthViewModel = oAuthViewModel,
|
||||
initialState = initialState,
|
||||
isIncomingValidation = false,
|
||||
),
|
||||
ServerValidationContract.OutgoingViewModel
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.imePadding
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium
|
||||
import app.k9mail.core.ui.compose.designsystem.template.ResponsiveWidthContainer
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.feature.account.common.ui.item.ErrorItem
|
||||
import app.k9mail.feature.account.common.ui.item.ListItem
|
||||
import app.k9mail.feature.account.common.ui.item.LoadingItem
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthView
|
||||
import app.k9mail.feature.account.server.validation.R
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import net.thunderbird.core.ui.compose.common.modifier.testTagAsResourceId
|
||||
|
||||
@Suppress("LongMethod", "ViewModelForwarding")
|
||||
@Composable
|
||||
internal fun ServerValidationContent(
|
||||
state: State,
|
||||
isIncomingValidation: Boolean,
|
||||
oAuthViewModel: AccountOAuthContract.ViewModel,
|
||||
onEvent: (Event) -> Unit,
|
||||
contentPadding: PaddingValues,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val resources = LocalContext.current.resources
|
||||
|
||||
ResponsiveWidthContainer(
|
||||
modifier = Modifier
|
||||
.testTagAsResourceId("AccountValidationContent")
|
||||
.padding(contentPadding)
|
||||
.fillMaxWidth()
|
||||
.then(modifier),
|
||||
) { contentPadding ->
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.imePadding(),
|
||||
contentPadding = contentPadding,
|
||||
horizontalAlignment = Alignment.Start,
|
||||
verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.double, Alignment.CenterVertically),
|
||||
) {
|
||||
if (state.error != null) {
|
||||
item(key = "error") {
|
||||
// TODO add raw error message
|
||||
ErrorItem(
|
||||
title = stringResource(
|
||||
id = if (isIncomingValidation) {
|
||||
R.string.account_server_validation_incoming_loading_error
|
||||
} else {
|
||||
R.string.account_server_validation_outgoing_loading_error
|
||||
},
|
||||
),
|
||||
message = state.error.toResourceString(resources),
|
||||
onRetry = { onEvent(Event.OnRetryClicked) },
|
||||
)
|
||||
}
|
||||
} else if (state.isSuccess) {
|
||||
item(key = "success") {
|
||||
LoadingItem(
|
||||
message = stringResource(
|
||||
id = if (isIncomingValidation) {
|
||||
R.string.account_server_validation_incoming_success
|
||||
} else {
|
||||
R.string.account_server_validation_outgoing_success
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
} else if (state.needsAuthorization) {
|
||||
item(key = "oauth") {
|
||||
ListItem {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth(),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
TextTitleMedium(
|
||||
text = stringResource(
|
||||
id = R.string.account_server_validation_sign_in,
|
||||
),
|
||||
)
|
||||
Spacer(modifier = Modifier.padding(MainTheme.spacings.default))
|
||||
AccountOAuthView(
|
||||
onOAuthResult = { result -> onEvent(Event.OnOAuthResult(result)) },
|
||||
viewModel = oAuthViewModel,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
item(key = "loading") {
|
||||
LoadingItem(
|
||||
message = stringResource(
|
||||
id = if (isIncomingValidation) {
|
||||
R.string.account_server_validation_incoming_loading_message
|
||||
} else {
|
||||
R.string.account_server_validation_outgoing_loading_message
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel
|
||||
import app.k9mail.feature.account.oauth.domain.entity.OAuthResult
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import com.fsck.k9.mail.ServerSettings
|
||||
import java.io.IOException
|
||||
import java.security.cert.X509Certificate
|
||||
|
||||
interface ServerValidationContract {
|
||||
|
||||
interface ViewModel : UnidirectionalViewModel<State, Event, Effect> {
|
||||
val isIncomingValidation: Boolean
|
||||
val oAuthViewModel: AccountOAuthContract.ViewModel
|
||||
}
|
||||
|
||||
interface OutgoingViewModel : ViewModel
|
||||
interface IncomingViewModel : ViewModel
|
||||
|
||||
data class State(
|
||||
val emailAddress: String? = null,
|
||||
val serverSettings: ServerSettings? = null,
|
||||
val needsAuthorization: Boolean = false,
|
||||
val isSuccess: Boolean = false,
|
||||
val error: Error? = null,
|
||||
val isLoading: Boolean = false,
|
||||
)
|
||||
|
||||
sealed interface Event {
|
||||
object LoadAccountStateAndValidate : Event
|
||||
|
||||
data class OnOAuthResult(val result: OAuthResult) : Event
|
||||
|
||||
object ValidateServerSettings : Event
|
||||
object OnNextClicked : Event
|
||||
object OnBackClicked : Event
|
||||
object OnRetryClicked : Event
|
||||
object OnCertificateAccepted : Event
|
||||
}
|
||||
|
||||
sealed interface Effect {
|
||||
object NavigateNext : Effect
|
||||
object NavigateBack : Effect
|
||||
}
|
||||
|
||||
sealed interface Error {
|
||||
data class NetworkError(val exception: IOException) : Error
|
||||
data class CertificateError(val certificateChain: List<X509Certificate>) : Error
|
||||
data object ClientCertificateRetrievalFailure : Error
|
||||
data object ClientCertificateExpired : Error
|
||||
data class AuthenticationError(val serverMessage: String?) : Error
|
||||
data class ServerError(val serverMessage: String?) : Error
|
||||
data class MissingServerCapabilityError(val capabilityName: String) : Error
|
||||
data class UnknownError(val message: String) : Error
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import app.k9mail.core.ui.compose.common.mvi.observeWithoutEffect
|
||||
import app.k9mail.core.ui.compose.designsystem.template.Scaffold
|
||||
import app.k9mail.feature.account.common.ui.AppTitleTopHeader
|
||||
import app.k9mail.feature.account.common.ui.WizardNavigationBar
|
||||
import app.k9mail.feature.account.common.ui.WizardNavigationBarState
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.ViewModel
|
||||
import net.thunderbird.core.common.provider.BrandNameProvider
|
||||
|
||||
@Composable
|
||||
internal fun ServerValidationMainScreen(
|
||||
viewModel: ViewModel,
|
||||
brandNameProvider: BrandNameProvider,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val (state, dispatch) = viewModel.observeWithoutEffect()
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
AppTitleTopHeader(
|
||||
title = brandNameProvider.brandName,
|
||||
)
|
||||
},
|
||||
bottomBar = {
|
||||
WizardNavigationBar(
|
||||
onNextClick = {},
|
||||
onBackClick = { dispatch(Event.OnBackClicked) },
|
||||
state = WizardNavigationBarState(
|
||||
showNext = false,
|
||||
),
|
||||
)
|
||||
},
|
||||
modifier = modifier,
|
||||
) { innerPadding ->
|
||||
ServerValidationContent(
|
||||
onEvent = { dispatch(it) },
|
||||
state = state.value,
|
||||
isIncomingValidation = viewModel.isIncomingValidation,
|
||||
oAuthViewModel = viewModel.oAuthViewModel,
|
||||
contentPadding = innerPadding,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.ui.Modifier
|
||||
import app.k9mail.core.ui.compose.common.mvi.observe
|
||||
import app.k9mail.feature.account.server.certificate.ui.ServerCertificateErrorScreen
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.ViewModel
|
||||
import net.thunderbird.core.common.provider.BrandNameProvider
|
||||
|
||||
@Suppress("ViewModelForwarding")
|
||||
@Composable
|
||||
fun ServerValidationScreen(
|
||||
onNext: () -> Unit,
|
||||
onBack: () -> Unit,
|
||||
viewModel: ViewModel,
|
||||
brandNameProvider: BrandNameProvider,
|
||||
modifier: Modifier = Modifier,
|
||||
title: String? = null,
|
||||
) {
|
||||
val (state, dispatch) = viewModel.observe { effect ->
|
||||
when (effect) {
|
||||
is Effect.NavigateNext -> onNext()
|
||||
is Effect.NavigateBack -> onBack()
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
dispatch(Event.LoadAccountStateAndValidate)
|
||||
}
|
||||
|
||||
BackHandler {
|
||||
dispatch(Event.OnBackClicked)
|
||||
}
|
||||
|
||||
if (state.value.error is ServerValidationContract.Error.CertificateError) {
|
||||
ServerCertificateErrorScreen(
|
||||
onCertificateAccepted = { dispatch(Event.OnCertificateAccepted) },
|
||||
onBack = { dispatch(Event.OnBackClicked) },
|
||||
modifier = modifier,
|
||||
)
|
||||
} else {
|
||||
if (title != null) {
|
||||
ServerValidationToolbarScreen(
|
||||
title = title,
|
||||
viewModel = viewModel,
|
||||
modifier = modifier,
|
||||
)
|
||||
} else {
|
||||
ServerValidationMainScreen(
|
||||
viewModel = viewModel,
|
||||
brandNameProvider = brandNameProvider,
|
||||
modifier = modifier,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.feature.account.common.domain.entity.AccountState
|
||||
|
||||
internal fun AccountState.toServerValidationState(isIncomingValidation: Boolean): ServerValidationContract.State {
|
||||
return ServerValidationContract.State(
|
||||
emailAddress = emailAddress,
|
||||
serverSettings = if (isIncomingValidation) incomingServerSettings else outgoingServerSettings,
|
||||
isLoading = false,
|
||||
isSuccess = false,
|
||||
error = null,
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import android.content.res.Resources
|
||||
import androidx.annotation.StringRes
|
||||
import app.k9mail.feature.account.server.validation.R
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Error
|
||||
import app.k9mail.feature.account.common.R as CommonR
|
||||
|
||||
internal fun Error.toResourceString(resources: Resources): String {
|
||||
return when (this) {
|
||||
is Error.CertificateError -> error("Handle CertificateError using ServerCertificateErrorScreen")
|
||||
|
||||
is Error.AuthenticationError -> {
|
||||
resources.buildErrorString(
|
||||
titleResId = R.string.account_server_validation_error_authentication,
|
||||
detailsResId = CommonR.string.account_common_error_server_message,
|
||||
detailsMessage = serverMessage,
|
||||
)
|
||||
}
|
||||
|
||||
is Error.NetworkError -> {
|
||||
resources.buildErrorString(
|
||||
titleResId = R.string.account_server_validation_error_network,
|
||||
detailsResId = R.string.account_server_validation_error_details,
|
||||
detailsMessage = exception.message,
|
||||
)
|
||||
}
|
||||
|
||||
is Error.ServerError -> {
|
||||
resources.buildErrorString(
|
||||
titleResId = R.string.account_server_validation_error_server,
|
||||
detailsResId = CommonR.string.account_common_error_server_message,
|
||||
detailsMessage = serverMessage,
|
||||
)
|
||||
}
|
||||
|
||||
is Error.UnknownError -> {
|
||||
resources.buildErrorString(
|
||||
titleResId = R.string.account_server_validation_error_unknown,
|
||||
detailsResId = R.string.account_server_validation_error_details,
|
||||
detailsMessage = message,
|
||||
)
|
||||
}
|
||||
|
||||
Error.ClientCertificateExpired -> {
|
||||
resources.getString(R.string.account_server_validation_error_client_certificate_expired)
|
||||
}
|
||||
|
||||
Error.ClientCertificateRetrievalFailure -> {
|
||||
resources.getString(R.string.account_server_validation_error_client_certificate_retrieval_failure)
|
||||
}
|
||||
|
||||
is Error.MissingServerCapabilityError -> {
|
||||
resources.buildErrorString(
|
||||
titleResId = R.string.account_server_validation_error_missing_server_capability,
|
||||
detailsResId = R.string.account_server_validation_error_missing_server_capability_details,
|
||||
detailsMessage = capabilityName,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Resources.buildErrorString(
|
||||
@StringRes titleResId: Int,
|
||||
@StringRes detailsResId: Int,
|
||||
detailsMessage: String?,
|
||||
): String {
|
||||
val title = getString(titleResId)
|
||||
return if (detailsMessage != null) {
|
||||
val details = getString(detailsResId, detailsMessage)
|
||||
"$title\n\n$details"
|
||||
} else {
|
||||
title
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import app.k9mail.core.ui.compose.common.mvi.observeWithoutEffect
|
||||
import app.k9mail.core.ui.compose.designsystem.organism.TopAppBarWithBackButton
|
||||
import app.k9mail.core.ui.compose.designsystem.template.Scaffold
|
||||
import app.k9mail.feature.account.common.ui.WizardNavigationBar
|
||||
import app.k9mail.feature.account.common.ui.WizardNavigationBarState
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.ViewModel
|
||||
|
||||
@Composable
|
||||
internal fun ServerValidationToolbarScreen(
|
||||
title: String,
|
||||
viewModel: ViewModel,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val (state, dispatch) = viewModel.observeWithoutEffect()
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
TopAppBarWithBackButton(
|
||||
title = title,
|
||||
onBackClick = { dispatch(Event.OnBackClicked) },
|
||||
)
|
||||
},
|
||||
bottomBar = {
|
||||
WizardNavigationBar(
|
||||
onNextClick = {},
|
||||
onBackClick = { dispatch(Event.OnBackClicked) },
|
||||
state = WizardNavigationBarState(
|
||||
showNext = false,
|
||||
),
|
||||
)
|
||||
},
|
||||
modifier = modifier,
|
||||
) { innerPadding ->
|
||||
ServerValidationContent(
|
||||
onEvent = { dispatch(it) },
|
||||
state = state.value,
|
||||
isIncomingValidation = viewModel.isIncomingValidation,
|
||||
oAuthViewModel = viewModel.oAuthViewModel,
|
||||
contentPadding = innerPadding,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">تعذر الوصول إلى شهادة العميل</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">شهادة العميل لم تعد صالحة</string>
|
||||
<string name="account_server_validation_error_details">التفاصيل:\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">هناك إمكانية مفقودة في الخادم</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">يفتقد الخادم هذه الإمكانية:\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">التحقق من إعدادات خادم البريد الوارد…</string>
|
||||
<string name="account_server_validation_incoming_success">تم التحقق من إعدادات خادم البريد الوارد</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">التحقق من إعدادات خادم البريد الصادر…</string>
|
||||
<string name="account_server_validation_sign_in">يُرجى القيام بتسجيل الدخول</string>
|
||||
<string name="account_server_validation_incoming_loading_error">فشل التحقق من إعدادات خادم البريد الوارد</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">فشل التحقق من إعدادات خادم البريد الصادر</string>
|
||||
<string name="account_server_validation_error_authentication">خطأ في المصادقة</string>
|
||||
<string name="account_server_validation_error_network">خطأ في الشبكة</string>
|
||||
<string name="account_server_validation_error_server">خطأ في الخادم</string>
|
||||
<string name="account_server_validation_error_unknown">خطأ غير معروف</string>
|
||||
<string name="account_server_validation_outgoing_success">تم التحقق من إعدادات خادم البريد الصادر</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_network">Памылка сеткі</string>
|
||||
<string name="account_server_validation_error_authentication">Памылка аўтэнтыфікацыі</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Проверява настройките на сървър за входяща поща…</string>
|
||||
<string name="account_server_validation_error_authentication">Грешка при удостоверяване</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Проверява настройките на сървър за изходяща поща…</string>
|
||||
<string name="account_server_validation_error_network">Мрежова грешка</string>
|
||||
<string name="account_server_validation_outgoing_success">Настройките на сървър за изходяща поща са потвърдени</string>
|
||||
<string name="account_server_validation_error_unknown">Непозната грешка</string>
|
||||
<string name="account_server_validation_sign_in">Моля впишете се</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Проверката на настройките на сървър за изходяща поща се провали</string>
|
||||
<string name="account_server_validation_incoming_success">Настройките на сървър за входяща поща са потвърдени</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Проверката на настройките на сървъра за входяща поща се провали</string>
|
||||
<string name="account_server_validation_error_server">Грешка на сървъра</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Клиентският сертификат вече не е валиден</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Клиентският сертификат не може да бъде достъпен</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Липсващи възможности на сървъра</string>
|
||||
<string name="account_server_validation_error_details">Подробности:\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Сървърът не поддържа тази операция:\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_authentication">Dilesadur fazi</string>
|
||||
<string name="account_server_validation_error_network">Fazi rouedad</string>
|
||||
<string name="account_server_validation_error_server">Fazi dafariat</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_authentication">Greška pri autentikaciji</string>
|
||||
<string name="account_server_validation_error_network">Mrežna greška</string>
|
||||
<string name="account_server_validation_error_server">Greška servera</string>
|
||||
<string name="account_server_validation_error_unknown">Nepoznata greška</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Sertifikat klijenta više nije važeći</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Ne može se pristupiti sertifikatu klijenta</string>
|
||||
<string name="account_server_validation_error_details">Detalji:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Server ne posjeduje ovu sposobnost:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Server nema ovu sposobnost</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Proveravanje postavki dolazećeg servera…</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Proveravanje postavki dolazećeg servera neuspješno</string>
|
||||
<string name="account_server_validation_incoming_success">Postavke dolazećeg servera verifikovane</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Proveravanje postavki odlazećeg servera…</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Proveravanje postavki odlazećeg servera neuspješno</string>
|
||||
<string name="account_server_validation_outgoing_success">Postavke odlazećeg servera verifikovane</string>
|
||||
<string name="account_server_validation_sign_in">Molimo prijavite se</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">S\'està comprovant la configuració del servidor d\'entrada…</string>
|
||||
<string name="account_server_validation_error_authentication">Error d\'autenticació</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">S\'està comprovant la configuració del servidor de sortida…</string>
|
||||
<string name="account_server_validation_error_network">Error de la xarxa</string>
|
||||
<string name="account_server_validation_outgoing_success">La configuració del servidor de sortida s\'ha verificat</string>
|
||||
<string name="account_server_validation_error_unknown">Error desconegut</string>
|
||||
<string name="account_server_validation_sign_in">Si us plau, inicieu la sessió</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Ha fallat la comprovació de la configuració del servidor de sortida</string>
|
||||
<string name="account_server_validation_incoming_success">La configuració del servidor d\'entrada s\'ha verificat</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Ha fallat la comprovació de la configuració del servidor d\'entrada</string>
|
||||
<string name="account_server_validation_error_server">Error del servidor</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Falta capacitat al servidor</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">No s\'ha pogut accedir al certificat de client</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Al servidor li falta aquesta capacitat:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">El certificat de client ja no és vàlid</string>
|
||||
<string name="account_server_validation_error_details">Detalls:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_server">Sbagliu di u servitore</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Funzione assente nant’à u servitore</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Cuntrollu di i parametri di u servitore d’entrata…</string>
|
||||
<string name="account_server_validation_incoming_success">I parametri di u servitore d’entrata sò stati verificati</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Cuntrollu di i parametri di u servitore d’esciuta…</string>
|
||||
<string name="account_server_validation_outgoing_success">I parametri di u servitore d’esciuta sò stati verificati</string>
|
||||
<string name="account_server_validation_sign_in">Cunnittitevi</string>
|
||||
<string name="account_server_validation_error_authentication">Sbagliu d’autenticazione</string>
|
||||
<string name="account_server_validation_error_network">Sbagliu di a reta</string>
|
||||
<string name="account_server_validation_error_unknown">Sbagliu scunnisciutu</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">U certificatu di u cliente ùn hè più accettevule</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">U certificatu di u cliente ùn pò micca esse acciditu</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">U servitore ùn pussede micca sta funzione :
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_details">Detaglii :
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Fiascu di u cuntrollu di i parametri di u servitore d’entrata</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Fiascu di u cuntrollu di i parametri di u servitore d’esciuta</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Kontrola nastavení serveru příchozí pošty…</string>
|
||||
<string name="account_server_validation_error_authentication">Chyba autentizace</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Kontrola nastavení serveru odchozí pošty…</string>
|
||||
<string name="account_server_validation_error_network">Chyba sítě</string>
|
||||
<string name="account_server_validation_outgoing_success">Nastavení serveru odchozí pošty je ověřené</string>
|
||||
<string name="account_server_validation_error_unknown">Neznámá chyba</string>
|
||||
<string name="account_server_validation_sign_in">Přihlaste se</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Kontrola nastavení serveru odchozí pošty se nezdařila</string>
|
||||
<string name="account_server_validation_incoming_success">Nastavení serveru příchozí pošty je ověřené</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Kontrola nastavení serveru příchozí pošty se nezdařila</string>
|
||||
<string name="account_server_validation_error_server">Chyba serveru</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Klientský certifikát je již neplatný</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Klientský certifikát není přístupný</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Chybějící funkcionalita</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Serveru chybí tato funkcionalita:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_details">Detaily:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Einstellungen des Posteingangsservers werden überprüft…</string>
|
||||
<string name="account_server_validation_error_authentication">Authentifizierungsfehler</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Einstellungen des Postausgangsservers werden überprüft…</string>
|
||||
<string name="account_server_validation_error_network">Netzwerkfehler</string>
|
||||
<string name="account_server_validation_outgoing_success">Einstellungen des Postausgangsservers sind verifiziert</string>
|
||||
<string name="account_server_validation_error_unknown">Unbekannter Fehler</string>
|
||||
<string name="account_server_validation_sign_in">Bitte anmelden</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Prüfung der Einstellungen des Postausgangsservers fehlgeschlagen</string>
|
||||
<string name="account_server_validation_incoming_success">Einstellungen des Posteingangsservers sind verifiziert</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Prüfung der Einstellungen des Posteingangservers fehlgeschlagen</string>
|
||||
<string name="account_server_validation_error_server">Serverfehler</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Fehlende Serverfähigkeit</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Auf das Client-Zertifikat konnte nicht zugegriffen werden</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Der Server unterstützt diese Fähigkeit nicht:\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Das Client-Zertifikat ist nicht mehr gültig</string>
|
||||
<string name="account_server_validation_error_details">Details:\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_authentication">Σφάλμα ελέγχου ταυτότητας</string>
|
||||
<string name="account_server_validation_error_network">Σφάλμα δικτύου</string>
|
||||
<string name="account_server_validation_error_unknown">Άγνωστο σφάλμα</string>
|
||||
<string name="account_server_validation_error_server">Σφάλμα διακομιστή</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Το πιστοποιητικό πελάτη δεν είναι πλέον έγκυρο</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Δεν ήταν δυνατή η πρόσβαση στο πιστοποιητικό πελάτη</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Αποτυχία ελέγχου των ρυθμίσεων του διακομιστή εξερχομένων</string>
|
||||
<string name="account_server_validation_error_details">Λεπτομέρειες:\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Ο διακομιστής στερείται αυτής της δυνατότητας:\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Έλεγχος ρυθμίσεων διακομιστή εισερχομένων…</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Αποτυχία ελέγχου των ρυθμίσεων του διακομιστή εισερχομένων</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Έλεγχος ρυθμίσεων διακομιστή εξερχομένων…</string>
|
||||
<string name="account_server_validation_sign_in">Πραγματοποιήστε σύνδεση</string>
|
||||
<string name="account_server_validation_incoming_success">Οι ρυθμίσεις του διακομιστή εισερχομένων επαληθεύτηκαν</string>
|
||||
<string name="account_server_validation_outgoing_success">Οι ρυθμίσεις του διακομιστή εξερχομένων επαληθεύτηκαν</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Έλλειψη δυνατότητας διακομιστή</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Checking incoming server settings…</string>
|
||||
<string name="account_server_validation_error_authentication">Authentication error</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Checking outgoing server settings…</string>
|
||||
<string name="account_server_validation_error_network">Network error</string>
|
||||
<string name="account_server_validation_outgoing_success">Outgoing server settings are valid</string>
|
||||
<string name="account_server_validation_error_unknown">Unknown error</string>
|
||||
<string name="account_server_validation_sign_in">Please sign in</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Checking outgoing server settings failed</string>
|
||||
<string name="account_server_validation_incoming_success">Incoming server settings are valid</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Checking incoming server settings failed</string>
|
||||
<string name="account_server_validation_error_server">Server error</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_details">Detaloj:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_sign_in">Bonvolu saluti</string>
|
||||
<string name="account_server_validation_error_server">Servila eraro</string>
|
||||
<string name="account_server_validation_error_network">Reta eraro</string>
|
||||
<string name="account_server_validation_error_unknown">Nekonata eraro</string>
|
||||
<string name="account_server_validation_error_authentication">Aŭtentokontrola eraro</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Mankata servila kapablo</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">La klienta atestilo ne plu estas valida</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">La klienta atestilo ne povis esti atingata</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">La servilo ne havas tiun kapablon:\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Kontrolo de la agordoj eniran servilon fiaskis</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Kontrolas agordojn de la enira servilo…</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Kontrolas agordojn de la elira servilo…</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Kontrolo de la agordoj eliran servilon fiaskis</string>
|
||||
<string name="account_server_validation_incoming_success">Eniran servilon agordoj kontrolitaj</string>
|
||||
<string name="account_server_validation_outgoing_success">Eliran servilon agordoj kontrolitaj</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Comprobando los ajustes del servidor entrante…</string>
|
||||
<string name="account_server_validation_error_authentication">Error de autenticación</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Comprobando los ajustes del servidor saliente…</string>
|
||||
<string name="account_server_validation_error_network">Error de red</string>
|
||||
<string name="account_server_validation_outgoing_success">Configuración del servidor saliente verificada</string>
|
||||
<string name="account_server_validation_error_unknown">Error desconocido</string>
|
||||
<string name="account_server_validation_sign_in">Seguir con el inicio de sesión</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">No se han podido comprobar los ajustes del servidor saliente</string>
|
||||
<string name="account_server_validation_incoming_success">Configuración del servidor entrante verificada</string>
|
||||
<string name="account_server_validation_incoming_loading_error">No se han podido comprobar los ajustes del servidor entrante</string>
|
||||
<string name="account_server_validation_error_server">Error del servidor</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Falta capacidad en el servidor</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">No se ha podido acceder al certificado del cliente</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Al servidor le falta esta capacidad:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">El certificado del cliente ya no es válido</string>
|
||||
<string name="account_server_validation_error_details">Detalles:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Kontrollime saabuva e-posti serveriseadistusi…</string>
|
||||
<string name="account_server_validation_error_authentication">Viga autentimisel</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Kontrollime väljuva e-posti serveriseadistusi…</string>
|
||||
<string name="account_server_validation_error_network">Võrguühenduse viga</string>
|
||||
<string name="account_server_validation_outgoing_success">Väljuva e-posti serveriseadistused on üle kontrollitud</string>
|
||||
<string name="account_server_validation_error_unknown">Teadmata viga</string>
|
||||
<string name="account_server_validation_sign_in">Palun logi sisse</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Väljuva e-posti serveriseadistuste kontrollimine ei õnnestunud</string>
|
||||
<string name="account_server_validation_incoming_success">Saabuva e-posti serveriseadistused on üle kontrollitud</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Saabuva e-posti serveriseadistuste kontrollimine ei õnnestunud</string>
|
||||
<string name="account_server_validation_error_server">Serveri viga</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Serveril puudub vajalik võimekus</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Kliendisertifikaati ei õnnestunud laadida</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Serveril puudub vajalik võimekus:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Kliendisertifikaadi kehtivus on lõppenud</string>
|
||||
<string name="account_server_validation_error_details">Üksikasjalik teave:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Sarrerako zerbitzariaren ezarpenak egiaztatzen…</string>
|
||||
<string name="account_server_validation_error_authentication">Autentifikazio errorea</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Irteerako zerbitzariaren ezarpenak egiaztatzen…</string>
|
||||
<string name="account_server_validation_error_network">Sarearen errorea</string>
|
||||
<string name="account_server_validation_outgoing_success">Irteerako zerbitzariaren ezarpenak egiaztatu dira</string>
|
||||
<string name="account_server_validation_error_unknown">Errore ezezaguna</string>
|
||||
<string name="account_server_validation_sign_in">Mesedez hasi saioa</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Akatsa irteerako zerbitzariaren ezarpenak egiaztatzerakoan</string>
|
||||
<string name="account_server_validation_incoming_success">Sarrerako zerbitzariaren ezarpenak egiaztatu dira</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Akatsa sarrerako zerbitzariaren ezarpenak egiaztatzean</string>
|
||||
<string name="account_server_validation_error_server">Zerbitzariaren errorea</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Zerbitzariari gaitasun hau falta zaio:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Bezeroaren ziurtagiriak dagoeneko ez du balio</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Ezin izan da bezeroaren ziurtagiria atzitu</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Zerbitzariaren gaitasuna falta da</string>
|
||||
<string name="account_server_validation_error_details">Xehetasunak:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">بررسی تنظیمات سرور ورودی …</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">قابلیتهای سرور پیدا نشد</string>
|
||||
<string name="account_server_validation_error_authentication">خطای احراز هویت</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">بررسی تنظیمات سرور خروجی …</string>
|
||||
<string name="account_server_validation_error_network">خطای شبکه</string>
|
||||
<string name="account_server_validation_outgoing_success">تنظیمات سرور خروجی اعتبارسنجی شد</string>
|
||||
<string name="account_server_validation_error_unknown">خطای ناشناخته</string>
|
||||
<string name="account_server_validation_sign_in">لطفا وارد شوید</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">بررسی تنظیمات سرور خروجی با خطا مواجه شد</string>
|
||||
<string name="account_server_validation_incoming_success">تنظیمات سرور ورودی اعتبارسنجی شد</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">گواهینامهٔ کارخواه در دسترس نیست</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">سرور این قابلیت را ندارد:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_error">بررسی تنظیمات سرور ورودی با خطا مواجه شد</string>
|
||||
<string name="account_server_validation_error_server">خطای سرور</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">گواهینامهٔ کارخواه دیگر معتبر نیست</string>
|
||||
<string name="account_server_validation_error_details">جزییات:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Tarkistetaan saapuvan postin palvelimen asetuksia…</string>
|
||||
<string name="account_server_validation_error_authentication">Todennusvirhe</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Tarkistetaan lähtevän postin palvelimen asetuksia…</string>
|
||||
<string name="account_server_validation_error_network">Verkkovirhe</string>
|
||||
<string name="account_server_validation_outgoing_success">Lähtevän postin palvelimen asetukset on vahvistettu</string>
|
||||
<string name="account_server_validation_error_unknown">Tuntematon virhe</string>
|
||||
<string name="account_server_validation_sign_in">Kirjaudu sisään</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Lähtevän postin palvelimen asetusten tarkistaminen epäonnistui</string>
|
||||
<string name="account_server_validation_incoming_success">Saapuvan postin palvelimen asetukset on vahvistettu</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Saapuvan postin palvelimen asetusten tarkistaminen epäonnistui</string>
|
||||
<string name="account_server_validation_error_server">Palvelinvirhe</string>
|
||||
<string name="account_server_validation_error_details">Lisätiedot:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Asiakkaan varmenne ei ole enää kelvollinen</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Ei pääsyä asiakkaan varmenteeseen</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Vérification des paramètres du serveur entrant…</string>
|
||||
<string name="account_server_validation_error_authentication">Erreur d\'authentification</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Vérification des paramètres du serveur sortant…</string>
|
||||
<string name="account_server_validation_error_network">Erreur réseau</string>
|
||||
<string name="account_server_validation_outgoing_success">Les paramètres du serveur sortant sont confirmés</string>
|
||||
<string name="account_server_validation_error_unknown">Erreur inconnue</string>
|
||||
<string name="account_server_validation_sign_in">Connectez-vous</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Échec de vérification des paramètres du serveur sortant</string>
|
||||
<string name="account_server_validation_incoming_success">Les paramètres du serveur entrant sont confirmés</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Échec de vérification des paramètres du serveur entrant</string>
|
||||
<string name="account_server_validation_error_server">Erreur du serveur</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Le serveur ne dispose pas d’une fonction</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Impossible d’accéder au certificat client</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Le serveur ne dispose pas de cette fonction :\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Le certificat client n’est plus valide</string>
|
||||
<string name="account_server_validation_error_details">Détails :\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Ynstellingen foar ynkommende server kontrolearje…</string>
|
||||
<string name="account_server_validation_error_authentication">Autentikaasjeflater</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Ynstellingen foar útgeande server kontrolearje…</string>
|
||||
<string name="account_server_validation_error_network">Netwurkflater</string>
|
||||
<string name="account_server_validation_outgoing_success">Ynstellingen foar útgeande server ferifiearre</string>
|
||||
<string name="account_server_validation_error_unknown">Unbekende flater</string>
|
||||
<string name="account_server_validation_sign_in">Meld jo oan</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Ynstellingen foar útgeande server kontrolearje mislearre</string>
|
||||
<string name="account_server_validation_incoming_success">Ynstellingen foar ynkommende server ferifiearre</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Ynstellingen foar ynkommende server kontrolearje mislearre</string>
|
||||
<string name="account_server_validation_error_server">Serverflater</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Untbrekkende serverfunksjonaliteit</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">It clientsertifikaat koe net rieplachte wurde</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">De server mist dizze funksjonaliteit:\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">It clientsertifikaat is net langer jildich</string>
|
||||
<string name="account_server_validation_error_details">Details:\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Níl teastas an chliaint bailí a thuilleadh</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Cumas freastalaí in easnamh</string>
|
||||
<string name="account_server_validation_error_details">Sonraí:\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Tá an cumas seo in easnamh ar an bhfreastalaí:\n%s</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Socruithe freastalaí amach á seiceáil…</string>
|
||||
<string name="account_server_validation_error_authentication">Earráid fhíordheimhnithe</string>
|
||||
<string name="account_server_validation_error_network">Earráid líonra</string>
|
||||
<string name="account_server_validation_error_server">Earráid freastalaí</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Theip ar shocruithe an fhreastalaí isteach a sheiceáil</string>
|
||||
<string name="account_server_validation_error_unknown">Earráid anaithnid</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Níorbh fhéidir teastas an chliaint a rochtain</string>
|
||||
<string name="account_server_validation_incoming_success">Fíoraíodh socruithe freastalaí isteach</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Ag seiceáil socruithe freastalaí isteach…</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Theip ar shocruithe an fhreastalaí amach a sheiceáil</string>
|
||||
<string name="account_server_validation_outgoing_success">Fíoraíodh socruithe an fhreastalaí amach</string>
|
||||
<string name="account_server_validation_sign_in">Sínigh isteach le do thoil</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">A’ sgrùdadh roghainnean an fhrithealaiche a-steach…</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Cha d’fhuair sinn greim air teisteanas a’ chliant</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Tha comas a dhìth air an fhrithealaiche</string>
|
||||
<string name="account_server_validation_sign_in">Clàraich a-steach</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Dh’fhàillig sgrùdadh roghainnean an fhrithealaiche a-mach</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Tha an comas a leanas a dhìth air an fhrithealaiche:\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Dh’fhàillig sgrùdadh roghainnean an fhrithealaiche a-steach</string>
|
||||
<string name="account_server_validation_outgoing_success">Chaidh roghainnean an fhrithealaiche a-mach a dhearbhadh</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">A’ sgrùdadh roghainnean an fhrithealaiche a-mach…</string>
|
||||
<string name="account_server_validation_incoming_success">Chaidh roghainnean an fhrithealaiche a-steach a dhearbhadh</string>
|
||||
<string name="account_server_validation_error_details">Mion-fhiosrachadh:\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Chan eil teisteanas a’ chliant dligheach tuilleadh</string>
|
||||
<string name="account_server_validation_error_authentication">Mearachd dearbhaidh</string>
|
||||
<string name="account_server_validation_error_network">Mearachd lìonraidh</string>
|
||||
<string name="account_server_validation_error_server">Mearachd frithealaiche</string>
|
||||
<string name="account_server_validation_error_unknown">Mearachd neo-aithnichte</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">इनकमिंग सर्वर सेटिंग चेक कर रहे…</string>
|
||||
<string name="account_server_validation_error_authentication">ऑथेंटिकेशन गड़बड़</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">आउटगोइंग सर्वर सेटिंग चेक कर रहे…</string>
|
||||
<string name="account_server_validation_error_network">नेटवर्क गड़बड़</string>
|
||||
<string name="account_server_validation_outgoing_success">आउटगोइंग सर्वर सेटिंग सही है!</string>
|
||||
<string name="account_server_validation_error_unknown">अनजान गड़बड़</string>
|
||||
<string name="account_server_validation_sign_in">साइनइन करें</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">आउटगोइंग सर्वर सेटिंग चेक करने में फेल!</string>
|
||||
<string name="account_server_validation_incoming_success">इनकमिंग सर्वर सेटिंग सही है!</string>
|
||||
<string name="account_server_validation_incoming_loading_error">इनकमिंग सर्वर सेटिंग चेक करने में फेल!</string>
|
||||
<string name="account_server_validation_error_server">सर्वर गड़बड़</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_authentication">Pogreška provjere autentičnosti</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">A bejövő kiszolgáló beállítások ellenőrzése…</string>
|
||||
<string name="account_server_validation_error_authentication">Hitelesítési hiba</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">A kimenő kiszolgáló beállítások ellenőrzése…</string>
|
||||
<string name="account_server_validation_error_network">Hálózati hiba</string>
|
||||
<string name="account_server_validation_outgoing_success">A kimenő kiszolgáló beállításai érvényesek</string>
|
||||
<string name="account_server_validation_error_unknown">Ismeretlen hiba</string>
|
||||
<string name="account_server_validation_sign_in">Jelentkezzen be</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">A kimenő kiszolgáló beállítások ellenőrzése sikertelen volt</string>
|
||||
<string name="account_server_validation_incoming_success">A bejövő kiszolgáló beállításai érvényesek</string>
|
||||
<string name="account_server_validation_incoming_loading_error">A bejövő kiszolgáló beállítások ellenőrzése sikertelen volt</string>
|
||||
<string name="account_server_validation_error_server">Kiszolgálóhiba</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">A klienstanúsítvány már nem érvényes</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">A klienstanúsítvány nem érhető el</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Hiányzó kiszolgálófunkció</string>
|
||||
<string name="account_server_validation_error_details">Részletek:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">A kiszolgálóból hiányzik ez a funkció:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_authentication">Galat autentikasi</string>
|
||||
<string name="account_server_validation_error_network">Galat jaringan</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Memeriksa pengaturan peladen yang keluar…</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Sertifikat klien sudah tidak valid</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Sertifikat klien ini tidak dapat diakses</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Gagal memeriksa pengaturan peladen yang masuk</string>
|
||||
<string name="account_server_validation_incoming_success">Pengaturan peladen yang masuk diverifikasi</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Kehilangan kemampuan peladen</string>
|
||||
<string name="account_server_validation_error_details">Rincian:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Memeriksa pengaturan peladen yang masuk…</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Peladen kehilangan kemampuan berikut ini:\n%s</string>
|
||||
<string name="account_server_validation_outgoing_success">Pengaturan peladen yang keluar diverifikasi</string>
|
||||
<string name="account_server_validation_sign_in">Silakan masuk</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Gagal memeriksa pengaturan peladen yang keluar</string>
|
||||
<string name="account_server_validation_error_server">Galat peladen</string>
|
||||
<string name="account_server_validation_error_unknown">Galat tak diketahui</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Athuga stillingar inn-póstþjónsins…</string>
|
||||
<string name="account_server_validation_error_authentication">Auðkenningarvilla</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Athuga stillingar sendinga-póstþjónsins…</string>
|
||||
<string name="account_server_validation_error_network">Villa í netkerfi</string>
|
||||
<string name="account_server_validation_outgoing_success">Stillingar sendinga-póstþjóns sannreyndar</string>
|
||||
<string name="account_server_validation_error_unknown">Óþekkt villa</string>
|
||||
<string name="account_server_validation_sign_in">Skráðu þig inn</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Athugun á stillingum sendinga-póstþjónsins mistókst</string>
|
||||
<string name="account_server_validation_incoming_success">Stillingar inn-póstþjóns sannreyndar</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Athugun á stillingum inn-póstþjónsins mistókst</string>
|
||||
<string name="account_server_validation_error_server">Villa á þjóni</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Vantar upplýsingar um getu póstþjóns</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Skilríki biðlara var ekki aðgengilegt</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Póstþjóninn vantar þennan eiginleika:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Skilríki biðlara er ekki lengur gilt</string>
|
||||
<string name="account_server_validation_error_details">Nánar:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Controllo impostazioni server posta in arrivo…</string>
|
||||
<string name="account_server_validation_error_authentication">Errore di autenticazione</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Controllo impostazioni server in uscita…</string>
|
||||
<string name="account_server_validation_error_network">Errore di rete</string>
|
||||
<string name="account_server_validation_outgoing_success">Impostazioni server in uscita verificate</string>
|
||||
<string name="account_server_validation_error_unknown">Errore sconosciuto</string>
|
||||
<string name="account_server_validation_sign_in">Accedi</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Controllo impostazioni server in uscita non riuscito</string>
|
||||
<string name="account_server_validation_incoming_success">Impostazioni server in arrivo verificate</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Controllo impostazioni server in arrivo non riuscito</string>
|
||||
<string name="account_server_validation_error_server">Errore del server</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Funzionalità del server mancante</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Impossibile accedere al certificato client</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Al server manca questa funzionalità:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Il certificato client non è più valido</string>
|
||||
<string name="account_server_validation_error_details">Dettagli:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">תעודת הלקוח כבר לא בתוקף</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">לא ניתן לגשת לתעודת הלקוח</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">יכולת שרת חסרה</string>
|
||||
<string name="account_server_validation_error_details">פרטים:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_success">הגדרות שרת דואר נכנס אומתו</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">בדיקת הגדרות שרת דואר יוצא נכשלה</string>
|
||||
<string name="account_server_validation_incoming_loading_error">בדיקת הגדרות שרת דואר נכנס נכשלה</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">הגדרות שרת דואר יוצא בבדיקה…</string>
|
||||
<string name="account_server_validation_incoming_loading_message">הגדרות שרת דואר נכנס בבדיקה…</string>
|
||||
<string name="account_server_validation_outgoing_success">הגדרות שרת דואר יוצא אומתו</string>
|
||||
<string name="account_server_validation_sign_in">אנא התחבר</string>
|
||||
<string name="account_server_validation_error_authentication">שגיאת אימות</string>
|
||||
<string name="account_server_validation_error_network">שגיאת רשת</string>
|
||||
<string name="account_server_validation_error_server">שגיאת שרת</string>
|
||||
<string name="account_server_validation_error_unknown">שגיאה לא ידועה</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">היכולת הבאה חסרה לשרת:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">受信サーバーの設定を確認中…</string>
|
||||
<string name="account_server_validation_error_authentication">認証エラー</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">送信サーバーの設定を確認中…</string>
|
||||
<string name="account_server_validation_error_network">ネットワークエラー</string>
|
||||
<string name="account_server_validation_outgoing_success">送信サーバーの設定を確認できました</string>
|
||||
<string name="account_server_validation_error_unknown">不明なエラー</string>
|
||||
<string name="account_server_validation_sign_in">ログインしてください</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">送信サーバーの設定の確認に失敗しました</string>
|
||||
<string name="account_server_validation_incoming_success">受信サーバーの設定を確認できました</string>
|
||||
<string name="account_server_validation_incoming_loading_error">受信サーバーの設定の確認に失敗しました</string>
|
||||
<string name="account_server_validation_error_server">サーバーエラー</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">サーバーの機能が不足しています</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">クライアント証明書にアクセスできませんでした</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">この機能がサーバーにありません:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">このクライアント証明書の有効期限は満了しました</string>
|
||||
<string name="account_server_validation_error_details">詳細:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_authentication">Аутентификация қатесі</string>
|
||||
<string name="account_server_validation_error_network">Желі қатесі</string>
|
||||
<string name="account_server_validation_error_server">Сервер қатесі</string>
|
||||
<string name="account_server_validation_error_unknown">Белгісіз қате</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Сервер мүмкіндігі жоқ</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">만료된 클라이언트 인증서</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">클라이언트 인증서에 접근할 수 없습니다</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">서버 용량 부족</string>
|
||||
<string name="account_server_validation_error_details">자세히:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_server">서버 오류</string>
|
||||
<string name="account_server_validation_error_unknown">알수 없는 오류</string>
|
||||
<string name="account_server_validation_error_authentication">인증 오류</string>
|
||||
<string name="account_server_validation_error_network">네트워크 오류</string>
|
||||
<string name="account_server_validation_sign_in">로그인이 필요합니다</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">발신 서버 설정을 확인하는데 실패했습니다</string>
|
||||
<string name="account_server_validation_incoming_loading_error">수신 서버 설정을 확인하는데 실패했습니다</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">서버에 누락된 기능이 있습니다:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_outgoing_success">발신 서버 설정이 확인되었습니다</string>
|
||||
<string name="account_server_validation_incoming_success">수신 서버 설정이 확인되었습니다</string>
|
||||
<string name="account_server_validation_incoming_loading_message">수신 서버 설정을 확인하는 중…</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">발신 서버 설정을 확인하는 중…</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Kliento liudijimas nebegalioja</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Serveryje trūksta galimybės</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Kliento liudijimo nepavykto pasiekti</string>
|
||||
<string name="account_server_validation_error_details">Išsamiau:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Tikrinami gaunamų laiškų serverio parametrai…</string>
|
||||
<string name="account_server_validation_sign_in">Prisijunkite</string>
|
||||
<string name="account_server_validation_outgoing_success">Siunčiamų laiškų serverio parametrai patvirtinti</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Serveryje trūksta šios galimybės:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Nepavyko patikrinti gaunamų laiškų serverio parametrų</string>
|
||||
<string name="account_server_validation_incoming_success">Gaunamų laiškų serverio parametrai patvirtinti</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Tikrinami siunčiamų laiškų serverio parametrai…</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Nepavyko patikrinti siunčiamų laiškų serverio parametrų</string>
|
||||
<string name="account_server_validation_error_authentication">Klaida nustatant tapatybę</string>
|
||||
<string name="account_server_validation_error_network">Tinklo klaida</string>
|
||||
<string name="account_server_validation_error_server">Serverio klaida</string>
|
||||
<string name="account_server_validation_error_unknown">Nežinoma klaida</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Sjekker innstillinger for innkommende tjener …</string>
|
||||
<string name="account_server_validation_error_authentication">Identitetsbekreftelsesfeil</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Sjekker innstillinger for utgående tjener …</string>
|
||||
<string name="account_server_validation_error_network">Nettverksfeil</string>
|
||||
<string name="account_server_validation_outgoing_success">Innstillinger for utgående tjener er verifisert</string>
|
||||
<string name="account_server_validation_error_unknown">Ukjent feil</string>
|
||||
<string name="account_server_validation_sign_in">Logg inn</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Kunne ikke sjekke innstillinger for utgående tjener</string>
|
||||
<string name="account_server_validation_incoming_success">Innstillinger for innkommende tjener er verifisert</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Kunne ikke sjekke innstillinger for innkommende tjener</string>
|
||||
<string name="account_server_validation_error_server">Tjenerfeil</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Manglende serverkapasitet</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Klientsertifikatet er ikke lenger gyldig</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Fikk ikke tak i klientsertifikatet</string>
|
||||
<string name="account_server_validation_error_details">Detaljer:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Tjeneren mangler denne egenskapen:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Instellingen voor inkomende server controleren…</string>
|
||||
<string name="account_server_validation_error_authentication">Authenticatiefout</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Instellingen voor uitgaande server controleren…</string>
|
||||
<string name="account_server_validation_error_network">Netwerkfout</string>
|
||||
<string name="account_server_validation_outgoing_success">Instellingen voor uitgaande server geverifieerd</string>
|
||||
<string name="account_server_validation_error_unknown">Onbekende fout</string>
|
||||
<string name="account_server_validation_sign_in">Meld u aan</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Instellingen voor uitgaande server controleren mislukt</string>
|
||||
<string name="account_server_validation_incoming_success">Instellingen voor inkomende server geverifieerd</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Instellingen voor inkomende server controleren mislukt</string>
|
||||
<string name="account_server_validation_error_server">Serverfout</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Ontbrekende serverfunctionaliteit</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Het clientcertificaat kon niet worden geraadpleegd</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">De server mist deze functionaliteit:\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Het clientcertificaat is niet langer geldig</string>
|
||||
<string name="account_server_validation_error_details">Details:\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Klientsertifikatet er ikkje lenger gyldig</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Klarte ikkje å få tilgang til klientsertifikatet</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Manglande serverkapasitet</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Serveren manglar denne eigenskapen:\n%s</string>
|
||||
<string name="account_server_validation_sign_in">Logg inn</string>
|
||||
<string name="account_server_validation_error_unknown">Ukjend feil</string>
|
||||
<string name="account_server_validation_error_network">Nettverksfeil</string>
|
||||
<string name="account_server_validation_error_server">Tenarfeil</string>
|
||||
<string name="account_server_validation_error_details">Detaljar:\n%s</string>
|
||||
<string name="account_server_validation_error_authentication">Autentiseringsfeil</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Sjekker innkommande tenar-innstillingar…</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Sjekking av innkommande tenar-innstillingar feila</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Sjekking av utgåande tenar-innstillingar feila</string>
|
||||
<string name="account_server_validation_outgoing_success">Utgåande serverinnstillingar stadfesta</string>
|
||||
<string name="account_server_validation_incoming_success">Innkomande serverinnstillingar stadfesta</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Sjekkar utgåande tenar-innstillingar…</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Sprawdzanie ustawień serwera poczty przychodzącej…</string>
|
||||
<string name="account_server_validation_error_authentication">Błąd autoryzacji</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Sprawdzanie ustawień serwera poczty wychodzącej…</string>
|
||||
<string name="account_server_validation_error_network">Błąd sieci</string>
|
||||
<string name="account_server_validation_outgoing_success">Zweryfikowano ustawienia serwera poczty wychodzącej</string>
|
||||
<string name="account_server_validation_error_unknown">Nieznany błąd</string>
|
||||
<string name="account_server_validation_sign_in">Zaloguj się</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Sprawdzanie ustawień serwera poczty wychodzącej nie powiodło się</string>
|
||||
<string name="account_server_validation_incoming_success">Zweryfikowano ustawienia serwera poczty przychodzącej</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Sprawdzanie ustawień serwera poczty przychodzącej nie powiodło się</string>
|
||||
<string name="account_server_validation_error_server">Błąd serwera</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Brak możliwości serwera</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Nie można uzyskać dostępu do certyfikatu klienta</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Serwerowi brakuje tej możliwości:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Certyfikat klienta nie jest już ważny</string>
|
||||
<string name="account_server_validation_error_details">Szczegóły:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Verificando configurações do servidor de recebimento…</string>
|
||||
<string name="account_server_validation_error_authentication">Erro de autenticação</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Verificando configurações do servidor de envio…</string>
|
||||
<string name="account_server_validation_error_network">Erro de rede</string>
|
||||
<string name="account_server_validation_outgoing_success">Configurações do servidor de envio verificadas</string>
|
||||
<string name="account_server_validation_error_unknown">Erro desconhecido</string>
|
||||
<string name="account_server_validation_sign_in">Entre na sua conta</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Falha ao verificar configurações do servidor de envio</string>
|
||||
<string name="account_server_validation_incoming_success">Configurações do servidor de recebimento verificadas</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Falha ao verificar configurações do servidor de recebimento</string>
|
||||
<string name="account_server_validation_error_server">Erro do servidor</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">O certificado do cliente não é mais válido</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">O certificado do cliente não pode ser acessado</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Falta capacidade no servidor</string>
|
||||
<string name="account_server_validation_error_details">Detalhes:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">O servidor não tem esta capacidade: \n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">A verificar as configurações do servidor de entrada…</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Funcionalidade do servidor em falta</string>
|
||||
<string name="account_server_validation_error_authentication">Erro de autenticação</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">A verificar as configurações do servidor de saída…</string>
|
||||
<string name="account_server_validation_error_network">Erro de rede</string>
|
||||
<string name="account_server_validation_outgoing_success">As configurações do servidor de saída verificadas</string>
|
||||
<string name="account_server_validation_error_unknown">Erro desconhecido</string>
|
||||
<string name="account_server_validation_sign_in">Por favor efectue log in</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Falhou a verificação das configurações do servidor de saída</string>
|
||||
<string name="account_server_validation_incoming_success">Configurações do servidor de entrada verificadas</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">O certificado do cliente não pode ser acedido</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">O servidor não tem esta funcionalidade:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Falhou a verificação das configurações do servidor de entrada</string>
|
||||
<string name="account_server_validation_error_server">Erro de servidor</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">O certificado do cliente já não é válido</string>
|
||||
<string name="account_server_validation_error_details">Detalhes:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Verificarea setărilor serverului de intrare…</string>
|
||||
<string name="account_server_validation_error_authentication">Eroare de autentificare</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Verificarea setărilor serverului de expediere…</string>
|
||||
<string name="account_server_validation_error_network">Eroare de rețea</string>
|
||||
<string name="account_server_validation_outgoing_success">Setările serverului de ieșire sunt verificate</string>
|
||||
<string name="account_server_validation_error_unknown">Eroare necunoscută</string>
|
||||
<string name="account_server_validation_sign_in">Conectează-te</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Verificarea setărilor serverului de ieșire a eșuat</string>
|
||||
<string name="account_server_validation_incoming_success">Setările serverului de intrare sunt verificate</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Verificarea setărilor serverului de intrare a eșuat</string>
|
||||
<string name="account_server_validation_error_server">Eroare de server</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Lipsește capacitatea serverului</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Certificatul clientului nu a putut fi accesat</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Serverului îi lipsește această capacitate:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Certificatul de client nu mai este valabil</string>
|
||||
<string name="account_server_validation_error_details">Detalii:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Сертификат клиента больше не действителен</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Не удалось получить доступ к сертификату клиента</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Отсутствующие возможности сервера</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Проверка настроек исходящего сервера…</string>
|
||||
<string name="account_server_validation_sign_in">Пожалуйста, войдите</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">На сервере отсутствует эта возможность:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_success">Настройки сервера входящих сообщений проверены</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Проверка параметров входящего сервера не удалась</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Проверка настроек исходящего сервера не удалась</string>
|
||||
<string name="account_server_validation_outgoing_success">Настройки исходящего сервера проверены</string>
|
||||
<string name="account_server_validation_error_authentication">Ошибка аутентификации</string>
|
||||
<string name="account_server_validation_error_network">Ошибка сети</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Проверка настроек входящего сервера…</string>
|
||||
<string name="account_server_validation_error_server">Ошибка сервера</string>
|
||||
<string name="account_server_validation_error_unknown">Неизвестная ошибка</string>
|
||||
<string name="account_server_validation_error_details">Подробности:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_network">Chyba siete</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Kontrolujú sa nastavenia servera odchádzajúcej pošty…</string>
|
||||
<string name="account_server_validation_outgoing_success">Nastavenia servera odchádzajúcej pošty sú platné</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Kontrola nastavení servera odchádzajúcej pošty zlyhala</string>
|
||||
<string name="account_server_validation_incoming_success">Nastavenia servera prichádzajúcej pošty sú platné</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Chyba overovania nastavenia servera prichádzajúcej pošty</string>
|
||||
<string name="account_server_validation_error_server">Chyba servera</string>
|
||||
<string name="account_server_validation_error_unknown">Neznáma chyba</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Klientský certifikát už nie je platný</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Klientský certifikát nie je prístupný</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Chýbajúca funkčnosť servera</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Chýbajúca funkčnosť servera:\n%s</string>
|
||||
<string name="account_server_validation_error_details">Podrobnosti:\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Overujem nastavenia servera prichádzajúcej pošty…</string>
|
||||
<string name="account_server_validation_sign_in">Prosím prihláste sa</string>
|
||||
<string name="account_server_validation_error_authentication">Chyba autentifikácie</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Potrdilo odjemalca ni več veljavno.</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Dostop do potrdila odjemalca ni bil mogoč.</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Manjka zmogljivost strežnika.</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Preverjanje nastavitev dohodnega strežnika …</string>
|
||||
<string name="account_server_validation_incoming_success">Nastavitve dohodnega strežnika so bile preverjene.</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Preverjanje nastavitev odhodnega strežnika …</string>
|
||||
<string name="account_server_validation_error_details">Podrobnosti:\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Strežniku manjka naslednja zmogljivost:\n%s</string>
|
||||
<string name="account_server_validation_sign_in">Pred nadaljevanjem se je treba vpisati.</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Preverjanje nastavitev odhodnega strežnika je spodletelo.</string>
|
||||
<string name="account_server_validation_outgoing_success">Nastavitve odhodnega strežnika so bile preverjene.</string>
|
||||
<string name="account_server_validation_error_authentication">Napaka overitve</string>
|
||||
<string name="account_server_validation_error_network">Napaka omrežja</string>
|
||||
<string name="account_server_validation_error_server">Napaka strežnika</string>
|
||||
<string name="account_server_validation_error_unknown">Neznana napaka</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Preverjanje nastavitev dohodnega strežnika je spodletelo.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Po kontrollohen rregullime shërbyesi marrjeje mesazhesh…</string>
|
||||
<string name="account_server_validation_error_authentication">Gabim mirëfilltësimi</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Po kontrollohen rregullime shërbyesi dërgimi mesazhesh…</string>
|
||||
<string name="account_server_validation_error_network">Gabim rrjeti</string>
|
||||
<string name="account_server_validation_outgoing_success">Rregullimet për shërbyes dërgimi mesazhesh janë verifikuar</string>
|
||||
<string name="account_server_validation_error_unknown">Gabim i panjohur</string>
|
||||
<string name="account_server_validation_sign_in">Ju lutemi, bëni hyrjen</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Kontrolli i rregullimeve të shërbyesit të dërgimit të mesazheve dështoi</string>
|
||||
<string name="account_server_validation_incoming_success">Rregullimet për shërbyes marrjeje mesazhesh janë verifikuar</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Kontrolli i rregullimeve të shërbyesit të marrjes së mesazheve dështoi</string>
|
||||
<string name="account_server_validation_error_server">Gabim shërbyesi</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">S’u përdor dot dëshmia e klientit</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Shërbyesit i mungon kjo aftësi: \n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Dëshmia e klientit s’është më e vlefshme</string>
|
||||
<string name="account_server_validation_error_details">Hollësi: \n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Aftësi që i mungon shërbyesit</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Сертификат клијента више није важећи</string>
|
||||
<string name="account_server_validation_error_details">Детаљи:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Провера подешавања долазног сервера…</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Није могуће приступити сертификату клијента</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Провера подешавања одлазног сервера…</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Провера подешавања одлазног сервера није успела</string>
|
||||
<string name="account_server_validation_error_authentication">Грешка при аутентификацији</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Провера подешавања долазног сервера није успела</string>
|
||||
<string name="account_server_validation_incoming_success">Подешавања долазног сервера су верификована</string>
|
||||
<string name="account_server_validation_sign_in">Пријавите се</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Серверу недостаје ова могућност:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Недостаје могућност сервера</string>
|
||||
<string name="account_server_validation_outgoing_success">Подешавања одлазног сервера су верификована</string>
|
||||
<string name="account_server_validation_error_network">Мрежна грешка</string>
|
||||
<string name="account_server_validation_error_server">Грешка сервера</string>
|
||||
<string name="account_server_validation_error_unknown">Непозната грешка</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Kontrollerar inkommande serverinställningar…</string>
|
||||
<string name="account_server_validation_error_unknown">Okänt fel</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Kontrollera inkommande serverinställningar misslyckades</string>
|
||||
<string name="account_server_validation_error_server">Serverfel</string>
|
||||
<string name="account_server_validation_error_authentication">Autentiseringsfel</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Kontrollerar utgående serverinställningar…</string>
|
||||
<string name="account_server_validation_error_network">Nätverksfel</string>
|
||||
<string name="account_server_validation_outgoing_success">Utgående serverinställningar verifierade</string>
|
||||
<string name="account_server_validation_sign_in">Var god logga in</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Misslyckades att kontrollera inställningarna för utgående server</string>
|
||||
<string name="account_server_validation_incoming_success">Inkommande serverinställningar verifierade</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Serverkapacitet saknas</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Klientcertifikatet kunde inte nås</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Servern saknar denna kapacitet:\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Klientcertifikatet är inte längre giltigt</string>
|
||||
<string name="account_server_validation_error_details">Detaljer:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">கிளையன்ட் சான்றிதழ் இனி செல்லுபடியாகாது</string>
|
||||
<string name="account_server_validation_error_details">விவரங்கள்:\n %s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">சேவையகம் இந்த திறனைக் காணவில்லை:\n %s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">உள்வரும் சேவையக அமைப்புகளை சரிபார்க்கிறது…</string>
|
||||
<string name="account_server_validation_incoming_loading_error">உள்வரும் சேவையக அமைப்புகளை சரிபார்க்கிறது</string>
|
||||
<string name="account_server_validation_incoming_success">உள்வரும் சேவையக அமைப்புகள் சரிபார்க்கப்பட்டன</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">வெளிச்செல்லும் சேவையக அமைப்புகளைச் சரிபார்க்கிறது…</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">வெளிச்செல்லும் சேவையக அமைப்புகளைப் பார்ப்பது தோல்வியடைந்தது</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">கிளையன்ட் சான்றிதழை அணுக முடியவில்லை</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">சேவையக திறனைக் காணவில்லை</string>
|
||||
<string name="account_server_validation_outgoing_success">வெளிச்செல்லும் சேவையக அமைப்புகள் சரிபார்க்கப்பட்டன</string>
|
||||
<string name="account_server_validation_sign_in">தயவுசெய்து உள்நுழைக</string>
|
||||
<string name="account_server_validation_error_authentication">அங்கீகார பிழை</string>
|
||||
<string name="account_server_validation_error_network">பிணைய பிழை</string>
|
||||
<string name="account_server_validation_error_server">சேவையக பிழை</string>
|
||||
<string name="account_server_validation_error_unknown">தெரியாத பிழை</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_authentication">ผิดพลาดในการรับรองความถูกต้อง</string>
|
||||
<string name="account_server_validation_error_network">เกิดข้อผิดพลาดของเครือข่าย</string>
|
||||
<string name="account_server_validation_error_server">เกิดข้อผิดพลาดของเซิร์ฟเวอร์</string>
|
||||
<string name="account_server_validation_error_unknown">เกิดข้อผิดพลาดที่ไม่ทราบ</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">ไม่สามารถเข้าถึงใบรับรองไคลเอนต์ได้</string>
|
||||
<string name="account_server_validation_error_details">รายละเอียด:\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">กำลังตรวจสอบตั้งค่าเซิร์ฟเวอร์ขาเข้า…</string>
|
||||
<string name="account_server_validation_incoming_loading_error">ตรวจสอบการตั้งค่าเซิร์ฟเวอร์ขาเข้าล้มเหลว</string>
|
||||
<string name="account_server_validation_incoming_success">ตรวจสอบการตั้งค่าเซิร์ฟเวอร์ขาเข้าแล้ว</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">กำลังตรวจสอบการตั้งค่าเซิร์ฟเวอร์ขาออก…</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">ใบรับรองไคลเอนต์ไม่ถูกต้องอีกต่อไป</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">ตรวจสอบตั้งค่าเซิร์ฟเวอร์ขาออกล้มเหลว</string>
|
||||
<string name="account_server_validation_outgoing_success">ตรวจสอบการตั้งค่าเซิร์ฟเวอร์ขาออกแล้ว</string>
|
||||
<string name="account_server_validation_sign_in">กรุณาลงชื่อเข้าใช้</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">เซิร์ฟเวอร์ขาดความสามารถนี้:\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Gelen sunucusu ayarları denetleniyor…</string>
|
||||
<string name="account_server_validation_error_authentication">Kimlik doğrulama hatası</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Giden sunucusu ayarları denetleniyor…</string>
|
||||
<string name="account_server_validation_error_network">Ağ hatası</string>
|
||||
<string name="account_server_validation_outgoing_success">Giden sunucusu ayarları doğrulandı</string>
|
||||
<string name="account_server_validation_error_unknown">Bilinmeyen hata</string>
|
||||
<string name="account_server_validation_sign_in">Lütfen oturum açın</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Giden sunucusu ayarlarının denetlenmesi başarısız oldu</string>
|
||||
<string name="account_server_validation_incoming_success">Gelen sunucusu ayarları doğrulandı</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Gelen sunucusu ayarlarının denetlenmesi başarısız oldu</string>
|
||||
<string name="account_server_validation_error_server">Sunucu hatası</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Eksik sunucu özelliği</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">İstemci sertifikasına erişilemedi</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Sunucuda aşağıdaki özellik eksik: \n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">İstemci sertifikası artık geçerli değil</string>
|
||||
<string name="account_server_validation_error_details">Ayrıntılar: \n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Сертифікат клієнта більше недійсний</string>
|
||||
<string name="account_server_validation_error_details">Подробиці:\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Перевірка налаштувань вхідного сервера…</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Не вдалося перевірити вхідні налаштування сервера</string>
|
||||
<string name="account_server_validation_incoming_success">Налаштування вхідного сервера підтверджено</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Перевірка налаштувань вихідного сервера…</string>
|
||||
<string name="account_server_validation_outgoing_success">Налаштування вихідного сервера підтверджено</string>
|
||||
<string name="account_server_validation_sign_in">Будь ласка, увійдіть</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Не вдалося перевірити налаштування вихідного сервера</string>
|
||||
<string name="account_server_validation_error_authentication">Помилка автентифікації</string>
|
||||
<string name="account_server_validation_error_network">Помилка мережі</string>
|
||||
<string name="account_server_validation_error_server">Помилка сервера</string>
|
||||
<string name="account_server_validation_error_unknown">Невідома помилка</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Відсутня можливість сервера</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Не вдалося отримати доступ до сертифіката клієнта</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">На сервері відсутня ця можливість:\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">Đang kiểm tra thiết đặt máy chủ thư đến…</string>
|
||||
<string name="account_server_validation_error_authentication">Lỗi xác thực</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Đang kiểm tra thiết đặt máy chủ thư đi…</string>
|
||||
<string name="account_server_validation_error_network">Lỗi mạng</string>
|
||||
<string name="account_server_validation_outgoing_success">Thiết đặt máy chủ gửi đi đã được xác thực</string>
|
||||
<string name="account_server_validation_error_unknown">Lỗi không rõ</string>
|
||||
<string name="account_server_validation_sign_in">Xin hãy đăng nhập</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Kiểm tra thiết đặt máy chủ thư đi không thành công</string>
|
||||
<string name="account_server_validation_incoming_success">Thiết đặt máy chủ gửi đến đã được xác thực</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Kiểm tra thiết đặt máy chủ thư đến không thành công</string>
|
||||
<string name="account_server_validation_error_server">Lỗi máy chủ</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">Chứng chỉ máy khánh không còn hợp lệ</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">Chứng chỉ máy khách không thể truy cập được</string>
|
||||
<string name="account_server_validation_error_details">Chi tiết:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">Máy chủ không có khả năng này:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Máy chủ không có khả năng</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">正在检查收件服务器设置…</string>
|
||||
<string name="account_server_validation_error_authentication">身份验证错误</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">正在检查发件服务器设置…</string>
|
||||
<string name="account_server_validation_error_network">网络错误</string>
|
||||
<string name="account_server_validation_outgoing_success">发件服务器设置已验证</string>
|
||||
<string name="account_server_validation_error_unknown">未知错误</string>
|
||||
<string name="account_server_validation_sign_in">请登录</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">检查发件服务器设置失败</string>
|
||||
<string name="account_server_validation_incoming_success">收件服务器设置已验证</string>
|
||||
<string name="account_server_validation_incoming_loading_error">检查收件服务器设置失败</string>
|
||||
<string name="account_server_validation_error_server">服务器错误</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">缺少服务器功能</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">无法访问客户端证书</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">服务器缺少此功能:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">客户端证书不再有效</string>
|
||||
<string name="account_server_validation_error_details">详情:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_incoming_loading_message">正在檢查收件伺服器設定…</string>
|
||||
<string name="account_server_validation_error_authentication">身分認證錯誤</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">正在檢查寄件伺服器設定…</string>
|
||||
<string name="account_server_validation_error_network">網路錯誤</string>
|
||||
<string name="account_server_validation_outgoing_success">傳出伺服器設定已驗證</string>
|
||||
<string name="account_server_validation_error_unknown">未知錯誤</string>
|
||||
<string name="account_server_validation_sign_in">請登入</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">檢查寄件伺服器設定失敗</string>
|
||||
<string name="account_server_validation_incoming_success">傳入伺服器設定已驗證</string>
|
||||
<string name="account_server_validation_incoming_loading_error">檢查收件伺服器設定失敗</string>
|
||||
<string name="account_server_validation_error_server">伺服器錯誤</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">缺少伺服器功能</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">無法存取客戶端證書</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">伺服器缺少此功能:
|
||||
\n%s</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">用戶端憑證不再有效</string>
|
||||
<string name="account_server_validation_error_details">詳情:
|
||||
\n%s</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="account_server_validation_error_authentication">Authentication error</string>
|
||||
<string name="account_server_validation_error_network">Network error</string>
|
||||
<string name="account_server_validation_error_server">Server error</string>
|
||||
<string name="account_server_validation_error_unknown">Unknown error</string>
|
||||
<string name="account_server_validation_error_client_certificate_expired">The client certificate is no longer valid</string>
|
||||
<string name="account_server_validation_error_client_certificate_retrieval_failure">"The client certificate couldn't be accessed"</string>
|
||||
<string name="account_server_validation_error_missing_server_capability">Missing server capability</string>
|
||||
<string name="account_server_validation_error_details">Details:\n%s</string>
|
||||
<string name="account_server_validation_error_missing_server_capability_details">The server is missing this capability:\n%s</string>
|
||||
<string name="account_server_validation_incoming_loading_message">Checking incoming server settings…</string>
|
||||
<string name="account_server_validation_incoming_loading_error">Checking incoming server settings failed</string>
|
||||
<string name="account_server_validation_incoming_success">Incoming server settings verified</string>
|
||||
<string name="account_server_validation_outgoing_loading_message">Checking outgoing server settings…</string>
|
||||
<string name="account_server_validation_outgoing_loading_error">Checking outgoing server settings failed</string>
|
||||
<string name="account_server_validation_outgoing_success">Outgoing server settings verified</string>
|
||||
<string name="account_server_validation_sign_in">Please sign in</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package app.k9mail.feature.account.server.validation
|
||||
|
||||
import android.content.Context
|
||||
import app.k9mail.feature.account.common.AccountCommonExternalContract
|
||||
import app.k9mail.feature.account.common.domain.AccountDomainContract
|
||||
import app.k9mail.feature.account.common.domain.entity.AccountState
|
||||
import app.k9mail.feature.account.server.certificate.domain.ServerCertificateDomainContract
|
||||
import app.k9mail.feature.account.server.certificate.ui.ServerCertificateErrorContract
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract
|
||||
import org.junit.Test
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.verify.verify
|
||||
|
||||
class ServerValidationModuleKtTest : KoinTest {
|
||||
|
||||
@Test
|
||||
fun `should have a valid di module`() {
|
||||
featureAccountServerValidationModule.verify(
|
||||
extraTypes = listOf(
|
||||
ServerValidationContract.State::class,
|
||||
AccountDomainContract.AccountStateRepository::class,
|
||||
AccountCommonExternalContract.AccountStateLoader::class,
|
||||
ServerCertificateDomainContract.ServerCertificateErrorRepository::class,
|
||||
ServerCertificateErrorContract.State::class,
|
||||
AccountState::class,
|
||||
Context::class,
|
||||
Boolean::class,
|
||||
Class.forName("net.openid.appauth.AppAuthConfiguration").kotlin,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package app.k9mail.feature.account.server.validation.domain.usecase
|
||||
|
||||
import com.fsck.k9.mail.oauth.AuthStateStorage
|
||||
|
||||
class FakeAuthStateStorage(
|
||||
private var authorizationState: String? = null,
|
||||
) : AuthStateStorage {
|
||||
override fun getAuthorizationState(): String? = authorizationState
|
||||
|
||||
override fun updateAuthorizationState(authorizationState: String?) {
|
||||
this.authorizationState = authorizationState
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
package app.k9mail.feature.account.server.validation.domain.usecase
|
||||
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isEqualTo
|
||||
import com.fsck.k9.mail.AuthType
|
||||
import com.fsck.k9.mail.ConnectionSecurity
|
||||
import com.fsck.k9.mail.ServerSettings
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidationResult
|
||||
import java.io.IOException
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Test
|
||||
|
||||
class ValidateServerSettingsTest {
|
||||
private val authStateStorage = FakeAuthStateStorage()
|
||||
|
||||
@Test
|
||||
fun `should check with imap validator when protocol is imap`() = runTest {
|
||||
val testSubject = ValidateServerSettings(
|
||||
authStateStorage = authStateStorage,
|
||||
imapValidator = { _, _ -> ServerSettingsValidationResult.Success },
|
||||
pop3Validator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed POP3")) },
|
||||
smtpValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed SMTP")) },
|
||||
)
|
||||
|
||||
val result = testSubject.execute(IMAP_SERVER_SETTINGS)
|
||||
|
||||
assertThat(result).isEqualTo(ServerSettingsValidationResult.Success)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should check with imap validator when protocol is imap and return failure`() = runTest {
|
||||
val failure = ServerSettingsValidationResult.ServerError("Failed")
|
||||
val testSubject = ValidateServerSettings(
|
||||
authStateStorage = authStateStorage,
|
||||
imapValidator = { _, _ -> failure },
|
||||
pop3Validator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed POP3")) },
|
||||
smtpValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed SMTP")) },
|
||||
)
|
||||
|
||||
val result = testSubject.execute(IMAP_SERVER_SETTINGS)
|
||||
|
||||
assertThat(result).isEqualTo(failure)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should check with pop3 validator when protocol is pop3`() = runTest {
|
||||
val testSubject = ValidateServerSettings(
|
||||
authStateStorage = authStateStorage,
|
||||
imapValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed IMAP")) },
|
||||
pop3Validator = { _, _ -> ServerSettingsValidationResult.Success },
|
||||
smtpValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed SMTP")) },
|
||||
)
|
||||
|
||||
val result = testSubject.execute(POP3_SERVER_SETTINGS)
|
||||
|
||||
assertThat(result).isEqualTo(ServerSettingsValidationResult.Success)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should check with pop3 validator when protocol is pop3 and return failure`() = runTest {
|
||||
val failure = ServerSettingsValidationResult.ServerError("Failed POP3")
|
||||
val testSubject = ValidateServerSettings(
|
||||
authStateStorage = authStateStorage,
|
||||
imapValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed IMAP")) },
|
||||
pop3Validator = { _, _ -> failure },
|
||||
smtpValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed SMTP")) },
|
||||
)
|
||||
|
||||
val result = testSubject.execute(POP3_SERVER_SETTINGS)
|
||||
|
||||
assertThat(result).isEqualTo(failure)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should check with smtp validator when protocol is smtp`() = runTest {
|
||||
val testSubject = ValidateServerSettings(
|
||||
authStateStorage = authStateStorage,
|
||||
imapValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed IMAP")) },
|
||||
pop3Validator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed POP3")) },
|
||||
smtpValidator = { _, _ -> ServerSettingsValidationResult.Success },
|
||||
)
|
||||
|
||||
val result = testSubject.execute(SMTP_SERVER_SETTINGS)
|
||||
|
||||
assertThat(result).isEqualTo(ServerSettingsValidationResult.Success)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should check with smtp validator when protocol is smtp and return failure`() = runTest {
|
||||
val failure = ServerSettingsValidationResult.ServerError("Failed SMTP")
|
||||
val testSubject = ValidateServerSettings(
|
||||
authStateStorage = authStateStorage,
|
||||
imapValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed IMAP")) },
|
||||
pop3Validator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed POP3")) },
|
||||
smtpValidator = { _, _ -> failure },
|
||||
)
|
||||
|
||||
val result = testSubject.execute(SMTP_SERVER_SETTINGS)
|
||||
|
||||
assertThat(result).isEqualTo(failure)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should validate successfully for demo settings`() = runTest {
|
||||
val testSubject = ValidateServerSettings(
|
||||
authStateStorage = authStateStorage,
|
||||
imapValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed IMAP")) },
|
||||
pop3Validator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed POP3")) },
|
||||
smtpValidator = { _, _ -> ServerSettingsValidationResult.NetworkError(IOException("Failed SMTP")) },
|
||||
)
|
||||
|
||||
val result = testSubject.execute(
|
||||
ServerSettings(
|
||||
type = "demo",
|
||||
host = "demo.example.com",
|
||||
port = 993,
|
||||
connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED,
|
||||
authenticationType = AuthType.PLAIN,
|
||||
username = "user",
|
||||
password = "password",
|
||||
clientCertificateAlias = null,
|
||||
),
|
||||
)
|
||||
|
||||
assertThat(result).isEqualTo(ServerSettingsValidationResult.Success)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
val IMAP_SERVER_SETTINGS = ServerSettings(
|
||||
type = "imap",
|
||||
host = "imap.example.com",
|
||||
port = 993,
|
||||
connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED,
|
||||
authenticationType = AuthType.PLAIN,
|
||||
username = "user",
|
||||
password = "password",
|
||||
clientCertificateAlias = null,
|
||||
)
|
||||
|
||||
val POP3_SERVER_SETTINGS = ServerSettings(
|
||||
type = "pop3",
|
||||
host = "pop3.example.com",
|
||||
port = 993,
|
||||
connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED,
|
||||
authenticationType = AuthType.PLAIN,
|
||||
username = "user",
|
||||
password = "password",
|
||||
clientCertificateAlias = null,
|
||||
)
|
||||
|
||||
val SMTP_SERVER_SETTINGS = ServerSettings(
|
||||
type = "smtp",
|
||||
host = "smtp.example.com",
|
||||
port = 993,
|
||||
connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED,
|
||||
authenticationType = AuthType.PLAIN,
|
||||
username = "user",
|
||||
password = "password",
|
||||
clientCertificateAlias = null,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,269 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.core.ui.compose.testing.mvi.assertThatAndMviTurbinesConsumed
|
||||
import app.k9mail.core.ui.compose.testing.mvi.runMviTest
|
||||
import app.k9mail.core.ui.compose.testing.mvi.turbinesWithInitialStateCheck
|
||||
import app.k9mail.feature.account.common.data.InMemoryAccountStateRepository
|
||||
import app.k9mail.feature.account.common.domain.AccountDomainContract
|
||||
import app.k9mail.feature.account.common.domain.entity.AccountState
|
||||
import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.oauth.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.certificate.data.InMemoryServerCertificateErrorRepository
|
||||
import app.k9mail.feature.account.server.certificate.domain.ServerCertificateDomainContract
|
||||
import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Error
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isEqualTo
|
||||
import assertk.assertions.isTrue
|
||||
import com.fsck.k9.mail.AuthType
|
||||
import com.fsck.k9.mail.ConnectionSecurity
|
||||
import com.fsck.k9.mail.ServerSettings
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidationResult
|
||||
import kotlinx.coroutines.delay
|
||||
import net.thunderbird.core.testing.coroutines.MainDispatcherRule
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
abstract class BaseServerValidationViewModelTest<T : BaseServerValidationViewModel> {
|
||||
|
||||
@get:Rule
|
||||
val mainDispatcherRule = MainDispatcherRule()
|
||||
|
||||
@Test
|
||||
fun `should update state when LoadAccountStateAndValidate event received and validate`() = runMviTest {
|
||||
val accountState = if (isIncomingValidation) {
|
||||
AccountState(
|
||||
incomingServerSettings = SERVER_SETTINGS,
|
||||
)
|
||||
} else {
|
||||
AccountState(
|
||||
outgoingServerSettings = SERVER_SETTINGS,
|
||||
)
|
||||
}
|
||||
val initialState = State(
|
||||
serverSettings = null,
|
||||
isLoading = true,
|
||||
error = Error.ServerError("server error"),
|
||||
isSuccess = true,
|
||||
)
|
||||
val testSubject = createTestSubject(
|
||||
accountState = accountState,
|
||||
initialState = initialState,
|
||||
)
|
||||
|
||||
val turbines = turbinesWithInitialStateCheck(testSubject, initialState)
|
||||
|
||||
val expectedState = State(
|
||||
serverSettings = SERVER_SETTINGS,
|
||||
isLoading = false,
|
||||
error = null,
|
||||
isSuccess = false,
|
||||
)
|
||||
|
||||
testSubject.event(Event.LoadAccountStateAndValidate)
|
||||
|
||||
assertThat(turbines.awaitStateItem()).isEqualTo(expectedState)
|
||||
|
||||
val loadingState = expectedState.copy(isLoading = true)
|
||||
|
||||
assertThat(turbines.awaitStateItem()).isEqualTo(loadingState)
|
||||
|
||||
val successState = loadingState.copy(isLoading = false, isSuccess = true)
|
||||
|
||||
assertThatAndMviTurbinesConsumed(
|
||||
actual = turbines.stateTurbine.awaitItem(),
|
||||
turbines = turbines,
|
||||
) {
|
||||
isEqualTo(successState)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should fail when ValidateServerSettings event received and server settings null`() = runMviTest {
|
||||
val initialState = State()
|
||||
val testSubject = createTestSubject()
|
||||
val turbines = turbinesWithInitialStateCheck(testSubject, initialState)
|
||||
|
||||
testSubject.event(Event.ValidateServerSettings)
|
||||
|
||||
val errorState = initialState.copy(
|
||||
error = Error.UnknownError("Server settings not set"),
|
||||
)
|
||||
assertThatAndMviTurbinesConsumed(
|
||||
actual = turbines.stateTurbine.awaitItem(),
|
||||
turbines = turbines,
|
||||
) {
|
||||
isEqualTo(errorState)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should validate server settings when ValidateServerSettings event received`() = runMviTest {
|
||||
val initialState = State(
|
||||
serverSettings = SERVER_SETTINGS,
|
||||
)
|
||||
val testSubject = createTestSubject(
|
||||
serverSettingsValidationResult = ServerSettingsValidationResult.Success,
|
||||
initialState = initialState,
|
||||
)
|
||||
val turbines = turbinesWithInitialStateCheck(testSubject, initialState)
|
||||
|
||||
testSubject.event(Event.ValidateServerSettings)
|
||||
|
||||
val loadingState = initialState.copy(isLoading = true)
|
||||
assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(loadingState)
|
||||
|
||||
val successState = loadingState.copy(
|
||||
isLoading = false,
|
||||
isSuccess = true,
|
||||
)
|
||||
assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(successState)
|
||||
|
||||
assertThatAndMviTurbinesConsumed(
|
||||
actual = turbines.effectTurbine.awaitItem(),
|
||||
turbines = turbines,
|
||||
) {
|
||||
isEqualTo(Effect.NavigateNext)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should set error state when ValidateServerSettings received and check settings failed`() = runMviTest {
|
||||
val initialState = State(
|
||||
serverSettings = SERVER_SETTINGS,
|
||||
)
|
||||
val testSubject = createTestSubject(
|
||||
serverSettingsValidationResult = ServerSettingsValidationResult.ServerError("server error"),
|
||||
initialState = initialState,
|
||||
)
|
||||
val turbines = turbinesWithInitialStateCheck(testSubject, initialState)
|
||||
|
||||
testSubject.event(Event.ValidateServerSettings)
|
||||
|
||||
val loadingState = initialState.copy(isLoading = true)
|
||||
assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(loadingState)
|
||||
|
||||
val failureState = loadingState.copy(
|
||||
isLoading = false,
|
||||
error = Error.ServerError("server error"),
|
||||
)
|
||||
assertThatAndMviTurbinesConsumed(
|
||||
actual = turbines.stateTurbine.awaitItem(),
|
||||
turbines = turbines,
|
||||
) {
|
||||
isEqualTo(failureState)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should emit effect NavigateNext when ValidateConfig is successful`() = runMviTest {
|
||||
val initialState = State(
|
||||
serverSettings = SERVER_SETTINGS,
|
||||
isSuccess = true,
|
||||
)
|
||||
val testSubject = createTestSubject(
|
||||
initialState = initialState,
|
||||
)
|
||||
val turbines = turbinesWithInitialStateCheck(testSubject, initialState)
|
||||
|
||||
testSubject.event(Event.ValidateServerSettings)
|
||||
|
||||
assertThatAndMviTurbinesConsumed(
|
||||
actual = turbines.effectTurbine.awaitItem(),
|
||||
turbines = turbines,
|
||||
) {
|
||||
isEqualTo(Effect.NavigateNext)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should emit NavigateBack effect when OnBackClicked event received`() = runMviTest {
|
||||
val testSubject = createTestSubject()
|
||||
val turbines = turbinesWithInitialStateCheck(testSubject, State())
|
||||
|
||||
testSubject.event(Event.OnBackClicked)
|
||||
|
||||
assertThatAndMviTurbinesConsumed(
|
||||
actual = turbines.effectTurbine.awaitItem(),
|
||||
turbines = turbines,
|
||||
) {
|
||||
isEqualTo(Effect.NavigateBack)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should clear error and trigger check settings when OnRetryClicked event received`() = runMviTest {
|
||||
val initialState = State(
|
||||
serverSettings = SERVER_SETTINGS,
|
||||
error = Error.ServerError("server error"),
|
||||
)
|
||||
var checkSettingsCalled = false
|
||||
|
||||
val testSubject = createTestSubject(
|
||||
validateServerSettings = {
|
||||
delay(50)
|
||||
checkSettingsCalled = true
|
||||
ServerSettingsValidationResult.Success
|
||||
},
|
||||
accountStateRepository = InMemoryAccountStateRepository(),
|
||||
authorizationStateRepository = { true },
|
||||
certificateErrorRepository = InMemoryServerCertificateErrorRepository(),
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
initialState = initialState,
|
||||
)
|
||||
val turbines = turbinesWithInitialStateCheck(testSubject, initialState)
|
||||
|
||||
testSubject.event(Event.OnRetryClicked)
|
||||
|
||||
val stateWithoutError = initialState.copy(error = null)
|
||||
assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(stateWithoutError)
|
||||
|
||||
val loadingState = stateWithoutError.copy(isLoading = true)
|
||||
assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(loadingState)
|
||||
|
||||
val successState = loadingState.copy(isLoading = false, isSuccess = true)
|
||||
assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(successState)
|
||||
assertThat(checkSettingsCalled).isTrue()
|
||||
|
||||
assertThatAndMviTurbinesConsumed(
|
||||
actual = turbines.effectTurbine.awaitItem(),
|
||||
turbines = turbines,
|
||||
) {
|
||||
isEqualTo(Effect.NavigateNext)
|
||||
}
|
||||
}
|
||||
|
||||
abstract fun createTestSubject(
|
||||
serverSettingsValidationResult: ServerSettingsValidationResult = ServerSettingsValidationResult.Success,
|
||||
accountState: AccountState = AccountState(),
|
||||
initialState: State = State(),
|
||||
): T
|
||||
|
||||
abstract fun createTestSubject(
|
||||
accountStateRepository: AccountDomainContract.AccountStateRepository,
|
||||
validateServerSettings: ServerValidationDomainContract.UseCase.ValidateServerSettings,
|
||||
authorizationStateRepository: AccountOAuthDomainContract.AuthorizationStateRepository,
|
||||
certificateErrorRepository: ServerCertificateDomainContract.ServerCertificateErrorRepository,
|
||||
oAuthViewModel: AccountOAuthContract.ViewModel,
|
||||
initialState: State,
|
||||
): T
|
||||
|
||||
abstract val isIncomingValidation: Boolean
|
||||
|
||||
protected companion object {
|
||||
val SERVER_SETTINGS = ServerSettings(
|
||||
type = "imap",
|
||||
host = "imap.example.com",
|
||||
port = 465,
|
||||
connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED,
|
||||
authenticationType = AuthType.PLAIN,
|
||||
username = "username",
|
||||
password = "password",
|
||||
clientCertificateAlias = null,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.core.ui.compose.common.mvi.BaseViewModel
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.oauth.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.ViewModel
|
||||
|
||||
class FakeServerValidationViewModel(
|
||||
override val oAuthViewModel: AccountOAuthContract.ViewModel = FakeAccountOAuthViewModel(),
|
||||
override val isIncomingValidation: Boolean = true,
|
||||
initialState: State = State(),
|
||||
) : BaseViewModel<State, Event, Effect>(initialState), ViewModel {
|
||||
|
||||
val events = mutableListOf<Event>()
|
||||
|
||||
override fun event(event: Event) {
|
||||
events.add(event)
|
||||
}
|
||||
|
||||
fun effect(effect: Effect) {
|
||||
emitEffect(effect)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.feature.account.common.data.InMemoryAccountStateRepository
|
||||
import app.k9mail.feature.account.common.domain.AccountDomainContract
|
||||
import app.k9mail.feature.account.common.domain.entity.AccountState
|
||||
import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.oauth.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.certificate.data.InMemoryServerCertificateErrorRepository
|
||||
import app.k9mail.feature.account.server.certificate.domain.ServerCertificateDomainContract
|
||||
import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Error
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isTrue
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidationResult
|
||||
import kotlinx.coroutines.delay
|
||||
import org.junit.Test
|
||||
|
||||
class IncomingServerValidationViewModelTest : BaseServerValidationViewModelTest<IncomingServerValidationViewModel>() {
|
||||
|
||||
@Test
|
||||
fun `should set isIncoming to true`() {
|
||||
val testSubject = createTestSubject(
|
||||
serverSettingsValidationResult = ServerSettingsValidationResult.Success,
|
||||
accountState = AccountState(
|
||||
incomingServerSettings = SERVER_SETTINGS,
|
||||
),
|
||||
initialState = State(
|
||||
serverSettings = null,
|
||||
isLoading = true,
|
||||
error = Error.ServerError("server error"),
|
||||
isSuccess = true,
|
||||
),
|
||||
)
|
||||
|
||||
assertThat(testSubject.isIncomingValidation).isTrue()
|
||||
}
|
||||
|
||||
override fun createTestSubject(
|
||||
serverSettingsValidationResult: ServerSettingsValidationResult,
|
||||
accountState: AccountState,
|
||||
initialState: State,
|
||||
): IncomingServerValidationViewModel {
|
||||
return IncomingServerValidationViewModel(
|
||||
validateServerSettings = {
|
||||
delay(50)
|
||||
serverSettingsValidationResult
|
||||
},
|
||||
accountStateRepository = InMemoryAccountStateRepository(
|
||||
state = accountState,
|
||||
),
|
||||
authorizationStateRepository = { true },
|
||||
certificateErrorRepository = InMemoryServerCertificateErrorRepository(),
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
initialState = initialState,
|
||||
)
|
||||
}
|
||||
|
||||
override fun createTestSubject(
|
||||
accountStateRepository: AccountDomainContract.AccountStateRepository,
|
||||
validateServerSettings: ServerValidationDomainContract.UseCase.ValidateServerSettings,
|
||||
authorizationStateRepository: AccountOAuthDomainContract.AuthorizationStateRepository,
|
||||
certificateErrorRepository: ServerCertificateDomainContract.ServerCertificateErrorRepository,
|
||||
oAuthViewModel: AccountOAuthContract.ViewModel,
|
||||
initialState: State,
|
||||
) = IncomingServerValidationViewModel(
|
||||
accountStateRepository = accountStateRepository,
|
||||
validateServerSettings = validateServerSettings,
|
||||
authorizationStateRepository = authorizationStateRepository,
|
||||
certificateErrorRepository = certificateErrorRepository,
|
||||
oAuthViewModel = oAuthViewModel,
|
||||
initialState = initialState,
|
||||
)
|
||||
|
||||
override val isIncomingValidation: Boolean = true
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.feature.account.common.data.InMemoryAccountStateRepository
|
||||
import app.k9mail.feature.account.common.domain.AccountDomainContract
|
||||
import app.k9mail.feature.account.common.domain.entity.AccountState
|
||||
import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract
|
||||
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
|
||||
import app.k9mail.feature.account.oauth.ui.fake.FakeAccountOAuthViewModel
|
||||
import app.k9mail.feature.account.server.certificate.data.InMemoryServerCertificateErrorRepository
|
||||
import app.k9mail.feature.account.server.certificate.domain.ServerCertificateDomainContract
|
||||
import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Error
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isFalse
|
||||
import com.fsck.k9.mail.server.ServerSettingsValidationResult
|
||||
import kotlinx.coroutines.delay
|
||||
import org.junit.Test
|
||||
|
||||
class OutgoingServerValidationViewModelTest : BaseServerValidationViewModelTest<OutgoingServerValidationViewModel>() {
|
||||
|
||||
@Test
|
||||
fun `should set isIncoming to false`() {
|
||||
val testSubject = createTestSubject(
|
||||
serverSettingsValidationResult = ServerSettingsValidationResult.Success,
|
||||
accountState = AccountState(
|
||||
outgoingServerSettings = SERVER_SETTINGS,
|
||||
),
|
||||
initialState = State(
|
||||
serverSettings = null,
|
||||
isLoading = true,
|
||||
error = Error.ServerError("server error"),
|
||||
isSuccess = true,
|
||||
),
|
||||
)
|
||||
|
||||
assertThat(testSubject.isIncomingValidation).isFalse()
|
||||
}
|
||||
|
||||
override fun createTestSubject(
|
||||
serverSettingsValidationResult: ServerSettingsValidationResult,
|
||||
accountState: AccountState,
|
||||
initialState: State,
|
||||
): OutgoingServerValidationViewModel {
|
||||
return OutgoingServerValidationViewModel(
|
||||
validateServerSettings = {
|
||||
delay(50)
|
||||
serverSettingsValidationResult
|
||||
},
|
||||
accountStateRepository = InMemoryAccountStateRepository(
|
||||
state = accountState,
|
||||
),
|
||||
authorizationStateRepository = { true },
|
||||
certificateErrorRepository = InMemoryServerCertificateErrorRepository(),
|
||||
oAuthViewModel = FakeAccountOAuthViewModel(),
|
||||
initialState = initialState,
|
||||
)
|
||||
}
|
||||
|
||||
override fun createTestSubject(
|
||||
accountStateRepository: AccountDomainContract.AccountStateRepository,
|
||||
validateServerSettings: ServerValidationDomainContract.UseCase.ValidateServerSettings,
|
||||
authorizationStateRepository: AccountOAuthDomainContract.AuthorizationStateRepository,
|
||||
certificateErrorRepository: ServerCertificateDomainContract.ServerCertificateErrorRepository,
|
||||
oAuthViewModel: AccountOAuthContract.ViewModel,
|
||||
initialState: State,
|
||||
) = OutgoingServerValidationViewModel(
|
||||
accountStateRepository = accountStateRepository,
|
||||
validateServerSettings = validateServerSettings,
|
||||
authorizationStateRepository = authorizationStateRepository,
|
||||
certificateErrorRepository = certificateErrorRepository,
|
||||
oAuthViewModel = oAuthViewModel,
|
||||
initialState = initialState,
|
||||
)
|
||||
|
||||
override val isIncomingValidation: Boolean = false
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.core.ui.compose.testing.ComposeTest
|
||||
import app.k9mail.core.ui.compose.testing.setContentWithTheme
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isEqualTo
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import net.thunderbird.core.common.provider.BrandNameProvider
|
||||
import org.junit.Test
|
||||
|
||||
class ServerValidationScreenKtTest : ComposeTest() {
|
||||
|
||||
@Test
|
||||
fun `should delegate navigation effects`() = runTest {
|
||||
val initialState = State()
|
||||
val viewModel = FakeServerValidationViewModel(initialState = initialState)
|
||||
var onNextCounter = 0
|
||||
var onBackCounter = 0
|
||||
|
||||
setContentWithTheme {
|
||||
ServerValidationScreen(
|
||||
onNext = { onNextCounter++ },
|
||||
onBack = { onBackCounter++ },
|
||||
viewModel = viewModel,
|
||||
brandNameProvider = FakeBrandNameProvider,
|
||||
)
|
||||
}
|
||||
|
||||
assertThat(onNextCounter).isEqualTo(0)
|
||||
assertThat(onBackCounter).isEqualTo(0)
|
||||
|
||||
viewModel.effect(Effect.NavigateNext)
|
||||
|
||||
assertThat(onNextCounter).isEqualTo(1)
|
||||
assertThat(onBackCounter).isEqualTo(0)
|
||||
|
||||
viewModel.effect(Effect.NavigateBack)
|
||||
|
||||
assertThat(onNextCounter).isEqualTo(1)
|
||||
assertThat(onBackCounter).isEqualTo(1)
|
||||
}
|
||||
|
||||
private object FakeBrandNameProvider : BrandNameProvider {
|
||||
override val brandName: String = "K-9 Mail"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package app.k9mail.feature.account.server.validation.ui
|
||||
|
||||
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.State
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isEqualTo
|
||||
import org.junit.Test
|
||||
|
||||
class ServerValidationStateTest {
|
||||
|
||||
@Test
|
||||
fun `should set default values`() {
|
||||
val state = State()
|
||||
|
||||
assertThat(state).isEqualTo(
|
||||
State(
|
||||
serverSettings = null,
|
||||
isSuccess = false,
|
||||
error = null,
|
||||
isLoading = false,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue