diff --git a/.editorconfig b/.editorconfig index 56b592ba81558793917eb79a97a57be312f1008d..f76d5403c0a3219f6682970b7748427677cdd0d3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,6 +5,7 @@ charset = utf-8 indent_size = 4 indent_style = space insert_final_newline = true +end_of_line = lf [*.{kt,kts}] ij_kotlin_imports_layout = *,^ diff --git a/.gitattributes b/.gitattributes index 411c07777552a74b61b3523fa0b6b82a1bc03a6b..a00ea4be8664105271e98e34039af693a1eccbdf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,5 @@ -* text=auto eol=lf +* text=auto -*.bat text eol=crlf +*.bat eol=crlf +*.eml eol=crlf *.jar binary diff --git a/.github/ci-gradle.properties b/.github/ci-gradle.properties new file mode 100644 index 0000000000000000000000000000000000000000..7de8afc3ae2075890f6383f8a2b57fd17fa1e0f7 --- /dev/null +++ b/.github/ci-gradle.properties @@ -0,0 +1,6 @@ +org.gradle.daemon=false +org.gradle.parallel=true +org.gradle.workers.max=2 + +kotlin.incremental=false +kotlin.compiler.execution.strategy=in-process diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 6c060792b2e9bc4f7d85a2a12b1a20f1ee6a2ad3..8ace88da189860d6a7e532675576eb2339bb1f28 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -16,16 +16,34 @@ jobs: validation: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: gradle/wrapper-validation-action@v1 build: runs-on: ubuntu-latest + timeout-minutes: 90 + steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties + - uses: actions/setup-java@v3 with: distribution: temurin java-version: 17 + - uses: gradle/gradle-build-action@v2 - - run: ./gradlew assembleDebug detekt spotlessCheck testsOnCi + + - name: Quality - Spotless + run: ./gradlew spotlessCheck + + - name: Quality - Detekt + run: ./gradlew detekt + + - name: Build + run: ./gradlew assembleDebug + + - name: Test + run: ./gradlew testsOnCi diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f9f570c0c3b16ca01c5b754ba8302ea4a81ce268..becf6b92d693e744a5c56cfa557c445819073aa7 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -16,7 +16,7 @@ jobs: security-events: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-java@v3 with: diff --git a/.github/workflows/gradle-cache.yml b/.github/workflows/gradle-cache.yml index 0e4b6f3d72691bcf1a25afa65a46eea4ba840673..0f2d4c23346fc6a9c41c05d6e1b86337addd45c6 100644 --- a/.github/workflows/gradle-cache.yml +++ b/.github/workflows/gradle-cache.yml @@ -18,7 +18,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-java@v3 with: distribution: temurin diff --git a/app-feature-preview/build.gradle.kts b/app-feature-preview/build.gradle.kts index b601ae760fa3656afc643a2863541d97cb336112..53b5803c206ace93c4d8b2f2112a4c954c4272a2 100644 --- a/app-feature-preview/build.gradle.kts +++ b/app-feature-preview/build.gradle.kts @@ -70,6 +70,9 @@ dependencies { implementation(projects.feature.onboarding) implementation(projects.feature.account.setup) + implementation(projects.feature.account.edit) + + implementation(libs.appauth) implementation(libs.okhttp) implementation(libs.timber) } diff --git a/app-feature-preview/src/main/java/app/k9mail/feature/preview/FeatureModule.kt b/app-feature-preview/src/main/java/app/k9mail/feature/preview/FeatureModule.kt index 23dd89e99409e66099f3d76c8f6647f2aae6268c..a2b003825c389b172ce2c1a58bd7954414ec6b3c 100644 --- a/app-feature-preview/src/main/java/app/k9mail/feature/preview/FeatureModule.kt +++ b/app-feature-preview/src/main/java/app/k9mail/feature/preview/FeatureModule.kt @@ -1,23 +1,36 @@ package app.k9mail.feature.preview import app.k9mail.core.common.oauth.OAuthConfigurationFactory +import app.k9mail.feature.account.common.AccountCommonExternalContract +import app.k9mail.feature.account.edit.AccountEditExternalContract +import app.k9mail.feature.account.edit.featureAccountEditModule import app.k9mail.feature.account.setup.AccountSetupExternalContract import app.k9mail.feature.account.setup.featureAccountSetupModule -import app.k9mail.feature.preview.account.AccountCreator import app.k9mail.feature.preview.account.AccountOwnerNameProvider +import app.k9mail.feature.preview.account.InMemoryAccountStore import app.k9mail.feature.preview.auth.AndroidKeyStoreDirectoryProvider import app.k9mail.feature.preview.auth.AppOAuthConfigurationFactory import app.k9mail.feature.preview.auth.DefaultTrustedSocketFactory +import app.k9mail.feature.preview.backend.RealOAuth2TokenProviderFactory +import com.fsck.k9.mail.oauth.OAuth2TokenProviderFactory import com.fsck.k9.mail.ssl.KeyStoreDirectoryProvider import com.fsck.k9.mail.ssl.LocalKeyStore import com.fsck.k9.mail.ssl.TrustManagerFactory import com.fsck.k9.mail.ssl.TrustedSocketFactory import org.koin.core.module.Module +import org.koin.dsl.binds import org.koin.dsl.module val accountModule: Module = module { + single { InMemoryAccountStore() } + .binds( + arrayOf( + AccountCommonExternalContract.AccountStateLoader::class, + AccountSetupExternalContract.AccountCreator::class, + AccountEditExternalContract.AccountUpdater::class, + ), + ) factory { AccountOwnerNameProvider() } - factory { AccountCreator() } } val featureModule: Module = module { @@ -27,6 +40,11 @@ val featureModule: Module = module { single { LocalKeyStore(directoryProvider = get()) } single { TrustManagerFactory.createInstance(get()) } single { DefaultTrustedSocketFactory(get(), get()) } + single { RealOAuth2TokenProviderFactory(context = get()) } - includes(featureAccountSetupModule, accountModule) + includes( + accountModule, + featureAccountSetupModule, + featureAccountEditModule, + ) } diff --git a/app-feature-preview/src/main/java/app/k9mail/feature/preview/account/AccountCreator.kt b/app-feature-preview/src/main/java/app/k9mail/feature/preview/account/AccountCreator.kt deleted file mode 100644 index 51d9f8f40baf533c33653c962a3972d84579d117..0000000000000000000000000000000000000000 --- a/app-feature-preview/src/main/java/app/k9mail/feature/preview/account/AccountCreator.kt +++ /dev/null @@ -1,13 +0,0 @@ -package app.k9mail.feature.preview.account - -import app.k9mail.feature.account.setup.AccountSetupExternalContract -import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator.AccountCreatorResult -import app.k9mail.feature.account.setup.domain.entity.Account -import java.util.UUID - -class AccountCreator : AccountSetupExternalContract.AccountCreator { - - override suspend fun createAccount(account: Account): AccountCreatorResult { - return AccountCreatorResult.Success(UUID.randomUUID().toString()) - } -} diff --git a/app-feature-preview/src/main/java/app/k9mail/feature/preview/account/InMemoryAccountStore.kt b/app-feature-preview/src/main/java/app/k9mail/feature/preview/account/InMemoryAccountStore.kt new file mode 100644 index 0000000000000000000000000000000000000000..fdb4136509985ef6059e3bacc23e6d0ba3001232 --- /dev/null +++ b/app-feature-preview/src/main/java/app/k9mail/feature/preview/account/InMemoryAccountStore.kt @@ -0,0 +1,50 @@ +package app.k9mail.feature.preview.account + +import app.k9mail.feature.account.common.AccountCommonExternalContract.AccountStateLoader +import app.k9mail.feature.account.common.domain.entity.Account +import app.k9mail.feature.account.common.domain.entity.AccountState +import app.k9mail.feature.account.common.domain.entity.AuthorizationState +import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater +import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater.AccountUpdaterResult +import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator +import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator.AccountCreatorResult + +class InMemoryAccountStore( + private val accountMap: MutableMap = mutableMapOf(), +) : AccountCreator, AccountUpdater, AccountStateLoader { + + suspend fun load(accountUuid: String): Account? { + return accountMap[accountUuid] + } + + override suspend fun loadAccountState(accountUuid: String): AccountState? { + return accountMap[accountUuid]?.let { mapToAccountState(it) } + } + + override suspend fun createAccount(account: Account): AccountCreatorResult { + accountMap[account.uuid] = account + + return AccountCreatorResult.Success(account.uuid) + } + + override suspend fun updateAccount(account: Account): AccountUpdaterResult { + return if (!accountMap.containsKey(account.uuid)) { + AccountUpdaterResult.Error("Account not found") + } else { + accountMap[account.uuid] = account + + AccountUpdaterResult.Success(account.uuid) + } + } + + private fun mapToAccountState(account: Account): AccountState { + return AccountState( + uuid = account.uuid, + emailAddress = account.emailAddress, + incomingServerSettings = account.incomingServerSettings, + outgoingServerSettings = account.outgoingServerSettings, + authorizationState = account.authorizationState?.let { AuthorizationState(it) }, + options = account.options, + ) + } +} diff --git a/app-feature-preview/src/main/java/app/k9mail/feature/preview/backend/RealOAuth2TokenProvider.kt b/app-feature-preview/src/main/java/app/k9mail/feature/preview/backend/RealOAuth2TokenProvider.kt new file mode 100644 index 0000000000000000000000000000000000000000..eb160dff950668518498309066ced0fb81cfe642 --- /dev/null +++ b/app-feature-preview/src/main/java/app/k9mail/feature/preview/backend/RealOAuth2TokenProvider.kt @@ -0,0 +1,91 @@ +package app.k9mail.feature.preview.backend + +import android.content.Context +import app.k9mail.feature.preview.BuildConfig +import com.fsck.k9.mail.AuthenticationFailedException +import com.fsck.k9.mail.oauth.AuthStateStorage +import com.fsck.k9.mail.oauth.OAuth2TokenProvider +import java.io.IOException +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import net.openid.appauth.AuthState +import net.openid.appauth.AuthorizationException +import net.openid.appauth.AuthorizationException.AuthorizationRequestErrors +import net.openid.appauth.AuthorizationException.GeneralErrors +import net.openid.appauth.AuthorizationService +import timber.log.Timber + +class RealOAuth2TokenProvider( + context: Context, + private val authStateStorage: AuthStateStorage, +) : OAuth2TokenProvider { + private val authService = AuthorizationService(context) + private var requestFreshToken = false + + @Suppress("TooGenericExceptionCaught") + override fun getToken(timeoutMillis: Long): String { + val latch = CountDownLatch(1) + var token: String? = null + var exception: AuthorizationException? = null + + val authState = authStateStorage.getAuthorizationState()?.let { AuthState.jsonDeserialize(it) } + ?: throw AuthenticationFailedException("Login required") + + if (requestFreshToken) { + authState.needsTokenRefresh = true + } + + val oldAccessToken = authState.accessToken + + try { + authState.performActionWithFreshTokens(authService) { accessToken: String?, _, authException: AuthorizationException? -> + token = accessToken + exception = authException + + latch.countDown() + } + + latch.await(timeoutMillis, TimeUnit.MILLISECONDS) + } catch (e: Exception) { + // OAuth errors are communicated via the callback. If we end up here, it's probably a programming error. + if (BuildConfig.DEBUG) { + throw AssertionError("Wrong usage of AuthState.performActionWithFreshTokens()?", e) + } + + Timber.w(e, "Failed to fetch an access token. Clearing authorization state.") + + authStateStorage.updateAuthorizationState(authorizationState = null) + + throw AuthenticationFailedException( + message = "Failed to fetch an access token", + throwable = e, + ) + } + + val authException = exception + if (authException == GeneralErrors.NETWORK_ERROR || + authException == GeneralErrors.SERVER_ERROR || + authException == AuthorizationRequestErrors.SERVER_ERROR || + authException == AuthorizationRequestErrors.TEMPORARILY_UNAVAILABLE + ) { + throw IOException("Error while fetching an access token", authException) + } else if (authException != null) { + authStateStorage.updateAuthorizationState(authorizationState = null) + + throw AuthenticationFailedException( + message = "Failed to fetch an access token", + throwable = authException, + messageFromServer = authException.error, + ) + } else if (token != oldAccessToken) { + requestFreshToken = false + authStateStorage.updateAuthorizationState(authorizationState = authState.jsonSerializeString()) + } + + return token ?: throw AuthenticationFailedException("Failed to fetch an access token") + } + + override fun invalidateToken() { + requestFreshToken = true + } +} diff --git a/app-feature-preview/src/main/java/app/k9mail/feature/preview/backend/RealOAuth2TokenProviderFactory.kt b/app-feature-preview/src/main/java/app/k9mail/feature/preview/backend/RealOAuth2TokenProviderFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..4768662595a0c00ec48b028d49b0c100ba8ffdff --- /dev/null +++ b/app-feature-preview/src/main/java/app/k9mail/feature/preview/backend/RealOAuth2TokenProviderFactory.kt @@ -0,0 +1,14 @@ +package app.k9mail.feature.preview.backend + +import android.content.Context +import com.fsck.k9.mail.oauth.AuthStateStorage +import com.fsck.k9.mail.oauth.OAuth2TokenProvider +import com.fsck.k9.mail.oauth.OAuth2TokenProviderFactory + +class RealOAuth2TokenProviderFactory( + private val context: Context, +) : OAuth2TokenProviderFactory { + override fun create(authStateStorage: AuthStateStorage): OAuth2TokenProvider { + return RealOAuth2TokenProvider(context, authStateStorage) + } +} diff --git a/app-feature-preview/src/main/java/app/k9mail/feature/preview/navigation/FeatureNavHost.kt b/app-feature-preview/src/main/java/app/k9mail/feature/preview/navigation/FeatureNavHost.kt index d25543864c79b96376fbc5654df9e20f43ce18c4..73d1f2254444baf563bc834ac5271c517f3f401e 100644 --- a/app-feature-preview/src/main/java/app/k9mail/feature/preview/navigation/FeatureNavHost.kt +++ b/app-feature-preview/src/main/java/app/k9mail/feature/preview/navigation/FeatureNavHost.kt @@ -4,6 +4,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost +import app.k9mail.feature.account.edit.navigation.accountEditRoute +import app.k9mail.feature.account.edit.navigation.navigateToAccountEditConfigIncoming import app.k9mail.feature.account.setup.navigation.accountSetupRoute import app.k9mail.feature.account.setup.navigation.navigateToAccountSetup import app.k9mail.feature.onboarding.navigation.NAVIGATION_ROUTE_ONBOARDING @@ -26,6 +28,12 @@ fun FeatureNavHost( onImport = { /* TODO */ }, ) accountSetupRoute( + onBack = navController::popBackStack, + onFinish = { accountUuid -> + navController.navigateToAccountEditConfigIncoming(accountUuid) + }, + ) + accountEditRoute( onBack = navController::popBackStack, onFinish = { navController.navigateToOnboarding() }, ) diff --git a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/PagedContent.kt b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/PagedContent.kt index 0a4515045703da93693cfa981acab904ebebfd46..c86528037dc254ce3f300ada243f5ddbd7c8814e 100644 --- a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/PagedContent.kt +++ b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/PagedContent.kt @@ -32,7 +32,12 @@ fun PagedContent( modifier: Modifier = Modifier, onRenderPage: LazyGridScope.(T) -> Unit, ) { - val pagerState = rememberPagerState(initialPage = pages.indexOf(initialPage)) + val pagerState = rememberPagerState( + initialPage = pages.indexOf(initialPage), + initialPageOffsetFraction = 0f, + ) { + pages.size + } val coroutineScope = rememberCoroutineScope() Column( @@ -55,14 +60,14 @@ fun PagedContent( } ResponsiveContentWithBackground { HorizontalPager( - pageCount = pages.size, state = pagerState, modifier = Modifier .fillMaxSize(), ) { page -> LazyVerticalGrid( columns = GridCells.Adaptive(300.dp), - modifier = Modifier.fillMaxSize() + modifier = Modifier + .fillMaxSize() .imePadding(), horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.double), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.double), diff --git a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/drawer/DrawerCategoryItem.kt b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/drawer/DrawerCategoryItem.kt index a04959d942a2468c2427d7ee7eae6c3599208a3a..4cd6b5cc1b0a7f8245a450eb2e6a2b1684a09354 100644 --- a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/drawer/DrawerCategoryItem.kt +++ b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/drawer/DrawerCategoryItem.kt @@ -35,7 +35,7 @@ fun DrawerCategoryItem( @Preview @Composable -fun DrawerCategoryItemPreview() { +internal fun DrawerCategoryItemPreview() { PreviewWithThemes { DrawerCategoryItem( text = "Text", diff --git a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/drawer/DrawerHeaderItem.kt b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/drawer/DrawerHeaderItem.kt index d176eb537281a39db2326755cbc96804324495bb..0b1f6cc1621ced8d90b57efe6e9687c896a6e7dc 100644 --- a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/drawer/DrawerHeaderItem.kt +++ b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/drawer/DrawerHeaderItem.kt @@ -35,7 +35,7 @@ fun DrawerHeaderItem( @Preview @Composable -fun DrawerHeaderItemPreview() { +internal fun DrawerHeaderItemPreview() { PreviewWithThemes { DrawerHeaderItem( text = "Category", diff --git a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/list/SectionInfoItem.kt b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/list/SectionInfoItem.kt new file mode 100644 index 0000000000000000000000000000000000000000..dd063ef233f8fe4fdc73a87b6cdb67827c5f6409 --- /dev/null +++ b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/common/list/SectionInfoItem.kt @@ -0,0 +1,31 @@ +package app.k9mail.ui.catalog.ui.common.list + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.grid.GridItemSpan +import androidx.compose.foundation.lazy.grid.LazyGridScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import app.k9mail.core.ui.compose.designsystem.atom.text.TextCaption +import app.k9mail.core.ui.compose.theme.MainTheme + +fun LazyGridScope.sectionInfoItem( + text: String, +) { + item(span = { GridItemSpan(maxLineSpan) }) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding( + start = MainTheme.spacings.double, + end = MainTheme.spacings.double, + ), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + TextCaption( + text = text, + ) + } + } +} diff --git a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/molecule/items/StateItems.kt b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/molecule/items/StateItems.kt index 3bd37e2fa1aecf6f5890c1828ad602a9af9733c4..82231091d162c1dca6f9058fd7dd507f817485ee 100644 --- a/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/molecule/items/StateItems.kt +++ b/app-ui-catalog/src/main/java/app/k9mail/ui/catalog/ui/molecule/items/StateItems.kt @@ -1,10 +1,23 @@ package app.k9mail.ui.catalog.ui.molecule.items +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height import androidx.compose.foundation.lazy.grid.LazyGridScope +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import app.k9mail.core.ui.compose.designsystem.atom.text.TextSubtitle1 +import app.k9mail.core.ui.compose.designsystem.molecule.ContentLoadingErrorState +import app.k9mail.core.ui.compose.designsystem.molecule.ContentLoadingErrorView import app.k9mail.core.ui.compose.designsystem.molecule.ErrorView import app.k9mail.core.ui.compose.designsystem.molecule.LoadingView import app.k9mail.ui.catalog.ui.common.list.ItemOutlined import app.k9mail.ui.catalog.ui.common.list.sectionHeaderItem +import app.k9mail.ui.catalog.ui.common.list.sectionInfoItem import app.k9mail.ui.catalog.ui.common.list.sectionSubtitleItem fun LazyGridScope.stateItems() { @@ -33,4 +46,52 @@ fun LazyGridScope.stateItems() { ) } } + + sectionHeaderItem(text = "ContentLoadingErrorView") + sectionInfoItem(text = "Click below to change state") + item { + Column { + ItemOutlined { + StatefulContentLoadingErrorState() + } + } + } +} + +@Composable +private fun StatefulContentLoadingErrorState() { + val state = remember { + mutableStateOf(ContentLoadingErrorState.Loading) + } + + ContentLoadingErrorView( + state = state.value, + modifier = Modifier + .clickable { + when (state.value) { + ContentLoadingErrorState.Loading -> { + state.value = ContentLoadingErrorState.Content + } + + ContentLoadingErrorState.Content -> { + state.value = ContentLoadingErrorState.Error + } + + ContentLoadingErrorState.Error -> { + state.value = ContentLoadingErrorState.Loading + } + } + } + .height(200.dp) + .fillMaxSize(), + error = { + TextSubtitle1(text = "Error") + }, + loading = { + TextSubtitle1(text = "Loading...") + }, + content = { + TextSubtitle1(text = "Content") + }, + ) } diff --git a/app/core/src/main/java/com/fsck/k9/K9.kt b/app/core/src/main/java/com/fsck/k9/K9.kt index 9d2b1f07be019c339b641319dc704d533610d811..39d697d7804913fc43fcefd9f36866beaf2c7362 100644 --- a/app/core/src/main/java/com/fsck/k9/K9.kt +++ b/app/core/src/main/java/com/fsck/k9/K9.kt @@ -6,14 +6,16 @@ import com.fsck.k9.Account.SortType import com.fsck.k9.core.BuildConfig import com.fsck.k9.mail.K9MailLib import com.fsck.k9.mailstore.LocalStore +import com.fsck.k9.preferences.AppTheme import com.fsck.k9.preferences.RealGeneralSettingsManager import com.fsck.k9.preferences.Storage import com.fsck.k9.preferences.StorageEditor +import com.fsck.k9.preferences.SubTheme import kotlinx.datetime.Clock import timber.log.Timber import timber.log.Timber.DebugTree -@Deprecated("Use GeneralSettingsManager and GeneralSettings instead") +// TODO "Use GeneralSettingsManager and GeneralSettings instead" object K9 : EarlyInit { private val generalSettingsManager: RealGeneralSettingsManager by inject() @@ -535,18 +537,7 @@ object K9 : EarlyInit { const val MAIL_SERVICE_WAKE_LOCK_TIMEOUT = 60000 const val BOOT_RECEIVER_WAKE_LOCK_TIMEOUT = 60000 - enum class AppTheme { - LIGHT, - DARK, - FOLLOW_SYSTEM - } - - enum class SubTheme { - LIGHT, - DARK, - USE_GLOBAL - } - + @Suppress("ktlint:standard:class-naming") enum class BACKGROUND_OPS { ALWAYS, NEVER, WHEN_CHECKED_AUTO_SYNC } diff --git a/app/core/src/main/java/com/fsck/k9/Preferences.kt b/app/core/src/main/java/com/fsck/k9/Preferences.kt index 5b20a58fc60a81db9afcc6596a24ff5474808eef..a8ab74c4fe457034d3bdff64683e72515062e06c 100644 --- a/app/core/src/main/java/com/fsck/k9/Preferences.kt +++ b/app/core/src/main/java/com/fsck/k9/Preferences.kt @@ -122,7 +122,6 @@ class Preferences internal constructor( } } - @OptIn(ExperimentalCoroutinesApi::class) override fun getAccountFlow(accountUuid: String): Flow { return callbackFlow { val initialAccount = getAccount(accountUuid) @@ -169,6 +168,10 @@ class Preferences internal constructor( fun newAccount(): Account { val accountUuid = UUID.randomUUID().toString() + return newAccount(accountUuid) + } + + fun newAccount(accountUuid: String): Account { val account = Account(accountUuid) accountPreferenceSerializer.loadDefaults(account) diff --git a/app/core/src/main/java/com/fsck/k9/mailstore/MessageViewInfoExtractor.java b/app/core/src/main/java/com/fsck/k9/mailstore/MessageViewInfoExtractor.java index b98c801464f971a3e9f03cf643cd9f2525abc25e..8b142e594be7d751c13abe9f6ef8a03f790f5174 100644 --- a/app/core/src/main/java/com/fsck/k9/mailstore/MessageViewInfoExtractor.java +++ b/app/core/src/main/java/com/fsck/k9/mailstore/MessageViewInfoExtractor.java @@ -6,6 +6,8 @@ import java.util.Collections; import java.util.Date; import java.util.List; +import android.text.TextUtils; + import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.annotation.WorkerThread; @@ -347,7 +349,7 @@ public class MessageViewInfoExtractor { String filename = getPartName(part); html.append("

"); - html.append(filename); + html.append(TextUtils.htmlEncode(filename)); html.append("

"); } } @@ -540,10 +542,10 @@ public class MessageViewInfoExtractor { */ private static void addTableRow(StringBuilder html, String header, String value) { html.append(""); - html.append(header); + html.append(TextUtils.htmlEncode(header)); html.append(""); html.append(""); - html.append(value); + html.append(TextUtils.htmlEncode(value)); html.append(""); } diff --git a/app/core/src/main/java/com/fsck/k9/message/html/DisplayHtml.kt b/app/core/src/main/java/com/fsck/k9/message/html/DisplayHtml.kt index 9034f4d2ca067758ab197322a84819eca78c74e2..3e45d5e4fddc84386819bf6efe01ce7b4c64b8fb 100644 --- a/app/core/src/main/java/com/fsck/k9/message/html/DisplayHtml.kt +++ b/app/core/src/main/java/com/fsck/k9/message/html/DisplayHtml.kt @@ -25,8 +25,9 @@ class DisplayHtml(private val settings: HtmlSettings) : HtmlHeadProvider { private fun cssStyleTheme(): String { return if (settings.useDarkMode) { + // TODO: Don't hardcode these values. Inject them via HtmlSettings. " " } else { diff --git a/app/core/src/main/java/com/fsck/k9/notification/NotificationIds.kt b/app/core/src/main/java/com/fsck/k9/notification/NotificationIds.kt index 10b4718193ffec92385d3d18ed9f87fc8ca0c66a..f8439633d5f9e2aa5d9963eb1cef52b1aa1e954d 100644 --- a/app/core/src/main/java/com/fsck/k9/notification/NotificationIds.kt +++ b/app/core/src/main/java/com/fsck/k9/notification/NotificationIds.kt @@ -60,7 +60,8 @@ internal object NotificationIds { } private fun getBaseNotificationId(account: Account): Int { - return 1 /* skip notification ID 0 */ + NUMBER_OF_GENERAL_NOTIFICATIONS + + /* skip notification ID 0 */ + return 1 + NUMBER_OF_GENERAL_NOTIFICATIONS + account.accountNumber * NUMBER_OF_NOTIFICATIONS_PER_ACCOUNT } } diff --git a/app/core/src/main/java/com/fsck/k9/preferences/Settings.java b/app/core/src/main/java/com/fsck/k9/preferences/Settings.java index 1aa80b3a590537511aaf36c772e787649d18f009..dcff73e46ea512071ce1071cb92ad20d22634796 100644 --- a/app/core/src/main/java/com/fsck/k9/preferences/Settings.java +++ b/app/core/src/main/java/com/fsck/k9/preferences/Settings.java @@ -243,6 +243,13 @@ public class Settings { static class InvalidSettingValueException extends Exception { private static final long serialVersionUID = 1L; + + public InvalidSettingValueException() { + } + + public InvalidSettingValueException(String message) { + super(message); + } } /** diff --git a/app/core/src/main/java/com/fsck/k9/preferences/SettingsImporter.java b/app/core/src/main/java/com/fsck/k9/preferences/SettingsImporter.java index 3d9b26170445dccade571c7ace6325fc2bb93480..f7308902c61e4d0d3cbab7234a2d420aa6ea7221 100644 --- a/app/core/src/main/java/com/fsck/k9/preferences/SettingsImporter.java +++ b/app/core/src/main/java/com/fsck/k9/preferences/SettingsImporter.java @@ -253,8 +253,12 @@ public class SettingsImporter { erroneousAccounts.add(importResult.original); } } catch (InvalidSettingValueException e) { - Timber.e(e, "Encountered invalid setting while importing account \"%s\"", - account.name); + String reason = e.getMessage(); + if (TextUtils.isEmpty(reason)) { + reason = "Unknown"; + } + Timber.e(e, "Encountered invalid setting while importing account \"%s\", reason: \"%s\"", + account.name, reason); erroneousAccounts.add(new AccountDescription(account.name, account.uuid)); } catch (Exception e) { @@ -363,7 +367,7 @@ public class SettingsImporter { if (account.incoming == null) { // We don't import accounts without incoming server settings - throw new InvalidSettingValueException(); + throw new InvalidSettingValueException("Missing incoming server settings"); } // Write incoming server settings @@ -380,7 +384,7 @@ public class SettingsImporter { boolean authorizationNeeded = incoming.authenticationType == AuthType.XOAUTH2; if (account.outgoing == null) { - throw new InvalidSettingValueException(); + throw new InvalidSettingValueException("Missing outgoing server settings"); } String outgoingServerName = null; @@ -448,7 +452,7 @@ public class SettingsImporter { importIdentities(editor, contentVersion, uuid, account, overwrite, existingAccount, prefs); } else if (!mergeImportedAccount) { // Require accounts to at least have one identity - throw new InvalidSettingValueException(); + throw new InvalidSettingValueException("Missing identities, there should be at least one."); } // Write folder settings @@ -541,7 +545,7 @@ public class SettingsImporter { // Validate email address if (!IdentitySettingsDescriptions.isEmailAddressValid(identity.email)) { - throw new InvalidSettingValueException(); + throw new InvalidSettingValueException("Invalid email address: " + identity.email); } // Write email address diff --git a/app/core/src/test/java/com/fsck/k9/mailstore/MessageStoreManagerTest.kt b/app/core/src/test/java/com/fsck/k9/mailstore/MessageStoreManagerTest.kt index 98c59cb9a29cfcf1fe6d6b4a042715f7f0bbee5b..89d5e2f626cbd513c441435fe58774d06a6f3e88 100644 --- a/app/core/src/test/java/com/fsck/k9/mailstore/MessageStoreManagerTest.kt +++ b/app/core/src/test/java/com/fsck/k9/mailstore/MessageStoreManagerTest.kt @@ -45,7 +45,7 @@ class MessageStoreManagerTest { assertThat(messageStoreManager.getMessageStore(account)).isSameAs(messageStore2) } - private fun KStubbing.doNothingOn(block: T.() -> Any) { + private fun KStubbing.doNothingOn(block: T.() -> Any) { doNothing().whenever(mock).block() } } diff --git a/app/core/src/test/java/com/fsck/k9/mailstore/MessageViewInfoExtractorTest.java b/app/core/src/test/java/com/fsck/k9/mailstore/MessageViewInfoExtractorTest.java index 6de424caa23d3d96ad977dc9cd7ccfd5a8b72d05..8d5a057a8a39e0a919a44fa103bba8fa5b1e5f7b 100644 --- a/app/core/src/test/java/com/fsck/k9/mailstore/MessageViewInfoExtractorTest.java +++ b/app/core/src/test/java/com/fsck/k9/mailstore/MessageViewInfoExtractorTest.java @@ -251,16 +251,16 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest { // Create message/rfc822 body MimeMessage innerMessage = new MimeMessage(); innerMessage.addSentDate(new Date(112, 2, 17), false); - innerMessage.setHeader("To", "to@example.com"); - innerMessage.setSubject("Subject"); - innerMessage.setFrom(new Address("from@example.com")); + innerMessage.setHeader("To", "Recipient "); + innerMessage.setSubject("Subject with characters that need HTML encoding: \"&<>"); + innerMessage.setFrom(new Address("from@example.com", "Display name & email address")); MimeMessageHelper.setBody(innerMessage, innerBody); // Create multipart/mixed part MimeMultipart multipart = MimeMultipart.newInstance(); MimeBodyPart bodyPart1 = new MimeBodyPart(textBody, "text/plain"); MimeBodyPart bodyPart2 = new MimeBodyPart(innerMessage, "message/rfc822"); - bodyPart2.setHeader("Content-Disposition", "inline; filename=\"message.eml\""); + bodyPart2.setHeader("Content-Disposition", "inline; filename=\"message&special_char.eml\""); multipart.addBodyPart(bodyPart1); multipart.addBodyPart(bodyPart2); @@ -277,12 +277,12 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest { String expectedText = BODY_TEXT + "\r\n\r\n" + - "----- message.eml ------------------------------------------------------" + + "----- message&special_char.eml -----------------------------------------" + "\r\n\r\n" + - "From: from@example.com" + "\r\n" + - "To: to@example.com" + "\r\n" + + "From: Display name & email address " + "\r\n" + + "To: Recipient " + "\r\n" + "Sent: Sat Mar 17 00:00:00 GMT+01:00 2012" + "\r\n" + - "Subject: Subject" + "\r\n" + + "Subject: Subject with characters that need HTML encoding: \"&<>" + "\r\n" + "\r\n" + innerBodyText; String expectedHtml = @@ -290,20 +290,20 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest { BODY_TEXT_HTML + "" + "

message.eml

" + + "1px solid #000\">message&special_char.eml

" + "" + "" + "" + - "" + + "" + "" + "" + - "" + + "" + "" + "" + "" + "" + "" + - "" + + "" + "" + "
From:from@example.comDisplay name & email address <from@example.com>
To:to@example.comRecipient <to@example.com>
Sent:Sat Mar 17 00:00:00 GMT+01:00 2012
Subject:SubjectSubject with characters that need HTML encoding: "&<>
" + "
" +
diff --git a/app/html-cleaner/src/main/java/app/k9mail/html/cleaner/BodyCleaner.kt b/app/html-cleaner/src/main/java/app/k9mail/html/cleaner/BodyCleaner.kt
index 4fb58c2852248b9e4ba5013d6b3eea02850d3929..9102f3a5ec7c26f89aae641ca9057afd1910cd2b 100644
--- a/app/html-cleaner/src/main/java/app/k9mail/html/cleaner/BodyCleaner.kt
+++ b/app/html-cleaner/src/main/java/app/k9mail/html/cleaner/BodyCleaner.kt
@@ -13,7 +13,7 @@ internal class BodyCleaner {
 
     init {
         val allowList = Safelist.relaxed()
-            .addTags("font", "hr", "ins", "del", "center", "map", "area", "title", "tt", "kbd", "samp", "var")
+            .addTags("font", "hr", "ins", "del", "center", "map", "area", "title", "tt", "kbd", "samp", "var", "style")
             .addAttributes("font", "color", "face", "size")
             .addAttributes("a", "name")
             .addAttributes("div", "align")
diff --git a/app/html-cleaner/src/test/java/app/k9mail/html/cleaner/HtmlSanitizerTest.kt b/app/html-cleaner/src/test/java/app/k9mail/html/cleaner/HtmlSanitizerTest.kt
index 51f9212137470f3c79a66372ddcbde7f33bced6a..bd818122e864ccf75b9d536ce849afd1f8ca2475 100644
--- a/app/html-cleaner/src/test/java/app/k9mail/html/cleaner/HtmlSanitizerTest.kt
+++ b/app/html-cleaner/src/test/java/app/k9mail/html/cleaner/HtmlSanitizerTest.kt
@@ -485,6 +485,23 @@ class HtmlSanitizerTest {
         assertThat(result.toCompactString()).isEqualTo(html)
     }
 
+    @Test
+    fun `should keep 'style' element in body`() {
+        val html =
+            """
+            
+              
+              
+                
+              
+            
+            """.compactHtml()
+
+        val result = htmlSanitizer.sanitize(html)
+
+        assertThat(result.toCompactString()).isEqualTo(html)
+    }
+
     private fun assertTagsNotStripped(element: String) {
         val html = """<$element>some text"""
 
diff --git a/app/k9mail-jmap/src/main/res/values/themes.xml b/app/k9mail-jmap/src/main/res/values/themes.xml
index 04c11fa7b94fe4460e6e08bc7831b27c16df2f6d..e7450e8e1b41a5fc68655957e8cf71a7921c9ea9 100644
--- a/app/k9mail-jmap/src/main/res/values/themes.xml
+++ b/app/k9mail-jmap/src/main/res/values/themes.xml
@@ -130,7 +130,6 @@
         @color/material_purple_500
 
         #FFC300
-        #ffffffff
         @drawable/ic_person_add
         #ffcccccc
         #e8e8e8
@@ -298,7 +297,6 @@
         @color/material_purple_600
 
         #FFC300
-        #000000
         @drawable/ic_person_add
         #ff555555
         #313131
diff --git a/app/k9mail/build.gradle.kts b/app/k9mail/build.gradle.kts
index 582a832d53989ec0bbf09ed5f990760c422445f1..194da69d2b2cbd5b66c91c0d0d2ee4674d3f9853 100644
--- a/app/k9mail/build.gradle.kts
+++ b/app/k9mail/build.gradle.kts
@@ -20,8 +20,8 @@ dependencies {
     implementation(projects.core.featureflags)
     implementation(projects.feature.launcher)
 
-    // TODO remove account setup dependency
     implementation(projects.feature.account.setup)
+    implementation(projects.feature.account.edit)
 
     implementation(libs.androidx.appcompat)
     implementation(libs.androidx.core.ktx)
@@ -52,8 +52,8 @@ android {
         applicationId = "foundation.e.mail"
         testApplicationId = "foundation.e.mail.tests"
 
-        versionCode = 37010
-        versionName = "6.710"
+        versionCode = 37011
+        versionName = "6.711"
 
         // Keep in sync with the resource string array "supported_languages"
         resourceConfigurations.addAll(
@@ -86,7 +86,9 @@ android {
     buildTypes {
         release {
             signingConfigs.findByName("release")?.let { releaseSigningConfig ->
-                signingConfig = releaseSigningConfig
+                // The comment in the line below is necessary to prevent F-Droid's build tools from breaking our Gradle
+                // config when stripping the signing config.
+                signingConfig = releaseSigningConfig // F-Droid hack
             }
 
             isMinifyEnabled = true
@@ -153,7 +155,7 @@ android {
         }
     }
 
-    packagingOptions {
+    packaging {
         jniLibs {
             excludes += listOf("kotlin/**")
         }
diff --git a/app/k9mail/src/debug/res/values/app_logo_colors.xml b/app/k9mail/src/debug/res/values/app_logo_colors.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7939c369b4d4880c34421da9ee4f107890d5623f
--- /dev/null
+++ b/app/k9mail/src/debug/res/values/app_logo_colors.xml
@@ -0,0 +1,8 @@
+
+
+    #5917ff
+    #7a45ff
+    #531ad8
+
+    #e3d9ff
+
diff --git a/app/k9mail/src/main/AndroidManifest.xml b/app/k9mail/src/main/AndroidManifest.xml
index 255834b4dc47efb5fb191be6b760e285534e519f..c2e1f5acfdfa28f0f0d2110c72c3ff7d6ca22634 100644
--- a/app/k9mail/src/main/AndroidManifest.xml
+++ b/app/k9mail/src/main/AndroidManifest.xml
@@ -30,8 +30,7 @@
         android:allowTaskReparenting="false"
         android:usesCleartextTraffic="true"
         android:networkSecurityConfig="@xml/network_security_config"
-        android:icon="@drawable/ic_e_launcher"
-        android:roundIcon="@mipmap/icon_e"
+        android:icon="@drawable/ic_app_logo"
         android:label="@string/app_name"
         android:theme="@style/Theme.K9.Startup"
         android:resizeableActivity="true"
@@ -61,10 +60,6 @@
         
 
-        
-
         
 
-        
-
-        
-
          {
+        AccountStateLoader(
+            accountManager = get(),
+        )
+    }
+
+    factory {
+        AccountUpdater(
+            preferences = get(),
+        )
+    }
 }
diff --git a/app/k9mail/src/main/java/com/fsck/k9/account/AccountStateLoader.kt b/app/k9mail/src/main/java/com/fsck/k9/account/AccountStateLoader.kt
new file mode 100644
index 0000000000000000000000000000000000000000..71b30ec470ee045bcffc0b8c1b7a09148e3b618c
--- /dev/null
+++ b/app/k9mail/src/main/java/com/fsck/k9/account/AccountStateLoader.kt
@@ -0,0 +1,44 @@
+package com.fsck.k9.account
+
+import app.k9mail.feature.account.common.AccountCommonExternalContract
+import app.k9mail.feature.account.common.domain.entity.AccountState
+import app.k9mail.feature.account.common.domain.entity.AuthorizationState
+import com.fsck.k9.logging.Timber
+import com.fsck.k9.preferences.AccountManager
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import com.fsck.k9.Account as K9Account
+
+class AccountStateLoader(
+    private val accountManager: AccountManager,
+    private val coroutineDispatcher: CoroutineDispatcher = Dispatchers.IO,
+) : AccountCommonExternalContract.AccountStateLoader {
+
+    @Suppress("TooGenericExceptionCaught")
+    override suspend fun loadAccountState(accountUuid: String): AccountState? {
+        return try {
+            withContext(coroutineDispatcher) {
+                load(accountUuid)
+            }
+        } catch (e: Exception) {
+            Timber.e(e, "Error while loading account")
+
+            null
+        }
+    }
+
+    private fun load(accountUuid: String): AccountState? {
+        return accountManager.getAccount(accountUuid)?.let { mapToAccountState(it) }
+    }
+
+    private fun mapToAccountState(account: K9Account): AccountState {
+        return AccountState(
+            uuid = account.uuid,
+            emailAddress = account.email,
+            incomingServerSettings = account.incomingServerSettings,
+            outgoingServerSettings = account.outgoingServerSettings,
+            authorizationState = AuthorizationState(account.oAuthState),
+        )
+    }
+}
diff --git a/app/k9mail/src/main/java/com/fsck/k9/account/AccountUpdater.kt b/app/k9mail/src/main/java/com/fsck/k9/account/AccountUpdater.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3a5bd414317b5b42bd9a3fefbaa4b20081439f65
--- /dev/null
+++ b/app/k9mail/src/main/java/com/fsck/k9/account/AccountUpdater.kt
@@ -0,0 +1,44 @@
+package com.fsck.k9.account
+
+import app.k9mail.feature.account.common.domain.entity.Account
+import app.k9mail.feature.account.edit.AccountEditExternalContract
+import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater.AccountUpdaterResult
+import com.fsck.k9.Preferences
+import com.fsck.k9.logging.Timber
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+class AccountUpdater(
+    private val preferences: Preferences,
+    private val coroutineDispatcher: CoroutineDispatcher = Dispatchers.IO,
+) : AccountEditExternalContract.AccountUpdater {
+
+    @Suppress("TooGenericExceptionCaught")
+    override suspend fun updateAccount(account: Account): AccountUpdaterResult {
+        return try {
+            withContext(coroutineDispatcher) {
+                AccountUpdaterResult.Success(update(account))
+            }
+        } catch (e: Exception) {
+            Timber.e(e, "Error while updating account")
+
+            AccountUpdaterResult.Error(e.message ?: "Unknown update account error")
+        }
+    }
+
+    private fun update(account: Account): String {
+        val uuid = account.uuid
+        require(uuid.isNotEmpty()) { "Can't update account without uuid" }
+
+        val existingAccount = preferences.getAccount(uuid)
+        require(existingAccount != null) { "Can't update non-existing account" }
+
+        existingAccount.incomingServerSettings = account.incomingServerSettings
+        existingAccount.outgoingServerSettings = account.outgoingServerSettings
+
+        preferences.saveAccount(existingAccount)
+
+        return uuid
+    }
+}
diff --git a/app/k9mail/src/main/java/com/fsck/k9/featureflag/InMemoryFeatureFlagFactory.kt b/app/k9mail/src/main/java/com/fsck/k9/featureflag/InMemoryFeatureFlagFactory.kt
index 2c5eb849490a6a5424119ee5369f39ce72f00eb0..da37d49036a1adedb768c3dc9131f7c60ee1698a 100644
--- a/app/k9mail/src/main/java/com/fsck/k9/featureflag/InMemoryFeatureFlagFactory.kt
+++ b/app/k9mail/src/main/java/com/fsck/k9/featureflag/InMemoryFeatureFlagFactory.kt
@@ -7,7 +7,7 @@ import app.k9mail.core.featureflag.FeatureFlagKey
 class InMemoryFeatureFlagFactory : FeatureFlagFactory {
     override fun createFeatureCatalog(): List {
         return listOf(
-            FeatureFlag(FeatureFlagKey("new_onboarding"), false),
+            FeatureFlag(FeatureFlagKey("new_account_edit"), false),
         )
     }
 }
diff --git a/app/k9mail/src/main/res/values/themes.xml b/app/k9mail/src/main/res/values/themes.xml
index 6e393f8cbbf47d50b04485bd4f0f7738df775641..e31b3721876de5b85ee7621efeeab1be641f451b 100644
--- a/app/k9mail/src/main/res/values/themes.xml
+++ b/app/k9mail/src/main/res/values/themes.xml
@@ -119,7 +119,6 @@
         @drawable/ic_messagelist_answered
         @drawable/ic_messagelist_forwarded
         @drawable/ic_messagelist_answered_forwarded
-        @color/color_default_background
         @drawable/ic_person_add
         @color/color_default_foreground
         #ffababab
@@ -267,7 +266,6 @@
         @drawable/ic_messagelist_answered
         @drawable/ic_messagelist_forwarded
         @drawable/ic_messagelist_answered_forwarded
-        @color/color_default_background
         @drawable/ic_person_add
         @color/color_default_foreground
         #ffababab
diff --git a/app/k9mail/src/test/java/com/fsck/k9/DependencyInjectionTest.kt b/app/k9mail/src/test/java/com/fsck/k9/DependencyInjectionTest.kt
index 636d824ab02d66cb7e8e0c93eefcee4cfe8ebd30..005a826beccdc8a97eaad75019837f159389041d 100644
--- a/app/k9mail/src/test/java/com/fsck/k9/DependencyInjectionTest.kt
+++ b/app/k9mail/src/test/java/com/fsck/k9/DependencyInjectionTest.kt
@@ -3,8 +3,8 @@ package com.fsck.k9
 import android.view.ContextThemeWrapper
 import androidx.lifecycle.LifecycleOwner
 import androidx.work.WorkerParameters
-import app.k9mail.feature.account.setup.domain.DomainContract.UseCase.ValidateServerSettings
-import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract
+import app.k9mail.feature.account.server.validation.domain.ServerValidationDomainContract
+import app.k9mail.feature.account.server.validation.ui.ServerValidationContract
 import com.fsck.k9.account.AccountRemoverWorker
 import com.fsck.k9.job.MailSyncWorker
 import com.fsck.k9.mail.oauth.AuthStateStorage
@@ -21,7 +21,6 @@ import org.junit.runner.RunWith
 import org.koin.core.annotation.KoinInternalApi
 import org.koin.core.logger.PrintLogger
 import org.koin.core.parameter.parametersOf
-import org.koin.core.qualifier.named
 import org.koin.java.KoinJavaComponent
 import org.koin.test.AutoCloseKoinTest
 import org.koin.test.check.checkModules
@@ -59,9 +58,9 @@ class DependencyInjectionTest : AutoCloseKoinTest() {
             withParameters(clazz = Class.forName("com.fsck.k9.view.K9WebViewClient").kotlin) {
                 parametersOf(null, null)
             }
-            withParameter(named("incoming_validation")) { authStateStorage }
-            withParameter(named("outgoing_validation")) { authStateStorage }
-            withParameter { authStateStorage }
+            withParameter { authStateStorage }
+            withParameter { authStateStorage }
+            withParameter { authStateStorage }
             withParameter { mock() }
         }
     }
diff --git a/app/k9mail/src/test/java/com/fsck/k9/account/AccountStateLoaderTest.kt b/app/k9mail/src/test/java/com/fsck/k9/account/AccountStateLoaderTest.kt
new file mode 100644
index 0000000000000000000000000000000000000000..be7b5f940271c39f57779bc1c8e5c9cb6fad3fe6
--- /dev/null
+++ b/app/k9mail/src/test/java/com/fsck/k9/account/AccountStateLoaderTest.kt
@@ -0,0 +1,80 @@
+package com.fsck.k9.account
+
+import app.k9mail.feature.account.common.domain.entity.AccountState
+import app.k9mail.feature.account.common.domain.entity.AuthorizationState
+import assertk.assertThat
+import assertk.assertions.isEqualTo
+import assertk.assertions.isNull
+import com.fsck.k9.Account
+import com.fsck.k9.Identity
+import com.fsck.k9.mail.AuthType
+import com.fsck.k9.mail.ConnectionSecurity
+import com.fsck.k9.mail.ServerSettings
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+
+class AccountStateLoaderTest {
+
+    @Test
+    fun `loadAccountState() should return null when accountManager returns null`() = runTest {
+        val accountManager = FakeAccountManager()
+        val accountLoader = AccountStateLoader(accountManager)
+
+        val result = accountLoader.loadAccountState("accountUuid")
+
+        assertThat(result).isNull()
+    }
+
+    @Test
+    fun `loadAccountState() should return account when present in accountManager`() = runTest {
+        val accounts = mapOf(
+            "accountUuid" to Account(uuid = "accountUuid").apply {
+                identities = mutableListOf(Identity())
+                email = "emailAddress"
+                incomingServerSettings = INCOMING_SERVER_SETTINGS
+                outgoingServerSettings = OUTGOING_SERVER_SETTINGS
+                oAuthState = "oAuthState"
+            },
+        )
+        val accountManager = FakeAccountManager(accounts = accounts)
+        val accountLoader = AccountStateLoader(accountManager)
+
+        val result = accountLoader.loadAccountState("accountUuid")
+
+        assertThat(result).isEqualTo(
+            AccountState(
+                uuid = "accountUuid",
+                emailAddress = "emailAddress",
+                incomingServerSettings = INCOMING_SERVER_SETTINGS,
+                outgoingServerSettings = OUTGOING_SERVER_SETTINGS,
+                authorizationState = AuthorizationState("oAuthState"),
+            ),
+        )
+    }
+
+    private companion object {
+        val INCOMING_SERVER_SETTINGS = ServerSettings(
+            type = "imap",
+            host = "imap.example.org",
+            port = 143,
+            connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED,
+            authenticationType = AuthType.PLAIN,
+            username = "username",
+            password = "password",
+            clientCertificateAlias = null,
+            extra = emptyMap(),
+        )
+
+        val OUTGOING_SERVER_SETTINGS = ServerSettings(
+            type = "smtp",
+            host = "smtp.example.org",
+            port = 587,
+            connectionSecurity = ConnectionSecurity.SSL_TLS_REQUIRED,
+            authenticationType = AuthType.PLAIN,
+            username = "username",
+            password = "password",
+            clientCertificateAlias = null,
+            extra = emptyMap(),
+        )
+    }
+}
diff --git a/app/k9mail/src/test/java/com/fsck/k9/account/FakeAccountManager.kt b/app/k9mail/src/test/java/com/fsck/k9/account/FakeAccountManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d22868e2f0b2685560efd7d3f07dd7184f98a9d5
--- /dev/null
+++ b/app/k9mail/src/test/java/com/fsck/k9/account/FakeAccountManager.kt
@@ -0,0 +1,42 @@
+package com.fsck.k9.account
+
+import com.fsck.k9.Account
+import com.fsck.k9.AccountRemovedListener
+import com.fsck.k9.AccountsChangeListener
+import com.fsck.k9.preferences.AccountManager
+import kotlinx.coroutines.flow.Flow
+
+class FakeAccountManager(
+    private val accounts: Map = emptyMap(),
+) : AccountManager {
+
+    override fun getAccountsFlow(): Flow> {
+        TODO("Not yet implemented")
+    }
+
+    override fun getAccount(accountUuid: String): Account? = accounts[accountUuid]
+
+    override fun getAccountFlow(accountUuid: String): Flow {
+        TODO("Not yet implemented")
+    }
+
+    override fun addAccountRemovedListener(listener: AccountRemovedListener) {
+        TODO("Not yet implemented")
+    }
+
+    override fun moveAccount(account: Account, newPosition: Int) {
+        TODO("Not yet implemented")
+    }
+
+    override fun addOnAccountsChangeListener(accountsChangeListener: AccountsChangeListener) {
+        TODO("Not yet implemented")
+    }
+
+    override fun removeOnAccountsChangeListener(accountsChangeListener: AccountsChangeListener) {
+        TODO("Not yet implemented")
+    }
+
+    override fun saveAccount(account: Account) {
+        TODO("Not yet implemented")
+    }
+}
diff --git a/app/testing/src/main/java/com/fsck/k9/testing/MockHelper.kt b/app/testing/src/main/java/com/fsck/k9/testing/MockHelper.kt
index 17e9e6986e5e593d195b2ed95a3aa6377e9b1e8b..32bca4f250bbc831186535927bc5453fdde9940e 100644
--- a/app/testing/src/main/java/com/fsck/k9/testing/MockHelper.kt
+++ b/app/testing/src/main/java/com/fsck/k9/testing/MockHelper.kt
@@ -17,7 +17,7 @@ object MockHelper {
         }
     }
 
-    inline fun  mockBuilder(stubbing: KStubbing.(T) -> Unit = {}): T {
+    inline fun  mockBuilder(stubbing: KStubbing.(T) -> Unit = {}): T {
         return mockBuilder(T::class.java).apply { KStubbing(this).stubbing(this) }
     }
 }
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/LauncherShortcuts.java b/app/ui/legacy/src/main/java/com/fsck/k9/activity/LauncherShortcuts.java
index 78a7ab1ff6a4a6d2ffc85a86a63d8136369c746e..8d8d4a174e85688f2947580a715db86bc15e1635 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/LauncherShortcuts.java
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/LauncherShortcuts.java
@@ -41,7 +41,7 @@ public class LauncherShortcuts extends AccountList {
             displayName = account.getEmail();
         }
         intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, displayName);
-        Parcelable iconResource = Intent.ShortcutIconResource.fromContext(this, R.mipmap.icon_e);
+        Parcelable iconResource = Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher);
         intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
 
         setResult(RESULT_OK, intent);
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/MessageCompose.java b/app/ui/legacy/src/main/java/com/fsck/k9/activity/MessageCompose.java
index c317a558ff583c5a3f39683c2c6d781f77fa0ed2..03ce3181649601276e097ceef501e212fb2c7baa 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/MessageCompose.java
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/MessageCompose.java
@@ -268,15 +268,7 @@ public class MessageCompose extends K9Activity implements OnClickListener,
 
         LayoutInflater themedLayoutInflater = LayoutInflater.from(themeContext);
         contentContainer.setLayoutInflater(themedLayoutInflater);
-
-        View contentView = contentContainer.inflate();
-
-        // background color needs to be forced
-        //TODO: Change themes to use appropriate background colors that don't need overriding.
-        TypedValue outValue = new TypedValue();
-        themeContext.getTheme().resolveAttribute(R.attr.messageViewBackgroundColor, outValue, true);
-
-        contentView.setBackgroundColor(outValue.data);
+        contentContainer.inflate();
 
         initializeActionBar();
 
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt b/app/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt
index 4452e51fa6a7fca7c0096df0b770ea2865366b55..88b85115e075353685d39f52ad015b18c8cfaedd 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt
@@ -45,12 +45,9 @@ import androidx.fragment.app.FragmentManager
 import androidx.fragment.app.FragmentTransaction
 import androidx.fragment.app.commit
 import androidx.fragment.app.commitNow
-import androidx.lifecycle.Observer
 import androidx.lifecycle.lifecycleScope
 import app.k9mail.core.android.common.contact.CachingRepository
 import app.k9mail.core.android.common.contact.ContactRepository
-import app.k9mail.core.featureflag.FeatureFlagKey
-import app.k9mail.core.featureflag.FeatureFlagProvider
 import app.k9mail.feature.launcher.FeatureLauncherActivity
 import com.fsck.k9.Account
 import com.fsck.k9.K9
@@ -86,14 +83,12 @@ import com.fsck.k9.ui.messageview.MessageViewContainerFragment
 import com.fsck.k9.ui.messageview.MessageViewContainerFragment.MessageViewContainerListener
 import com.fsck.k9.ui.messageview.MessageViewFragment.MessageViewFragmentListener
 import com.fsck.k9.ui.messageview.PlaceholderFragment
-import com.fsck.k9.ui.onboarding.OnboardingActivity
 import com.fsck.k9.ui.permissions.K9PermissionUiHelper
 import com.fsck.k9.ui.permissions.Permission
 import com.fsck.k9.ui.permissions.PermissionUiHelper
 import com.fsck.k9.view.ViewSwitcher
 import com.fsck.k9.view.ViewSwitcher.OnSwitchCompleteListener
 import com.mikepenz.materialdrawer.util.getOptimalDrawerWidth
-import java.util.function.Consumer
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import org.koin.android.ext.android.inject
@@ -124,7 +119,6 @@ open class MessageList :
     private val jobManager: K9JobManager by inject()
     private val accountCreatorHelper: AccountCreatorHelper by inject()
     private val contactRepository: ContactRepository by inject()
-    private val featureFlagProvider: FeatureFlagProvider by inject()
 
     private val permissionUiHelper: PermissionUiHelper = K9PermissionUiHelper(this)
 
@@ -187,16 +181,7 @@ open class MessageList :
         val accounts = preferences.accounts
         val hasAccountSetup = accounts.any { it.isFinishedSetup }
         if (!hasAccountSetup) {
-            generalSettingsManager.setReloadAccountChipsColors(false)
-
-            featureFlagProvider.provide(FeatureFlagKey("new_onboarding")).onEnabled {
-                FeatureLauncherActivity.launchOnboarding(this)
-            }.onDisabled {
-                OnboardingActivity.launch(this)
-            }.onUnavailable {
-                Timber.d("Feature flag 'new_onboarding' is unavailable, falling back to old onboarding")
-                OnboardingActivity.launch(this)
-            }
+            FeatureLauncherActivity.launchOnboarding(this)
             finish()
             return
         }
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupAccountType.kt b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupAccountType.kt
index d864fc6dda14e3f79eaf001b7dfcbfebed0f8f4d..bd102cfff50c0e79f2d7cfab8163ec11d69db602 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupAccountType.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupAccountType.kt
@@ -5,7 +5,7 @@ import android.content.Intent
 import android.os.Bundle
 import android.view.View
 import app.k9mail.core.common.mail.Protocols
-import app.k9mail.feature.account.oauth.domain.DomainContract.UseCase.SuggestServerName
+import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract.UseCase.SuggestServerName
 import com.fsck.k9.Account
 import com.fsck.k9.Preferences
 import com.fsck.k9.helper.EmailHelper.getDomainFromEmailAddress
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupBasics.kt b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupBasics.kt
index 68d40beee6c689f102bfb464bd15fe4bdd287fc6..b56f3c3a2dd4a62c3851a871fd56d6e643c7755f 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupBasics.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupBasics.kt
@@ -395,7 +395,7 @@ class AccountSetupBasics : K9Activity() {
             preferences.saveAccount(account)
             Core.setServicesEnabled(applicationContext)
 
-            AccountSetupNames.actionSetNames(this, account)
+            // AccountSetupNames.actionSetNames(this, account)
         }
     }
 
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupIncoming.java b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupIncoming.java
index 3f789ea71f22a461e5a2a690b0ac2b333723f53e..b95587afc7cfa0d3b3dfeed5a4cd906fabb00765 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupIncoming.java
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupIncoming.java
@@ -26,7 +26,7 @@ import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import app.k9mail.core.common.mail.Protocols;
-import app.k9mail.feature.account.oauth.domain.DomainContract.UseCase.SuggestServerName;
+import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract.UseCase.SuggestServerName;
 import com.fsck.k9.Account;
 import com.fsck.k9.DI;
 import com.fsck.k9.LocalKeyStoreManager;
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupNames.java b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupNames.java
deleted file mode 100644
index 3c0d672790c038713e7769849da9f7da01762415..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupNames.java
+++ /dev/null
@@ -1,102 +0,0 @@
-
-package com.fsck.k9.activity.setup;
-
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.text.method.TextKeyListener;
-import android.text.method.TextKeyListener.Capitalize;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.EditText;
-
-import com.fsck.k9.Account;
-import com.fsck.k9.Preferences;
-import com.fsck.k9.ui.base.K9Activity;
-import com.fsck.k9.activity.MessageList;
-import com.fsck.k9.ui.R;
-import com.fsck.k9.helper.Utility;
-
-@Deprecated(since = "New account setup flow")
-public class AccountSetupNames extends K9Activity implements OnClickListener {
-    private static final String EXTRA_ACCOUNT = "account";
-
-    private EditText mDescription;
-
-    private EditText mName;
-
-    private Account mAccount;
-
-    private Button mDoneButton;
-
-    public static void actionSetNames(Context context, Account account) {
-        Intent i = new Intent(context, AccountSetupNames.class);
-        i.putExtra(EXTRA_ACCOUNT, account.getUuid());
-        context.startActivity(i);
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setLayout(R.layout.account_setup_names);
-        setTitle(R.string.account_setup_names_title);
-
-        mDescription = findViewById(R.id.account_description);
-        mName = findViewById(R.id.account_name);
-        mDoneButton = findViewById(R.id.done);
-        mDoneButton.setOnClickListener(this);
-
-        TextWatcher validationTextWatcher = new TextWatcher() {
-            public void afterTextChanged(Editable s) {
-                validateFields();
-            }
-
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-            }
-
-            public void onTextChanged(CharSequence s, int start, int before, int count) {
-            }
-        };
-        mName.addTextChangedListener(validationTextWatcher);
-
-        mName.setKeyListener(TextKeyListener.getInstance(false, Capitalize.WORDS));
-
-        String accountUuid = getIntent().getStringExtra(EXTRA_ACCOUNT);
-        mAccount = Preferences.getPreferences().getAccount(accountUuid);
-
-        String senderName = mAccount.getSenderName();
-        if (senderName != null) {
-            mName.setText(senderName);
-        }
-
-        if (!Utility.requiredFieldValid(mName)) {
-            mDoneButton.setEnabled(false);
-        }
-    }
-
-    private void validateFields() {
-        mDoneButton.setEnabled(Utility.requiredFieldValid(mName));
-        Utility.setCompoundDrawablesAlpha(mDoneButton, mDoneButton.isEnabled() ? 255 : 128);
-    }
-
-    protected void onNext() {
-        if (Utility.requiredFieldValid(mDescription)) {
-            mAccount.setName(mDescription.getText().toString());
-        }
-        mAccount.setSenderName(mName.getText().toString());
-        mAccount.markSetupFinished();
-        Preferences.getPreferences().saveAccount(mAccount);
-        finishAffinity();
-        MessageList.launch(this, mAccount);
-    }
-
-    public void onClick(View v) {
-        if (v.getId() == R.id.done) {
-            onNext();
-        }
-    }
-}
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupOptions.java b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupOptions.java
deleted file mode 100644
index 43fd54f798b2c49e76b3535e567c3d97d4b5a6dd..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupOptions.java
+++ /dev/null
@@ -1,126 +0,0 @@
-
-package com.fsck.k9.activity.setup;
-
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.ArrayAdapter;
-import android.widget.CheckBox;
-import android.widget.Spinner;
-
-import com.fsck.k9.Account;
-import com.fsck.k9.Core;
-import com.fsck.k9.Preferences;
-import com.fsck.k9.ui.R;
-import com.fsck.k9.ui.base.K9Activity;
-
-
-@Deprecated(since = "New account setup flow")
-public class AccountSetupOptions extends K9Activity implements OnClickListener {
-    private static final String EXTRA_ACCOUNT = "account";
-
-    private Spinner mCheckFrequencyView;
-
-    private Spinner mDisplayCountView;
-
-
-    private CheckBox mNotifyView;
-
-    private Account mAccount;
-
-    public static void actionOptions(Context context, Account account) {
-        Intent i = new Intent(context, AccountSetupOptions.class);
-        i.putExtra(EXTRA_ACCOUNT, account.getUuid());
-        context.startActivity(i);
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setLayout(R.layout.account_setup_options);
-        setTitle(R.string.account_setup_options_title);
-
-        mCheckFrequencyView = findViewById(R.id.account_check_frequency);
-        mDisplayCountView = findViewById(R.id.account_display_count);
-        mNotifyView = findViewById(R.id.account_notify);
-
-        findViewById(R.id.next).setOnClickListener(this);
-
-        SpinnerOption checkFrequencies[] = {
-            new SpinnerOption(-1,
-            getString(R.string.account_setup_options_mail_check_frequency_never)),
-            new SpinnerOption(5,
-                        getString(R.string.account_setup_options_mail_check_frequency_5min)),
-            new SpinnerOption(15,
-            getString(R.string.account_setup_options_mail_check_frequency_15min)),
-            new SpinnerOption(30,
-            getString(R.string.account_setup_options_mail_check_frequency_30min)),
-            new SpinnerOption(60,
-            getString(R.string.account_setup_options_mail_check_frequency_1hour)),
-            new SpinnerOption(120,
-            getString(R.string.account_setup_options_mail_check_frequency_2hour)),
-            new SpinnerOption(180,
-            getString(R.string.account_setup_options_mail_check_frequency_3hour)),
-            new SpinnerOption(360,
-            getString(R.string.account_setup_options_mail_check_frequency_6hour)),
-            new SpinnerOption(720,
-            getString(R.string.account_setup_options_mail_check_frequency_12hour)),
-            new SpinnerOption(1440,
-            getString(R.string.account_setup_options_mail_check_frequency_24hour)),
-
-        };
-
-        ArrayAdapter checkFrequenciesAdapter = new ArrayAdapter<>(this,
-                android.R.layout.simple_spinner_item, checkFrequencies);
-        checkFrequenciesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
-        mCheckFrequencyView.setAdapter(checkFrequenciesAdapter);
-
-        SpinnerOption displayCounts[] = {
-            new SpinnerOption(10, getString(R.string.account_setup_options_mail_display_count_10)),
-            new SpinnerOption(25, getString(R.string.account_setup_options_mail_display_count_25)),
-            new SpinnerOption(50, getString(R.string.account_setup_options_mail_display_count_50)),
-            new SpinnerOption(100, getString(R.string.account_setup_options_mail_display_count_100)),
-            new SpinnerOption(250, getString(R.string.account_setup_options_mail_display_count_250)),
-            new SpinnerOption(500, getString(R.string.account_setup_options_mail_display_count_500)),
-            new SpinnerOption(1000, getString(R.string.account_setup_options_mail_display_count_1000)),
-        };
-
-        ArrayAdapter displayCountsAdapter = new ArrayAdapter<>(this,
-                android.R.layout.simple_spinner_item, displayCounts);
-        displayCountsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
-        mDisplayCountView.setAdapter(displayCountsAdapter);
-
-        String accountUuid = getIntent().getStringExtra(EXTRA_ACCOUNT);
-        mAccount = Preferences.getPreferences().getAccount(accountUuid);
-
-        mNotifyView.setChecked(mAccount.isNotifyNewMail());
-        SpinnerOption.setSpinnerOptionValue(mCheckFrequencyView, mAccount
-                                            .getAutomaticCheckIntervalMinutes());
-        SpinnerOption.setSpinnerOptionValue(mDisplayCountView, mAccount
-                                            .getDisplayCount());
-    }
-
-    private void onDone() {
-        mAccount.setName(mAccount.getEmail());
-        mAccount.setNotifyNewMail(mNotifyView.isChecked());
-        mAccount.setAutomaticCheckIntervalMinutes((Integer)((SpinnerOption)mCheckFrequencyView
-                .getSelectedItem()).value);
-        mAccount.setDisplayCount((Integer)((SpinnerOption)mDisplayCountView
-                                           .getSelectedItem()).value);
-
-        mAccount.setFolderPushMode(Account.FolderMode.NONE);
-
-        Preferences.getPreferences().saveAccount(mAccount);
-        Core.setServicesEnabled(this);
-        AccountSetupNames.actionSetNames(this, mAccount);
-    }
-
-    public void onClick(View v) {
-        if (v.getId() == R.id.next) {
-            onDone();
-        }
-    }
-}
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupOutgoing.java b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupOutgoing.java
index d2b6d3a354921de779fd36e959122e117f81e823..86bfaf37a2dbe8d2d4e1715ac4bfc8becef43454 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupOutgoing.java
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupOutgoing.java
@@ -495,7 +495,7 @@ public class AccountSetupOutgoing extends K9Activity implements OnClickListener,
                 Preferences.getPreferences().saveAccount(mAccount);
                 finish();
             } else {
-                AccountSetupOptions.actionOptions(this, mAccount);
+//                AccountSetupOptions.actionOptions(this, mAccount);
             }
         }
     }
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AuthViewModel.kt b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AuthViewModel.kt
index d4278c660b32daa553ebb7d638b354239e897d44..8c1385742878cdeca59c44d80bcf312c3677df78 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AuthViewModel.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AuthViewModel.kt
@@ -13,7 +13,7 @@ import androidx.lifecycle.DefaultLifecycleObserver
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.viewModelScope
-import app.k9mail.feature.account.oauth.domain.DomainContract.UseCase.GetOAuthRequestIntent
+import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract.UseCase.GetOAuthRequestIntent
 import app.k9mail.feature.account.oauth.domain.entity.AuthorizationIntentResult
 import com.fsck.k9.Account
 import com.fsck.k9.preferences.AccountManager
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/SpinnerOption.java b/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/SpinnerOption.java
deleted file mode 100644
index 89275b97424b8b0e8bd3343e45df1495c170155d..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/java/com/fsck/k9/activity/setup/SpinnerOption.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- *
- */
-
-package com.fsck.k9.activity.setup;
-
-import android.widget.Spinner;
-
-public class SpinnerOption {
-    public Object value;
-
-    public String label;
-
-    public static void setSpinnerOptionValue(Spinner spinner, Object value) {
-        for (int i = 0, count = spinner.getCount(); i < count; i++) {
-            SpinnerOption so = (SpinnerOption)spinner.getItemAtPosition(i);
-            if (so.value.equals(value)) {
-                spinner.setSelection(i, true);
-                return;
-            }
-        }
-    }
-
-    public SpinnerOption(Object value, String label) {
-        this.value = value;
-        this.label = label;
-    }
-
-    @Override
-    public String toString() {
-        return label;
-    }
-}
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListAdapter.kt b/app/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListAdapter.kt
index 9a9f5dbf993f0cca69abb52798d3cf84bc0e8140..a15e49f52f219babf2b1844f73ef4adf6b58e2e4 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListAdapter.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListAdapter.kt
@@ -13,8 +13,8 @@ import android.view.View
 import android.view.View.GONE
 import android.view.View.INVISIBLE
 import android.view.View.OnClickListener
-import android.view.View.VISIBLE
 import android.view.View.OnLongClickListener
+import android.view.View.VISIBLE
 import android.view.ViewGroup
 import android.widget.ImageView
 import android.widget.TextView
@@ -50,16 +50,19 @@ class MessageListAdapter internal constructor(
     private val contactsPictureLoader: ContactPictureLoader,
     private val listItemListener: MessageListItemActionListener,
     private val appearance: MessageListAppearance,
-    private val relativeDateTimeFormatter: RelativeDateTimeFormatter
+    private val relativeDateTimeFormatter: RelativeDateTimeFormatter,
 ) : RecyclerView.Adapter() {
 
     private val forwardedIcon: Drawable = theme.resolveDrawableAttribute(R.attr.messageListForwarded)
     private val answeredIcon: Drawable = theme.resolveDrawableAttribute(R.attr.messageListAnswered)
     private val forwardedAnsweredIcon: Drawable = theme.resolveDrawableAttribute(R.attr.messageListAnsweredForwarded)
-    private val activeItemBackgroundColor: Int = theme.resolveColorAttribute(R.attr.messageListActiveItemBackgroundColor)
-    private val selectedItemBackgroundColor: Int = theme.resolveColorAttribute(R.attr.messageListSelectedBackgroundColor)
+    private val activeItemBackgroundColor: Int =
+        theme.resolveColorAttribute(R.attr.messageListActiveItemBackgroundColor)
+    private val selectedItemBackgroundColor: Int =
+        theme.resolveColorAttribute(R.attr.messageListSelectedBackgroundColor)
     private val previewTextColor: Int = theme.resolveColorAttribute(R.attr.messageListPreviewTextColor)
-    private val regularItemBackgroundColor: Int = theme.resolveColorAttribute(R.attr.messageListRegularItemBackgroundColor)
+    private val regularItemBackgroundColor: Int =
+        theme.resolveColorAttribute(R.attr.messageListRegularItemBackgroundColor)
     private val readItemBackgroundColor: Int = theme.resolveColorAttribute(R.attr.messageListReadItemBackgroundColor)
     private val unreadItemBackgroundColor: Int =
         theme.resolveColorAttribute(R.attr.messageListUnreadItemBackgroundColor)
@@ -74,7 +77,6 @@ class MessageListAdapter internal constructor(
     private val relaxedTextViewMarginTop = res.getDimensionPixelSize(R.dimen.messageListRelaxedTextViewMargin)
     private val relaxedLineSpacingMultiplier = res.getFloatCompat(R.dimen.messageListRelaxedLineSpacingMultiplier)
 
-
     var messages: List = emptyList()
         @SuppressLint("NotifyDataSetChanged")
         set(value) {
@@ -89,7 +91,7 @@ class MessageListAdapter internal constructor(
             }
 
             val diffResult = DiffUtil.calculateDiff(
-                MessageListDiffCallback(oldMessageList = oldMessageList, newMessageList = value)
+                MessageListDiffCallback(oldMessageList = oldMessageList, newMessageList = value),
             )
             diffResult.dispatchUpdatesTo(this)
         }
@@ -284,7 +286,7 @@ class MessageListAdapter internal constructor(
         appearance.fontSizes.setViewTextSize(holder.preview, appearance.fontSizes.messageListPreview)
         appearance.fontSizes.setViewTextSize(
             holder.threadCount,
-            appearance.fontSizes.messageListSubject
+            appearance.fontSizes.messageListSubject,
         ) // thread count is next to subject
 
         holder.flagged.isVisible = false
@@ -306,11 +308,13 @@ class MessageListAdapter internal constructor(
                 textViewMarginTop = compactTextViewMarginTop
                 lineSpacingMultiplier = compactLineSpacingMultiplier
             }
+
             UiDensity.Default -> {
                 verticalPadding = defaultVerticalPadding
                 textViewMarginTop = defaultTextViewMarginTop
                 lineSpacingMultiplier = defaultLineSpacingMultiplier
             }
+
             UiDensity.Relaxed -> {
                 verticalPadding = relaxedVerticalPadding
                 textViewMarginTop = relaxedTextViewMarginTop
@@ -338,9 +342,11 @@ class MessageListAdapter internal constructor(
                 val messageListItem = getItem(position)
                 bindMessageViewHolder(holder as MessageViewHolder, messageListItem)
             }
+
             TYPE_FOOTER -> {
                 bindFooterViewHolder(holder as FooterViewHolder)
             }
+
             else -> {
                 error("Unsupported type: $viewType")
             }
@@ -443,7 +449,7 @@ class MessageListAdapter internal constructor(
         preview: TextView,
         beforePreviewText: CharSequence,
         sigil: String,
-        messageRead: Boolean
+        messageRead: Boolean,
     ) {
         val displayText = preview.text as Spannable
         addBeforePreviewSpan(displayText, displayText.length, messageRead)
@@ -598,7 +604,7 @@ private fun View.setMarginTop(margin: Int) {
 
 private class MessageListDiffCallback(
     private val oldMessageList: List,
-    private val newMessageList: List
+    private val newMessageList: List,
 ) : DiffUtil.Callback() {
     override fun getOldListSize(): Int = oldMessageList.size
 
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewContainerFragment.kt b/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewContainerFragment.kt
index 848d8089fca403d7e6b00165693166c2ecc3e4d6..84de6c46dce25812f1a862565022bc4031dc9d99 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewContainerFragment.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewContainerFragment.kt
@@ -184,7 +184,7 @@ class MessageViewContainerFragment : Fragment() {
         val newPosition = viewPager.currentItem - 1
         return if (newPosition >= 0) {
             setActiveMessage(newPosition)
-            viewPager.setCurrentItem(newPosition, /* smoothScroll = */ false)
+            viewPager.setCurrentItem(newPosition, false)
             true
         } else {
             false
@@ -195,7 +195,7 @@ class MessageViewContainerFragment : Fragment() {
         val newPosition = viewPager.currentItem + 1
         return if (newPosition < adapter.itemCount) {
             setActiveMessage(newPosition)
-            viewPager.setCurrentItem(newPosition, /* smoothScroll = */ false)
+            viewPager.setCurrentItem(newPosition, false)
             true
         } else {
             false
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/RecipientLayoutCreator.kt b/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/RecipientLayoutCreator.kt
index f8f2c4ddf56b091912cc04081a107ef93beda022..bd500573e594b383579da406cd8f2fa041796944 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/RecipientLayoutCreator.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/RecipientLayoutCreator.kt
@@ -1,7 +1,5 @@
 package com.fsck.k9.ui.messageview
 
-import android.text.SpannableStringBuilder
-
 private const val LIST_SEPARATOR = ", "
 
 /**
@@ -19,7 +17,7 @@ private const val LIST_SEPARATOR = ", "
 internal class RecipientLayoutCreator(
     private val textMeasure: TextMeasure,
     private val maxNumberOfRecipientNames: Int,
-    private val recipientsPrefix: String,
+    private val recipientsFormat: String,
     private val additionalRecipientSpacing: Int,
     private val additionalRecipientsPrefix: String,
 ) {
@@ -30,14 +28,9 @@ internal class RecipientLayoutCreator(
     ): RecipientLayoutData {
         require(recipientNames.isNotEmpty())
 
-        val displayRecipientsBuilder = SpannableStringBuilder()
-
         if (recipientNames.size == 1) {
-            displayRecipientsBuilder.append(recipientsPrefix)
-            displayRecipientsBuilder.append(recipientNames.first())
-
             return RecipientLayoutData(
-                recipientNames = displayRecipientsBuilder,
+                recipientNames = recipientsFormat.format(recipientNames.first()),
                 additionalRecipients = null,
             )
         }
@@ -46,12 +39,11 @@ internal class RecipientLayoutCreator(
 
         val maxRecipientNames = recipientNames.size.coerceAtMost(maxNumberOfRecipientNames)
         for (numberOfDisplayRecipients in maxRecipientNames downTo 2) {
-            displayRecipientsBuilder.clear()
-            displayRecipientsBuilder.append(recipientsPrefix)
-
-            recipientNames.asSequence()
+            val recipientNamesString = recipientNames.asSequence()
                 .take(numberOfDisplayRecipients)
-                .joinTo(displayRecipientsBuilder, separator = LIST_SEPARATOR)
+                .joinToString(separator = LIST_SEPARATOR)
+
+            val displayRecipients = recipientsFormat.format(recipientNamesString)
 
             additionalRecipientsBuilder.setLength(0)
             val numberOfAdditionalRecipients = totalNumberOfRecipients - numberOfDisplayRecipients
@@ -60,20 +52,16 @@ internal class RecipientLayoutCreator(
                 additionalRecipientsBuilder.append(numberOfAdditionalRecipients)
             }
 
-            if (doesTextFitAvailableWidth(displayRecipientsBuilder, additionalRecipientsBuilder, availableWidth)) {
+            if (doesTextFitAvailableWidth(displayRecipients, additionalRecipientsBuilder, availableWidth)) {
                 return RecipientLayoutData(
-                    recipientNames = displayRecipientsBuilder,
+                    recipientNames = displayRecipients,
                     additionalRecipients = additionalRecipientsBuilder.toStringOrNull(),
                 )
             }
         }
 
-        displayRecipientsBuilder.clear()
-        displayRecipientsBuilder.append(recipientsPrefix)
-        displayRecipientsBuilder.append(recipientNames.first())
-
         return RecipientLayoutData(
-            recipientNames = displayRecipientsBuilder,
+            recipientNames = recipientsFormat.format(recipientNames.first()),
             additionalRecipients = "$additionalRecipientsPrefix${totalNumberOfRecipients - 1}",
         )
     }
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/RecipientNamesView.kt b/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/RecipientNamesView.kt
index 5c82354de2b189c3bacd70b277cc868ca2c9c4ec..3753b0322122261d4de716b982abf27fa5345052 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/RecipientNamesView.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/RecipientNamesView.kt
@@ -68,7 +68,7 @@ class RecipientNamesView(context: Context, attrs: AttributeSet?) : ViewGroup(con
         recipientLayoutCreator = RecipientLayoutCreator(
             textMeasure = textMeasure,
             maxNumberOfRecipientNames = MAX_NUMBER_OF_RECIPIENT_NAMES,
-            recipientsPrefix = context.getString(R.string.message_view_recipient_prefix),
+            recipientsFormat = context.getString(R.string.message_view_recipients_format),
             additionalRecipientSpacing = additionRecipientSpacing,
             additionalRecipientsPrefix = context.getString(R.string.message_view_additional_recipient_prefix),
         )
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/ui/onboarding/OnboardingActivity.kt b/app/ui/legacy/src/main/java/com/fsck/k9/ui/onboarding/OnboardingActivity.kt
deleted file mode 100644
index 401e022a0e0dc5edc21de0af9c8b1bfd4a3a8b67..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/java/com/fsck/k9/ui/onboarding/OnboardingActivity.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.fsck.k9.ui.onboarding
-
-import android.app.Activity
-import android.content.Intent
-import android.graphics.PorterDuff
-import android.graphics.PorterDuffColorFilter
-import android.os.Bundle
-import androidx.appcompat.widget.Toolbar
-import androidx.core.content.ContextCompat
-import androidx.navigation.NavController
-import androidx.navigation.ui.AppBarConfiguration
-import androidx.navigation.ui.setupActionBarWithNavController
-import com.fsck.k9.ui.R
-import com.fsck.k9.ui.base.K9Activity
-import com.fsck.k9.ui.base.extensions.findNavController
-
-class OnboardingActivity : K9Activity() {
-    private lateinit var navController: NavController
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        setLayout(R.layout.activity_onboarding)
-
-        initializeActionBar()
-    }
-
-    private fun initializeActionBar() {
-        val appBarConfiguration = AppBarConfiguration(topLevelDestinationIds = setOf(R.id.welcomeScreen))
-
-        navController = findNavController(R.id.nav_host_fragment)
-        setupActionBarWithNavController(navController, appBarConfiguration)
-        val toolbar = findViewById(R.id.toolbar)
-        toolbar.navigationIcon?.mutate()?.colorFilter = PorterDuffColorFilter(ContextCompat.getColor(this, R.color.color_default_primary_text), PorterDuff.Mode.SRC_OVER)
-    }
-
-    override fun onSupportNavigateUp(): Boolean {
-        return navController.navigateUp() || super.onSupportNavigateUp()
-    }
-
-    companion object {
-        @JvmStatic
-        fun launch(activity: Activity) {
-            val intent = Intent(activity, OnboardingActivity::class.java).apply {
-                flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
-            }
-            activity.startActivity(intent)
-        }
-    }
-}
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/ui/onboarding/WelcomeFragment.kt b/app/ui/legacy/src/main/java/com/fsck/k9/ui/onboarding/WelcomeFragment.kt
deleted file mode 100644
index 25943401f618b3bbaeccd1812bbfd8e4cbc7aa46..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/java/com/fsck/k9/ui/onboarding/WelcomeFragment.kt
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.fsck.k9.ui.onboarding
-
-import android.os.Bundle
-import android.text.method.LinkMovementMethod
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.appcompat.app.ActionBar
-import androidx.appcompat.app.AppCompatActivity
-import androidx.fragment.app.Fragment
-import androidx.navigation.fragment.findNavController
-import com.fsck.k9.ui.R
-import com.fsck.k9.ui.helper.HtmlToSpanned
-import com.fsck.k9.ui.observeNotNull
-import com.fsck.k9.ui.settings.import.SettingsImportResultViewModel
-import com.fsck.k9.ui.settings.import.SettingsImportSuccess
-import org.koin.android.ext.android.inject
-import org.koin.androidx.viewmodel.ext.android.activityViewModel
-
-class WelcomeFragment : Fragment() {
-    private val htmlToSpanned: HtmlToSpanned by inject()
-    private val importResultViewModel: SettingsImportResultViewModel by activityViewModel()
-
-    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
-        return inflater.inflate(R.layout.fragment_welcome_message, container, false)
-    }
-
-    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        super.onViewCreated(view, savedInstanceState)
-
-        val welcome: TextView = view.findViewById(R.id.welcome_message)
-        welcome.text = htmlToSpanned.convert(getString(R.string.welcome_message_text))
-        welcome.movementMethod = LinkMovementMethod.getInstance()
-
-        view.findViewById(R.id.next).setOnClickListener { launchAccountSetup() }
-        view.findViewById(R.id.import_settings).setOnClickListener { launchImportSettings() }
-
-        importResultViewModel.settingsImportResult.observeNotNull(this) {
-            if (it == SettingsImportSuccess) {
-                launchMessageList()
-            }
-        }
-    }
-
-    override fun onResume() {
-        super.onResume()
-        getActionBar()?.hide()
-    }
-
-    override fun onStop() {
-        getActionBar()?.show()
-        super.onStop()
-    }
-
-    private fun getActionBar(): ActionBar? {
-        if (activity is AppCompatActivity) {
-            return (activity as AppCompatActivity).supportActionBar
-        }
-
-        return null
-    }
-
-    private fun launchAccountSetup() {
-        findNavController().navigate(R.id.action_welcomeScreen_to_addAccountScreen)
-        requireActivity().finish()
-    }
-
-    private fun launchImportSettings() {
-        findNavController().navigate(R.id.action_welcomeScreen_to_settingsImportScreen)
-    }
-
-    private fun launchMessageList() {
-        findNavController().navigate(R.id.action_welcomeScreen_to_messageListScreen)
-        requireActivity().finish()
-    }
-}
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/ui/settings/SettingsListFragment.kt b/app/ui/legacy/src/main/java/com/fsck/k9/ui/settings/SettingsListFragment.kt
index 1f56f7e75767e03e02e296566845a2cba9dbc67f..1c87c21ff472ff9a37bac4faebf882821b2449ad 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/ui/settings/SettingsListFragment.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/ui/settings/SettingsListFragment.kt
@@ -15,9 +15,6 @@ import androidx.navigation.fragment.findNavController
 import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-import app.k9mail.core.featureflag.FeatureFlagKey
-import app.k9mail.core.featureflag.FeatureFlagProvider
-import app.k9mail.core.featureflag.FeatureFlagResult
 import app.k9mail.feature.launcher.FeatureLauncherActivity
 import com.fsck.k9.Account
 import com.fsck.k9.ui.R
@@ -32,13 +29,10 @@ import com.mikepenz.fastadapter.adapters.ItemAdapter
 import com.mikepenz.fastadapter.drag.ItemTouchCallback
 import com.mikepenz.fastadapter.drag.SimpleDragCallback
 import com.mikepenz.fastadapter.utils.DragDropUtil
-import org.koin.android.ext.android.inject
 import org.koin.androidx.viewmodel.ext.android.viewModel
-import timber.log.Timber
 
 class SettingsListFragment : Fragment(), ItemTouchCallback {
     private val viewModel: SettingsViewModel by viewModel()
-    private val featureFlagProvider: FeatureFlagProvider by inject()
 
     private lateinit var itemAdapter: ItemAdapter
 
@@ -144,10 +138,7 @@ class SettingsListFragment : Fragment(), ItemTouchCallback {
             is AccountItem -> launchAccountSettings(item.account)
             is UrlActionItem -> openUrl(item.url)
             is SettingsActionItem -> {
-                if (
-                    item.navigationAction == R.id.action_settingsListScreen_to_addAccountScreen &&
-                    featureFlagProvider.provide(FeatureFlagKey("new_onboarding")) is FeatureFlagResult.Enabled
-                ) {
+                if (item.navigationAction == R.id.action_settingsListScreen_to_addAccountScreen) {
                     FeatureLauncherActivity.launchSetupAccount(requireActivity())
                 } else {
                     findNavController().navigate(item.navigationAction)
@@ -170,19 +161,9 @@ class SettingsListFragment : Fragment(), ItemTouchCallback {
     }
 
     private fun launchOnboarding() {
-        featureFlagProvider.provide(FeatureFlagKey("new_onboarding")).onEnabled {
-            FeatureLauncherActivity.launchOnboarding(requireActivity())
-        }.onDisabled {
-            launchOldOnboarding()
-        }.onUnavailable {
-            Timber.d("Feature flag 'new_onboarding' is unavailable, falling back to old onboarding")
-            launchOldOnboarding()
-        }
-        requireActivity().finishAffinity()
-    }
+        FeatureLauncherActivity.launchOnboarding(requireActivity())
 
-    private fun launchOldOnboarding() {
-        findNavController().navigate(R.id.action_settingsListScreen_to_addAccountScreen)
+        requireActivity().finishAffinity()
     }
 
     private fun buildSettingsList(block: SettingsListBuilder.() -> Unit): List {
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/ui/settings/account/AccountSettingsFragment.kt b/app/ui/legacy/src/main/java/com/fsck/k9/ui/settings/account/AccountSettingsFragment.kt
index fdc4d1ee52cafbb7aefb912ff88a8f9d2d43da51..dff2db9dcf0a07ff8f6e98508f1747a33a812fc2 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/ui/settings/account/AccountSettingsFragment.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/ui/settings/account/AccountSettingsFragment.kt
@@ -13,6 +13,9 @@ import androidx.preference.ListPreference
 import androidx.preference.Preference
 import androidx.preference.PreferenceCategory
 import androidx.preference.SwitchPreference
+import app.k9mail.core.featureflag.FeatureFlagProvider
+import app.k9mail.core.featureflag.toFeatureFlagKey
+import app.k9mail.feature.launcher.FeatureLauncherActivity
 import com.fsck.k9.Account
 import com.fsck.k9.account.BackgroundAccountRemover
 import com.fsck.k9.activity.ManageIdentities
@@ -52,6 +55,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
     private val notificationChannelManager: NotificationChannelManager by inject()
     private val notificationSettingsUpdater: NotificationSettingsUpdater by inject()
     private val vibrator: Vibrator by inject()
+    private val featureFlagProvider: FeatureFlagProvider by inject()
 
     private lateinit var dataStore: AccountSettingsDataStore
 
@@ -123,13 +127,16 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
                 onDeleteAccount()
                 true
             }
+
             else -> super.onOptionsItemSelected(item)
         }
     }
 
     private fun initializeIncomingServer() {
         findPreference(PREFERENCE_INCOMING_SERVER)?.onClick {
-            AccountSetupIncoming.actionEditIncomingSettings(requireActivity(), accountUuid)
+            featureFlagProvider.provide("new_account_edit".toFeatureFlagKey())
+                .onEnabled { FeatureLauncherActivity.launchEditIncomingSettings(requireActivity(), accountUuid) }
+                .onDisabled { AccountSetupIncoming.actionEditIncomingSettings(requireActivity(), accountUuid) }
         }
     }
 
@@ -155,7 +162,9 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
 
     private fun initializeOutgoingServer() {
         findPreference(PREFERENCE_OUTGOING_SERVER)?.onClick {
-            AccountSetupOutgoing.actionEditOutgoingSettings(requireActivity(), accountUuid)
+            featureFlagProvider.provide("new_account_edit".toFeatureFlagKey())
+                .onEnabled { FeatureLauncherActivity.launchEditOutgoingSettings(requireActivity(), accountUuid) }
+                .onDisabled { AccountSetupOutgoing.actionEditOutgoingSettings(requireActivity(), accountUuid) }
         }
     }
 
diff --git a/app/ui/legacy/src/main/java/com/fsck/k9/view/MessageWebView.kt b/app/ui/legacy/src/main/java/com/fsck/k9/view/MessageWebView.kt
index 1fff558cae8d30241e5957e2f9c5b136950021f4..603392d85bd153359a077b172757cb221fb78127 100644
--- a/app/ui/legacy/src/main/java/com/fsck/k9/view/MessageWebView.kt
+++ b/app/ui/legacy/src/main/java/com/fsck/k9/view/MessageWebView.kt
@@ -3,6 +3,7 @@ package com.fsck.k9.view
 import android.content.Context
 import android.content.pm.PackageManager
 import android.util.AttributeSet
+import android.util.TypedValue
 import android.webkit.WebSettings.LayoutAlgorithm
 import android.webkit.WebSettings.RenderPriority
 import android.webkit.WebView
@@ -36,7 +37,10 @@ class MessageWebView : WebView, KoinComponent {
         isLongClickable = true
 
         if (config.useDarkMode) {
-            setBackgroundColor(0xff000000L.toInt())
+            val typedValue = TypedValue()
+            context.theme.resolveAttribute(android.R.attr.windowBackground, typedValue, true)
+            val backgroundColor = typedValue.data
+            setBackgroundColor(backgroundColor)
         }
 
         with(settings) {
diff --git a/app/ui/legacy/src/main/res/mipmap-anydpi-v26/ic_e_launcher.xml b/app/ui/legacy/src/main/res/drawable/ic_app_logo.xml
similarity index 98%
rename from app/ui/legacy/src/main/res/mipmap-anydpi-v26/ic_e_launcher.xml
rename to app/ui/legacy/src/main/res/drawable/ic_app_logo.xml
index 1816bb23a6ca367653e3682b6e73384c15dc94d6..bc056f2e186d2884e29dc5aab0cfecdb047c6450 100644
--- a/app/ui/legacy/src/main/res/mipmap-anydpi-v26/ic_e_launcher.xml
+++ b/app/ui/legacy/src/main/res/drawable/ic_app_logo.xml
@@ -19,4 +19,4 @@
     
         
     
-
\ No newline at end of file
+
diff --git a/app/ui/legacy/src/main/res/drawable/ic_help.xml b/app/ui/legacy/src/main/res/drawable/ic_help.xml
index 95af104a2335b792a969a4c3d05067255e5bd45b..c8e72a555e64beff28221df5cc027949f5d9fe89 100644
--- a/app/ui/legacy/src/main/res/drawable/ic_help.xml
+++ b/app/ui/legacy/src/main/res/drawable/ic_help.xml
@@ -1,10 +1,9 @@
 
     
 
diff --git a/app/ui/legacy/src/main/res/drawable/ic_open_book.xml b/app/ui/legacy/src/main/res/drawable/ic_open_book.xml
index 99417448fc537083ff5659959caef34490700417..cd4a6fc2bc7a48a07eee62b4449ece4b1c8fd7ef 100644
--- a/app/ui/legacy/src/main/res/drawable/ic_open_book.xml
+++ b/app/ui/legacy/src/main/res/drawable/ic_open_book.xml
@@ -1,10 +1,9 @@
 
     
 
diff --git a/app/ui/legacy/src/main/res/layout/account_setup_names.xml b/app/ui/legacy/src/main/res/layout/account_setup_names.xml
deleted file mode 100644
index 2a9f68c12b26aa2d9f4e0e853f50aa8d07762966..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/res/layout/account_setup_names.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-    
-
-    
-
-        
-
-            
-
-                
-            
-
-            
-
-                
-            
-
-            
-        
-    
-
-    
-
diff --git a/app/ui/legacy/src/main/res/layout/account_setup_options.xml b/app/ui/legacy/src/main/res/layout/account_setup_options.xml
deleted file mode 100644
index d15bc14c906db7d72b20f260535f1a3d2181eb67..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/res/layout/account_setup_options.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-    
-
-    
-
-        
-
-            
-
-            
-
-            
-
-            
-
-            
-
-            
-        
-    
-
-    
-
diff --git a/app/ui/legacy/src/main/res/layout/activity_onboarding.xml b/app/ui/legacy/src/main/res/layout/activity_onboarding.xml
deleted file mode 100644
index fc665332bda0bee122ed67e90ee8dc36fa89276f..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/res/layout/activity_onboarding.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-    
-
-    
-
-
diff --git a/app/ui/legacy/src/main/res/layout/fragment_about.xml b/app/ui/legacy/src/main/res/layout/fragment_about.xml
index 5eed2b93887557f864f81c5d3206f2d71db3f2ce..8292c82dd02409cfe22705c7ebf5b60df982386f 100644
--- a/app/ui/legacy/src/main/res/layout/fragment_about.xml
+++ b/app/ui/legacy/src/main/res/layout/fragment_about.xml
@@ -17,7 +17,7 @@
             android:layout_gravity="center"
             android:layout_margin="16dp"
             android:contentDescription="@null"
-            app:srcCompat="@mipmap/icon_e" />
+            app:srcCompat="@drawable/ic_app_logo" />
 
         
-
-
-    
-
-        
-
-        
-
-        
-    
-
-
-    
-
-        
-    
-
-
diff --git a/app/ui/legacy/src/main/res/layout/message.xml b/app/ui/legacy/src/main/res/layout/message.xml
index 83ceb730a8f00fea42f7ea6b9525ca5aa8667913..37f9cec3994279b8a6dd4ca7b33e91819c405c2a 100644
--- a/app/ui/legacy/src/main/res/layout/message.xml
+++ b/app/ui/legacy/src/main/res/layout/message.xml
@@ -1,4 +1,8 @@
 
+
 
+
 
 
diff --git a/app/ui/legacy/src/main/res/layout/message_view_header.xml b/app/ui/legacy/src/main/res/layout/message_view_header.xml
index 749f3e551726e77325c68ddff8dde42e34c53c1b..410e34fd8f18ea2ab990fd2434fbc96d5a90ceed 100644
--- a/app/ui/legacy/src/main/res/layout/message_view_header.xml
+++ b/app/ui/legacy/src/main/res/layout/message_view_header.xml
@@ -163,6 +163,7 @@
             android:layout_width="48dp"
             android:layout_height="48dp"
             android:background="@color/color_default_background"
+            android:contentDescription="@string/reply_action"
             android:paddingHorizontal="12dp"
             app:layout_constraintEnd_toStartOf="@id/menu_overflow"
             app:layout_constraintTop_toTopOf="@+id/menu_overflow"
@@ -180,6 +181,7 @@
             android:background="@color/color_default_background"
             android:clickable="false"
             android:focusable="false"
+            android:contentDescription="@string/abc_action_menu_overflow_description"
             android:paddingStart="6dp"
             android:paddingEnd="10dp"
             android:visibility="invisible"
diff --git a/app/ui/legacy/src/main/res/navigation/navigation_onboarding.xml b/app/ui/legacy/src/main/res/navigation/navigation_onboarding.xml
deleted file mode 100644
index dcddab15860df3f194ce5c25b16bdb80d8fc292a..0000000000000000000000000000000000000000
--- a/app/ui/legacy/src/main/res/navigation/navigation_onboarding.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-    
-
-        
-
-        
-
-        
-
-    
-
-    
-
-    
-
-    
-
-
diff --git a/app/ui/legacy/src/main/res/raw/changelog_master.xml b/app/ui/legacy/src/main/res/raw/changelog_master.xml
index f204abf9630791dd8f8b5b90d69412970a6c0d51..ad0482c6e0c91f997266d626e3399028bc118490 100644
--- a/app/ui/legacy/src/main/res/raw/changelog_master.xml
+++ b/app/ui/legacy/src/main/res/raw/changelog_master.xml
@@ -5,6 +5,16 @@
      Locale-specific versions are kept in res/raw-/changelog.xml.
 -->
 
+    
+        Simplified the app icon so it can be a vector drawable
+        Improved screen reader experience in various places
+        Improved logging on failing settings import
+        Improved display of some HTML messages
+        Changed background color in message view and compose screens when using dark theme
+        Fixed OAuth 2.0 with Yahoo and AOL
+        Fixed display issues when rendering a message/rfc822 inline part
+        Updated translations
+    
     
         Fixed bug where accounts using OAuth weren't set up properly in K-9 Mail 6.709
         Moved "Show only subscribed folders" setting to "Folders" section
diff --git a/app/ui/legacy/src/main/res/values-ar/strings.xml b/app/ui/legacy/src/main/res/values-ar/strings.xml
index 67321d2e5eb9528d923d3d2ca8fa243526f869da..a453b84f001385df0fdc4617b51f2b8d98268c17 100644
--- a/app/ui/legacy/src/main/res/values-ar/strings.xml
+++ b/app/ui/legacy/src/main/res/values-ar/strings.xml
@@ -15,9 +15,6 @@
     مالجديد
     
     
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -257,9 +254,6 @@
     الإعداد يدويا
     المصادقة \u2026
     جارٍ الإلغاء\u2026
-    لقد انتهيت تقريبًا
-    اَعطِ هذا الحساب اسمًا (اختياري):
-    اكتب اسمك (تظهر في الرسائل الصادرة):
     نوع الحساب
     ما نوع هذا الحساب؟
     POP3
@@ -303,7 +297,6 @@
     اسم المُستخدم
     كلمة السِّر
     المصادقة
-    خيارات الحساب
     أبدًا
     كل 15 دقيقة
     كل 30 دقيقة
@@ -321,7 +314,6 @@
     كل 36 دقيقة
     كل 48 دقيقة
     كل 60 دقيقة
-    نبهني عند وصول رسالة
     عدد الرسائل التي ستظهر
     10 رسائل
     25 رسالة
@@ -786,337 +778,337 @@
     
     عناوين البريد
     
-    الكود المصدري
-    مشروع مفتوح المصدر
-    الموقع الإلكتروني
-    دليل المستخدم
-    الحصول علي مساعدة
-    منتدى المستخدم 
-    Fediverse 
-    تويتر
-    تعذر تحميل سجل التغيير
-    الإصدار %s
-    إظهار التغييرات الأخيرة عندما تم تحديث التطبيق
-    
-    اكتشف الجديد في هذا الإصدار
-    
-    عرض
-    
-    نقل إلي
-    نسخ إلي
-    الرسائل الجديدة
-    إلغاء الاشتراك
-    تم نسخ نص الموضوع إلى الحافظة
-    +%1$d المزيد علي %2$s
-    خطأ في الشهادة
-    
-    إشعار خطأ
-    
-    حدث خطأ أثناء محاولة إنشاء إشعار نظام برسالة جديدة. السبب على الأرجح هو فقدان صوت الإشعار. \ n \ n انقر لفتح إعدادات الإشعارات.
-    تزامن (إرسال)
-    يتم عرضها أثناء انتظار رسائل جديدة
-    سجلات التصدير
-    تم التصدير بنجاح. قد تحتوي السجلات على معلومات حساسة. كن حذرًا لمن ترسلهم إليه.
-    فشل التصدير.
-    يحتوي حقل المستلم على إدخال غير مكتمل!
-    
-    إلي
-    
-    +
-    
-    انا
-    
-    عرض الصور البعيدة
-    تشير النجوم إلى الرسائل التي تم وضع علامة عليها
-    اعرض أسماء المراسلين فوق سطر الموضوع وليس تحته
-    استخدم أسماء المستلمين من جهات الاتصال عند توفرها
-    Contact name color
-    استخدم خطًا ذا عرض ثابت عند إظهار رسائل نصية عادية
-    إظهار مربع حوار كلما قمت بتنفيذ الإجراءات المحددة
-    
-    Swipe actions 
-    
-    Right swipe 
-    
-    Left swipe
-    
-    تبديل التحديد 
-    
-    وضع علامة مقروء / غير مقروء 
-    
-    Add/remove star
-    
-    كثافة 
-    المدمج 
-    استرخاء 
-    استخدم التوقيت العالمي المنسق (UTC) بدلاً من المنطقة الزمنية المحلية في رؤوس البريد ورأس الرد 
-    تعطيل الرنين والطنين والوميض في الليل 
-    لاستخدام حساب البريد الإلكتروني هذا مع K-9 Mail ، تحتاج إلى تسجيل الدخول ومنح التطبيق حق الوصول إلى رسائل البريد الإلكتروني الخاصة بك. 
-    
-    تسجيل الدخول
-    
-    تسجيل الدخول بأستخدام جوجل
-    
-    لعرض كلمة المرور الخاصة بك هنا ، قم بتمكين قفل الشاشة على هذا الجهاز. 
-    تحقق من هويتك 
-    افتح القفل لعرض كلمة المرور الخاصة بك 
-    استرداد معلومات الحساب \ u2026 
-    التحقق من إعدادات الخادم الوارد \ u2026 
-    التحقق من إعدادات خادم الصادر… 
-    إحضار إعدادات الحساب … 
-    OAuth 2.0 
-    استخدم الضغط 
-    أرسل معرّف العميل 
-    اكتشاف مساحة اسم IMAP تلقائيًا 
-    إظهار المجلدات المشتركة فقط 
-    إعداد غير صالح: %s
-    تردد استطلاع المجلد 
-    تحديث اتصال IDLE 
-    لا يمكن نسخ أو نقل رسالة غير متزامنة مع الخادم 
-    قدم الخادم شهادة SSL غير صالحة. في بعض الأحيان ، يكون هذا بسبب خطأ في تهيئة الخادم. في بعض الأحيان يكون ذلك بسبب محاولة شخص ما مهاجمتك أو مهاجمة خادم البريد الخاص بك. إذا لم تكن متأكدًا من الأمر ، فانقر فوق رفض واتصل بالأشخاص الذين يديرون خادم البريد الخاص بك. \ n \ n (%s)
-    لا يمكن الاتصال بالسيرفر. \ n (%s)
-    تم إلغاء التفويض 
-    فشل التفويض مع الخطأ التالي: %s
-    OAuth 2.0 غير مدعوم حاليًا مع هذا الموفر. 
-    تعذر على التطبيق العثور على متصفح لاستخدامه لمنح حق الوصول إلى حسابك 
-    إعلام في شريط الحالة أثناء فحص البريد 
-    تجاهل رسائل الدردشة 
-    لا تعرض إشعارات للرسائل التي تنتمي إلى محادثة عبر البريد الإلكتروني 
-    وضع علامة كمقروءة عند الحذف 
-    وضع علامة على رسالة كمقروءة عند حذفها 
-    فئات الإشعارات
-    تكوين الإخطارات للرسائل الجديدة 
-    تكوين إخطارات الخطأ والحالة 
-    اعرض دائمًا نسخة إلى / نسخة مخفية الوجهة 
-    تحميل الرسائل المرسلة 
-    تحميل الرسائل إلى مجلد المرسل بعد الإرسال 
-    تكوين مفتاح من طرف إلى طرف 
-    لم يتم تكوين تطبيق OpenPGP 
-    تخزين جميع المسودات مشفرة 
-    سيتم تخزين جميع المسودات مشفرة 
-    تشفير المسودات فقط إذا تم تمكين التشفير 
-    تردد استطلاع المجلد 
-    لون التمييز لهذا الحساب المستخدم في قائمة المجلدات والحسابات 
-    إحضار الرسائل حتى 
-    دفع المجلدات 
-    نقل / نسخ مجلدات الوجهة 
-    مزامنة عمليات حذف الخادم 
-    تطبيق OpenPGP مفقود - هل تم إلغاء تثبيته؟ 
-    اعرض بالقرب من أعلى قائمة المجلدات 
-    Folder poll class
-    نفس فئة العرض 
-    فئة دفع المجلد 
-    نفس فئة الاستطلاع 
-    نفس فئة الدفع 
-    اهتزاز 
-    معطل 
-    ضوء الإشعارات
-    معطل
-    اللون الافتراضي للنظام 
-    أبيض
-    أحمر
-    أخضر
-    أزرق
-    أصفر
-    ازرق سماوي 
-    أرجواني 
-    تعيين الافتراضي الخاص بك من ، مخفية الوجهة والتوقيع 
-    قم بإعداد عناوين وتوقيعات بديلة في \"من\" 
-    جميع الرسائل المخفية إلى 
-    الانتقال إلى الأعلى / جعله افتراضيًا 
-    المرسل عكس الترتيب الأبجدي 
-    وصول 
-    استخدم النظام الافتراضي 
-    موضوع عرض الرسالة 
-    لم يتم العثور على إعدادات 
-    موضوع الرسالة الثابتة 
-    حدد موضوع عرض الرسالة أثناء عرض الرسالة 
-    استخدم سمة عرض رسالة ثابتة 
-    عند تحديد \"المزامنة التلقائية\" 
-    أقصى عدد من المجلدات للتحقق مع الدفع 
-    استخدم تأثيرات بصرية مبهرجة 
-    إظهار علبة الوارد الموحدة 
-    إظهار العدد المميّز بنجمة 
-    يتم عرض جميع الرسائل في صندوق الوارد الموحد 
-    للعرض 
-    تلقائي (%s)
-    المستلمون 
-    لم يتم العثور على تطبيق مناسب لهذا الإجراء. 
-    حفظ أو تجاهل التغييرات؟ 
-    مسح الرسائل المحلية؟ 
-    سيؤدي هذا إلى إزالة جميع الرسائل المحلية من المجلد. لن يتم حذف أي رسائل من الخادم. 
-    رسائل واضحة 
-    تأكيد وضع علامة على الكل كمقروء 
-    اختيار ملف
-    تم استيراد الإعدادات بنجاح 
-    
-    الرجاء إدخال كلمات المرور 
-    
-    الرجاء تسجيل الدخول 
-    
-    الرجاء تسجيل الدخول وإدخال كلمات المرور 
-    فشل استيراد الإعدادات 
-    فشلت قراءة ملف الإعدادات 
-    فشل استيراد بعض الإعدادات 
-    تم الاستيراد بنجاح 
-    كلمة المرور مطلوبة 
-    
-    تسجيل الدخول مطلوب 
-    غير مستورد 
-    فشل الاستيراد 
-    كلمة مرور الخادم الواردة 
-    كلمة مرور خادم البريد الصادر 
-    استخدم نفس كلمة المرور لخادم البريد الصادر 
-    إظهار العدد غير المقروء لـ … 
-    الحساب الذي يجب عرض العدد غير المقروء له 
-    عرض العدد غير المقروء لمجلد واحد فقط 
-    المجلد الذي يجب عرض العدد غير المقروء له 
-    %1$s - %2$s
-    انسخ نص الارتباط إلى الحافظة 
-    نص الارتباط 
-    حد بحث الخادم 
-    فشل البحث عن بعد 
-    مطلوب اتصال شبكة للبحث عن الخادم. 
-    ستظهر خلفية مختلفة أن الرسالة قد تمت قراءتها 
-    عرض مترابطة 
-    عرض تقسيم الشاشة 
-    عندما تكون في الاتجاه الأفقي 
-    الرجاء تحديد رسالة على اليسار 
-    إظهار صور جهات الاتصال في قائمة الرسائل 
-    إجراءات الرسائل المرئية 
-    إظهار الإجراءات المحددة في قائمة عرض الرسالة 
-    غير قادر على مصادقة. لا يعلن الخادم عن إمكانية SASL EXTERNAL. قد يكون هذا بسبب مشكلة في شهادة العميل (منتهية الصلاحية ، مرجع مصدق غير معروف) أو مشكلة تكوين أخرى. 
-    
-    إزالة اختيار شهادة العميل 
-    فشل استرداد شهادة العميل للاسم المستعار \"%s\"
-    شهادة العميل \"%1$s\" منتهية الصلاحية أو غير صالحة بعد (%2$s)
-    
-    إضافة من جهات الاتصال 
-    BCC
-    الرد على 
-    <مستلم غير معروف> 
-    <مرسل غير معروف> 
-    لم يتم تكوين مجلد مسودات لهذا الحساب! 
-    لم يتم تكوين مفتاح لهذا الحساب! تحقق من الإعدادات الخاصة بك. 
-    يستخدم موفر التشفير إصدارًا غير متوافق. يرجى التحقق من الإعدادات الخاصة بك! 
-    لا يمكن الاتصال بموفر التشفير ، تحقق من الإعدادات أو انقر فوق رمز التشفير لإعادة المحاولة! 
-    فشل في تهيئة التشفير من طرف إلى طرف ، يرجى التحقق من إعداداتك 
-    لا يدعم وضع PGP / INLINE المرفقات! 
-    تفعيل PGP / INLINE 
-    تعطيل PGP / INLINE 
-    تفعيل تسجيل PGP فقط 
-    تعطيل تسجيل PGP فقط 
-    وضع PGP / INLINE 
-    تم إرسال البريد الإلكتروني بتنسيق PGP / INLINE. \ n يجب استخدام هذا فقط من أجل التوافق: 
-    يدعم بعض العملاء هذا التنسيق فقط 
-    التوقيعات قد تنكسر أثناء العبور 
-    وضع تسجيل PGP فقط 
-    في هذا الوضع ، سيتم استخدام مفتاح PGP الخاص بك لإنشاء توقيع مشفر لبريد إلكتروني غير مشفر. 
-    لا يؤدي هذا إلى تشفير البريد الإلكتروني ، ولكنه يتحقق من أنه تم إرساله من مفتاحك. 
-    قد تنقطع التوقيعات عند إرسالها إلى القوائم البريدية. 
-    احتوى التوقيع الشامل على خطأ 
-    يحتوي على توقيع غير معتمد من طرف إلى طرف 
-    الرسالة مشفرة ولكن بتنسيق غير مدعوم. 
-    تم تشفير الرسالة ، ولكن تم إلغاء فك التشفير. 
-    نص عادي موقع من طرف إلى طرف 
-    لكن المفتاح من طرف إلى طرف لا يتطابق مع المرسل 
-    لكن مفتاح النهاية إلى النهاية منتهي الصلاحية 
-    ولكن تم إبطال المفتاح من طرف إلى طرف 
-    لكن المفتاح من طرف إلى طرف لا يعتبر آمنًا 
-    من مفتاح طرف إلى طرف غير معروف 
-    ولكن كان هناك خطأ في فك التشفير 
-    يجب تنزيل الرسالة بالكامل لفك التشفير 
-    ولكن لم يتم تكوين تطبيق تشفير 
-    ولكن ليس من طرف إلى طرف 
-    تشفير من طرف إلى طرف 
-    من مرسل تم التحقق منه 
-    من مفتاح طرف إلى طرف غير معروف 
-    لكن المفتاح من طرف إلى طرف لا يتطابق مع المرسل 
-    لكن مفتاح النهاية إلى النهاية منتهي الصلاحية
-    ولكن تم إبطال المفتاح من طرف إلى طرف 
-    لكن المفتاح من طرف إلى طرف لا يعتبر آمنًا
-    لكن البيانات الشاملة بها أخطاء 
-    لكن التشفير لا يعتبر آمنًا 
-    لم يتم تشفير هذا الجزء ، وربما يكون غير آمن. 
-    يجب تنزيل الرسالة المشفرة لفك التشفير. 
-    الشخصيات الخاصة غير مدعومة حاليًا! 
-    خطأ في تحليل العنوان! 
-    إخفاء التوقيعات غير المشفرة 
-    سيتم عرض التوقيعات المشفرة فقط 
-    سيتم عرض جميع التوقيعات 
-    التشفير غير متوفر في وضع التسجيل فقط! 
-    تم تشفير هذا البريد الإلكتروني باستخدام OpenPGP. \ n لقراءته ، تحتاج إلى تثبيت وتكوين تطبيق OpenPGP متوافق. 
-    اذهب للاعدادات 
-    
-    بعض المستلمين المحددين لا يدعمون هذه الميزة! 
-    يضمن تشفير الرسائل إمكانية قراءتها من قبل المستلم ولا يمكن لأي شخص آخر قراءتها. 
-    سيظهر التشفير فقط إذا كان يدعمه جميع المستلمين ، ويجب أن يكونوا قد أرسلوا إليك بريدًا إلكترونيًا من قبل. 
-    تبديل التشفير عن طريق النقر فوق هذا الرمز. 
-    وضع التشفير التلقائي المتبادل 
-    وضع التشفير التلقائي المتبادل
-    عادةً ما يتم تشفير الرسائل عن طريق الاختيار ، أو عند الرد على رسالة مشفرة. 
-    إذا قام كل من المرسل والمستلم بتمكين الوضع المتبادل ، فسيتم تمكين التشفير افتراضيًا. 
-    يتطلب K-9 Mail OpenKeychain للتشفير من طرف إلى طرف. 
-    تشفير مواضيع الرسالة 
-    قد لا تكون مدعومة من قبل بعض المستلمين 
-    خطأ داخلي: حساب غير صالح! 
-    خطأ في الاتصال بـ %s!
-    إرسال رسالة إعداد تشفير تلقائي 
-    مشاركة الإعداد الشامل بأمان مع الأجهزة الأخرى 
-    تشفير تلقائي لرسالة الإعداد 
-    تقوم رسالة إعداد Autocrypt بمشاركة الإعداد الشامل الخاص بك بأمان مع الأجهزة الأخرى. 
-    إرسال رسالة الإعداد 
-    سيتم إرسال الرسالة إلى عنوانك: 
-    جاري إنشاء رسالة الإعداد … 
-    للإنهاء ، افتح الرسالة على جهازك الآخر وأدخل رمز الإعداد. 
-    إظهار كود الإعداد 
-    تشفير تلقائي لرسالة الإعداد
-    تحتوي هذه الرسالة على جميع المعلومات اللازمة لنقل إعدادات التشفير التلقائي إلى جانب مفتاحك السري بأمان من جهازك الأصلي. لإعداد جهازك الجديد لـ Autocrypt ، يرجى اتباع الإرشادات التي يجب أن يقدمها جهازك الجديد.  يمكنك الاحتفاظ هذه الرسالة واستخدامها كنسخة احتياطية لمفتاحك السري. إذا كنت ترغب في القيام بذلك ، يجب عليك كتابة كلمة المرور وتخزينها بشكل آمن 
-    حدث خطأ أثناء إرسال الرسالة. يرجى التحقق من اتصال الشبكة وتكوين خادم البريد الصادر. 
-    
-    السماح بالوصول إلى جهات الاتصال 
-    لتتمكن من تقديم اقتراحات جهات الاتصال وعرض أسماء جهات الاتصال والصور ، يحتاج التطبيق إلى الوصول إلى جهات الاتصال الخاصة بك. 
-    حدث خطأ أثناء تحميل البيانات 
-    جار تهيئة… 
-    في انتظار رسائل البريد الإلكتروني الجديدة 
-    السكون حتى يتم السماح بالمزامنة في الخلفية 
-    السكون حتى تتوفر الشبكة 
-    انقر لمعرفة المزيد. 
-    دفع المعلومات 
-    عند استخدام Push ، يحتفظ K-9 Mail بالاتصال بخادم البريد. يتطلب Android عرض إشعار مستمر عندما يكون التطبيق نشطًا في الخلفية. %s
-    ومع ذلك ، يسمح لك Android أيضًا بإخفاء الإشعار. 
-    تكوين الإشعارات
-    إذا لم تكن بحاجة إلى إشعارات فورية حول الرسائل الجديدة ، فيجب عليك تعطيل ميزة Push and Use Polling. يتحقق الاقتراع من البريد الجديد على فترات منتظمة ولا يحتاج إلى الإشعارات. 
-    تعطيل الدفع 
-    
-    علامة القراءة 
-    
-    يتحرك… 
-    
-    إظهار زر الإنشاء العائم 
-    
-    خطأ 
-    
-    المجلد غير موجود
-    
-    تفاصيل الرسالة 
-    
-    رأس \"التاريخ\" مفقود 
-    
-    الرد على 
-    
-    BCC
-    
-    حدث خطأ أثناء تحميل تفاصيل الرسالة. 
-    
-    أضف إلى جهات الاتصال 
-    
-    إنشاء رسالة إلى 
-    
-    انسخ عنوان البريد الإلكتروني 
-    
-    انسخ الاسم وعنوان البريد الإلكتروني 
-    
-    الاسم وعنوان البريد الإلكتروني 
-    
-
\ No newline at end of file
+  الكود المصدري
+  مشروع مفتوح المصدر
+  الموقع الإلكتروني
+  دليل المستخدم
+  الحصول علي مساعدة
+  منتدى المستخدم 
+  Fediverse 
+  تويتر
+  تعذر تحميل سجل التغيير
+  الإصدار %s
+  إظهار التغييرات الأخيرة عندما تم تحديث التطبيق
+  
+  اكتشف الجديد في هذا الإصدار
+  
+  عرض
+  نقل إلي
+  نسخ إلي
+  الرسائل الجديدة
+  إلغاء الاشتراك
+  تم نسخ نص الموضوع إلى الحافظة
+  +%1$d المزيد علي %2$s
+  خطأ في الشهادة
+  
+  إشعار خطأ
+  
+  حدث خطأ أثناء محاولة إنشاء إشعار نظام برسالة جديدة. السبب على الأرجح هو فقدان صوت الإشعار. \ n \ n انقر لفتح إعدادات الإشعارات.
+  تزامن (إرسال)
+  يتم عرضها أثناء انتظار رسائل جديدة
+  سجلات التصدير
+  تم التصدير بنجاح. قد تحتوي السجلات على معلومات حساسة. كن حذرًا لمن ترسلهم إليه.
+  فشل التصدير.
+  يحتوي حقل المستلم على إدخال غير مكتمل!
+  
+  إلي %s
+  
+  +
+  
+  انا
+  
+  عرض الصور البعيدة
+  تشير النجوم إلى الرسائل التي تم وضع علامة عليها
+  اعرض أسماء المراسلين فوق سطر الموضوع وليس تحته
+  استخدم أسماء المستلمين من جهات الاتصال عند توفرها
+  Contact name color
+  استخدم خطًا ذا عرض ثابت عند إظهار رسائل نصية عادية
+  إظهار مربع حوار كلما قمت بتنفيذ الإجراءات المحددة
+  
+  Swipe actions 
+  
+  Right swipe 
+  
+  Left swipe
+  
+  تبديل التحديد 
+  
+  وضع علامة مقروء / غير مقروء 
+  
+  Add/remove star
+  
+  كثافة 
+  المدمج 
+  استرخاء 
+  استخدم التوقيت العالمي المنسق (UTC) بدلاً من المنطقة الزمنية المحلية في رؤوس البريد ورأس الرد 
+  تعطيل الرنين والطنين والوميض في الليل 
+  لاستخدام حساب البريد الإلكتروني هذا مع K-9 Mail ، تحتاج إلى تسجيل الدخول ومنح التطبيق حق الوصول إلى رسائل البريد الإلكتروني الخاصة بك. 
+  
+  تسجيل الدخول
+  
+  تسجيل الدخول بأستخدام جوجل
+  
+  لعرض كلمة المرور الخاصة بك هنا ، قم بتمكين قفل الشاشة على هذا الجهاز. 
+  تحقق من هويتك 
+  افتح القفل لعرض كلمة المرور الخاصة بك 
+  استرداد معلومات الحساب \ u2026 
+  التحقق من إعدادات الخادم الوارد \ u2026 
+  التحقق من إعدادات خادم الصادر… 
+  إحضار إعدادات الحساب … 
+  OAuth 2.0 
+  استخدم الضغط 
+  أرسل معرّف العميل 
+  اكتشاف مساحة اسم IMAP تلقائيًا 
+  إظهار المجلدات المشتركة فقط 
+  إعداد غير صالح: %s
+  تردد استطلاع المجلد 
+  تحديث اتصال IDLE 
+  لا يمكن نسخ أو نقل رسالة غير متزامنة مع الخادم 
+  قدم الخادم شهادة SSL غير صالحة. في بعض الأحيان ، يكون هذا بسبب خطأ في تهيئة الخادم. في بعض الأحيان يكون ذلك بسبب محاولة شخص ما مهاجمتك أو مهاجمة خادم البريد الخاص بك. إذا لم تكن متأكدًا من الأمر ، فانقر فوق رفض واتصل بالأشخاص الذين يديرون خادم البريد الخاص بك. \ n \ n (%s)
+  لا يمكن الاتصال بالسيرفر. \ n (%s)
+  تم إلغاء التفويض 
+  فشل التفويض مع الخطأ التالي: %s
+  OAuth 2.0 غير مدعوم حاليًا مع هذا الموفر. 
+  تعذر على التطبيق العثور على متصفح لاستخدامه لمنح حق الوصول إلى حسابك 
+  إعلام في شريط الحالة أثناء فحص البريد 
+  تجاهل رسائل الدردشة 
+  لا تعرض إشعارات للرسائل التي تنتمي إلى محادثة عبر البريد الإلكتروني 
+  وضع علامة كمقروءة عند الحذف 
+  وضع علامة على رسالة كمقروءة عند حذفها 
+  فئات الإشعارات
+  تكوين الإخطارات للرسائل الجديدة 
+  تكوين إخطارات الخطأ والحالة 
+  اعرض دائمًا نسخة إلى / نسخة مخفية الوجهة 
+  تحميل الرسائل المرسلة 
+  تحميل الرسائل إلى مجلد المرسل بعد الإرسال 
+  تكوين مفتاح من طرف إلى طرف 
+  لم يتم تكوين تطبيق OpenPGP 
+  تخزين جميع المسودات مشفرة 
+  سيتم تخزين جميع المسودات مشفرة 
+  تشفير المسودات فقط إذا تم تمكين التشفير 
+  تردد استطلاع المجلد 
+  لون التمييز لهذا الحساب المستخدم في قائمة المجلدات والحسابات 
+  إحضار الرسائل حتى 
+  دفع المجلدات 
+  نقل / نسخ مجلدات الوجهة 
+  مزامنة عمليات حذف الخادم 
+  تطبيق OpenPGP مفقود - هل تم إلغاء تثبيته؟ 
+  اعرض بالقرب من أعلى قائمة المجلدات 
+  Folder poll class
+  نفس فئة العرض 
+  فئة دفع المجلد 
+  نفس فئة الاستطلاع 
+  نفس فئة الدفع 
+  اهتزاز 
+  معطل 
+  ضوء الإشعارات
+  معطل
+  اللون الافتراضي للنظام 
+  أبيض
+  أحمر
+  أخضر
+  أزرق
+  أصفر
+  ازرق سماوي 
+  أرجواني 
+  تعيين الافتراضي الخاص بك من ، مخفية الوجهة والتوقيع 
+  قم بإعداد عناوين وتوقيعات بديلة في \"من\" 
+  جميع الرسائل المخفية إلى 
+  الانتقال إلى الأعلى / جعله افتراضيًا 
+  المرسل عكس الترتيب الأبجدي 
+  وصول 
+  استخدم النظام الافتراضي 
+  موضوع عرض الرسالة 
+  لم يتم العثور على إعدادات 
+  موضوع الرسالة الثابتة 
+  حدد موضوع عرض الرسالة أثناء عرض الرسالة 
+  استخدم سمة عرض رسالة ثابتة 
+  عند تحديد \"المزامنة التلقائية\" 
+  أقصى عدد من المجلدات للتحقق مع الدفع 
+  استخدم تأثيرات بصرية مبهرجة 
+  إظهار علبة الوارد الموحدة 
+  إظهار العدد المميّز بنجمة 
+  يتم عرض جميع الرسائل في صندوق الوارد الموحد 
+  للعرض 
+  تلقائي (%s)
+  المستلمون 
+  لم يتم العثور على تطبيق مناسب لهذا الإجراء. 
+  حفظ أو تجاهل التغييرات؟ 
+  مسح الرسائل المحلية؟ 
+  سيؤدي هذا إلى إزالة جميع الرسائل المحلية من المجلد. لن يتم حذف أي رسائل من الخادم. 
+  رسائل واضحة 
+  تأكيد وضع علامة على الكل كمقروء 
+  اختيار ملف
+  تم استيراد الإعدادات بنجاح 
+  
+  الرجاء إدخال كلمات المرور 
+  
+  الرجاء تسجيل الدخول 
+  
+  الرجاء تسجيل الدخول وإدخال كلمات المرور 
+  فشل استيراد الإعدادات 
+  فشلت قراءة ملف الإعدادات 
+  فشل استيراد بعض الإعدادات 
+  تم الاستيراد بنجاح 
+  كلمة المرور مطلوبة 
+  
+  تسجيل الدخول مطلوب 
+  غير مستورد 
+  فشل الاستيراد 
+  كلمة مرور الخادم الواردة 
+  كلمة مرور خادم البريد الصادر 
+  استخدم نفس كلمة المرور لخادم البريد الصادر 
+  إظهار العدد غير المقروء لـ … 
+  الحساب الذي يجب عرض العدد غير المقروء له 
+  عرض العدد غير المقروء لمجلد واحد فقط 
+  المجلد الذي يجب عرض العدد غير المقروء له 
+  %1$s - %2$s
+  انسخ نص الارتباط إلى الحافظة 
+  نص الارتباط 
+  حد بحث الخادم 
+  فشل البحث عن بعد 
+  مطلوب اتصال شبكة للبحث عن الخادم. 
+  ستظهر خلفية مختلفة أن الرسالة قد تمت قراءتها 
+  عرض مترابطة 
+  عرض تقسيم الشاشة 
+  عندما تكون في الاتجاه الأفقي 
+  الرجاء تحديد رسالة على اليسار 
+  إظهار صور جهات الاتصال في قائمة الرسائل 
+  إجراءات الرسائل المرئية 
+  إظهار الإجراءات المحددة في قائمة عرض الرسالة 
+  غير قادر على مصادقة. لا يعلن الخادم عن إمكانية SASL EXTERNAL. قد يكون هذا بسبب مشكلة في شهادة العميل (منتهية الصلاحية ، مرجع مصدق غير معروف) أو مشكلة تكوين أخرى. 
+  
+  إزالة اختيار شهادة العميل 
+  فشل استرداد شهادة العميل للاسم المستعار \"%s\"
+  شهادة العميل \"%1$s\" منتهية الصلاحية أو غير صالحة بعد (%2$s)
+  
+  إضافة من جهات الاتصال 
+  BCC
+  الرد على 
+  <مستلم غير معروف> 
+  <مرسل غير معروف> 
+  لم يتم تكوين مجلد مسودات لهذا الحساب! 
+  لم يتم تكوين مفتاح لهذا الحساب! تحقق من الإعدادات الخاصة بك. 
+  يستخدم موفر التشفير إصدارًا غير متوافق. يرجى التحقق من الإعدادات الخاصة بك! 
+  لا يمكن الاتصال بموفر التشفير ، تحقق من الإعدادات أو انقر فوق رمز التشفير لإعادة المحاولة! 
+  فشل في تهيئة التشفير من طرف إلى طرف ، يرجى التحقق من إعداداتك 
+  لا يدعم وضع PGP / INLINE المرفقات! 
+  تفعيل PGP / INLINE 
+  تعطيل PGP / INLINE 
+  تفعيل تسجيل PGP فقط 
+  تعطيل تسجيل PGP فقط 
+  وضع PGP / INLINE 
+  تم إرسال البريد الإلكتروني بتنسيق PGP / INLINE. \ n يجب استخدام هذا فقط من أجل التوافق: 
+  يدعم بعض العملاء هذا التنسيق فقط 
+  التوقيعات قد تنكسر أثناء العبور 
+  وضع تسجيل PGP فقط 
+  في هذا الوضع ، سيتم استخدام مفتاح PGP الخاص بك لإنشاء توقيع مشفر لبريد إلكتروني غير مشفر. 
+  لا يؤدي هذا إلى تشفير البريد الإلكتروني ، ولكنه يتحقق من أنه تم إرساله من مفتاحك. 
+  قد تنقطع التوقيعات عند إرسالها إلى القوائم البريدية. 
+  احتوى التوقيع الشامل على خطأ 
+  يحتوي على توقيع غير معتمد من طرف إلى طرف 
+  الرسالة مشفرة ولكن بتنسيق غير مدعوم. 
+  تم تشفير الرسالة ، ولكن تم إلغاء فك التشفير. 
+  نص عادي موقع من طرف إلى طرف 
+  لكن المفتاح من طرف إلى طرف لا يتطابق مع المرسل 
+  لكن مفتاح النهاية إلى النهاية منتهي الصلاحية 
+  ولكن تم إبطال المفتاح من طرف إلى طرف 
+  لكن المفتاح من طرف إلى طرف لا يعتبر آمنًا 
+  من مفتاح طرف إلى طرف غير معروف 
+  ولكن كان هناك خطأ في فك التشفير 
+  يجب تنزيل الرسالة بالكامل لفك التشفير 
+  ولكن لم يتم تكوين تطبيق تشفير 
+  ولكن ليس من طرف إلى طرف 
+  تشفير من طرف إلى طرف 
+  من مرسل تم التحقق منه 
+  من مفتاح طرف إلى طرف غير معروف 
+  لكن المفتاح من طرف إلى طرف لا يتطابق مع المرسل 
+  لكن مفتاح النهاية إلى النهاية منتهي الصلاحية
+  ولكن تم إبطال المفتاح من طرف إلى طرف 
+  لكن المفتاح من طرف إلى طرف لا يعتبر آمنًا
+  لكن البيانات الشاملة بها أخطاء 
+  لكن التشفير لا يعتبر آمنًا 
+  لم يتم تشفير هذا الجزء ، وربما يكون غير آمن. 
+  يجب تنزيل الرسالة المشفرة لفك التشفير. 
+  الشخصيات الخاصة غير مدعومة حاليًا! 
+  خطأ في تحليل العنوان! 
+  إخفاء التوقيعات غير المشفرة 
+  سيتم عرض التوقيعات المشفرة فقط 
+  سيتم عرض جميع التوقيعات 
+  التشفير غير متوفر في وضع التسجيل فقط! 
+  تم تشفير هذا البريد الإلكتروني باستخدام OpenPGP. \ n لقراءته ، تحتاج إلى تثبيت وتكوين تطبيق OpenPGP متوافق. 
+  اذهب للاعدادات 
+  
+  بعض المستلمين المحددين لا يدعمون هذه الميزة! 
+  يضمن تشفير الرسائل إمكانية قراءتها من قبل المستلم ولا يمكن لأي شخص آخر قراءتها. 
+  سيظهر التشفير فقط إذا كان يدعمه جميع المستلمين ، ويجب أن يكونوا قد أرسلوا إليك بريدًا إلكترونيًا من قبل. 
+  تبديل التشفير عن طريق النقر فوق هذا الرمز. 
+  وضع التشفير التلقائي المتبادل 
+  وضع التشفير التلقائي المتبادل
+  عادةً ما يتم تشفير الرسائل عن طريق الاختيار ، أو عند الرد على رسالة مشفرة. 
+  إذا قام كل من المرسل والمستلم بتمكين الوضع المتبادل ، فسيتم تمكين التشفير افتراضيًا. 
+  يتطلب K-9 Mail OpenKeychain للتشفير من طرف إلى طرف. 
+  تشفير مواضيع الرسالة 
+  قد لا تكون مدعومة من قبل بعض المستلمين 
+  خطأ داخلي: حساب غير صالح! 
+  خطأ في الاتصال بـ %s!
+  إرسال رسالة إعداد تشفير تلقائي 
+  مشاركة الإعداد الشامل بأمان مع الأجهزة الأخرى 
+  تشفير تلقائي لرسالة الإعداد 
+  تقوم رسالة إعداد Autocrypt بمشاركة الإعداد الشامل الخاص بك بأمان مع الأجهزة الأخرى. 
+  إرسال رسالة الإعداد 
+  سيتم إرسال الرسالة إلى عنوانك: 
+  جاري إنشاء رسالة الإعداد … 
+  للإنهاء ، افتح الرسالة على جهازك الآخر وأدخل رمز الإعداد. 
+  إظهار كود الإعداد 
+  تشفير تلقائي لرسالة الإعداد
+  تحتوي هذه الرسالة على جميع المعلومات اللازمة لنقل إعدادات التشفير التلقائي إلى جانب مفتاحك السري بأمان من جهازك الأصلي. لإعداد جهازك الجديد لـ Autocrypt ، يرجى اتباع الإرشادات التي يجب أن يقدمها جهازك الجديد.  يمكنك الاحتفاظ هذه الرسالة واستخدامها كنسخة احتياطية لمفتاحك السري. إذا كنت ترغب في القيام بذلك ، يجب عليك كتابة كلمة المرور وتخزينها بشكل آمن 
+  حدث خطأ أثناء إرسال الرسالة. يرجى التحقق من اتصال الشبكة وتكوين خادم البريد الصادر. 
+  
+  السماح بالوصول إلى جهات الاتصال 
+  لتتمكن من تقديم اقتراحات جهات الاتصال وعرض أسماء جهات الاتصال والصور ، يحتاج التطبيق إلى الوصول إلى جهات الاتصال الخاصة بك. 
+  حدث خطأ أثناء تحميل البيانات 
+  جار تهيئة… 
+  في انتظار رسائل البريد الإلكتروني الجديدة 
+  السكون حتى يتم السماح بالمزامنة في الخلفية 
+  السكون حتى تتوفر الشبكة 
+  انقر لمعرفة المزيد. 
+  دفع المعلومات 
+  عند استخدام Push ، يحتفظ K-9 Mail بالاتصال بخادم البريد. يتطلب Android عرض إشعار مستمر عندما يكون التطبيق نشطًا في الخلفية. %s
+  ومع ذلك ، يسمح لك Android أيضًا بإخفاء الإشعار. 
+  تكوين الإشعارات
+  إذا لم تكن بحاجة إلى إشعارات فورية حول الرسائل الجديدة ، فيجب عليك تعطيل ميزة Push and Use Polling. يتحقق الاقتراع من البريد الجديد على فترات منتظمة ولا يحتاج إلى الإشعارات. 
+  تعطيل الدفع 
+  
+  علامة القراءة 
+  
+  يتحرك… 
+  
+  إظهار زر الإنشاء العائم 
+  
+  خطأ 
+  
+  المجلد غير موجود
+  
+  تفاصيل الرسالة 
+  
+  رأس \"التاريخ\" مفقود 
+  
+  الرد على 
+  
+  BCC
+  
+  حدث خطأ أثناء تحميل تفاصيل الرسالة. 
+  
+  أضف إلى جهات الاتصال 
+  
+  إنشاء رسالة إلى 
+  
+  انسخ عنوان البريد الإلكتروني 
+  
+  انسخ الاسم وعنوان البريد الإلكتروني 
+  
+  الاسم وعنوان البريد الإلكتروني 
+  
+  
+
diff --git a/app/ui/legacy/src/main/res/values-be/strings.xml b/app/ui/legacy/src/main/res/values-be/strings.xml
index 918729fd04b94aa00d0eb7528f9d94f4b0e98e59..b9a27cf6c56fcc7667e83eb31ba9ffd6338366e5 100644
--- a/app/ui/legacy/src/main/res/values-be/strings.xml
+++ b/app/ui/legacy/src/main/res/values-be/strings.xml
@@ -28,9 +28,6 @@
     Даведайцеся, што новага ў гэтым выпуску
     
     Праглядзець
-    
-    Вітаем у Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -204,7 +201,6 @@
     Схаваная копія:
     Немагчыма захаваць далучаныя файлы.
     
-    "да "
     
     +
     
@@ -311,9 +307,6 @@
     Аўтэнтыфікацыя\u2026
     Атрыманне налад акаўнта\u2026
     Скасаванне\u2026
-    Амаль завершана!
-    Даць акаўнту назву (неабавязкова):
-    Ваша імя (бачна адрасату):
     Тып акаўнта
     Што гэта за акаўнт?
     POP3
@@ -364,7 +357,6 @@
     Аўтэнтыфікацыя
     \"%1$s = %2$s\" непрыдатны для \"%3$s = %4$s\"
     Хібнае наладжванне: %s
-    Параметры акаўнта
     Частата апытання
     Ніколі
     Кожныя 15 хвілін
@@ -384,7 +376,6 @@
     Кожныя 36 хвілін
     Кожныя 48 хвілін
     Кожныя 60 хвілін
-    Апавяшчаць пра новую пошту
     Колькасць лістоў для паказу
     10 лістоў
     25 лістоў
@@ -1106,4 +1097,7 @@
     
     Імя і email адрас
     
+    
+    да %s
+    
 
diff --git a/app/ui/legacy/src/main/res/values-bg/strings.xml b/app/ui/legacy/src/main/res/values-bg/strings.xml
index 8e6e6939f26145d0943ce2bc0803faf275eae2bb..4438f2a9548d5998fe0c8161b5ae614f0d912006 100644
--- a/app/ui/legacy/src/main/res/values-bg/strings.xml
+++ b/app/ui/legacy/src/main/res/values-bg/strings.xml
@@ -24,9 +24,6 @@
     
     Разбери какво ново в тази варсия
     
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -275,9 +272,6 @@
     Идентифициране\u2026
     Получава настройките на профила\u2026
     Отказва\u2026
-    Почти проключихте!
-    Дайте име на профила (незадължително):
-    Въведете вашето име (ще се показва в изходящите съобщения):
     Тип на профила
     Какъв тип профил е това?
     POP3
@@ -326,7 +320,6 @@
     Идентификация
     \"%1$s = %2$s\" не е валидно с \"%3$s = %4$s\"
     Невалидни настройки: %s
-    Настройки на профила
     Честота на проверка на папката
     Никога
     На всеки 15 минути
@@ -346,7 +339,6 @@
     На всеки 36 минути
     На всеки 48 минути
     На всеки 60 минути
-    Уведоми ме когато пристигне поща
     Брой съобщения за показване
     10 съобщения
     25 съобщения
@@ -930,7 +922,7 @@
     Autocrypt съобщение с настройки сигурно споделя от край-до-край вашите настройките с други устройства.
     Изпрати съобщение с настройки
     Съобщението ще бъде изпратено до следния адрес:
-    Създаване на съобщение с настройки...
+    Създаване на съобщение с настройки…
     Изпращане на съобщение до:
     За да завършите, отворете съобщението на друго устройство и въведете кодът за достъп.
     Показване на код за достъп
@@ -948,7 +940,7 @@
     Позволи достъп до контакти
     За да може да предоставя предложения за контакти и да показва имена на контакти и снимки, приложението се нуждае от достъп до вашите контакти.
     Възникна грешка при зареждането на данните
-    Инициализира...
+    Инициализира…
     Изчаква за нови съобщения
     Заспива докато синхронизирането на заден фон е разрешено
     Спи докато чака за мрежа
@@ -1002,6 +994,6 @@
     
     Имейл адрес
     
-    
     
+    
 
diff --git a/app/ui/legacy/src/main/res/values-br/strings.xml b/app/ui/legacy/src/main/res/values-br/strings.xml
index f55cd2e10eca3f1516e16d716ecd673a4687fa6d..cea7208e8bbd6640255b14a98762c0a1a6fc4724 100644
--- a/app/ui/legacy/src/main/res/values-br/strings.xml
+++ b/app/ui/legacy/src/main/res/values-br/strings.xml
@@ -13,9 +13,6 @@
     Lañvaz
     
     
-    
-    Donemat war Mail
-    Mail is the default mail client for /e/
     
     -- \nKaset eus ma fellgomzer Android gant Mail.
     
@@ -258,9 +255,6 @@
     Dilesa\u2026
     O kerc’hat arventennoù ar gont\u2026
     O nullañ\u2026
-    Tost echu!
-    Roit un anv d’ar gont-mañ (diret):
-    Skrivit hoc’h anv (diskouezet e vo er c’hemennadennoù kaset):
     Doare kont
     Peseurt doare kont eo?
     POP3
@@ -309,7 +303,6 @@
     Dilesa
     %1$s = %2$s\" n’eo ket talvoudek gant \"%3$s = %4$s
     Arventennoù didalvoudek: %s
-    Dibarzhioù ar gont
     Aliested kerc’hat ar posteloù
     Morse
     Bep 15 munutenn
@@ -329,7 +322,6 @@
     Bep 36 munutenn
     Bep 48 munutenn
     Bep 60 munutenn
-    Ma rebuziñ pa zegouezh ar posteloù
     Niver a gemennadennoù da ziskouez
     10 kemennadenn
     25 kemennadenn
@@ -951,4 +943,5 @@ Gallout a rit mirout ar gemennadenn-mañ hag implij anezhi evel un enrolladenn e
     Chomlec’h postel
     
     
+    
 
diff --git a/app/ui/legacy/src/main/res/values-ca/strings.xml b/app/ui/legacy/src/main/res/values-ca/strings.xml
index 3f1c3fd0cf853d76e30e4753ca0326c0fb840f23..4fe3c47c8961d890409fe6848727e554d321bac9 100644
--- a/app/ui/legacy/src/main/res/values-ca/strings.xml
+++ b/app/ui/legacy/src/main/res/values-ca/strings.xml
@@ -28,9 +28,6 @@
     Esbrineu les novetats d’aquesta versió.
     
     Vista
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -197,8 +194,6 @@
     A/c:
     Bcc:
     No s\'ha pogut desar l\'adjunt.
-    
-    "a "
     
     +
     
@@ -306,9 +301,6 @@
     Autenticant\u2026
     Recuperant la configuració del compte\u2026
     Cancel·lant\u2026
-    Ja gairebé hem acabat!
-    Dóna un nom a aquest compte (opcional):
-    Escriviu el nom (és el que es mostrarà als missatges sortints):
     Tipus de compte
     Quin tipus de compte és?
     POP3
@@ -360,7 +352,6 @@
     Tipus d\'autenticació
     \"%1$s = %2$s\" no és vàlid amb \"%3$s = %4$s\"
     Configuració no vàlida: %s
-    Opcions del compte
     Freqüència de comprovació
     Mai
     Cada 15 minuts
@@ -380,7 +371,6 @@
     Cada 36 minuts
     Cada 48 minuts
     Cada 60 minuts
-    Avisa\'m quan arribi correu
     Nombre de missatges a mostrar
     10 missatges
     25 missatges
@@ -1018,6 +1008,10 @@ Per configurar el vostre dispositiu nou per a l\'autoencriptació, si us plau, s
 
 Podeu guardar aquest missatge i usar-lo com a còpia de seguretat per a la vostra clau secreta. Si ho voleu fer, hauríeu d\'anotar-vos la contrasenya i desar-la amb seguretat.
 
+    Mou a…
+    Copia a…
+    
+    a %s
     Hi ha hagut un error mentre s\'enviava el missatge. Si us plau, comproveu la connexió de xarxa i la configuració del servidor de sortida.
     Actiu
     Inactiu
@@ -1094,4 +1088,7 @@ Podeu guardar aquest missatge i usar-lo com a còpia de seguretat per a la vostr
     
     Nom i adreça de correu
     
+    Se suprimeix el compte…
+    
+    sense llegir, %s
 
diff --git a/app/ui/legacy/src/main/res/values-cs/strings.xml b/app/ui/legacy/src/main/res/values-cs/strings.xml
index 2becf5d8c383e0c1cd554d860791f5c4a4e196a0..021f1a49f580bd507912791c2eea46f38d991ebc 100644
--- a/app/ui/legacy/src/main/res/values-cs/strings.xml
+++ b/app/ui/legacy/src/main/res/values-cs/strings.xml
@@ -28,9 +28,6 @@
     Zjistěte, co je v tomto vydání nového
     
     Zobrazit
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -203,8 +200,6 @@
     Kopie:
     Skrytá kopie (Bcc):
     Přílohu se nedaří uložit.
-    
-    "komu "
     
     +
     
@@ -311,9 +306,6 @@
     Přihlašuji se\u2026
     Stahuji nastavení účtu\u2026
     Rušení\u2026
-    Téměř hotovo!
-    Pojmenujte tento účet (volitelné):
-    Zadejte své jméno (zobrazuje se v odchozích zprávách):
     Typ účtu
     O jaký typ účtu jde?
     POP3
@@ -364,7 +356,6 @@
     Typ ověření
     %1$s = %2$s“ není platný s „%3$s = %4$s
     Neplatné nastavení: %s
-    Možnosti účtu
     Frekvence dotazování složky
     Nikdy
     Každých 15 minut
@@ -384,7 +375,6 @@
     Každých 36 minut
     Každých 48 minut
     Každých 60 minut
-    Oznamuj mi příchod nové pošty
     Počet zobrazených zpráv
     10 zpráv
     25 zpráv
@@ -1032,6 +1022,8 @@
 Pro nastavení nového zařízení pro Autocrypt, postupujte podle pokynů které by se měly zobrazit na novém zařízení.
 
 Tuto zprávu si můžete ponechat a použít jí jako zálohu svého tajného klíče. Pokud toho chcete využít, měli byste si zapsat heslo a bezpečně ho uložit.
+    
+    komu %s
     Při odesílání zprávy došlo k chybě. Zkontrolujte své připojení k síti a nastavení odchozího serveru.
     Zapnuto
     Vypnuto
@@ -1108,4 +1100,5 @@ Tuto zprávu si můžete ponechat a použít jí jako zálohu svého tajného kl
     
     Jméno a adresa
     
+    
 
diff --git a/app/ui/legacy/src/main/res/values-cy/strings.xml b/app/ui/legacy/src/main/res/values-cy/strings.xml
index dae954dee01012d721babe5d30c569363926168e..6c0fa9d2d76f0dfcc46566dc3a4cb03b2153dd22 100644
--- a/app/ui/legacy/src/main/res/values-cy/strings.xml
+++ b/app/ui/legacy/src/main/res/values-cy/strings.xml
@@ -27,9 +27,6 @@
     
     Darganfod beth sy\'n newydd yn y diweddariad hwn
     
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -297,9 +294,6 @@
     Yn dilysu\u2026
     Yn nôl gosodiadau\'r cyfrif\u2026
     Yn diddymu\u2026
-    Bron a gorffen!
-    Rhoi enw i\'r cyfrif hwn (dim yn ofynnol):
-    Dy enw (i\'w weld ar negeseuon sy\'n cael eu hanfon):
     Math o gyfrif
     Pa fath o gyfrif ydy hwn?
     POP3
@@ -350,7 +344,6 @@
     Dilysiad
     Dyw \"%1$s = %2$s\" ddim yn dilys gyda \"%3$s = %4$s\"
     Gosodiad annilys: %s
-    Dewisiadau cyfrif
     Pa mor aml i wirio\'r ffolder
     Byth
     Pob 15 munud
@@ -370,7 +363,6 @@
     Pob 36 munud
     Pob 48 munud
     Pob 60 munud
-    Hysbysu pan ddaw neges newydd
     Nifer o negeseuon i\'w dangos
     10 neges
     25 neges
@@ -1081,4 +1073,5 @@ Mae\'n bosib i ti gadw\'r neges hon a\'i ddefnyddio wrth gefn fel dy allwedd gyf
     Cyfeiriad e-bost
     
     
+    
 
diff --git a/app/ui/legacy/src/main/res/values-da/strings.xml b/app/ui/legacy/src/main/res/values-da/strings.xml
index 99ec98bf8dfbfdd88ab9b522b0908d9af3efc06c..54665a5d92539e61cc95c6b420a65a3a75aaaf10 100644
--- a/app/ui/legacy/src/main/res/values-da/strings.xml
+++ b/app/ui/legacy/src/main/res/values-da/strings.xml
@@ -27,9 +27,6 @@
     
     Find ud af hvad der er nyt i denne version
     
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -195,8 +192,6 @@
     Cc:
     Bcc:
     Kunne ikke gemme vedhæftning.
-    
-    "til "
     
     +
     
@@ -297,9 +292,6 @@
     Autentiserer\u2026
     Henter kontoindstillinger\u2026
     Afbryder\u2026
-    Næsten færdig!
-    Giv denne konto et navn (frivilligt):
-    Indtast dit navn (vises på udgående mails):
     Kontotype
     Hvilken type konto er dette?
     POP3
@@ -350,7 +342,6 @@
     Autentifikationstype
     \"%1$s = %2$s\" er ikke gyldig med \"%3$s = %4$s\"
     Ugyldig opsætning: %s
-    Kontoindstillinger
     Frekvens for hentning af mail
     Aldrig
     Hver 15 minut
@@ -370,7 +361,6 @@
     Hver 36 minut
     Hver 48 minut
     Hver 60 minut
-    Vis besked når mails ankommer
     Antal viste mails
     10 mails
     25 mails
@@ -997,6 +987,12 @@ For at indstille den nye enhed til Autocrypt, følg instruktionerne der vises p
 
 Beskeden kan beholdes og bruges som sikkerhedskopi til den hemmelige nøgle. Hvis dette gøres skal adgangskoden gemmes sikkert.
 
+    
+    til %s
+    
+    Tæthed
+    Konfiguér notifikationer for nye beskeder
+    Konfiguér fejl og status notifikationer
     
     Vis
     Afmeld
@@ -1081,4 +1077,5 @@ Beskeden kan beholdes og bruges som sikkerhedskopi til den hemmelige nøgle. Hvi
     
     Skriv meddelelse til
     
+    
 
diff --git a/app/ui/legacy/src/main/res/values-de/strings.xml b/app/ui/legacy/src/main/res/values-de/strings.xml
index 5fa877d2340e2f48554da622e1b0f04657e39611..2938d4518249170c45f8a66c223994945dfee505 100644
--- a/app/ui/legacy/src/main/res/values-de/strings.xml
+++ b/app/ui/legacy/src/main/res/values-de/strings.xml
@@ -25,9 +25,6 @@
     Was gibt es Neues
     Zeige die neuesten Änderungen nach einem App-Update
     Finde heraus, was es Neues in diesem Release gibt
-    
-    Willkommen bei Mail
-    E-Mail ist die Standard-E-Mailanwendung für /e/OS
     
     -- Von /e/OS E-Mail gesendet.
     
@@ -262,9 +259,6 @@
     Authentifizierung\u2026
     Kontoeinstellungen werden geladen\u2026
     Aktion wird abgebrochen\u2026
-    Fast fertig!
-    Kontoname (optional):
-    Ihr Name (Anzeige bei ausgehenden Nachrichten):
     Kontotyp
     Art des Kontos?
     POP3-Konto
@@ -315,7 +309,6 @@
     Authentifizierungsmethode
     \"%1$s = %2$s\" ist nicht gültig mit \"%3$s = %4$s\"
     Ungültige Einstellung: %s
-    Kontooptionen
     E-Mail-Abfrage
     Nie (nur manuell)
     Alle 15 Minuten
@@ -335,7 +328,6 @@
     Alle 36 Minuten
     Alle 48 Minuten
     Jede Stunde
-    Benachrichtigen, wenn Nachrichten eingehen
     Anzahl sichtbarer Nachrichten
     10 Nachrichten
     25 Nachrichten
@@ -1063,8 +1055,6 @@
     Remote-Bilder anzeigen
     mich
     +
-    "an "
-    Erstelle ein neues Konto oder importiere deine E-Mail-Konten aus einer vorherigen Einstellungsdatei.
     Kompakt
     Standard
     Entspannt
@@ -1074,6 +1064,9 @@
     Kontoname
     Nachricht verfassen an
     
+    
+    
     Konto wird gelöscht …
+    
     Ungelesen, %s
-
\ No newline at end of file
+
diff --git a/app/ui/legacy/src/main/res/values-el/strings.xml b/app/ui/legacy/src/main/res/values-el/strings.xml
index 5d41fbcc4d01796524f880bd4ad7c2d55c442976..32e9cf5e4c6a7703848afc44c59dd684e75665e4 100644
--- a/app/ui/legacy/src/main/res/values-el/strings.xml
+++ b/app/ui/legacy/src/main/res/values-el/strings.xml
@@ -27,9 +27,6 @@
     
     Δείτε τι έχει αλλάξει σε αυτή την έκδοση
     
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -294,9 +291,6 @@
     Διακρίβωση στοιχείων\u2026
     Μετάκληση πληροφοριών λογαριασμού\u2026
     Ακύρωση\u2026
-    Σχεδόν έτοιμο!
-    Ονομασία λογαριασμού (Προαιρετικό):
-    Όνομα αποστολέα (προβάλλεται στα εξερχόμενα μηνύματα):
     Τύπος λογαριασμού
     Τι λογαριασμός είναι αυτός;
     POP3
@@ -347,7 +341,6 @@
     Πιστοποίηση
     Το «%1$s = %2$s» δεν είναι έγκυρο με «%3$s = %4$s»
     Άκυρη ρύθμιση: %s
-    Επιλογές λογαριασμού
     Συχνότητα ενημέρωσης φακέλων
     Ποτέ
     Κάθε 15 λεπτά
@@ -367,7 +360,6 @@
     Κάθε 36 λεπτά
     Κάθε 48 λεπτά
     Κάθε 60 λεπτά
-    Ειδοποίηση κατά την άφιξη μηνύματος
     Πλήθος μηνυμάτων που προβάλλονται
     10 μηνύματα
     25 μηνύματα
@@ -1001,10 +993,14 @@
 
 Μπορείτε να κρατήσετε αυτό το μήνυμα και να το χρησιμοποιήσετε ως εφεδρικό για το μυστικό σας κλειδί. Εάν αυτό επιθυμείτε, θα πρέπει να σημειώσετε τον κωδικό και να τον αποθηκεύσετε σε ασφαλές σημείο.
 
+    
+    σε %s
+    
+    εγώ
+    Χαλαρό
+    Αποστολή ID πελάτη
     
     Προβολή
-    
-    σε
     
     +
     
@@ -1118,4 +1114,7 @@
     
     \'Ονομα και διεύθυνση ηλ. ταχυδρομείου
     
+    Αφαίρεση λογαριασμού…
+    
+    αδιάβαστα, %s
 
diff --git a/app/ui/legacy/src/main/res/values-en-rGB/strings.xml b/app/ui/legacy/src/main/res/values-en-rGB/strings.xml
index 2e7d84a1ad383e9f62b712527ec6e7230a9a3642..ddeb370ff8d50b76fb2d319378b9fecdf36a582a 100644
--- a/app/ui/legacy/src/main/res/values-en-rGB/strings.xml
+++ b/app/ui/legacy/src/main/res/values-en-rGB/strings.xml
@@ -9,7 +9,6 @@
   
   
   
-  
   
   
   
@@ -17,7 +16,7 @@
   
   
   
-  
+  
   
   
   
diff --git a/app/ui/legacy/src/main/res/values-eo/strings.xml b/app/ui/legacy/src/main/res/values-eo/strings.xml
index b0d584e0f47023f5dc6ab99d0cc2b6109f83913c..6a3d39a2e60fcdaf39b878f0120c3b73a2212611 100644
--- a/app/ui/legacy/src/main/res/values-eo/strings.xml
+++ b/app/ui/legacy/src/main/res/values-eo/strings.xml
@@ -25,9 +25,6 @@
     
     Kio estas nova en tiu ĉi versio
     
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -278,9 +275,6 @@
     Aŭtentigado\u2026
     Ŝargado de agordoj de konto\u2026
     Nuligado\u2026
-    Preskaŭ farite!
-    Nomi tiun ĉi konton (malnepre):
-    Entajpu vian nomon (montrata en eliraj mesaĝoj):
     Konta tipo
     De iu tipo tiu ĉi konto estas?
     POP3
@@ -329,7 +323,6 @@
     Aŭtentigo
     \"%1$s = %2$s\" ne estas ĝusta kun \"%3$s = %4$s\"
     Erara agordaro: %s
-    Kontaj agordoj
     Ofteco de mesaĝuj-elŝuto
     Neniam
     Je ĉiuj 15 minutoj
@@ -349,7 +342,6 @@
     Je ĉiuj 36 minutoj
     Je ĉiuj 48 minutoj
     Je ĉiuj 60 minutoj
-    Sciigi kiam retletero alvenas
     Kiom da mesaĝoj montri
     10 mesaĝoj
     25 mesaĝoj
@@ -1024,4 +1016,5 @@ Vi povas konservi tiun ĉi mesaĝon kaj uzi ĝin kiel sekurkopion de via privata
     Retpoŝta adreso
     
     
+    
 
diff --git a/app/ui/legacy/src/main/res/values-es/strings.xml b/app/ui/legacy/src/main/res/values-es/strings.xml
index 3817709e234b70a3dd7694542caf170eec9a0f41..12f3cc6e719390c7c31a2a56673d945b28f56b83 100644
--- a/app/ui/legacy/src/main/res/values-es/strings.xml
+++ b/app/ui/legacy/src/main/res/values-es/strings.xml
@@ -27,9 +27,6 @@
     Descubra las novedades de esta versión
     
     Leer
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -188,8 +185,6 @@
     Cc:
     Cco:
     No se puede guardar el adjunto.
-    
-    "para "
     
     +
     
@@ -297,9 +292,6 @@
     Autentificando\u2026
     Obteniendo configuración de la cuenta\u2026
     Cancelando\u2026
-    ¡Terminado!
-    Elija un nombre para esta cuenta (opcional):
-    Introduzca su nombre (se verá en los mensajes salientes):
     Tipo de cuenta
     ¿Qué tipo de cuenta es?
     POP3
@@ -351,7 +343,6 @@
     Tipo de autentificación
     \"%1$s = %2$s\" no es válido con \"%3$s = %4$s\"
     Configuración inválida: %s
-    Opciones de cuenta
     Frecuencia de comprobación de correo nuevo
     Nunca
     Cada 15 minutos
@@ -371,7 +362,6 @@
     Cada 36 minutos
     Cada 48 minutos
     Cada 60 minutos
-    Avisarme cuando lleguen nuevos mensajes
     Número de mensajes a mostrar
     10 mensajes
     25 mensajes
@@ -1008,6 +998,19 @@ Para configurar su nuevo dispositivo con Autocrypt, por favor siga las instrucci
 
 Puede mantener este mensaje y usarlo como copia de seguridad de su clave secreta. Si desea hacer esto, debería anotar la contraseña y guardarla de manera segura.
 
+    Mover a…
+    Copiar a…
+    Mensajes nuevos
+    El certificado no funciona
+    Exportar registros de depuración
+    Se han exportado correctamente. Ten en cuenta que los registros pueden contener datos privados; así que ten cuidado y asegúrate de que te fias de las personas a las que se los mandas.
+    No se han podido exportar los registros.
+    
+    para %s
+    Categorías de notificaciones
+    Configura las notificaciones para mensajes nuevos
+    Configura las notificaciones de error y estado actual
+    La misma que con sincronización lenta («poll»)
     Ha ocurrido un error al enviar el mensaje, por favor verifique su conexión a internet y la configuración del servidor de salida.
     Encendido
     Apagado
@@ -1084,4 +1087,7 @@ Puede mantener este mensaje y usarlo como copia de seguridad de su clave secreta
     Nombre y dirección de correo
     Esperando correos electrónicos nuevos
     
+    Borrando cuenta…
+    
+    sin leer, %s
 
diff --git a/app/ui/legacy/src/main/res/values-et/strings.xml b/app/ui/legacy/src/main/res/values-et/strings.xml
index ef727c236f103a97cc004e77d2dda11d0072a45c..b1f846e7bfc526294001fb3c264ed7d3f5611d90 100644
--- a/app/ui/legacy/src/main/res/values-et/strings.xml
+++ b/app/ui/legacy/src/main/res/values-et/strings.xml
@@ -23,8 +23,6 @@
     Vaata mis on selles versioonis muutunud
     
     Vaata
-    
-    Welcome to Mail
     
     -- Sent from /e/ Mail.
     
@@ -185,8 +183,6 @@
     Koopia:
     Pimekoopia:
     Manuse salvestamine ebaõnnestus
-    
-    "saajaks "
     
     +
     
@@ -294,9 +290,6 @@
     Autentimine\u2026
     Toob konto sätteid\u2026
     Tühistamine\u2026
-    Oled peaaegu valmis!
-    Anna sellele kontole nimi (valikuline):
-    Trüki oma nimi (näidatakse väljuvates kirjades):
     Konto liik
     Mis tüüpi konto see on?
     POP3
@@ -347,7 +340,6 @@
     Autentimine
     \"%1$s = %2$s\" ei valideeru seadega \"%3$s = %4$s\"
     Vigased sätted: %s
-    Konto valikud
     Kausta pollimise sagedus
     Mitte kunagi
     Iga 15 minuti tagant
@@ -367,7 +359,6 @@
     Iga 36 minuti tagant
     Iga 48 minuti tagant
     Iga 60 minuti tagant
-    Teavita uue e-kirja saabumisest
     Kuvatavate kirjade arv
     10 kirja
     25 kirja
@@ -999,6 +990,15 @@ Seadistamaks uut nutiseadet kasutama Autocrypt\'i palun järgi seal kuvatud juht
 
 Palun jäta see kiri alles ning kasuta seda muu hulgas oma krüptovõtme varundamiseks. Soovitame, et teed seda välises kanalis või andmekandjal ning turvalisel viisil.
 
+    Kasutusjuhend
+    Abiteave
+    Foorum huvilistele
+    Fediverse
+    Muudatuste logi laadimine ei õnnestunud
+    Teisalda…
+    Kopeeri…
+    
+    saajaks %s
     Kirja saatmisel tekkis viga. Palun kontrolli võrguühenduse olemasolu ning väljuva e-postiserveri seadistusi.
     Sisse
     Välja
@@ -1075,4 +1075,7 @@ Palun jäta see kiri alles ning kasuta seda muu hulgas oma krüptovõtme varunda
     
     Nimi ja e-posti aadress
     
+    Eemaldame kontot…
+    
+    lugemata, %s
 
diff --git a/app/ui/legacy/src/main/res/values-eu/strings.xml b/app/ui/legacy/src/main/res/values-eu/strings.xml
index 5cd089363ce5e8131b38955bfca50f477ef8c9d7..bfb08e5e75e4a2e5e6070ccb2aeade97a370904b 100644
--- a/app/ui/legacy/src/main/res/values-eu/strings.xml
+++ b/app/ui/legacy/src/main/res/values-eu/strings.xml
@@ -27,9 +27,6 @@
     
     Ikusi zer den berria bertsio honetan
     
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -298,9 +295,6 @@
     Autentifikatzen\u2026
     Kontuaren ezarpenak eskuratzen\u2026
     Bertan behera uzten\u2026
-    Ia amaitu duzu!
-    Eman izen bat kontu honi (aukerakoa):
-    Idatzi zure izena (irteerako mezuetan bistaratuko da):
     Kontu mota
     Zein kontu mota da hau?
     POP3
@@ -351,7 +345,6 @@
     Autentifikazioa
     \"%1$s = %2$s\" ez da baliozkoa \"%3$s = %4$s\"-(r)ekin
     Konfigurazio baliogabea: %s
-    Kontu aukerak
     Karpeta atzitzeko maiztasuna
     Inoiz ez
     15 minutuero
@@ -371,7 +364,6 @@
     36 minutuero
     48 minutuero
     60 minutuero
-    Jakinarazi niri posta iristean
     Bistaratuko den mezu kopurua
     10 mezu
     25 mezu
@@ -1005,9 +997,24 @@
     Autocrypt ezarpen mezua
     Mezu honek zure Autocrypt ezarpenak eta gako sekretuak jatorrizko gailutik partekatzeko informazio guztia du.
 
-Zure gailu berrian Autocrypt ezartzeko, jarraitu gailu berrian agertuko zaizkizun argibideak.
+zure gailu berrian autocrypt ezartzeko, jarraitu gailu berrian agertuko zaizkizun argibideak.
 
-Mezu hau gorde dezakezu eta zure gako sekretuaren babes-kopia gisa erabili. Hau egin nahi baduzu, pasahitza idatzi beharko zenuke eta toki seguruan gorde.
+mezu hau gorde dezakezu eta zure gako sekretuaren babes-kopia gisa erabili. hau egin nahi baduzu, pasahitza idatzi beharko zenuke eta toki seguruan gorde.
+    
+    Ikusi
+    
+    honi: %s
+    
+    +
+    
+    niri
+    
+    Erakutsi urruneko irudiak
+    
+    Dentsitatea
+    Trinkoa
+    Erlaxatua
+    Hartzaileak
     Errore bat gertatu da mezua bidaltzean. Egiaztatu zure sare konexioa eta mezuak bidaltzeko zerbitzariaren konfigurazioa.
     Bai
     Ez
@@ -1076,4 +1083,24 @@ Mezu hau gorde dezakezu eta zure gako sekretuaren babes-kopia gisa erabili. Hau
     Posta helbidea
     
     
+    
+    Mezuaren xehetasunak
+    
+    \'Data\' goiburua falta da
+    
+    Errorea gertatu da mezuaren xehetasunak kargatzean.
+    
+    Gehitu kontaktuetara
+    
+    Idatzi mezua honi:
+    
+    Kopiatu e-posta helbidea
+    
+    Kopiatu izena eta e-posta helbidea
+    
+    Izena eta e-posta helbidea
+    
+    Kontua ezabatzen…
+    
+    irakurri gabea, %s
 
diff --git a/app/ui/legacy/src/main/res/values-fa/strings.xml b/app/ui/legacy/src/main/res/values-fa/strings.xml
index 1ce8831ff2ffa1672944ea02e488442cf52aa617..1f1a98ed257e80641a9c878f3a5b5abda077f102 100644
--- a/app/ui/legacy/src/main/res/values-fa/strings.xml
+++ b/app/ui/legacy/src/main/res/values-fa/strings.xml
@@ -26,9 +26,6 @@
     
     از تازه‌های این نسخه باخبر شوید
     
-    
-    Welcome to Mail
-    Mail is the default mail client for /e/
     
     -- Sent from /e/ Mail.
     
@@ -291,9 +288,6 @@
     احراز هویت\u2026
     واکشی تنظیمات حساب کاربری\u2026
     لغوکردن\u2026
-    تقریباً تمام شد!
-    نامی برای این حساب انتخاب کنید (اختیاری):
-    نام خود را بنویسید (در پیام‌های ارسالی نمایش داده می‌شود):
     نوع حساب کاربری
     نوع این حساب کاربری چیست؟
     POP3
@@ -344,7 +338,6 @@
     احراز هویت
     «%1$s = %2$s» با «%3$s = %4$s» معتبر نیست
     پیکربندی نادرست: %s
-    گزینه‌های حساب کاربری
     تکرار سرکشی به پوشه
     هرگز
     هر ۱۵ دقیقه
@@ -364,7 +357,6 @@
     هر ۳۶ دقیقه
     هر ۴۸ دقیقه
     هر ۶۰ دقیقه
-    هر زمان رایانامه رسید به من خبر بده
     تعداد پیام‌ها برای نمایش
     ۱۰ پیام
     ۲۵ پیام
@@ -999,13 +991,16 @@
 
 می‌توانید این پیام را پیش خود نگه دارید و آن را به‌عنوان پشتیبان کلید سرّی‌تان به‌کار ببرید. برای انجام این کار باید گذرواژه را یادداشت و در جای امنی نگهداری کنید.
 
+    
+    به %s
+    
+    +
+    
     کد منبع
     
     نما
     انتقال به…
     کپی به…
-    
-    به
     
     
     من
@@ -1122,4 +1117,7 @@
     
     نام و آدرس ایمیل
     
+    در حال حذف حساب…
+    
+    خوانده نشده، %s
 
diff --git a/app/ui/legacy/src/main/res/values-fi/strings.xml b/app/ui/legacy/src/main/res/values-fi/strings.xml
index a2f7b694f6392cde81bf348ff8e525c64b7c9ee0..90c633bbc436935ccbfd42c73711c4d2668ad0af 100644
--- a/app/ui/legacy/src/main/res/values-fi/strings.xml
+++ b/app/ui/legacy/src/main/res/values-fi/strings.xml
@@ -25,37 +25,6 @@
     Mitä uutta
     Näytä viimeisimmät muutokset kun sovellus päivitettiin
     Selvitä mitä uutta tämä julkaisu sisältää
-    
-    Tervetuloa Mail Mailiin
-    
-Mail on monipuolinen ilmainen sähköpostisovellus Androidille.
-

-Sen ominaisuuksiin kuuluu muun muassa: -

-
    -
  • Push-viestit käyttäen IMAP IDLE -toteutusta
  • -
  • Aiempaa parempi suorituskyky
  • -
  • Viestien arkistointi
  • -
  • Sähköpostin allekirjoitukset
  • -
  • Piilokopioiden lähetys itselle
  • -
  • Kansiotilaukset
  • -
  • Kaikkien kansioiden synkronointi
  • -
  • Vastausosoitteen määritys
  • -
  • Pikanäppäimet
  • -
  • Aiempaa parempi IMAP-tuki
  • -
  • Liitteiden tallennus muistikortille
  • -
  • Roskakorin tyhjennys
  • -
  • Viestien järjestely
  • -
  • …ja paljon muuta
  • -
-

-Huomioithan, että Mail ei tue useimpia ilmaisia Hotmail-tilejä, ja kuten monet muut sovellukset, saattaa kärsiä pienistä ongelmista Microsoft Exchange -ympäristössä. -

-Ilmoita virheistä, ota osaa sovelluskehitykseen ja esitä kysymyksiä osoitteessa -https://github.com/k9mail/k-9/. -

- ]]>
-- \nLähetetty Android-laitteestani Mail Maililla. Pahoittelut vähäsanaisuudestani. @@ -316,9 +285,6 @@ Ilmoita virheistä, ota osaa sovelluskehitykseen ja esitä kysymyksiä osoittees Varmistetaan\u2026 Haetaan tilin asetuksia\u2026 Peruutetaan\u2026 - Melkein valmista! - Anna tilin nimi (ei pakollinen): - Anna nimesi (näkyy lähtevissä viesteissä): Tilin tyyppi Mikä tämän tilin tyyppi on? POP3 @@ -369,7 +335,6 @@ Ilmoita virheistä, ota osaa sovelluskehitykseen ja esitä kysymyksiä osoittees Todennustapa \"%1$s = %2$s\" ei ole kelvollinen asetuksen \"%3$s = %4$s\" kanssa Virheellinen asetus: %s - Tilin asetukset Viestien tarkistus Ei koskaan Joka 15 minuutti @@ -389,7 +354,6 @@ Ilmoita virheistä, ota osaa sovelluskehitykseen ja esitä kysymyksiä osoittees Joka 36 minuutti Joka 48 minuutti Joka 60 minuutti - Ilmoitus postin saapumisesta Näytettävien viestien lukumäärä 10 kansiota 25 kansiota @@ -1024,6 +988,23 @@ Ilmoita virheistä, ota osaa sovelluskehitykseen ja esitä kysymyksiä osoittees Aseta uusi laitteesi käyttämään Autocryptiä noudattamalla ohjeita, jotka uusi laitteesi näyttää. Voit säilyttää tämän viestin ja käyttää sitä varmuuskopioina salausavaimellesi. Jos haluat tehdä tämän, kirjoita salasana muistiin ja säilytä se turvallisesti. + + vastaanottaja %s + + + + + minä + + Näytä etäkuvat + + Tiheys + Kompakti + Oletus + Rento + Lähetä asiakasohjelmiston ID-tunniste + + Tilin nimi + Vastaanottajat Viestiä lähettäessä tapahtui virhe. Tarkista verkkoyhteyden tila ja lähtevän postin palvelimen asetukset. Päällä Pois @@ -1103,4 +1084,8 @@ Voit säilyttää tämän viestin ja käyttää sitä varmuuskopioina salausavai Nimi ja sähköpostiosoitteet + + Poistetaan tili… + + lukematon, %s diff --git a/app/ui/legacy/src/main/res/values-fr/strings.xml b/app/ui/legacy/src/main/res/values-fr/strings.xml index 87e4a2a80a56731b8915f932db546cbadb21ca05..64ecc26ffb1959a0dc8819de1a93451e93638083 100644 --- a/app/ui/legacy/src/main/res/values-fr/strings.xml +++ b/app/ui/legacy/src/main/res/values-fr/strings.xml @@ -25,9 +25,6 @@ Nouveautés Afficher les changements récents quand l’appli a été mise à jour Découvrez les nouveautés de cette version - - Bienvenue sur Mail - Mail est le client de messagerie par défaut de /e/OS -- Envoyé depuis /e/OS Mail. @@ -269,9 +266,6 @@ jusqu’à %d de plus Authentification\u2026 Récupération des paramètres du compte\u2026 Annulation\u2026 - Vous avez presque terminé ! - Donner un nom à ce compte (facultatif) : - Saisissez votre nom (s’affiche dans les courriels sortants) : Type de compte Quel type de compte est-ce ? POP3 @@ -322,7 +316,6 @@ jusqu’à %d de plus Authentification « %1$s = %2$s » n’est pas valide avec « %3$s = %4$s » Paramétrage invalide : %s - Options du compte Fréquence de scrutation des dossiers Jamais Toutes les 15 minutes @@ -342,7 +335,6 @@ jusqu’à %d de plus Toutes les 36 minutes Toutes les 48 minutes Toutes les 60 minutes - M’avertir lors de l’arrivée de courriels Nombre de courriels à afficher 10 courriels 25 courriels @@ -1064,14 +1056,12 @@ jusqu’à %d de plus À Répondre à Détails du message - "à " moi Copier l\'adresse e-mail Expéditeur Copier le nom et l\'adresse e-mail Adresse e-mail Nom et adresse e-mail - Paramétrez un nouveau compte ou importez des comptes e-mail depuis un fichier de paramétrages. + @@ -1085,4 +1075,11 @@ jusqu’à %d de plus Rédiger un courriel - \ No newline at end of file + + Afficher + + + Suppression du compte… + + non lus, %s + diff --git a/app/ui/legacy/src/main/res/values-fy/strings.xml b/app/ui/legacy/src/main/res/values-fy/strings.xml index 46f86b8c08c78d1c20ad579c687fbeaf4536ac10..4e9953213a9e7d09db418e3a618f912e2809b60d 100644 --- a/app/ui/legacy/src/main/res/values-fy/strings.xml +++ b/app/ui/legacy/src/main/res/values-fy/strings.xml @@ -28,33 +28,6 @@ Untdek wat der nij is yn dizze ferzje Besjen - - Wolkom by Mail - Mail is in fergees krêftige e-mailclient foar Android.

De ferbettere mooglikheden bestean ûnder oare út: -

-
    -
  • Pushmail middels IMAP IDLE
  • -
  • Bettere prestaasjes
  • -
  • Berjocht werklassifikaasje
  • -
  • E-mailhantekeningen
  • -
  • Bcc nei josels
  • -
  • Mapabonneminten
  • -
  • Syngronisaasje fan alle mappen
  • -
  • Antwurdadres ynstelle
  • -
  • Toetseboerd fluchkeppelingen
  • -
  • Bettere stipe IMAP
  • -
  • Bylage bewarje nei SD
  • -
  • Jiskefet leegje
  • -
  • Berjochten sortearje
  • -
  • en mear…
  • -
-

-Hâld der rekkening mei dat Mail de measte fergeze Hotmail-accounts net stipet, en krekt as in protte e-mailclients, problemen hawwe kin om te ferbinen mei Microsoft Exchange. -

-Graach flaterrapporten stjoere, bydragen foar nije funksjes en fragen stelle op -https://github.com/k9mail/k-9/. -

-]]>
-- \nFerstjoerd fan myn Android-apparaat ôf mei Mail. @@ -218,8 +191,6 @@ Graach flaterrapporten stjoere, bydragen foar nije funksjes en fragen stelle op Cc: Bcc: Kin bylage net bewarje. - - "oan " + @@ -326,9 +297,6 @@ Graach flaterrapporten stjoere, bydragen foar nije funksjes en fragen stelle op Autentikaasje\u2026 Accountynstellingen ophelje\u2026 Annulearje\u2026 - Hast klear! - Jou dit account in namme (opsjoneel): - Typ jo namme (sichtber by útgeande berjochten): Accounttype Hokker type account is dit? POP3 @@ -380,7 +348,6 @@ Graach flaterrapporten stjoere, bydragen foar nije funksjes en fragen stelle op Autentikaasjetype %1$s = %2$s’ is net jildich mei ‘%3$s = %4$s Unjildige ynstellingen: %s - Accountopsjes Frekwinsje mapkontrôle Nea Elke 15 minuten @@ -400,7 +367,6 @@ Graach flaterrapporten stjoere, bydragen foar nije funksjes en fragen stelle op Elke 36 minuten Elke 48 minuten Elke 60 minuten - Melding jaan by nij e-mailberjocht Tal berjochten om te toanen 10 berjochten 25 berjochten @@ -1114,4 +1080,7 @@ Jo kinne dit berjocht bewarje as reservekopy foar jo geheime kaai. As jo dit dwa Namme en e-mailadres + Account fuortsmite… + + net lêzen, %s diff --git a/app/ui/legacy/src/main/res/values-gd/strings.xml b/app/ui/legacy/src/main/res/values-gd/strings.xml index fc064c6a484687675f54f48c4b4d7d1a3921255b..e5ca6011838bbdd32cfecc99ca07b1fb1cf09743 100644 --- a/app/ui/legacy/src/main/res/values-gd/strings.xml +++ b/app/ui/legacy/src/main/res/values-gd/strings.xml @@ -23,9 +23,6 @@ Na tha ùr - - Fàilte gu aplacaid a’ phuist - <p> Tha aplacaid a’ phuist ’na aplacaid shaor agus chumhachdach airson post-d air Android. </p><p> Tha na gleusan leasaichte aige a’ gabhail a-staigh: </p> <ul> <li>Put post slighe IMAP IDLE</li> <li>Dèanadas nas fheàrr</li> <li>Ath-fhaidhleadh theachdaireachdan</li> <li>Eàrr-sgrìobhaidhean puist-d</li> <li>Bcc dhut fhèin</li> <li>Fo-sgrìobhaidhean phasganan</li> <li>Sioncronachadh nam pasgan air fad</li> <li>Rèiteachadh seòladh nam freagairt</li> <li>Ath-ghoiridean a’ mheur-chlàir</li> <li>Taic nas fheàrr airson IMAP</li> <li>Sàbhaladh de cheanglachain air SD</li> <li>Falamhachadh an sgudail</li> <li>Seòrsachadh theachdaireachdan</li> <li>…is mòran a bharrachd</li> </ul> <p> Thoir an aire nach cuir aplacaid a’ phuist taic ri cuid mhòr de chunntasan saora Hotmail agus mar iomadh prògram puist-d eile, tachraidh rudan neònach nuair a bhruidhneas e ri Microsoft Exchange. </p><p> Fàilte air bugaichean, com-pàirteachas, iarrtasan airson gleusan ùra is ceistean aig <a href=https://github.com/k9mail/k-9/>https://github.com/k9mail/k-9/</a>. </p> -- Chaidh a chur le post /e/. @@ -266,9 +263,6 @@ ’Ga dhearbhadh… A’ faighinn roghainnean a’ chunntais… A’ sgur dheth… - Cha mhòr deiseil! - Thoir ainm air a’ chunntas seo - Cuir a-steach d’ ainm (chithear seo ann an teachdaireachdan a thèid a-mach): Seòrsa a’ chunntais Dè seòrsa cunntas a tha seo\? POP3 @@ -317,7 +311,6 @@ Dearbhadh Chan eil “%1$s = %2$s” dligheach mu choinneamh “%3$s = %4$s Suidheachadh mì-dhligheach: %s - Roghainnean a’ chunntais Dè cho tric ’s a dh’iarras sinn am post\? Chan ann idir Gach cairteal na h-uarach @@ -337,7 +330,6 @@ Gach 36 mionaid Gach 48 mionaid Gach uair a thìde - Thoir brath dhomh nuair a ruigeas post Co mheud teachdaireachd a thèid a shealltainn 10 teachdaireachdan 25 teachdaireachd @@ -928,4 +920,5 @@ Seòladh puist-d + diff --git a/app/ui/legacy/src/main/res/values-gl-rES/strings.xml b/app/ui/legacy/src/main/res/values-gl-rES/strings.xml index c31c7c383d44ecb68c541524b2cb8c8bc75a321c..486fffa0c59e12fd3e105c801fb6fc7cae24185c 100644 --- a/app/ui/legacy/src/main/res/values-gl-rES/strings.xml +++ b/app/ui/legacy/src/main/res/values-gl-rES/strings.xml @@ -7,8 +7,6 @@ Mail Accounts Unread emails - - Welcome to Mail -- Sent from /e/ Mail. @@ -206,9 +204,6 @@ Autenticando\u2026 Obtendo os axustes da conta\u2026 Cancelando\u2026 - Feito! - Darlle un nome a esta conta (opcional): - Escribe o teu nome (mostrarase nas mensaxes que envíes): Tipo de conta Que tipo de conta é esta? POP3 @@ -223,7 +218,6 @@ Certificado do cliente Servidor POP3 Servidor IMAP - Servidor Exchange Porto Seguranza Autenticación @@ -247,9 +241,6 @@ Correo lixo Ver só cartafoles subscritos Expandir automaticamente cartafol - Camiño OWA - Camiño de autenticación - Alcume da caixa de correo Axustes do servidor de saída Servidor SMTP Porto @@ -259,7 +250,6 @@ Contrasinal Autenticación Configuración non válida: %s - Opcións da conta Frecuencia de comprobación de correo Nunca Cada 15 minutos @@ -279,7 +269,6 @@ Cada 36 minutos Cada 48 minutos Cada 60 minutos - Avisarme cando chegue unha mensaxe Número de mensaxes para mostrar 10 mensaxes 25 mensaxes diff --git a/app/ui/legacy/src/main/res/values-gl/strings.xml b/app/ui/legacy/src/main/res/values-gl/strings.xml index 29cd2ee8c6a6da826e4053328268960dc2b31b54..f231f18e1388e15635e3ee3825440b2addaa0174 100644 --- a/app/ui/legacy/src/main/res/values-gl/strings.xml +++ b/app/ui/legacy/src/main/res/values-gl/strings.xml @@ -25,9 +25,6 @@ Mira as novidades deste lanzamento - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -278,9 +275,6 @@ Autentificando\u2026 Obtendo Configuración da conta\u2026 Cancelando\u2026 - Feito! - Dalle un nome a esta conta (opcional): - Introduce o teu nome (visualizarase na mensaxe de saída): Tipo de conta Qué tipo de conta é? POP3 @@ -329,7 +323,6 @@ Tipo de autentificación \"%1$s = %2$s\" non é válido con \"%3$s = %4$s\" Configuración inválida: %s - Opcións de conta Frecuencia de comprobación de correo Nunca Cada 15 minutos @@ -349,7 +342,6 @@ Cada 36 minutos Cada 48 minutos Cada 60 minutos - Avisarme cando chegue correo Número de mensaxes a visualizar 10 mensaxes 25 mensaxes @@ -960,6 +952,16 @@ Para configurar o teu novo dispositivo para Autocrypt, sigue as instrucións que Podes conservar esta mensaxe e usala como copia de seguridade da túa chave secreta. Se queres facelo, debes anotar o contrasinal e gardalo de forma segura. + Mover a… + Copiar a… + + Para poder usar a conta \"%s\" cómpre proporcionar o contrasinal do servidor. + Para poder usar a conta \"%s\" cómpre proporcionar os contrasinais do servidor. + + Contrasinal do servidor entrante + Contrasinal do servidor saínte + Use o mesmo contrasinal para o servidor de saída + Nome do servidor: %s Produciuse un erro ao enviar a mensaxe. Comprobe a conectividade da súa rede e a configuración do servidor de saída. Acender Apagar @@ -1023,4 +1025,5 @@ Podes conservar esta mensaxe e usala como copia de seguridade da túa chave secr Enderezo electrónico + diff --git a/app/ui/legacy/src/main/res/values-hr/strings.xml b/app/ui/legacy/src/main/res/values-hr/strings.xml index 5337066c4c82e557ad9f2917e4901342f8ebe19e..5395c861c4163c339cf9bf8864e7318612394da8 100644 --- a/app/ui/legacy/src/main/res/values-hr/strings.xml +++ b/app/ui/legacy/src/main/res/values-hr/strings.xml @@ -13,8 +13,6 @@ Licenca - - Welcome to Mail -- Sent from /e/ Mail. @@ -259,9 +257,6 @@ Identifikacija\u2026 Dohvaćam postavke računa\u2026 Otkazujem\u2026 - Uskoro ste gotovi! - Dajte naziv ovom računu (opcionalno): - Unesite vaše ime (prikazuje se na odlaznim porukama): Vrsta računa Kakav je to račun? POP3 @@ -310,7 +305,6 @@ Identifikacija \"%1$s = %2$s\" nije važeća sa \"%3$s = %4$s\" Nevažeće postavljanje: %s - Opcije računa Učestalost provjera mapa Nikad Svakih 15 minuta @@ -330,7 +324,6 @@ Svakih 36 minuta Svakih 48 minuta Svakih 60 minuta - Obavijesti me kod primitka pošte Broj poruka za prikaz 10 poruka 25 poruka @@ -960,4 +953,5 @@ Adresa e-pošte + diff --git a/app/ui/legacy/src/main/res/values-hu/strings.xml b/app/ui/legacy/src/main/res/values-hu/strings.xml index e423a3c36c4107ae447fd9b2d371d9c0243138c4..78927845f28b34048d83ea0560f674bfd66185be 100644 --- a/app/ui/legacy/src/main/res/values-hu/strings.xml +++ b/app/ui/legacy/src/main/res/values-hu/strings.xml @@ -27,9 +27,6 @@ Tudja meg, hogy mik az újdonságok ebben a kiadásban - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -297,9 +294,6 @@ Hitelesítés\u2026 Fiókbeállítások beolvasása\u2026 Megszakítás\u2026 - Már majdnem kész. - A fiók elnevezése (opcionális): - A név megadása (kimenő üzeneteknél jelenik meg): Fióktípus Milyen fajta fiók ez? POP3 @@ -350,7 +344,6 @@ Hitelesítés %1$s = %2$s” nem érvényes ezzel: „%3$s = %4$s Érvénytelen beállítás: %s - Fiók beállításai Mappa lekérdezésének gyakorisága Soha 15 percenként @@ -370,7 +363,6 @@ 36 percenként 48 percenként 60 percenként - Értesítsen, amikor levél érkezik Megjelenítendő üzenetek száma 10 üzenet 25 üzenet @@ -1008,8 +1000,6 @@ Megtarthatja ezt az üzenetet, és felhasználhatja a titkos kulcs biztonsági m Megtekintés Áthelyezés… Másolás… - - -> + @@ -1113,4 +1103,7 @@ Megtarthatja ezt az üzenetet, és felhasználhatja a titkos kulcs biztonsági m Név és e-mail cím + Fiók eltávolítása… + + olvasatlan, %s diff --git a/app/ui/legacy/src/main/res/values-in/strings.xml b/app/ui/legacy/src/main/res/values-in/strings.xml index d90fbc93072c785eb2ad2e87044d6da3846ba30c..36c8ab435202a14bc26ff6dc7efd8285f67cea6a 100644 --- a/app/ui/legacy/src/main/res/values-in/strings.xml +++ b/app/ui/legacy/src/main/res/values-in/strings.xml @@ -25,9 +25,6 @@ Apa yang baru - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -269,9 +266,6 @@ Otentikasi\u2026 Mengambil pengaturan akun\u2026 Membatalkan\u2026 - Anda hampir selesai! - Berikan akun ini sebuah nama (opsional): - Ketik nama Anda (ditampilkan pada pesan keluar): Tipe akun Akun apa ini? POP3 @@ -320,7 +314,6 @@ Otentikasi \"%1$s = %2$s\" tidak valid dengan \"%3$s = %4$s\" Salah pengaturan: %s - Opsi akun Frekuensi penarikan folder Tidak pernah Setiap 15 menit @@ -340,7 +333,6 @@ Setiap 36 Menit Setiap 48 Menit Setiap 60 Menit - Beritahu saya bila surat masuk Jumlah pesan yang akan ditampilkan 10 pesan 25 pesan @@ -994,4 +986,5 @@ Anda dapat menyimpan pesan ini dan menggunakannya sebagai cadangan untuk kunci r Alamat surel + diff --git a/app/ui/legacy/src/main/res/values-is/strings.xml b/app/ui/legacy/src/main/res/values-is/strings.xml index d437038f6fd7e087833f29e057a74d20ce997f31..8bd1727e15f7555e892b5c1aae68d4b87f277b16 100644 --- a/app/ui/legacy/src/main/res/values-is/strings.xml +++ b/app/ui/legacy/src/main/res/values-is/strings.xml @@ -25,9 +25,6 @@ Nýtt á döfinni Birta nýlegar breytingar þegar forritið er uppfært Skoðaðu hvað sé nýtt við þessa útgáfu - - Velkomin í Póstinn - Póstur/Mail er sjálfgefið póstforrit fyrir /e/OS -- Sent úr /e/OS Póstinum. @@ -294,9 +291,6 @@ Auðkenni… Næ í stillingar aðgangs… Hætti við… - Þetta er næstum búið! - Gefðu þessum aðgangi nafn (valkvætt): - Skrifaðu nafnið þitt (er birt á útsendum skilaboðum): Gerð aðgangs Hvers konar aðgangur er þetta\? POP3 @@ -347,7 +341,6 @@ Auðkenning \"%1$s = %2$s\" er ekki gilt með \"%3$s = %4$s\" Ógild uppsetning: %s - Valkostir aðgangs Tíðni athugana á möppu Aldrei Á 15 mínútna fresti @@ -367,7 +360,6 @@ Á 36 mínútna fresti Á 48 mínútna fresti Á 60 mínútna fresti - Láta mig vita þegar nýr póstur berst Fjöldi skilaboða sem á að birta 10 skilaboð 25 skilaboð @@ -1045,8 +1037,6 @@ Ruslpóstur Færa… - Settu upp nýjan aðgang eða flyttu inn tölvupóstaðganga úr áður notaðri stillingaskrá. - "til " + mín Birta fjartengdar myndir @@ -1103,6 +1093,7 @@ Nafn aðgangsins Semja póst til - ólesið, %s Fjarlægi aðgang… - \ No newline at end of file + + ólesið, %s + diff --git a/app/ui/legacy/src/main/res/values-it/strings.xml b/app/ui/legacy/src/main/res/values-it/strings.xml index e4a890cb84c96310156eed37678f036b528f3482..acc724d0f634317932702b941c4034cb7deeb44c 100644 --- a/app/ui/legacy/src/main/res/values-it/strings.xml +++ b/app/ui/legacy/src/main/res/values-it/strings.xml @@ -23,9 +23,6 @@ Cosa c\'è di nuovo Mostra le ultime modifiche quando l\'app viene aggiornata Scopri le novità di questa versione - - Benvenuto in Mail - Mail è il client mail di default di /e/OS -- Inviato da /e/OS Mail. @@ -259,9 +256,6 @@ Autenticazione… Recupero delle impostazioni dell\'account in corso… Annullamento in corso… - Hai quasi fatto! - Assegna un nome all\'account (facoltativo): - Scrivi il tuo nome (visualizzato nei messaggi in uscita): Tipo di account Che tipo di account è questo\? POP3 @@ -312,7 +306,6 @@ Autenticazione \"%1$s = %2$s\" non è valido con \"%3$s = %4$s\" Configurazione non valida: %s - Opzioni account Frequenza di verifica cartella Mai Ogni 15 minuti @@ -332,7 +325,6 @@ Ogni 36 minuti Ogni 48 minuti Ogni 60 minuti - Invia notifica all\'arrivo di nuovi messaggi Numero di messaggi da visualizzare 10 messaggi 25 messaggi @@ -1074,10 +1066,8 @@ Puoi conservare questo messaggio e utilizza come una copia di sicurezza della tu Mostra immagini su server remoto me + - "A " Permetti all\'app di accedere alle Email. Elimina Email - Imposta un nuovo account o importa i tuoi account da un file di impostazioni esistente. Leggi Email Visualizza Compatti @@ -1088,4 +1078,7 @@ Puoi conservare questo messaggio e utilizza come una copia di sicurezza della tu Nome Account Scrivi messaggio per + Rimozione account… + + nuovi messaggi, %s diff --git a/app/ui/legacy/src/main/res/values-iw/strings.xml b/app/ui/legacy/src/main/res/values-iw/strings.xml index 08424865b5695f6196303fe4a6b73c9221663ad8..4d85aef104d8ac3fda709f4fe0f8ecae3a4e4235 100644 --- a/app/ui/legacy/src/main/res/values-iw/strings.xml +++ b/app/ui/legacy/src/main/res/values-iw/strings.xml @@ -20,8 +20,6 @@ גלה מה חדש בגירסא זו - - Welcome to Mail -- Sent from /e/ Mail. @@ -131,7 +129,7 @@ בעיה בתעודה עבור %s בדוק את הגדרות השרת נכשל באימות - האימות נכשל עבור %s. + האימות נכשל עבור %s. עדכן את הגדרות השרת. @@ -254,9 +252,6 @@ מאמת … מייבא הגדרות החשבון … מבטל… - כמעט מוכן! - תן שם לחשבון זה (לא חובה): - הקלד את שמך (מוצג בהודעות יוצאות): סוג חשבון איזה סוג חשבון זה? POP3 @@ -296,7 +291,6 @@ סיסמא סו אימות הגדרה לא חוקית: %s - אפשרויות חשבון אפ פעם כל רבע שעה כל 30 דקות @@ -315,7 +309,6 @@ כל 36 דקות כל 48 דקות כל 60 דקות - הודע לי כאשר מגיע דואר מספר הודעות להצגה 10 הודעות 25 הודעות @@ -648,4 +641,5 @@ כתובת דוא\"ל + diff --git a/app/ui/legacy/src/main/res/values-ja/strings.xml b/app/ui/legacy/src/main/res/values-ja/strings.xml index 91d80d5ffcd616bc707e1a4b793a796ce63d59db..f838a35df88ddffac85c5c44b37d331c213e0d09 100644 --- a/app/ui/legacy/src/main/res/values-ja/strings.xml +++ b/app/ui/legacy/src/main/res/values-ja/strings.xml @@ -28,9 +28,6 @@ このリリースは何が新しいのかを知る 表示 - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -303,9 +300,6 @@ 認証中\u2026 アカウント設定を取得中\u2026 中断\u2026 - 電子メールセットアップ - アカウントの名前を付けます (オプション): - 名前を入力します (送信メールの表示名): メールアカウント種類の選択 受信メールサーバの種類を選択して下さい POP3 サーバ @@ -357,7 +351,6 @@ セキュリティ設定 \"%1$s = %2$s\" は \"%3$s = %4$s\" で無効です 無効な設定: %s - アカウントオプション 同期フォルダの同期間隔 しない 15分毎 @@ -377,7 +370,6 @@ 36分毎 48分毎 60分毎 - メール到着時に通知 受信メールを表示する件数 10件 25件 @@ -1088,4 +1080,8 @@ 名前とメールアドレス + + アカウントを削除しています… + + 未読、%s diff --git a/app/ui/legacy/src/main/res/values-ko/strings.xml b/app/ui/legacy/src/main/res/values-ko/strings.xml index d38bf12e777f74e46008a723a108d2a59518083f..15d75dd7218fd10f8e98828490e2c87d9c229013 100644 --- a/app/ui/legacy/src/main/res/values-ko/strings.xml +++ b/app/ui/legacy/src/main/res/values-ko/strings.xml @@ -26,8 +26,6 @@ 이 릴리즈의 새로운 기능 알아보기 - - Welcome to Mail -- Sent from /e/ Mail. @@ -268,9 +266,6 @@ 인증 중\u2026 계정 설정 가져 오기\u2026 취소 중\u2026 - 설정이 거의 완료되었습니다! - 이 계정의 이름을 입력 (옵션): - 이름 입력 (보내는 메시지에 표시 될 이름): 계정 종류 계정 유형을 선택하시오. POP3 @@ -317,7 +312,6 @@ 비밀번호 인증 유형 잘못된 설정: %s - 계정 옵션 폴더 수신 빈도 하지 않음 15분마다 @@ -337,7 +331,6 @@ 36분마다 48분마다 60분마다 - 메일 도착시 알림 화면에 보여질 메시지 수 10 메시지 25 메시지 @@ -848,4 +841,5 @@ 전자우편 주소 + diff --git a/app/ui/legacy/src/main/res/values-lt/strings.xml b/app/ui/legacy/src/main/res/values-lt/strings.xml index f2c736f9c8d0c9e5e113bc216bfafc4c2c9865ef..01a5e2eaddef71b7e1f18eb7a4ad4804c5490577 100644 --- a/app/ui/legacy/src/main/res/values-lt/strings.xml +++ b/app/ui/legacy/src/main/res/values-lt/strings.xml @@ -27,8 +27,6 @@ Sužinokite, kas naujo šioje versijoje - - Welcome to Mail - \nIšsiųsta iš mano Android įrenginio naudojant Mail. Atleiskite už trumpumą. @@ -198,7 +196,6 @@ Bcc: Nepavyko išsaugoti priedo. - "kam " + @@ -297,9 +294,6 @@ Patvirtinama tapatybė\u2026 Gaunami paskyros nustatymai\u2026 Atšaukiama\u2026 - Beveik baigėte! - Pavadinkite šią paskyrą (nebūtina): - Įrašykite savo vardą (rodoma siunčiamuose pranešimuose): Paskyros tipas Kokios rūšies ši paskyra? POP3 @@ -350,7 +344,6 @@ Tapatumo nustatymas \"%1$s = %2$s\" netinka su \"%3$s = %4$s\" Netinkamai nustatyta: %s - Paskyros parinktys Aplanko tikrinimo dažnis Niekada Kas 15 minučių @@ -370,7 +363,6 @@ Kas 36 minutes Kas 48 minutes Kas 60 minučių - Pranešti apie naujus laiškus Rodyti laiškų 10 laiškų 25 laiškai @@ -1018,6 +1010,8 @@ Norėdami nustatyti automatinį šifravimą naujajame prietaise, vadovaukitės i Šią žinutę galite pasilikti ir naudoti kaip atsarginę slaptojo rakto kopiją. Jei norite tai padaryti, turėtumėte užsirašyti slaptažodį ir saugiai jį laikyti. + + kam %s Siunčiant laišką įvyko klaida. Patikrinkite tinklo ryšį ir siunčiamo serverio konfigūraciją. Įj. Išj. @@ -1090,4 +1084,5 @@ Norėdami nustatyti automatinį šifravimą naujajame prietaise, vadovaukitės i Vardas ir el. pašto adresas + diff --git a/app/ui/legacy/src/main/res/values-lv/strings.xml b/app/ui/legacy/src/main/res/values-lv/strings.xml index 41625da506f7c15e5d6e5fe0bc2f2eb815cb21e5..894341d3783c1ddd78f36a8c104d3448e9d3ac21 100644 --- a/app/ui/legacy/src/main/res/values-lv/strings.xml +++ b/app/ui/legacy/src/main/res/values-lv/strings.xml @@ -28,9 +28,6 @@ Uzzināt, kas jauns šajā versijā Skatīt - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -201,8 +198,6 @@ pat %d vairāk Cc: Neredzamais: Nevar saglabāt pielikumu. - - "kam " + @@ -309,9 +304,6 @@ pat %d vairāk Pārbauda identifikāciju\u2026 Saņem konta iestatījumus\u2026 Atceļ\u2026 - Gandrīz viss pabeigts! - Nosaukt kontu (nav obligāti): - Ierakstiet savu vārdu (attēlošanai izejošajās vēstulēs): Konta veids Kāda veida konts tas ir? POP3 @@ -363,7 +355,6 @@ pat %d vairāk Identitātes pārbaude \"%1$s = %2$s\" nav derīgs ar \"%3$s = %4$s\" Nederīgi iestatījumi: %s - Konta iespējas Mapes pārbaudes biežums Nekad Katras 15 minūtes @@ -383,7 +374,6 @@ pat %d vairāk Katras 36 minūtes Katras 48 minūtes Katras 60 minūtes - Paziņot, kad saņemts jauns pasts Vēstuļu skaits, ko parādīt 10 vēstules 25 vēstules @@ -1027,6 +1017,8 @@ Lai jaunajā ierīcē iestatītu automātisko šifrēšanu, lūdzu sekojiet nor Šo vēstuli var saglabāt un izmantot kā rezerves kopiju šifra atslēgai. Ja vēlaties to darīt, pierakstiet paroli un nolieciet drošā vietā. + + kam %s Kļūdas dēl neizdevās nosūtīt vēstuli. Lūdzu, pārbaudiet tīkla savienojumu un izejošā servera iestatījumus! Ieslēgt Izslēgt @@ -1103,4 +1095,5 @@ Lai jaunajā ierīcē iestatītu automātisko šifrēšanu, lūdzu sekojiet nor Vārds un e-pasta adrese + diff --git a/app/ui/legacy/src/main/res/values-ml/strings.xml b/app/ui/legacy/src/main/res/values-ml/strings.xml index 0a7284c4dd8996c59d1d665c77c12e87b0da4e8c..162e2a6b1194feaeb783a0ef81d8706f31a7e062 100644 --- a/app/ui/legacy/src/main/res/values-ml/strings.xml +++ b/app/ui/legacy/src/main/res/values-ml/strings.xml @@ -25,9 +25,6 @@ ഈ റിലീസിൽ പുതിയത് എന്താണെന്ന് കണ്ടെത്തുക - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -285,9 +282,6 @@ പ്രാമാണീകരിക്കുന്നു\u2026 അക്കൗണ്ട് ക്രമീകരണങ്ങൾ ലഭ്യമാക്കുന്നു\u2026 റദ്ദാക്കുന്നു\u2026 - നിങ്ങൾ ഏകദേശം പൂർത്തിയാക്കി! - ഈ അക്കൗണ്ടിന് ഒരു പേര് നൽകുക (ഐച്ഛികം): - നിങ്ങളുടെ പേര് ടൈപ്പുചെയ്യുക (ഔട്ട്‌ഗോയിംഗ് സന്ദേശങ്ങളിൽ പ്രദർശിപ്പിക്കുന്നു): അക്കൗണ്ട് തരം ഇത് ഏത് തരത്തിലുള്ള അക്കൗണ്ടാണ്? POP3 @@ -336,7 +330,6 @@ പ്രമാണീകരണം \"%1$s = %2$s\" \"%3$s = %4$s\" ഉപയോഗിച്ച് സാധുവല്ല അസാധുവായ സജ്ജീകരണം: %s - അക്കൗണ്ട് ഓപ്ഷനുകൾ ഫോൾഡർ വോട്ടെടുപ്പ് ആവൃത്തി ഒരിക്കലും ഓരോ 15 മിനിറ്റിലും @@ -356,7 +349,6 @@ ഓരോ 36 മിനിറ്റിലും ഓരോ 48 മിനിറ്റിലും ഓരോ 60 മിനിറ്റിലും - മെയിൽ വരുമ്പോൾ എന്നെ അറിയിക്കുക പ്രദർശിപ്പിക്കേണ്ട സന്ദേശങ്ങളുടെ എണ്ണം 10 സന്ദേശങ്ങൾ 25 സന്ദേശങ്ങൾ @@ -1020,4 +1012,5 @@ ഇമെയിൽ വിലാസം + diff --git a/app/ui/legacy/src/main/res/values-nb/strings.xml b/app/ui/legacy/src/main/res/values-nb/strings.xml index 38882888561839785752e0f7261c1b5424c43a78..d7762b194ef9c17e808fd45c4b47c1764673ee81 100644 --- a/app/ui/legacy/src/main/res/values-nb/strings.xml +++ b/app/ui/legacy/src/main/res/values-nb/strings.xml @@ -20,9 +20,6 @@ Hva er nytt? - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -264,9 +261,6 @@ til %d flere Autentiserer\u2026 Henter kontoinnstillinger\u2026 Avbryter\u2026 - Du er nesten ferdig! - Gi denne kontoen et navn (valgfritt): - Skriv ditt navn (vises i utgående meldinger): Kontotype Hvilken type konto er dette? POP3 @@ -315,7 +309,6 @@ til %d flere Autentisering \"%1$s = %2$s\" er ikke gyldig med \"%3$s = %4$s\" Ugyldig oppsett: %s - Kontoinnstillinger Oppdateringsfrekvens for mappen Aldri Hvert kvarter @@ -335,7 +328,6 @@ til %d flere Hvert 36. minutt Hvert 48. minutt Hver time - Varsle meg når e-post ankommer Antall meldinger som skal vises 10 meldinger 25 meldinger @@ -956,4 +948,5 @@ til %d flere E-postadresse + diff --git a/app/ui/legacy/src/main/res/values-nl/strings.xml b/app/ui/legacy/src/main/res/values-nl/strings.xml index d29693b4e24d3dde915522f34adc8d5ff10b462b..d12e4391b584335806673b926c5012419a68011c 100644 --- a/app/ui/legacy/src/main/res/values-nl/strings.xml +++ b/app/ui/legacy/src/main/res/values-nl/strings.xml @@ -23,8 +23,6 @@ Wat is er nieuw Laat veranderingen zien als de app recent is bijgewerkt Ontdek wat er nieuw is in deze versie - - Welkom bij Mail -- Verstuurd met /e/OS Mail. @@ -250,9 +248,6 @@ Authenticatie\u2026 Accountinstellingen worden opgehaald\u2026 Annuleren\u2026 - Bijna klaar! - Geef dit account een naam (optioneel): - Typ je naam (zichtbaar bij uitgaande berichten): Accounttype Welk type account is dit? POP3 @@ -303,7 +298,6 @@ Authenticatietype \"%1$s = %2$s\" is niet geldig met \"%3$s = %4$s\" Ongeldige setup: %s - Accountopties Map-peiling-frequentie Nooit Elke 15 minuten @@ -323,7 +317,6 @@ Elke 36 minuten Elke 48 minuten Elke 60 minuten - Waarschuw me wanneer nieuwe e-mail binnenkomt Aantal berichten om te laten zien 10 berichten 25 berichten @@ -988,7 +981,6 @@ U kunt dit bericht bewaren als backup voor uw geheime sleutel. Als u dit wilt do \n \nTik om de notificatie instellingen te openen. Notificatie fout - Mail is de standaard email app voor /e/OS Hulp krijgen Gebruikshandleiding Geen @@ -1066,8 +1058,6 @@ U kunt dit bericht bewaren als backup voor uw geheime sleutel. Als u dit wilt do Toon externe afbeeldingen mzelf + - "aan " - Stel een nieuwe account in of importeer jouw email account vanuit een vorig configuratie bestand. Standaard Compact Ontspannend @@ -1077,4 +1067,7 @@ U kunt dit bericht bewaren als backup voor uw geheime sleutel. Als u dit wilt do Bekijk Verstuur cliënt-ID + Account verwijderen… + + ongelezen, %s diff --git a/app/ui/legacy/src/main/res/values-pl/strings.xml b/app/ui/legacy/src/main/res/values-pl/strings.xml index 11cb8a5ca03b965abaed793fe5ce31c8f3989ca3..135466d44bfee3d9152bbc9b5cb82e20f64ff41e 100644 --- a/app/ui/legacy/src/main/res/values-pl/strings.xml +++ b/app/ui/legacy/src/main/res/values-pl/strings.xml @@ -28,9 +28,6 @@ Dowiedz się, co nowego w tej wersji Wyświetl - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -198,8 +195,6 @@ DW: UDW: Nie można zapisać załącznika. - - "do " + @@ -306,9 +301,6 @@ Uwierzytelnianie… Pobieranie ustawień konta… Anulowanie… - Prawie gotowe! - Wpisz nazwę (opcjonalną) tego konta: - Twoje imię i nazwisko (pojawi się w wysyłanych wiadomościach): Rodzaj konta Jakiego typu serwer obsługuje to konto? POP3 @@ -360,7 +352,6 @@ Rodzaj uwierzytelnienia \"%1$s = %2$s\" nie jest ważny z \"%3$s = %4$s\" Nieprawidłowe ustawienia: %s - Opcje konta Pobieranie wiadomości Nigdy Co 15 minut @@ -380,7 +371,6 @@ Co 36 minut Co 48 minut Co 60 minut - Powiadamiaj o nowej poczcie Wyświetlaj 10 wiadomości 25 wiadomości @@ -1029,6 +1019,8 @@ Aby skonfigurować Autocrypt na nowym urządzeniu, należy podążać za wyświe Tą wiadomość można zachować i użyć w formie kopii zapasowej twojego klucza prywatnego, aby to uczynić należy zachować hasło i przechowywać je w bezpiecznym miejscu. + + do %s Podczas wysyłania wiadomości wystąpił błąd. Sprawdź połączenie sieciowe oraz adres i konfigurację serwera. Włącz Wyłącz @@ -1105,4 +1097,7 @@ Tą wiadomość można zachować i użyć w formie kopii zapasowej twojego klucz Nazwa oraz adres e-mail + Usuwanie konta… + + nieprzeczytane, %s diff --git a/app/ui/legacy/src/main/res/values-pt-rBR/strings.xml b/app/ui/legacy/src/main/res/values-pt-rBR/strings.xml index 21bbb4ed422357d5fdec0cdbd14fc9ac78f068a8..2b8f58eb7474d8153310098d6a0533467406f2b8 100644 --- a/app/ui/legacy/src/main/res/values-pt-rBR/strings.xml +++ b/app/ui/legacy/src/main/res/values-pt-rBR/strings.xml @@ -28,9 +28,6 @@ Descubra as novidades dessa versão Ver - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -200,8 +197,8 @@ Cc: Cco: Não foi possível salvar o anexo. - - "para " + + para %s + @@ -309,9 +306,6 @@ Autenticando\u2026 Buscando as configurações da conta\u2026 Cancelando\u2026 - Quase terminado! - Dê um nome a esta conta (opcional): - Digite seu nome (será exibido nas mensagens enviadas): Tipo de conta Esta conta é de que tipo? POP3 @@ -363,7 +357,6 @@ Autenticação \"%1$s = %2$s\" não é válido com \"%3$s = %4$s\" Configuração inválida: %s - Opções da conta Frequência de verificação da pasta Nunca A cada 15 minutos @@ -383,7 +376,6 @@ A cada 36 minutos A cada 48 minutos A cada 60 minutos - Notificar quando chegarem novas mensagens Número de mensagens a serem exibidas 10 mensagens 25 mensagens @@ -1103,4 +1095,7 @@ Você pode guardar esta mensagem e usá-la como um backup da sua chave secreta. Nome e endereço de e-mail + Removendo a conta… + + não lidas, 1 %s diff --git a/app/ui/legacy/src/main/res/values-pt-rPT/strings.xml b/app/ui/legacy/src/main/res/values-pt-rPT/strings.xml index 5928d6c5845bb52a8b5d6c494a68ef5516ae5db2..129f34e70fd7547d80965e3689fce10ea4618130 100644 --- a/app/ui/legacy/src/main/res/values-pt-rPT/strings.xml +++ b/app/ui/legacy/src/main/res/values-pt-rPT/strings.xml @@ -28,9 +28,6 @@ Descubra o que há de novo nesta versão Ver - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -201,8 +198,8 @@ Cc: Bcc: Não foi possível guardar o anexo - - "para " + + para %s + @@ -310,9 +307,6 @@ A autenticar\u2026 A obter configurações da conta\u2026 A cancelar\u2026 - Está quase terminado! - Dê um nome a esta conta (opcional): - Introduza o seu nome (é exibido nas mensagens enviadas): Tipo de conta Que tipo de conta é esta? POP3 @@ -364,7 +358,6 @@ Autenticação \"%1$s = %2$s\" não é válido com \"%3$s = %4$s\" Configuração inválida: %s - Opções da conta Frequência de verificação de pastas Nunca A cada 15 minutos @@ -384,7 +377,6 @@ A cada 36 minutos A cada 48 minutos A cada 60 minutos - Notificar-me na chegada de email Número de mensagens para exibição 10 mensagens 25 mensagens @@ -1104,4 +1096,5 @@ Pode manter esta mensagem e usá-la como uma cópia de segurança para a sua cha Nome e endereço de email + diff --git a/app/ui/legacy/src/main/res/values-ro/strings.xml b/app/ui/legacy/src/main/res/values-ro/strings.xml index 10ccf2d07a7e62a3e28ddd07df015281eab35fe5..ba9d3cfd9881b0b488478678e64011e7d1459812 100644 --- a/app/ui/legacy/src/main/res/values-ro/strings.xml +++ b/app/ui/legacy/src/main/res/values-ro/strings.xml @@ -27,9 +27,6 @@ Aflați ce este nou în această versiune - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -200,8 +197,6 @@ cel mult încă %d Cc: Bcc: Nu se poate salva atașamentul. - - "la " + @@ -305,9 +300,6 @@ cel mult încă %d Autentifică\u2026 Preluarea setărilor contului\u2026 Se întrerupe\u2026 - Ești aproape gata! - Dă acestui cont un nume (opțional): - Tastează numele tău (cum va fi afișat pe mesajele trimise): Tipul contului Ce fel de cont este acesta? POP3 @@ -358,7 +350,6 @@ cel mult încă %d Autentificare \"%1$s = %2$s\" nu este valabil cu \"%3$s = %4$s Configurare greşită : %s - Opţiuni cont Frecvență interogare dosar Niciodată La fiecare 15 minute @@ -378,7 +369,6 @@ cel mult încă %d La fiecare 36 de minute La fiecare 48 de minute La fiecare 60 de minute - Notifică-mă când a venit mail Număr de mesaje afișate 10 mesaje 25 mesaje @@ -1024,6 +1014,14 @@ Pentru a seta noul dispozitiv cu Autocript, te rog urmărește indicațiile afi Poți păstra acest mesaj și să îl folosești drept copie de siguranță a cheii tale secrete. Dacă vrei să faci asta, va trebui să-ți notezi o copie a parolei pe care să o păstrezi undeva în siguranță. + + Vizualizare + + la %s + + Densitate + Compact + Relaxat A apărut o eroare la trimiterea mesajului. Te rog verifică conexiunea la rețea și setările serverului de trimitere. Pornit Oprit @@ -1098,5 +1096,8 @@ Poți păstra acest mesaj și să îl folosești drept copie de siguranță a ch Adresa e-mail Numele și adresa de e-mail - + + Se elimină contul… + + necitit, %s diff --git a/app/ui/legacy/src/main/res/values-ru/strings.xml b/app/ui/legacy/src/main/res/values-ru/strings.xml index fc412182b5e9599efbdf31edffa81ea74925bc54..cd7743fa9cb2f5cf238e22fef3fd201ce9babf17 100644 --- a/app/ui/legacy/src/main/res/values-ru/strings.xml +++ b/app/ui/legacy/src/main/res/values-ru/strings.xml @@ -25,9 +25,6 @@ Что нового Показывать последние изменения после обновления приложения Узнайте, что нового в этом выпуске - - Добро пожаловать - Mail — почтовый клиент по умолчанию для /e/OS -- Отправлено через /e/OS Mail. @@ -292,9 +289,6 @@ Аутентификация\u2026 Получение настроек\u2026 Отмена\u2026 - Всё почти готово! - Название учётной записи (необязательно): - Ваше имя (видно адресату в сообщениях): Тип учётной записи Что это за аккаунт\? POP3 @@ -345,7 +339,6 @@ Аутентификация \"%1$s = %2$s\" недействителен для \"%3$s = %4$s\" Неверная настройка: %s - Настройки учётной записи Интервал проверки Вручную Каждые 15 минут @@ -365,7 +358,6 @@ 36 минут 48 минут 1 час - Уведомлять о новой почте Загружать сообщений 10 сообщений 25 сообщений @@ -1102,8 +1094,6 @@ Показать удаленные изображения мне + - "в " - Создайте новую учетную запись или импортируйте учетные записи электронной почты из предыдущего файла настроек. Показать @@ -1117,4 +1107,5 @@ Написать письмо + diff --git a/app/ui/legacy/src/main/res/values-sk/strings.xml b/app/ui/legacy/src/main/res/values-sk/strings.xml index 305bc613ec527c13b4a6255639fa5f29fd835799..2270642b52edc34515f169c358c22472a55cea80 100644 --- a/app/ui/legacy/src/main/res/values-sk/strings.xml +++ b/app/ui/legacy/src/main/res/values-sk/strings.xml @@ -22,9 +22,6 @@ Verzia %s - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -269,9 +266,6 @@ Overovanie\u2026 Načítavanie nastavení účtu\u2026 Rušenie\u2026 - Takmer hotovo! - Pomenovať tento účet (voliteľné): - Zadajte vaše meno (zobrazí sa v odchádzajúcich správach): Typ účtu Typ účtu POP3 @@ -320,7 +314,6 @@ Overenie \"%1$s = %2$s\" nie je platné s \"%3$s = %4$s\" Neplatné nastavenie: %s - Možnosti účtu Frekvencia synchronizácie priečinkov Nikdy Každých 15 minút @@ -340,7 +333,6 @@ Každých 36 minút Každých 48 minút Každých 60 minút - Upozorniť ma, keď príde nová správa Počet správ na zobrazenie 10 správ 25 správ @@ -900,4 +892,5 @@ E-mailová adresa + diff --git a/app/ui/legacy/src/main/res/values-sl/strings.xml b/app/ui/legacy/src/main/res/values-sl/strings.xml index 56c77da0db9d3092435f8538c6c245a283e551cf..23eb740255fba1d74399a61003cfa6065958312d 100644 --- a/app/ui/legacy/src/main/res/values-sl/strings.xml +++ b/app/ui/legacy/src/main/res/values-sl/strings.xml @@ -27,9 +27,6 @@ Kaj je novega v tej izdaji - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -203,7 +200,6 @@ dodatnih %d sporočil Skp: Priloge ni mogoče shraniti. - "za " + @@ -307,9 +303,6 @@ dodatnih %d sporočil Overjanje \u2026 Pridobivanje nastavitev računa \u2026 Poteka preklic \u2026 - Račun je že skoraj pripravljen! - Prikazano ime računa (izbirno): - Ime pošiljatelja (prikazano v vseh odhodnih sporočilih): Vrsta računa Kakšne vrste je račun? POP3 @@ -360,7 +353,6 @@ dodatnih %d sporočil Overjanje \"%1$s = %2$s\" *ni veljavno* z \"%3$s = %4$s\" Neveljavna nastavitev: %s - Možnosti računa Pogostost izpraševanja map Ročno preverjanje Vsakih 15 minut @@ -380,7 +372,6 @@ dodatnih %d sporočil Vsakih 36 minut Vsakih 48 minut Vsakih 60 minut - Obveščaj ob prispetju nove pošte Število prikazanih sporočil 10 sporočil 25 sporočil @@ -1029,6 +1020,8 @@ Za nastavitev nove naprave za šifriranje AutoCrypt, sledite navodilom, prikazan Sporočilo lahko shranite in ga uporabite kot varno kopijo šifrirnega ključa. Če boste to storili, si geslo zapišite in ga varno shranite. + + za %s Prišlo je do napake med pošiljanjem sporočila. Preverite omrežne nastavitve in nastavitve odhodnega strežnika. Vključi Izključi @@ -1104,4 +1097,5 @@ Sporočilo lahko shranite in ga uporabite kot varno kopijo šifrirnega ključa. Ime in e-poštni naslov + diff --git a/app/ui/legacy/src/main/res/values-sq/strings.xml b/app/ui/legacy/src/main/res/values-sq/strings.xml index 7f359058823f4767831bdd7f01cfb361932b3ca5..1eba3f2e403e40366e4b3789c3c27281d2b6624d 100644 --- a/app/ui/legacy/src/main/res/values-sq/strings.xml +++ b/app/ui/legacy/src/main/res/values-sq/strings.xml @@ -28,9 +28,6 @@ Mësoni ç\’ka të re në këtë hedhje në qarkullim Shiheni - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -200,7 +197,6 @@ Bcc: S\’arrihet të ruhet bashkëngjitje - "për " + @@ -306,9 +302,6 @@ Po kryhet mirëfilltësimi\u2026 Po sillen rregullime llogarie\u2026 Po anulohet\u2026 - Thuajse mbaruat! - Jepini një emër kësaj llogarie (në daçi): - Shtypni emrin tuaj (shfaqet në mesazhet e dërguara): Lloj llogarie Ç\’lloj llogarie është kjo? POP3 @@ -360,7 +353,6 @@ Mirëfilltësim \“%1$s = %2$s\” s\’është i vlefshëm me \“%3$s = %4$s\” Rregullim i pavefshëm: %s - Mundësi llogarie Shpeshti vjeljeje dosjeje Kurrë Çdo 15 minuta @@ -380,7 +372,6 @@ Çdo 36 minuta Çdo 48 minuta Çdo 60 minuta - Njoftomë kur mbërrin postë Numër mesazhesh për shfaqje 10 mesazhe 25 mesazhe @@ -1095,4 +1086,8 @@ Mund ta mbani këtë mesazh dhe ta përdorni si një kopjeruatje të kyçit tuaj Emër dhe adresë email + + Po hiqet llogaria… + + të palexuar, %s diff --git a/app/ui/legacy/src/main/res/values-sr/strings.xml b/app/ui/legacy/src/main/res/values-sr/strings.xml index cb655cc58657dbbc34d7020d3daf092f28d103bb..767db0cb641bd8b3f56916882511a9abc3b41595 100644 --- a/app/ui/legacy/src/main/res/values-sr/strings.xml +++ b/app/ui/legacy/src/main/res/values-sr/strings.xml @@ -22,9 +22,6 @@ Верзија %s - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -268,9 +265,6 @@ Аутентификујем\u2026 Добављам поставке налога\u2026 Одустајем\u2026 - Скоро сте завршили! - Именујте овај налог (необавезно): - Унесите своје име (приказано на одлазним порукама): Тип налога Какав је ово налог? ПОП3 @@ -319,7 +313,6 @@ Аутентификација %1$s = %2$s“ није исправно са „%3$s = %4$s Неисправна постава: %s - Опције налога Проверавање фасцикли никад на 15 минута @@ -339,7 +332,6 @@ на 36 минута на 48 минута на 60 минута - Обавести ме кад стигне пошта Број порука за приказ 10 порука 25 порука diff --git a/app/ui/legacy/src/main/res/values-sv/strings.xml b/app/ui/legacy/src/main/res/values-sv/strings.xml index 66899e828afd22fe3e24504152eea39e35d5c9aa..c0f92d81719b037104e3b91d3801cb1dd458d1a6 100644 --- a/app/ui/legacy/src/main/res/values-sv/strings.xml +++ b/app/ui/legacy/src/main/res/values-sv/strings.xml @@ -25,9 +25,6 @@ Vad är nytt Visa senaste ändringar när appen uppdaterades Ta reda på vad som är nytt i denna utgåva - - Välkommen till E-post - E-post är standardappen för e-post i /e/OS -- Skickat från /e/OS E-post. @@ -294,9 +291,6 @@ Autentiserar\u2026 Hämtar kontoinställningar\u2026 Avbryter\u2026 - Du är nästan klar! - Ge kontot ett namn (valfritt): - Ange ditt namn (visas på utgående e-post): Kontotyp Vilken typ av konto är detta? POP3 @@ -312,7 +306,6 @@ Klientcertifikat POP3-server IMAP-server - Exchange-server Port Säkerhetstyp Autentiseringstyp @@ -338,9 +331,6 @@ Skräppostmapp Visa endast prenumererade mappar Expandera automatiskt mapp - Sökväg för Outlook Web App - Sökväg för autentisering - Alias för brevlåda Inställningar för utgående server SMTP-server Port @@ -351,7 +341,6 @@ Autentiseringstyp \"%1$s = %2$s\" är inte giltigt med \"%3$s = %4$s\" Ogiltig konfiguration: %s - Kontoinställningar Frekvens för mappkontroll Aldrig Var 15:e minut @@ -371,7 +360,6 @@ Var 36:e minut Var 48:e minut Var 60:e minut - Meddela mig vid ankomst av e-post Antal meddelanden att visa 10 meddelanden 25 meddelanden @@ -1008,6 +996,8 @@ För att ställa in din nya enhet för Autocrypt, följ instruktionerna som bör Du kan behålla detta meddelande och använda det som en säkerhetskopia för din hemliga nyckel. Om du vill göra det ska du skriva ner lösenordet och lagra det säkert. + + till %s Ett fel uppstod under tiden meddelandet skickades. Kontrollera din nätverksanslutning och utgående serverkonfiguration. Av @@ -1048,7 +1038,6 @@ Du kan behålla detta meddelande och använda det som en säkerhetskopia för di Flytta… Alla meddelanden har lästs in - Ställ in ett nytt konto eller importera ditt e-postkonto från en tidigare inställningsfil. FORTSÄTT AVBRYT + @@ -1082,7 +1071,6 @@ Du kan behålla detta meddelande och använda det som en säkerhetskopia för di Namn och e-postadress Upphovsmän Visa - "till " Kompakt Ljud vid skickad e-post Var 5 minut @@ -1107,5 +1095,6 @@ Du kan behålla detta meddelande och använda det som en säkerhetskopia för di \nFör att skicka ett krypterat e-postmeddelande krävs ett nyckelpar så att data krypterad på avsändarens enhet kan avkrypteras av den avsedda mottagaren. Till exempel behöver du den publika nyckeln från den person du skickar till och samma gäller det omvända. Tar bort konto … + olästa, %s - \ No newline at end of file + diff --git a/app/ui/legacy/src/main/res/values-tr/strings.xml b/app/ui/legacy/src/main/res/values-tr/strings.xml index b72fa84c3b4d5fa30e2af6a7713961c7f0af41a3..8625a05816b4c4db7691cd73b111bbf841a81721 100644 --- a/app/ui/legacy/src/main/res/values-tr/strings.xml +++ b/app/ui/legacy/src/main/res/values-tr/strings.xml @@ -27,9 +27,6 @@ Bu sürümdeki yenilikleri öğrenin - - Mail Posta\'ya Hoşgeldiniz - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -295,9 +292,6 @@ Kimlik Doğrulaması\u2026 Hesap ayarları alınıyor\u2026 İptal ediliyor\u2026 - Hemen hemen tamam! - Bu hesaba bir isim verin (isteğe bağlı): - İsminizi yazın (Giden mesajlarda görüntülenir): Hesap türü Bu ne tür bir hesaptır? POP3 @@ -347,7 +341,6 @@ Kimlik Doğrulama \"%1$s = %2$s\" bununla uyuşmuyor \"%3$s = %4$s\" Geçersiz kurulum: %s - Hesap seçenekleri Klasör bilgi toplama sıklığı Asla Her 15 dakikada bir @@ -367,7 +360,6 @@ Her 36 dakikada bir Her 48 dakikada bir Her 60 dakikada bir - Posta ulaştığında beni uyar Görüntülenecek ileti sayısı 10 ileti 25 ileti diff --git a/app/ui/legacy/src/main/res/values-uk/strings.xml b/app/ui/legacy/src/main/res/values-uk/strings.xml index 998cdc2ff090114c3c19c65f55bd705c77faf1ed..54687ca37e71d32a4e3ca8d9f7cc6615654ba56a 100644 --- a/app/ui/legacy/src/main/res/values-uk/strings.xml +++ b/app/ui/legacy/src/main/res/values-uk/strings.xml @@ -27,9 +27,6 @@ Дізнатися, що нового у цьому релізі - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -303,9 +300,6 @@ Автентифікація\u2026 Отримання налаштувань облікового запису\u2026 Скасування\u2026 - Майже готово! - Дайте ім’я цьому обліковому запису (необов’язково): - Введіть ваше ім’я (відображається у вихідних повідомленнях): Тип облікового запису Виберіть тип поштової скриньки POP3 @@ -356,7 +350,6 @@ Метод автентифікації \"%1$s = %2$s\" недійсне з \"%3$s = %4$s\" Неправильне налаштування: %s - Параметри облікового запису Частота опитування тек Ніколи Кожні 15 хвилин @@ -376,7 +369,6 @@ Кожні 36 хвилин Кожні 48 хвилин Кожні 60 хвилин - Сповіщати мене про отримання нової пошти Кількість відображуваних повідомлень 10 повідомлень 25 повідомлень @@ -1024,10 +1016,11 @@ Ви можете зберегти це повідомлення і використовувати його як резервну копію вашого секретного ключа. Якщо ви хочете це зробити, запишіть пароль і збережіть його у надійному місці. + + для %s Показати - "для " + @@ -1077,7 +1070,7 @@ Спам - Перемістити... + Перемістити… @@ -1126,4 +1119,8 @@ Ім\'я та адреса ел. пошти + + Видалення облікового запису… + + Непрочитані, %s diff --git a/app/ui/legacy/src/main/res/values-v26/drawables.xml b/app/ui/legacy/src/main/res/values-v26/drawables.xml deleted file mode 100644 index ecf5f57c446638efe6f16fc8acf1d229cf6085f3..0000000000000000000000000000000000000000 --- a/app/ui/legacy/src/main/res/values-v26/drawables.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - @mipmap/ic_e_launcher - diff --git a/app/ui/legacy/src/main/res/values-zh-rCN/strings.xml b/app/ui/legacy/src/main/res/values-zh-rCN/strings.xml index 8e88f1545ad55674d14e50238ac77ad8c4273e27..207db126428359195884dd8ec9aa15a361d77698 100644 --- a/app/ui/legacy/src/main/res/values-zh-rCN/strings.xml +++ b/app/ui/legacy/src/main/res/values-zh-rCN/strings.xml @@ -28,9 +28,6 @@ 了解此版本的新增功能 查看 - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -196,8 +193,8 @@ 抄送: 密送: 无法保存附件。 - - + + %s + @@ -305,9 +302,6 @@ 正在验证用户\u2026 正在获取账户设置\u2026 正在取消\u2026 - 快要完成了! - 为这个账户选择一个名称(可选项): - 输入你的名字(将显示在发出的邮件中): 账户类型 这个账户是什么类型的? POP3 @@ -359,7 +353,6 @@ 身份验证方法 \"%1$s = %2$s\" 对于 \"%3$s = %4$s\" 无效 无效的设置:%s - 账户选项 文件夹检查频率 从不 15 分钟一次 @@ -379,7 +372,6 @@ 36 分钟一次 48 分钟一次 60 分钟一次 - 有新邮件时通知我 邮件显示数量 10 封 25 封 @@ -1089,4 +1081,7 @@ 姓名和电子邮箱地址 + 删除账户中… + + 未读,%s diff --git a/app/ui/legacy/src/main/res/values-zh-rTW/strings.xml b/app/ui/legacy/src/main/res/values-zh-rTW/strings.xml index 1695bd19fb49f0d91429fd8a17088b226e49e64a..b068829e3c5f1d4fa7389356b4656eef31373239 100644 --- a/app/ui/legacy/src/main/res/values-zh-rTW/strings.xml +++ b/app/ui/legacy/src/main/res/values-zh-rTW/strings.xml @@ -28,9 +28,6 @@ 了解此版本的新增功能 檢視 - - Welcome to Mail - Mail is the default mail client for /e/ -- Sent from /e/ Mail. @@ -190,8 +187,8 @@ 副本: 密件副本: 無法存檔附件。 - - + + %s + @@ -300,9 +297,6 @@ 驗證… 正在收取帳號設定… 正在取消… - 快要完成了! - 為這個帳號選擇一個名稱(非必填): - 輸入你的名字(將顯示在發出的郵件中): 帳號類型 這個帳號是什麼類型的? POP3 @@ -354,7 +348,6 @@ 身份驗證方法 %1$s = %2$s」對於「%3$s = %4$s」無效 無效的設定:%s - 帳號選項 信件匣檢查頻率 不要 15 分鐘一次 @@ -374,7 +367,6 @@ 36 分鐘一次 48 分鐘一次 60 分鐘一次 - 有新郵件時通知我 郵件顯示數量 10 封 25 封 @@ -1079,4 +1071,5 @@ 姓名和電子郵件地址 + diff --git a/app/ui/legacy/src/main/res/values/app_logo_colors.xml b/app/ui/legacy/src/main/res/values/app_logo_colors.xml new file mode 100644 index 0000000000000000000000000000000000000000..9642c4fa2f04cb15f61b75bd54ea49eeefbb1990 --- /dev/null +++ b/app/ui/legacy/src/main/res/values/app_logo_colors.xml @@ -0,0 +1,8 @@ + + + #ff1744 + #ff4569 + #d81a3d + + #ffdae1 + diff --git a/app/ui/legacy/src/main/res/values/attrs.xml b/app/ui/legacy/src/main/res/values/attrs.xml index 128f086272ecd1da20ec11e06393fb05455d7bcd..a1b7dd4d1555ce3a8a162fce48d9157202f78505 100644 --- a/app/ui/legacy/src/main/res/values/attrs.xml +++ b/app/ui/legacy/src/main/res/values/attrs.xml @@ -110,7 +110,6 @@ - diff --git a/app/ui/legacy/src/main/res/values/colors.xml b/app/ui/legacy/src/main/res/values/colors.xml index c35ea2f55018befe20550fd94626c16977eb4743..fd221c0ef1a1da9580137844567e368e1506ec5e 100644 --- a/app/ui/legacy/src/main/res/values/colors.xml +++ b/app/ui/legacy/src/main/res/values/colors.xml @@ -15,8 +15,6 @@ --> - #FFDAE1 - #444444 #888 diff --git a/app/ui/legacy/src/main/res/values/drawables.xml b/app/ui/legacy/src/main/res/values/drawables.xml index 1448b53a1873f6ba8fbc99756229f3e91a4a8b27..f5a91e6d534576a0f4f70adc79ac1e5a9162cd79 100644 --- a/app/ui/legacy/src/main/res/values/drawables.xml +++ b/app/ui/legacy/src/main/res/values/drawables.xml @@ -1,4 +1,4 @@ - @mipmap/icon_e + @drawable/ic_app_logo diff --git a/app/ui/legacy/src/main/res/values/strings.xml b/app/ui/legacy/src/main/res/values/strings.xml index 2e4cb4ae547265dba391edc00d9961f065f9ee77..bfa7fa35ccc48b8832fe145f53a630aec827c634 100644 --- a/app/ui/legacy/src/main/res/values/strings.xml +++ b/app/ui/legacy/src/main/res/values/strings.xml @@ -30,10 +30,6 @@ View - - Welcome to Mail - Set up a new account or import your email accounts from a previous settings file. - Mail is the default mail client for /e/OS -- Sent from /e/OS Mail. @@ -205,8 +201,8 @@ Bcc: Unable to save attachment. - - "to " + + to %s + @@ -321,9 +317,7 @@ Authenticating\u2026 Fetching account settings\u2026 Canceling\u2026 - You\'re almost done! - Give this account a name (optional): - Type your name (displays on outgoing messages): + Account type What kind of account is this? POP3 @@ -377,7 +371,8 @@ Authentication \"%1$s = %2$s\" is not valid with \"%3$s = %4$s\" Invalid setup: %s - Account options + + Folder poll frequency Never Every 5 minutes @@ -398,7 +393,8 @@ Every 36 minutes Every 48 minutes Every 60 minutes - Notify me when mail arrives + + Number of messages to display 10 messages 25 messages diff --git a/app/ui/legacy/src/main/res/values/styles.xml b/app/ui/legacy/src/main/res/values/styles.xml index 2076e406c0e852668373fb4a42adc9e4b09d3ac3..5461dbb512562b6f1b159155e26cea11e570d105 100644 --- a/app/ui/legacy/src/main/res/values/styles.xml +++ b/app/ui/legacy/src/main/res/values/styles.xml @@ -58,19 +58,17 @@ + + + + + + + + + + + + + + + + + +