From 853c07e8f212cc05fc1462ba03e3caf819c43fbc Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 4 Aug 2022 17:40:15 +0200 Subject: [PATCH 01/38] Prepare for version 6.301 --- app/k9mail/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/k9mail/build.gradle b/app/k9mail/build.gradle index ca0ee46377..e4cf021699 100644 --- a/app/k9mail/build.gradle +++ b/app/k9mail/build.gradle @@ -48,7 +48,7 @@ android { testApplicationId "com.fsck.k9.tests" versionCode 33000 - versionName '6.300' + versionName '6.301-SNAPSHOT' // Keep in sync with the resource string array 'supported_languages' resConfigs "in", "br", "ca", "cs", "cy", "da", "de", "et", "en", "en_GB", "es", "eo", "eu", "fr", "gd", "gl", -- GitLab From 6ca6c32c911af8ef076d39f43daafe254ecb412d Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 12:01:18 +0200 Subject: [PATCH 02/38] Clear `folder_extra_values` when using "clear local messages" --- app/core/src/main/java/com/fsck/k9/mailstore/LocalFolder.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/core/src/main/java/com/fsck/k9/mailstore/LocalFolder.java b/app/core/src/main/java/com/fsck/k9/mailstore/LocalFolder.java index 72441da924..406b29bcf1 100644 --- a/app/core/src/main/java/com/fsck/k9/mailstore/LocalFolder.java +++ b/app/core/src/main/java/com/fsck/k9/mailstore/LocalFolder.java @@ -925,6 +925,7 @@ public class LocalFolder { db.execSQL("DELETE FROM threads WHERE message_id IN " + "(SELECT id FROM messages WHERE folder_id = ?)", folderIdArg); db.execSQL("DELETE FROM messages WHERE folder_id = ?", folderIdArg); + db.execSQL("DELETE FROM folder_extra_values WHERE folder_id = ?", folderIdArg); setMoreMessages(MoreMessages.UNKNOWN); resetLastChecked(db); -- GitLab From bf41af8cae15dae86c1c41183e248b857287ae81 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 13:52:10 +0200 Subject: [PATCH 03/38] Fix crash in `MessageViewContainerFragment.onPendingIntentResult()` `onPendingIntentResult()` is called before the fragment is in the RESUMED state. This lead to an exception in the `messageViewFragment` property getter when it was checking the value of `isResumed`. --- .../messageview/MessageViewContainerFragment.kt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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 6c4e79a388..ee83695a91 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 @@ -44,13 +44,17 @@ class MessageViewContainerFragment : Fragment() { private val messageViewFragment: MessageViewFragment get() { check(isResumed) - val itemId = adapter.getItemId(messageReference) - - // ViewPager2/FragmentStateAdapter don't provide an easy way to get hold of the Fragment for the active - // page. So we're using an implementation detail (the fragment tag) to find the fragment. - return childFragmentManager.findFragmentByTag("f$itemId") as MessageViewFragment + return findMessageViewFragment() } + private fun findMessageViewFragment(): MessageViewFragment { + val itemId = adapter.getItemId(messageReference) + + // ViewPager2/FragmentStateAdapter don't provide an easy way to get hold of the Fragment for the active + // page. So we're using an implementation detail (the fragment tag) to find the fragment. + return childFragmentManager.findFragmentByTag("f$itemId") as MessageViewFragment + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -221,7 +225,7 @@ class MessageViewContainerFragment : Fragment() { } fun onPendingIntentResult(requestCode: Int, resultCode: Int, data: Intent?) { - messageViewFragment.onPendingIntentResult(requestCode, resultCode, data) + findMessageViewFragment().onPendingIntentResult(requestCode, resultCode, data) } private class MessageViewContainerAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) { -- GitLab From f2ff826675aa6dd210f10ab0fb09f394ea5a1bb6 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 14:07:11 +0200 Subject: [PATCH 04/38] Update Kotlin to version 1.7.10 --- .../java/com/fsck/k9/ui/base/loader/LoaderStateObserver.kt | 1 + .../legacy/src/main/java/com/fsck/k9/activity/MessageList.kt | 4 ++-- build.gradle | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/ui/base/src/main/java/com/fsck/k9/ui/base/loader/LoaderStateObserver.kt b/app/ui/base/src/main/java/com/fsck/k9/ui/base/loader/LoaderStateObserver.kt index 802aa0523e..5f06f13075 100644 --- a/app/ui/base/src/main/java/com/fsck/k9/ui/base/loader/LoaderStateObserver.kt +++ b/app/ui/base/src/main/java/com/fsck/k9/ui/base/loader/LoaderStateObserver.kt @@ -33,6 +33,7 @@ private class LoaderStateObserver( override fun onChanged(state: LoaderState?) { when (state) { + null -> Unit is LoaderState.Loading -> loadingView.show() is LoaderState.Error -> errorView.show() is LoaderState.Data -> { 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 b9a66cd2cf..cd530fbdd0 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 @@ -124,7 +124,7 @@ open class MessageList : * filtered views, e.g. when only displaying the unread messages in a folder. */ private var noThreading = false - private var displayMode: DisplayMode? = null + private var displayMode: DisplayMode = DisplayMode.MESSAGE_LIST private var messageReference: MessageReference? = null /** @@ -307,7 +307,7 @@ open class MessageList : } if (savedInstanceState != null) { - val savedDisplayMode = savedInstanceState.getSerializable(STATE_DISPLAY_MODE) as DisplayMode? + val savedDisplayMode = savedInstanceState.getSerializable(STATE_DISPLAY_MODE) as DisplayMode if (savedDisplayMode != DisplayMode.SPLIT_VIEW) { displayMode = savedDisplayMode return diff --git a/build.gradle b/build.gradle index e09c158fc3..07e0bb3140 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ buildscript { ] versions = [ - 'kotlin': '1.6.10', + 'kotlin': '1.7.10', 'kotlinCoroutines': '1.6.0', 'jetbrainsAnnotations': '23.0.0', 'androidxAppCompat': '1.4.1', -- GitLab From d26921e99c91760aeeaef813a3ead79f1032e62d Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 4 Aug 2022 20:43:19 +0200 Subject: [PATCH 05/38] Add manifest placeholder to :app:ui:legacy module --- app/ui/legacy/build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/ui/legacy/build.gradle b/app/ui/legacy/build.gradle index ee479bd31b..6295fec063 100644 --- a/app/ui/legacy/build.gradle +++ b/app/ui/legacy/build.gradle @@ -81,9 +81,13 @@ android { debug { def useNewSetupUi = project.hasProperty('k9mail.useNewSetupUi') ? project.property('k9mail.useNewSetupUi') : "false" buildConfigField "boolean", "USE_NEW_SETUP_UI_FOR_ONBOARDING", useNewSetupUi + + manifestPlaceholders = ['appAuthRedirectScheme': 'FIXME: override this in your app project'] } release { buildConfigField "boolean", "USE_NEW_SETUP_UI_FOR_ONBOARDING", "false" + + manifestPlaceholders = ['appAuthRedirectScheme': 'FIXME: override this in your app project'] } } -- GitLab From 2bdc92b6dfc59da523fe609c2d89b05aafa96762 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 16:07:46 +0200 Subject: [PATCH 06/38] Update kotlinx.coroutines to version 1.6.4 --- .../src/main/java/com/fsck/k9/Preferences.kt | 6 +++--- .../com/fsck/k9/helper/CallbackFlowHelper.kt | 16 ---------------- .../com/fsck/k9/mailstore/FolderRepository.kt | 8 ++++---- build.gradle | 2 +- 4 files changed, 8 insertions(+), 24 deletions(-) delete mode 100644 app/core/src/main/java/com/fsck/k9/helper/CallbackFlowHelper.kt 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 eca0f09fb1..4120025c89 100644 --- a/app/core/src/main/java/com/fsck/k9/Preferences.kt +++ b/app/core/src/main/java/com/fsck/k9/Preferences.kt @@ -3,7 +3,6 @@ package com.fsck.k9 import android.content.Context import androidx.annotation.GuardedBy import androidx.annotation.RestrictTo -import com.fsck.k9.helper.sendBlockingSilently import com.fsck.k9.mail.MessagingException import com.fsck.k9.mailstore.LocalStoreProvider import com.fsck.k9.preferences.AccountManager @@ -19,6 +18,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.channels.trySendBlocking import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.callbackFlow @@ -135,7 +135,7 @@ class Preferences internal constructor( val listener = AccountsChangeListener { val account = getAccount(accountUuid) if (account != null) { - sendBlockingSilently(account) + trySendBlocking(account) } else { close() } @@ -155,7 +155,7 @@ class Preferences internal constructor( send(accounts) val listener = AccountsChangeListener { - sendBlockingSilently(accounts) + trySendBlocking(accounts) } addOnAccountsChangeListener(listener) diff --git a/app/core/src/main/java/com/fsck/k9/helper/CallbackFlowHelper.kt b/app/core/src/main/java/com/fsck/k9/helper/CallbackFlowHelper.kt deleted file mode 100644 index c048661158..0000000000 --- a/app/core/src/main/java/com/fsck/k9/helper/CallbackFlowHelper.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.fsck.k9.helper - -import kotlinx.coroutines.channels.ClosedSendChannelException -import kotlinx.coroutines.channels.SendChannel -import kotlinx.coroutines.channels.sendBlocking - -/** - * Like [sendBlocking], but ignores [ClosedSendChannelException]. - */ -fun SendChannel.sendBlockingSilently(element: E) { - try { - sendBlocking(element) - } catch (e: ClosedSendChannelException) { - // Ignore - } -} diff --git a/app/core/src/main/java/com/fsck/k9/mailstore/FolderRepository.kt b/app/core/src/main/java/com/fsck/k9/mailstore/FolderRepository.kt index f40136d34c..3fcd8f1e3a 100644 --- a/app/core/src/main/java/com/fsck/k9/mailstore/FolderRepository.kt +++ b/app/core/src/main/java/com/fsck/k9/mailstore/FolderRepository.kt @@ -5,7 +5,6 @@ import com.fsck.k9.Account.FolderMode import com.fsck.k9.DI import com.fsck.k9.controller.MessagingController import com.fsck.k9.controller.SimpleMessagingListener -import com.fsck.k9.helper.sendBlockingSilently import com.fsck.k9.mail.FolderClass import com.fsck.k9.preferences.AccountManager import kotlinx.coroutines.CoroutineDispatcher @@ -13,6 +12,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.channels.trySendBlocking import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.callbackFlow @@ -65,14 +65,14 @@ class FolderRepository( val folderStatusChangedListener = object : SimpleMessagingListener() { override fun folderStatusChanged(statusChangedAccount: Account, folderId: Long) { if (statusChangedAccount.uuid == account.uuid) { - sendBlockingSilently(getDisplayFolders(account, displayMode)) + trySendBlocking(getDisplayFolders(account, displayMode)) } } } messagingController.addListener(folderStatusChangedListener) val folderSettingsChangedListener = FolderSettingsChangedListener { - sendBlockingSilently(getDisplayFolders(account, displayMode)) + trySendBlocking(getDisplayFolders(account, displayMode)) } messageStore.addFolderSettingsChangedListener(folderSettingsChangedListener) @@ -173,7 +173,7 @@ class FolderRepository( send(getPushFolders(account, folderMode)) val listener = FolderSettingsChangedListener { - sendBlockingSilently(getPushFolders(account, folderMode)) + trySendBlocking(getPushFolders(account, folderMode)) } messageStore.addFolderSettingsChangedListener(listener) diff --git a/build.gradle b/build.gradle index 07e0bb3140..176bb78ce6 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { versions = [ 'kotlin': '1.7.10', - 'kotlinCoroutines': '1.6.0', + 'kotlinCoroutines': '1.6.4', 'jetbrainsAnnotations': '23.0.0', 'androidxAppCompat': '1.4.1', 'androidxActivity': '1.4.0', -- GitLab From 8a642ad3a623c6a15f1c2c7c1deae80b975d6d87 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 16:09:31 +0200 Subject: [PATCH 07/38] Update AndroidX AppCompat to version 1.4.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 176bb78ce6..2a5d427e55 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { 'kotlin': '1.7.10', 'kotlinCoroutines': '1.6.4', 'jetbrainsAnnotations': '23.0.0', - 'androidxAppCompat': '1.4.1', + 'androidxAppCompat': '1.4.2', 'androidxActivity': '1.4.0', 'androidxRecyclerView': '1.2.1', 'androidxLifecycle': '2.4.1', -- GitLab From 83c9a4d89e06d9b94f6871e5bc8d42366401cebf Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 16:46:04 +0200 Subject: [PATCH 08/38] Update AndroidX Lifecycle to version 2.5.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2a5d427e55..f4b765c51a 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { 'androidxAppCompat': '1.4.2', 'androidxActivity': '1.4.0', 'androidxRecyclerView': '1.2.1', - 'androidxLifecycle': '2.4.1', + 'androidxLifecycle': '2.5.1', 'androidxAnnotation': '1.3.0', 'androidxBiometric': '1.1.0', 'androidxNavigation': '2.4.1', -- GitLab From fb8f7750b9c200c7c309df7621fa7427d8e26c47 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 16:46:53 +0200 Subject: [PATCH 09/38] Update AndroidX Annotation to version 1.4.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f4b765c51a..6934a9b3e4 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ buildscript { 'androidxActivity': '1.4.0', 'androidxRecyclerView': '1.2.1', 'androidxLifecycle': '2.5.1', - 'androidxAnnotation': '1.3.0', + 'androidxAnnotation': '1.4.0', 'androidxBiometric': '1.1.0', 'androidxNavigation': '2.4.1', 'androidxConstraintLayout': '2.1.3', -- GitLab From 105bcbe407053e7cf55689bf7721578ce7418175 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 16:55:52 +0200 Subject: [PATCH 10/38] Update AndroidX ConstraintLayout to version 2.1.4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6934a9b3e4..e55f4367f8 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ buildscript { 'androidxAnnotation': '1.4.0', 'androidxBiometric': '1.1.0', 'androidxNavigation': '2.4.1', - 'androidxConstraintLayout': '2.1.3', + 'androidxConstraintLayout': '2.1.4', 'androidxWorkManager': '2.7.1', 'androidxFragment': '1.4.1', 'androidxLocalBroadcastManager': '1.1.0', -- GitLab From 5aa1d42e16954b3959ae0b8c06853018054f81c6 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 16:59:16 +0200 Subject: [PATCH 11/38] Update AndroidX Core to version 1.8.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e55f4367f8..f9c8cf47d2 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ buildscript { 'androidxWorkManager': '2.7.1', 'androidxFragment': '1.4.1', 'androidxLocalBroadcastManager': '1.1.0', - 'androidxCore': '1.7.0', + 'androidxCore': '1.8.0', 'androidxCardView': '1.0.0', 'androidxPreference': '1.2.0', 'androidxTestCore': '1.4.0', -- GitLab From 2b3dabb20b3e25fc1117b34db2094af44de446b7 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 18:13:35 +0200 Subject: [PATCH 12/38] Update AndroidX Activity and Fragment to version 1.5.1 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index f9c8cf47d2..26b5e8ab65 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ buildscript { 'kotlinCoroutines': '1.6.4', 'jetbrainsAnnotations': '23.0.0', 'androidxAppCompat': '1.4.2', - 'androidxActivity': '1.4.0', + 'androidxActivity': '1.5.1', 'androidxRecyclerView': '1.2.1', 'androidxLifecycle': '2.5.1', 'androidxAnnotation': '1.4.0', @@ -23,7 +23,7 @@ buildscript { 'androidxNavigation': '2.4.1', 'androidxConstraintLayout': '2.1.4', 'androidxWorkManager': '2.7.1', - 'androidxFragment': '1.4.1', + 'androidxFragment': '1.5.1', 'androidxLocalBroadcastManager': '1.1.0', 'androidxCore': '1.8.0', 'androidxCardView': '1.0.0', -- GitLab From e1a9c4d9d9f327204d48b11a6b711d09f19d4431 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 19:05:52 +0200 Subject: [PATCH 13/38] Update AndroidX Navigation to version 2.5.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 26b5e8ab65..997b380191 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ buildscript { 'androidxLifecycle': '2.5.1', 'androidxAnnotation': '1.4.0', 'androidxBiometric': '1.1.0', - 'androidxNavigation': '2.4.1', + 'androidxNavigation': '2.5.1', 'androidxConstraintLayout': '2.1.4', 'androidxWorkManager': '2.7.1', 'androidxFragment': '1.5.1', -- GitLab From f63f69ce9ae4cd13c5d9fb71f795f35fa146842c Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 19:09:17 +0200 Subject: [PATCH 14/38] Update Robolectric to version 4.8.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 997b380191..f7915c7492 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ buildscript { 'androidxTestRunner': '1.4.0', 'junit': '4.13.2', - 'robolectric': '4.7.3', + 'robolectric': '4.8.1', 'mockito': '4.3.1', 'mockitoKotlin': '4.0.0', 'truth': '1.1.3', -- GitLab From 9f8ff6dab48753fccb5debbbd94e4c07b75b0a3b Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 19:31:26 +0200 Subject: [PATCH 15/38] Update Mockito to version 4.6.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f7915c7492..3d0348df54 100644 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ buildscript { 'androidxTestRunner': '1.4.0', 'junit': '4.13.2', 'robolectric': '4.8.1', - 'mockito': '4.3.1', + 'mockito': '4.6.1', 'mockitoKotlin': '4.0.0', 'truth': '1.1.3', 'turbine': '0.7.0', -- GitLab From c2aea6322312f2c2e585a63dc6780e2de7fecbb0 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 19:31:39 +0200 Subject: [PATCH 16/38] Update Turbine to version 0.9.0 --- .../general/GeneralSettingsViewModelTest.kt | 83 +++++++++---------- build.gradle | 2 +- 2 files changed, 41 insertions(+), 44 deletions(-) diff --git a/app/ui/legacy/src/test/java/com/fsck/k9/ui/settings/general/GeneralSettingsViewModelTest.kt b/app/ui/legacy/src/test/java/com/fsck/k9/ui/settings/general/GeneralSettingsViewModelTest.kt index 5037a828c1..cb9b435c4c 100644 --- a/app/ui/legacy/src/test/java/com/fsck/k9/ui/settings/general/GeneralSettingsViewModelTest.kt +++ b/app/ui/legacy/src/test/java/com/fsck/k9/ui/settings/general/GeneralSettingsViewModelTest.kt @@ -12,12 +12,11 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.take import kotlinx.coroutines.flow.toList import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.test.TestCoroutineDispatcher +import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain -import kotlinx.coroutines.withTimeout import org.junit.After import org.junit.Before import org.junit.Test @@ -28,7 +27,7 @@ class GeneralSettingsViewModelTest { private val logFileWriter = TestLogFileWriter() private val contentUri = mock() private val viewModel = GeneralSettingsViewModel(logFileWriter) - private val testCoroutineDispatcher = TestCoroutineDispatcher() + private val testCoroutineDispatcher = StandardTestDispatcher() @Before fun setUp() { @@ -41,62 +40,60 @@ class GeneralSettingsViewModelTest { } @Test - fun `export logs without errors`() = runBlocking { + fun `export logs without errors`() = runTest { viewModel.uiState.test { viewModel.exportLogs(contentUri) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Success) - testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) + testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } @Test - fun `export logs with consumer changing while LogFileWriter_writeLogTo is running`() = runBlocking { - withTimeout(timeMillis = 1000L) { - logFileWriter.shouldWait() - - val mutex = Mutex(locked = true) + fun `export logs with consumer changing while LogFileWriter_writeLogTo is running`() = runTest { + logFileWriter.shouldWait() + + val mutex = Mutex(locked = true) + + // The first consumer + val job = launch(CoroutineName("ConsumerOne")) { + var first = true + val states = viewModel.uiState.onEach { + if (first) { + first = false + mutex.unlock() + } + }.take(2).toList() + + assertThat(states[0]).isEqualTo(GeneralSettingsUiState.Idle) + assertThat(states[1]).isEqualTo(GeneralSettingsUiState.Exporting) + } - // The first consumer - val job = launch(CoroutineName("ConsumerOne")) { - var first = true - val states = viewModel.uiState.onEach { - if (first) { - first = false - mutex.unlock() - } - }.take(2).toList() + // Wait until the "ConsumerOne" coroutine has collected the initial UI state + mutex.lock() - assertThat(states[0]).isEqualTo(GeneralSettingsUiState.Idle) - assertThat(states[1]).isEqualTo(GeneralSettingsUiState.Exporting) - } + viewModel.exportLogs(contentUri) - // Wait until the "ConsumerOne" coroutine has collected the initial UI state - mutex.lock() + // Wait until the "ConsumerOne" coroutine has finished collecting items + job.join() - viewModel.exportLogs(contentUri) - - // Wait until the "ConsumerOne" coroutine has finished collecting items - job.join() - - // The second consumer - viewModel.uiState.test { - assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) - logFileWriter.resume() - assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Success) - testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) - assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) - assertThat(cancelAndConsumeRemainingEvents()).isEmpty() - } + // The second consumer + viewModel.uiState.test { + assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) + logFileWriter.resume() + assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Success) + assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) + testCoroutineDispatcher.scheduler.advanceUntilIdle() + assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } @Test - fun `export logs with IOException`() = runBlocking { + fun `export logs with IOException`() = runTest { logFileWriter.exception = IOException() viewModel.uiState.test { @@ -105,14 +102,14 @@ class GeneralSettingsViewModelTest { assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Failure) - testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) + testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } @Test - fun `export logs with IllegalStateException`() = runBlocking { + fun `export logs with IllegalStateException`() = runTest { logFileWriter.exception = IllegalStateException() viewModel.uiState.test { @@ -121,8 +118,8 @@ class GeneralSettingsViewModelTest { assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Failure) - testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) + testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } diff --git a/build.gradle b/build.gradle index 3d0348df54..5119ac93c2 100644 --- a/build.gradle +++ b/build.gradle @@ -49,7 +49,7 @@ buildscript { 'mockito': '4.6.1', 'mockitoKotlin': '4.0.0', 'truth': '1.1.3', - 'turbine': '0.7.0', + 'turbine': '0.9.0', 'ktlint': '0.40.0' ] -- GitLab From 6b6b42522540ec82c9093d4b7decaa0ea5d50e83 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 21:59:43 +0200 Subject: [PATCH 17/38] Update Okio to version 3.2.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5119ac93c2..f7a5511f1e 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ buildscript { 'materialComponents': '1.5.0', 'fastAdapter': '5.6.0', 'preferencesFix': '1.1.0', - 'okio': '3.0.0', + 'okio': '3.2.0', 'moshi': '1.13.0', 'timber': '5.0.1', 'koin': '3.1.5', -- GitLab From 2754479be8aa8de8aa94249f52f937fdc4b44e9e Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 22:27:27 +0200 Subject: [PATCH 18/38] Update OkHttp to version 4.10.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f7a5511f1e..e1c6648260 100644 --- a/build.gradle +++ b/build.gradle @@ -38,7 +38,7 @@ buildscript { 'koin': '3.1.5', 'commonsIo': '2.6', 'mime4j': '0.8.6', - 'okhttp': '4.9.3', + 'okhttp': '4.10.0', 'minidns': '1.0.3', 'glide': '4.13.1', 'jsoup': '1.14.3', -- GitLab From be9148d6776581a92aff25486e489bf2fdb5ae7e Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 22:28:29 +0200 Subject: [PATCH 19/38] Update Glide to version 4.13.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e1c6648260..f1cc2d2e31 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,7 @@ buildscript { 'mime4j': '0.8.6', 'okhttp': '4.10.0', 'minidns': '1.0.3', - 'glide': '4.13.1', + 'glide': '4.13.2', 'jsoup': '1.14.3', 'androidxTestRunner': '1.4.0', -- GitLab From 98aa6149795af7b0864c4c0131da36fc3b088c2f Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 22:30:40 +0200 Subject: [PATCH 20/38] Update jsoup to version 1.15.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f1cc2d2e31..3ae798a2cb 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ buildscript { 'okhttp': '4.10.0', 'minidns': '1.0.3', 'glide': '4.13.2', - 'jsoup': '1.14.3', + 'jsoup': '1.15.2', 'androidxTestRunner': '1.4.0', 'junit': '4.13.2', -- GitLab From 5751d4c08bcec0c1eafd26137c283a3175fded1a Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 22:43:43 +0200 Subject: [PATCH 21/38] Update SearchPreference to version 2.2.1 --- app/ui/legacy/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/ui/legacy/build.gradle b/app/ui/legacy/build.gradle index 6295fec063..6ab2f236a8 100644 --- a/app/ui/legacy/build.gradle +++ b/app/ui/legacy/build.gradle @@ -35,7 +35,7 @@ dependencies { implementation 'com.mikepenz:materialdrawer:8.4.5' implementation 'com.mikepenz:materialdrawer-iconics:8.4.5' implementation 'com.mikepenz:fontawesome-typeface:5.9.0.0-kotlin@aar' - implementation 'com.github.ByteHamster:SearchPreference:v2.1.0' + implementation 'com.github.ByteHamster:SearchPreference:v2.2.1' implementation "com.mikepenz:fastadapter:${versions.fastAdapter}" implementation "com.mikepenz:fastadapter-extensions-drag:${versions.fastAdapter}" implementation "com.mikepenz:fastadapter-extensions-utils:${versions.fastAdapter}" -- GitLab From 3bfb72e6d4d5ddfd5804307e9be0e9aeb09fc9ce Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 22:49:06 +0200 Subject: [PATCH 22/38] Update Material Components to version 1.6.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3ae798a2cb..4392000820 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ buildscript { 'androidxCardView': '1.0.0', 'androidxPreference': '1.2.0', 'androidxTestCore': '1.4.0', - 'materialComponents': '1.5.0', + 'materialComponents': '1.6.1', 'fastAdapter': '5.6.0', 'preferencesFix': '1.1.0', 'okio': '3.2.0', -- GitLab From 8b2fbd00604918d43df53b02ae7dd4a051da46df Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 22:56:48 +0200 Subject: [PATCH 23/38] Update MaterialDrawer to version 9.0.1 --- app/ui/legacy/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ui/legacy/build.gradle b/app/ui/legacy/build.gradle index 6ab2f236a8..154f3da4e4 100644 --- a/app/ui/legacy/build.gradle +++ b/app/ui/legacy/build.gradle @@ -32,8 +32,8 @@ dependencies { implementation "de.cketti.library.changelog:ckchangelog-core:2.0.0-beta02" implementation "com.splitwise:tokenautocomplete:4.0.0-beta01" implementation "de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0" - implementation 'com.mikepenz:materialdrawer:8.4.5' - implementation 'com.mikepenz:materialdrawer-iconics:8.4.5' + implementation 'com.mikepenz:materialdrawer:9.0.1' + implementation 'com.mikepenz:materialdrawer-iconics:9.0.1' implementation 'com.mikepenz:fontawesome-typeface:5.9.0.0-kotlin@aar' implementation 'com.github.ByteHamster:SearchPreference:v2.2.1' implementation "com.mikepenz:fastadapter:${versions.fastAdapter}" -- GitLab From 2d49aa883709ed471f4cb1c6d3c98bfd7d7fba18 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 23:35:28 +0200 Subject: [PATCH 24/38] Update Gradle (wrapper) to version 7.5 --- gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 6 ++++++ gradlew.bat | 14 ++++++++------ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..249e5832f090a2944b7473328c07c9755baa3196 100644 GIT binary patch delta 10197 zcmaKS1ymhDwk=#NxVyW%y9U<)A-Dv)xI0|j{UX8L-JRg>5ZnnKAh;%chM6~S-g^K4 z>eZ{yK4;gd>gwvXs=Id8Jk-J}R4pT911;+{Jp9@aiz6!p1Oz9z&_kGLA%J5%3Ih@0 zQ|U}%$)3u|G`jIfPzMVfcWs?jV2BO^*3+q2><~>3j+Z`^Z%=;19VWg0XndJ zwJ~;f4$;t6pBKaWn}UNO-wLCFHBd^1)^v%$P)fJk1PbK5<;Z1K&>k~MUod6d%@Bq9 z>(44uiaK&sdhwTTxFJvC$JDnl;f}*Q-^01T508(8{+!WyquuyB7R!d!J)8Ni0p!cV6$CHsLLy6}7C zYv_$eD;)@L)tLj0GkGpBoa727hs%wH$>EhfuFy{_8Q8@1HI%ZAjlpX$ob{=%g6`Ox zLzM!d^zy`VV1dT9U9(^}YvlTO9Bf8v^wMK37`4wFNFzW?HWDY(U(k6@tp(crHD)X5>8S-# zW1qgdaZa*Sh6i%60e1+hty}34dD%vKgb?QmQiZ=-j+isA4={V_*R$oGN#j|#ia@n6 zuZx4e2Xx?^lUwYFn2&Tmbx0qA3Z8;y+zKoeQu;~k~FZGy!FU_TFxYd!Ck;5QvMx9gj5fI2@BLNp~Ps@ zf@k<&Q2GS5Ia9?_D?v~$I%_CLA4x~eiKIZ>9w^c#r|vB?wXxZ(vXd*vH(Fd%Me8p( z=_0)k=iRh%8i`FYRF>E97uOFTBfajv{IOz(7CU zv0Gd84+o&ciHlVtY)wn6yhZTQQO*4Mvc#dxa>h}82mEKKy7arOqU$enb9sgh#E=Lq zU;_RVm{)30{bw+|056%jMVcZRGEBSJ+JZ@jH#~DvaDQm92^TyUq=bY*+AkEakpK>8 zB{)CkK48&nE5AzTqT;WysOG|!y}5fshxR8Ek(^H6i>|Fd&wu?c&Q@N9ZrJ=?ABHI! z`*z8D`w=~AJ!P-9M=T}f`;76$qZRllB&8#9WgbuO$P7lVqdX1=g*t=7z6!0AQ^ux_ z9rcfUv^t}o_l-ZE+TqvqFsA*~W<^78!k;~!i8(eS+(+@u8FxK+Q7;mHZ<1}|4m<}vh@p`t%|@eM_J(P% zI>M7C)Ir{l|J;$G_EGGEhbP4?6{sYzMqBv+x95N&YWFH6UcE@b}B?q)G*4<4mR@sy1#vPnLMK51tb#ED(8TA1nE zYfhK7bo1!R5WJF$5Y?zG21)6+_(_5oSX9sGIW;(O&S?Rh(nydNQYzKjjJ54aDJ-1F zrJ=np8LsN?%?Rt7f~3aAX!2E{`fh_pb?2(;HOB3W+I*~A>W%iY+v45+^e$cE10fA} zXPvw9=Bd+(;+!rl)pkYj0HGB}+3Z!Mr;zr%gz~c-hFMv8b2VRE2R$8V=_XE zq$3=|Yg05(fmwrJ)QK2ptB4no`Y8Dg_vK2QDc6-6sXRQ5k78-+cPi-fH}vpgs|Ive zE=m*XNVs?EWgiNI!5AcD*3QMW)R`EqT!f0e1%hERO&?AT7HWnSf5@#AR{OGuXG3Zb zCnVWg7h|61lGV3k+>L<#d>)InG>ETn1DbOHCfztqzQ_fBiaUt@q6VMy={Fe-w#~2- z0?*f|z$zgjI9>+JVICObBaK=pU}AEOd@q(8d?j7zQFD@=6t`|KmolTr2MfBI$;EGh zD%W0cA_d#V6Lb$us5yIG(|d>r-QleC4;%hEu5W9hyY zY#+ESY&v`8(&mC~?*|e5WEhC!YU2>m_}`K+q9)a(d$bsS<=YkyZGp}YA%TXw>@abA zS_poVPoN+?<6?DAuCNt&5SHV(hp56PJ})swwVFZFXM->F zc|0c8<$H_OV%DR|y7e+s$12@Ac8SUClPg8_O9sTUjpv%6Jsn5vsZCg>wL+db4c+{+ zsg<#wOuV4jeOq`veckdi-1`dz;gvL)bZeH|D*x=8UwRU5&8W1@l>3$)8WzET0%;1J zM3(X<7tKK&9~kWRI{&FmwY5Gg!b5f4kI_vSm)H1#>l6M+OiReDXC{kPy!`%Ecq-+3yZTk=<` zm)pE6xum5q0Qkd#iny0Q-S}@I0;mDhxf>sX)Oiv)FdsAMnpx%oe8OQ`m%Xeozdzx!C1rQR>m1c_}+J4x)K}k{G zo68;oGG&Ox7w^-m7{g4a7NJu-B|~M;oIH~~#`RyUNm##feZH;E?pf}nshmoiIY52n z%pc%lnU4Q#C=RUz)RU6}E_j4#)jh<&a%JyJj$Fufc#&COaxFHtl}zJUGNLBu3~_@1 zn9F^JO9);Duxo&i@>X(kbYga1i>6p1fca8FzQ0>((Lb-aPUbC*d~a03V$y;*RBY!R ziEJ2IF^FjrvO}0Uy{cMn%u<+P5U!UO>pm9#ZYL5i6|xSC+np7IH$GfXs&uI;y4as@ z&AzJh>(S2?3PKKgab3Z(`xbx(C#46XIvVcW8eG_DjT~}Yz_8PWZ`uf6^Xr=vkvL_` zqmvfgJL+Zc`;iq~iP?%@G7}~fal-zqxa0yNyHBJJ5M)9bI>7S_cg?Ya&p(I)C5Ef4 zZ>YAF6x|U=?ec?g*|f2g5Tw3PgxaM_bi_5Az9MO$;_Byw(2d}2%-|bg4ShdQ;)Z|M z4K|tFv)qx*kKGKoyh!DQY<{n&UmAChq@DJrQP>EY7g1JF(ih*D8wCVWyQ z5Jj^|-NVFSh5T0vd1>hUvPV6?=`90^_)t(L9)XOW7jeP45NyA2lzOn&QAPTl&d#6P zSv%36uaN(9i9WlpcH#}rmiP#=L0q(dfhdxvFVaOwM;pY;KvNQ9wMyUKs6{d}29DZQ z{H3&Sosr6)9Z+C>Q5)iHSW~gGoWGgK-0;k~&dyr-bA3O|3PCNzgC?UKS_B=^i8Ri^ zd_*_qI4B07Cayq|p4{`U_E_P=K`N_~{F|+-+`sCgcNxs`%X!$=(?l2aAW}0M=~COb zf19oe^iuAUuDEf)4tgv<=WRPpK@IjToNNC*#&Ykw!)aqWU4h#|U@(cG_=Qx+&xt~a zvCz~Ds3F71dsjNLkfM%TqdVNu=RNMOzh7?b+%hICbFlOAPphrYy>7D-e7{%o_kPFn z;T!?ilE-LcKM0P(GKMseEeW57Vs`=FF}(y@^pQl;rL3fHs8icmA+!6YJt&8 ztSF?%Un35qkv>drkks&BNTJv~xK?vD;aBkp7eIkDYqn+G0%;sT4FcwAoO+vke{8CO z0d76sgg$CannW5T#q`z~L4id)9BCKRU0A!Z-{HpXr)QJrd9@iJB+l32Ql)Z}*v(St zE)Vp=BB=DDB4Pr}B(UHNe31<@!6d{U?XDoxJ@S)9QM)2L%SA0x^~^fb=bdsBy!uh& zU?M_^kvnt%FZzm+>~bEH{2o?v&Iogs`1t-b+Ml`J!ZPS(46YQJKxWE81O$HE5w;** z|8zM%bp`M7J8)4;%DqH`wVTmM0V@D}xd%tRE3_6>ioMJxyi5Hkb>85muF81&EY!73ei zA3e<#ug||EZJ=1GLXNJ)A z791&ge#lF;GVX6IU?iw0jX^1bYaU?+x{zPlpyX6zijyn*nEdZ$fxxkl!a-~*P3bkf zPd*pzu~3GBYkR_>ET`5UM^>>zTV>5m>)f=az{d0sg6a8VzUtXy$ZS?h#Gk-CA?7)c zI%Vu9DN6XSDQn6;?n9`>l$q&>s?K)R8*OsmI+$L_m z_~E`}w694Z*`Xk3Ne=497Si~=RWRqCM?6=88smrxle#s*W znwhTRsMRmg?37GLJ-)%nDZA7r$YG849j8mJWir1bWBy& zZPneYojSbooC8U@tkO`bWx4%E5*;p#Q^1^S3lsfy7(6A{jL0`A__0vm?>xC%1y8_m z57FfWr^@YG2I1K7MGYuYd>JC}@sT2n^rkrY3w%~$J$Y~HSoOHn?zpR$ zjLj_bq@Yj8kd~DXHh30KVbz@K)0S;hPKm+S&-o%IG+@x@MEcrxW2KFh;z^4dJDZix zGRGe&lQD$p)0JVF4NRgGYuh0bYLy)BCy~sbS3^b3 zHixT<%-Vwbht|25T{3^Hk;qZ^3s!OOgljHs+EIf~C%=_>R5%vQI4mQR9qOXThMXlU zS|oSH>0PjnCakb*js2{ObN`}%HYsT6=%(xA| znpUtG_TJ08kHgm5l@G|t?4E3tG2fq?wNtIp*Vqrb{9@bo^~Rx7+J&OnayrX`LDcF~ zd@0m0ZJ#Z@=T>4kTa5e2FjI&5c(F7S{gnRPoGpu9eIqrtSvnT_tk$8T)r%YwZw!gK zj*k@cG)V&@t+mtDi37#>LhVGTfRA^p%x0d#_P|Mktz3*KOoLIqFm`~KGoDDD4OOxe z?}ag_c08u%vu=5Vx=~uoS8Q;}+R2~?Uh|m-+`-2kDo$d6T!nD*hc#dB(*R{LXV=zo z`PJP0V=O!@3l-bw+d`X6(=@fq=4O#ETa8M^fOvO4qja9o3e8ANc9$sI=A4$zUut~w z4+JryRkI{9qWxU1CCMM$@Aj=6)P+z?vqa=UCv_4XyVNoBD{Xb~Oi4cjjhm8fRD!*U z2)zaS;AI78^Wq+5mDInKiMz|z#K`2emQfNH*U;{9^{NqSMVoq?RSo43<8YpJM^+W$ zxy!A5>5Zl16Vi#?nAYywu3w_=KWnd3*QetocWt`3pK67>)ZVwnT3h zbPdD&MZkD?q=-N`MpCCwpM74L+Tr1aa)zJ)8G;(Pg51@U&5W>aNu9rA`bh{vgfE={ zdJ>aKc|2Ayw_bop+dK?Y5$q--WM*+$9&3Q9BBiwU8L<-`T6E?ZC`mT0b}%HR*LPK} z!MCd_Azd{36?Y_>yN{U1w5yrN8q`z(Vh^RnEF+;4b|2+~lfAvPT!`*{MPiDioiix8 zY*GdCwJ{S(5(HId*I%8XF=pHFz<9tAe;!D5$Z(iN#jzSql4sqX5!7Y?q4_%$lH zz8ehZuyl0K=E&gYhlfFWabnSiGty$>md|PpU1VfaC5~kskDnZX&Yu}?-h;OSav=8u z=e3Yq=mi$4A|sB-J00;1d{Sd1+!v0NtU((Nz2;PFFlC}V{@p&4wGcVhU&nI($RAS! zwXn7)?8~1J3*4+VccRSg5JS<(bBhBM&{ELMD4C_NTpvzboH!{Zr*%HP;{UqxI#g&7 zOAqPSW5Qus$8-xtTvD%h{Tw<2!XR(lU54LZG{)Cah*LZbpJkA=PMawg!O>X@&%+5XiyeIf91n2E*hl$k-Y(3iW*E}Mz-h~H~7S9I1I zR#-j`|Hk?$MqFhE4C@=n!hN*o5+M%NxRqP+aLxDdt=wS6rAu6ECK*;AB%Nyg0uyAv zO^DnbVZZo*|Ef{nsYN>cjZC$OHzR_*g%T#oF zCky9HJS;NCi=7(07tQXq?V8I&OA&kPlJ_dfSRdL2bRUt;tA3yKZRMHMXH&#W@$l%-{vQd7y@~i*^qnj^`Z{)V$6@l&!qP_y zg2oOd!Wit#)2A~w-eqw3*Mbe)U?N|q6sXw~E~&$!!@QYX4b@%;3=>)@Z#K^`8~Aki z+LYKJu~Y$;F5%_0aF9$MsbGS9Bz2~VUG@i@3Fi2q(hG^+Ia44LrfSfqtg$4{%qBDM z_9-O#3V+2~W$dW0G)R7l_R_vw(KSkC--u&%Rs^Io&*?R=`)6BN64>6>)`TxyT_(Rd zUn+aIl1mPa#Jse9B3`!T=|e!pIp$(8ZOe0ao?nS7o?oKlj zypC-fMj1DHIDrh1unUI1vp=-Fln;I9e7Jvs3wj*^_1&W|X} zZSL|S|Bb@CV*YC_-T&2!Ht3b6?)d`tHOP?rA;;t#zaXa0Sc;vGnV0BLIf8f-r{QHh z*Zp`4_ItlOR7{u(K+!p_oLDmaAkNag*l4#29F2b_A*0oz0T|#-&f*;c#<`^)(W@gm z#k9k=t%u8<+C1fNUA{Fh7~wgPrEZZ#(6aBI%6bR4RO(e1(ZocjoDek4#MTgZD>1NG zy9~yoZfWYfwe&S-(zk4o6q6o?2*~DOrJ(%5wSnEJMVOKCzHd z=Yhm+HLzoDl{P*Ybro7@sk1!Ez3`hE+&qr7Rw^2glw^M(b(NS2!F|Q!mi|l~lF94o z!QiV)Q{Z>GO5;l1y!$O)=)got;^)%@v#B!ZEVQy1(BJApHr5%Zh&W|gweD+%Ky%CO ztr45vR*y(@*Dg_Qw5v~PJtm^@Lyh*zRuT6~(K+^HWEF{;R#L$vL2!_ndBxCtUvZ(_ zauI7Qq}ERUWjr&XW9SwMbU>*@p)(cuWXCxRK&?ZoOy>2VESII53iPDP64S1pl{NsC zD;@EGPxs&}$W1;P6BB9THF%xfoLX|4?S;cu@$)9OdFst-!A7T{(LXtdNQSx!*GUSIS_lyI`da8>!y_tpJb3Zuf0O*;2y?HCfH z5QT6@nL|%l3&u4;F!~XG9E%1YwF*Fgs5V&uFsx52*iag(?6O|gYCBY3R{qhxT-Etb zq(E%V=MgQnuDGEKOGsmBj9T0-nmI%zys8NSO>gfJT4bP>tI>|ol@ zDt(&SUKrg%cz>AmqtJKEMUM;f47FEOFc%Bbmh~|*#E zDd!Tl(wa)ZZIFwe^*)4>{T+zuRykc3^-=P1aI%0Mh}*x7%SP6wD{_? zisraq`Las#y-6{`y@CU3Ta$tOl|@>4qXcB;1bb)oH9kD6 zKym@d$ zv&PZSSAV1Gwwzqrc?^_1+-ZGY+3_7~a(L+`-WdcJMo>EWZN3%z4y6JyF4NR^urk`c z?osO|J#V}k_6*9*n2?j+`F{B<%?9cdTQyVNm8D}H~T}?HOCXt%r7#2hz97Gx#X%62hyaLbU z_ZepP0<`<;eABrHrJAc!_m?kmu#7j}{empH@iUIEk^jk}^EFwO)vd7NZB=&uk6JG^ zC>xad8X$h|eCAOX&MaX<$tA1~r|hW?-0{t4PkVygTc`yh39c;&efwY(-#;$W)+4Xb z$XFsdG&;@^X`aynAMxsq)J#KZXX!sI@g~YiJdHI~r z$4mj_?S29sIa4c$z)19JmJ;Uj?>Kq=0XuH#k#};I&-6zZ_&>)j>UR0XetRO!-sjF< zd_6b1A2vfi++?>cf}s{@#BvTD|a%{9si7G}T+8ZnwuA z1k8c%lgE<-7f~H`cqgF;qZ|$>R-xNPA$25N1WI3#n%gj}4Ix}vj|e=x)B^roGQpB) zO+^#nO2 zjzJ9kHI6nI5ni&V_#5> z!?<7Qd9{|xwIf4b0bRc;zb}V4>snRg6*wl$Xz`hRDN8laL5tg&+@Dv>U^IjGQ}*=XBnXWrwTy;2nX?<1rkvOs#u(#qJ=A zBy>W`N!?%@Ay=upXFI}%LS9bjw?$h)7Dry0%d}=v0YcCSXf9nnp0tBKT1eqZ-4LU` zyiXglKRX)gtT0VbX1}w0f2ce8{$WH?BQm@$`ua%YP8G@<$n13D#*(Yd5-bHfI8!on zf5q4CPdgJLl;BqIo#>CIkX)G;rh|bzGuz1N%rr+5seP${mEg$;uQ3jC$;TsR&{IX< z;}7j3LnV+xNn^$F1;QarDf6rNYj7He+VsjJk6R@0MAkcwrsq4?(~`GKy|mgkfkd1msc2>%B!HpZ~HOzj}kl|ZF(IqB=D6ZTVcKe=I7)LlAI=!XU?J*i#9VXeKeaG zwx_l@Z(w`)5Cclw`6kQKlS<;_Knj)^Dh2pL`hQo!=GPOMR0iqEtx12ORLpN(KBOm5 zontAH5X5!9WHS_=tJfbACz@Dnkuw|^7t=l&x8yb2a~q|aqE_W&0M|tI7@ilGXqE)MONI8p67OiQGqKEQWw;LGga=ZM1;{pSw1jJK_y$vhY6 ztFrV7-xf>lbeKH1U)j3R=?w*>(Yh~NNEPVmeQ8n}0x01$-o z2Jyjn+sXhgOz>AzcZ zAbJZ@f}MBS0lLKR=IE{z;Fav%tcb+`Yi*!`HTDPqSCsFr>;yt^^&SI2mhKJ8f*%ji zz%JkZGvOn{JFn;)5jf^21AvO-9nRzsg0&CPz;OEn07`CfT@gK4abFBT$Mu?8fCcscmRkK+ zbAVJZ~#_a z{|(FFX}~8d3;DW8zuY9?r#Dt>!aD>} zlYw>D7y#eDy+PLZ&XKIY&Df0hsLDDi(Yrq8O==d30RchrUw8a=Eex>Dd?)3+k=}Q> z-b85lun-V$I}86Vg#l1S@1%=$2BQD5_waAZKQfJ${3{b2SZ#w1u+jMr{dJMvI|Og= zpQ9D={XK|ggbe04zTUd}iF{`GO1dV%zWK~?sM9OM(= zVK9&y4F^w1WFW{$qi|xQk0F`@HG8oLI5|5$j~ci9xTMT69v5KS-Yym--raU5kn2#C z<~5q^Bf0rTXVhctG2%&MG(cUGaz(gC(rcG~>qgO$W6>!#NOVQJ;pIYe-lLy(S=HgI zPh;lkL$l+FfMHItHnw_^bj8}CKM19t(C_2vSrhX2$K@-gFlH};#C?1;kk&U1L%4S~ zR^h%h+O1WE7DI$~dly?-_C7>(!E`~#REJ~Xa7lyrB$T!`&qYV5QreAa^aKr%toUJR zPWh)J3iD`(P6BI5k$oE$us#%!4$>`iH2p-88?WV0M$-K)JDibvA4 zpef%_*txN$Ei3=Lt(BBxZ&mhl|mUz-z*OD1=r9nfN zc5vOMFWpi>K=!$6f{eb?5Ru4M3o;t9xLpry|C%j~`@$f)OFB5+xo8XM8g&US@UU-sB|dAoc20y(F@=-2Ggp_`SWjEb#>IG^@j zuQK}e^>So#W2%|-)~K!+)wdU#6l>w5wnZt2pRL5Dz#~N`*UyC9tYechBTc2`@(OI# zNvcE*+zZZjU-H`QOITK^tZwOyLo)ZCLk>>Wm+flMsr5X{A<|m`Y281n?8H_2Fkz5}X?i%Rfm5s+n`J zDB&->=U+LtOIJ|jdYXjQWSQZFEs>Rm{`knop4Sq)(}O_@gk{14y51)iOcGQ5J=b#e z2Yx^6^*F^F7q_m-AGFFgx5uqyw6_4w?yKCJKDGGprWyekr;X(!4CnM5_5?KgN=3qCm03 z##6k%kIU5%g!cCL(+aK>`Wd;dZ4h$h_jb7n?nqx5&o9cUJfr%h#m4+Bh)>HodKcDcsXDXwzJ3jR(sSFqWV(OKHC*cV8;;&bH=ZI0YbW3PgIHwTjiWy z?2MXWO2u0RAEEq(zv9e%Rsz|0(OKB?_3*kkXwHxEuazIZ7=JhaNV*P~hv57q55LoebmJpfHXA@yuS{Esg+ z*C}0V-`x^=0nOa@SPUJek>td~tJ{U1T&m)~`FLp*4DF77S^{|0g%|JIqd-=5)p6a` zpJOsEkKT(FPS@t^80V!I-YJbLE@{5KmVXjEq{QbCnir%}3 zB)-J379=wrBNK6rbUL7Mh^tVmQYn-BJJP=n?P&m-7)P#OZjQoK0{5?}XqJScV6>QX zPR>G{xvU_P;q!;S9Y7*07=Z!=wxIUorMQP(m?te~6&Z0PXQ@I=EYhD*XomZ^z;`Os z4>Uh4)Cg2_##mUa>i1Dxi+R~g#!!i{?SMj%9rfaBPlWj_Yk)lCV--e^&3INB>I?lu z9YXCY5(9U`3o?w2Xa5ErMbl5+pDVpu8v+KJzI9{KFk1H?(1`_W>Cu903Hg81vEX32l{nP2vROa1Fi!Wou0+ZX7Rp`g;B$*Ni3MC-vZ`f zFTi7}c+D)!4hz6NH2e%%t_;tkA0nfkmhLtRW%){TpIqD_ev>}#mVc)<$-1GKO_oK8 zy$CF^aV#x7>F4-J;P@tqWKG0|D1+7h+{ZHU5OVjh>#aa8+V;6BQ)8L5k9t`>)>7zr zfIlv77^`Fvm<)_+^z@ac%D&hnlUAFt8!x=jdaUo{)M9Ar;Tz5Dcd_|~Hl6CaRnK3R zYn${wZe8_BZ0l0c%qbP}>($jsNDay>8+JG@F!uV4F;#zGsBP0f$f3HqEHDz_sCr^q z1;1}7KJ9&`AX2Qdav1(nNzz+GPdEk5K3;hGXe{Hq13{)c zZy%fFEEH#nlJoG{f*M^#8yXuW%!9svN8ry-Vi7AOFnN~r&D`%6d#lvMXBgZkX^vFj z;tkent^62jUr$Cc^@y31Lka6hS>F?1tE8JW$iXO*n9CQMk}D*At3U(-W1E~z>tG?> z5f`5R5LbrhRNR8kv&5d9SL7ke2a*Xr)Qp#75 z6?-p035n2<7hK;sb>t9GAwG4{9v~iEIG>}7B5zcCgZhu$M0-z8?eUO^E?g)md^XT_ z2^~-u$yak>LBy(=*GsTj6p<>b5PO&un@5hGCxpBQlOB3DpsItKZRC*oXq-r{u}Wb; z&ko>#fbnl2Z;o@KqS-d6DTeCG?m1 z&E>p}SEc*)SD&QjZbs!Csjx~0+$@ekuzV_wAalnQvX3a^n~3ui)|rDO+9HW|JPEeBGP4 z)?zcZ<8qv47`EWA*_X~H^vr(lP|f%=%cWFM;u)OFHruKT<~?>5Y8l?56>&;=WdZU# zZEK4-C8s-3zPMA^&y~e*9z)!ZJghr3N^pJa2A$??Xqx-BR*TytGYor&l8Q+^^r%Yq02xay^f#;;wO6K7G!v>wRd6531WnDI~h$PN( z+4#08uX?r&zVKsQ;?5eBX=FxsXaGyH4Gth4a&L|{8LnNCHFr1M{KjJ!BfBS_aiy-E zxtmNcXq3}WTwQ7Dq-9YS5o758sT(5b`Sg-NcH>M9OH1oW6&sZ@|GYk|cJI`vm zO<$~q!3_$&GfWetudRc*mp8)M)q7DEY-#@8w=ItkApfq3sa)*GRqofuL7)dafznKf zLuembr#8gm*lIqKH)KMxSDqbik*B(1bFt%3Vv|ypehXLCa&wc7#u!cJNlUfWs8iQ` z$66(F=1fkxwg745-8_eqV>nWGY3DjB9gE23$R5g&w|C{|xvT@7j*@aZNB199scGchI7pINb5iyqYn)O=yJJX)Ca3&Ca+{n<=1w|(|f0)h<9gs$pVSV<<9Og-V z8ki@nKwE)x)^wmHBMk?mpMT=g{S#^8W|>&rI#Ceh;9za}io0k@0JxiCqi-jHlxbt3 zjJA?RihhRvhk6%G5-D{ePh1jare*fQS<328P-DcVAxPTrw=n6k?C6EV75f}cnBRPT zMYDqqKu(ND&aOtc!QRV`vzJSVxx8i~WB#5Ml{b#eQqNnSi7l-bS-`ITW<^zyYQA(b zbj4SuRK>q9o`_v%+C=S?h>2e4!66Ij(P5{7Uz$3u6YJJC$W%EoBa{-(=tQ|y1vov%ZkXVOV z##_UVg4V^4ne#4~<-1DkJqkKqgT+E_=&4Ue&eQ-JC+gi?7G@d6= zximz{zE)WW{b@QCJ!7l&N5x=dXS?$5RBU-VvN4Uec-GHK&jPa&P2z+qDdLhIB+HU) zu0CW&uLvE^4I5xtK-$+oe|58)7m6*PO%Xt<+-XEA%jG_BEachkF3e@pn?tl!`8lOF zbi2QOuNXX)YT*MCYflILO{VZ*9GiC%R4FO20zMK?p+&aCMm2oeMK7(aW=UDzr=AO0 z$5mJ%=qRsR8rZ>_YsL+vi{3*J_9Kzq(;ZwRj+4_f0-*wbkSMPWahX#Fj_a8BnrhJ6 zo^ZZ?Vah1@&6#r=JkuaYDBdp;J3@ii+CHM&@9*er&#P}$@wI$bfrH)&c!*|nkvhf%^*Y6b%dKz%QBSIo@U z{?V^qEs4`q<8@n+u8YiB^sc@6g>TncG<|GsmC3egwE6aO=EwLr~3-2 zNr`+)`i+-83?|1Xy0^8ps&pb}YT?w1eWVnC9Ps1=KM;Rw)bH6O!7Did1NwpnqVPZc z*%Qo~qkDL>@^<^fmIBtx$WUWQiNtAB2x-LO^BB=|w~-zTnJNEdm1Ou(?8PF&U88X@ z#8rdaTd||)dG^uJw~N_-%!XNbuAyh4`>Shea=pSj0TqP+w4!`nxsmVSv02kb`DBr% zyX=e>5IJ3JYPtdbCHvKMdhXUO_*E9jc_?se7%VJF#&ZaBD;7+eFN3x+hER7!u&`Wz z7zMvBPR4y`*$a250KYjFhAKS%*XG&c;R-kS0wNY1=836wL6q02mqx;IPcH(6ThA@2 zXKQF|9H>6AW$KUF#^A%l6y5{fel77_+cR_zZ0(7=6bmNXABv}R!B-{(E^O6Y?ZS)n zs1QEmh_Fm7p}oRyT3zxUNr4UV8NGs+2b8|4shO$OGFj3D&7_e?#yDi=TTe%$2QbG5 zk<;q7aQ;p!M-Osm{vFdmXZ@!z9uWh!;*%>(vTRggufuUGP9Hols@vhx z73pn$3u2;vzRvnXuT&$Os7J@6y12*j!{ix%3B4YU1466ItmJs0NsU(4ZYRYh7wEA6q{b*Hs6@k~ zi7Yq@Ax!et0cUMTvk7P%ym){MHpcliHEI~e3HP0NV=}7;xFv#IC?a<=`>~j_sk{e> z7vg-tK*p83HZ0=QK@ zRIHo^r{D8&Ms-^WZp+6US_Quqjh$Q66W^1}=Uz&XJ8AQE9&2}P zY|FXZzZ|0IiaBd2qdt6dIjQr(ZMIOU%NG1F&fu6Po9m^?BvLhI6T0R!H2d8;U(&p2 zYA|MFscMqcO(ye~Jp?F;0>Ke+5hzVr?aBNe>GsGgr$XrpS9uajN2kNQ3o$V5rp0T( z0$6TJC;3)26SNG#XcX7l^MKTn$ga?6r4Jzfb%ZgA(Zbwit0$kY=avSnI$@Gk%+^pu zS5mHrcRS8LFPC*uVWH4DDD1pY$H8N>X?KIJZuZ2SvTqc5Nr0GHdD8TCJcd$zIhOdC zZX0ErnsozQh;t^==4zTfrZO421AL?)O)l#GSxU#|LTTg4#&yeK=^w#;q63!Nv~1(@ zs^-RNRuF&qgcr+bIzc@7$h9L;_yjdifE*$j0Q&Np=1AuHL--zdkv@}`1 zo~LlDl_YAq*z?vmr4M`GjDkl9?p|-tl(DtX76oZv25_DtZutLS9Ez!5~p?th@4 zyc_uax4W#<(#)LMkvo)yp|5tKsC2=p#6PyhpH|449T<9Zdk|%CAb5cw?fhvQtBO&7 zpQ9$24yLqPHP;$N&fe2wm%8qdctwIna<3SwGtQA3{C77s%CW%LYxtK(SBGustL0<( zu~U9r0UOkr(c{OJxZS0Ntu3+cJlF7R`7k-Bsa&q?9Ae5{{|o~?cM+T7{lB1^#vT8R z?>c9fNWey`1dKDY%F3d2O*8^qYhjlB8*7HMKE<*=(A`{>=1%s1}Pm&#_t1xy!FkPk@%SMEka2@*= zxDuM|vJJ5s+xgDls{>*o!7eOcs|xuVBPWX&+y5vEiADK%hi`#Dbd>;;Pbk2H4*-X&R?_-6ZEutSd8hC+sSjhIo z;D(j4P;2EVpEj#UF7IjM6PC+X$C5T&=nL`*!*hm9U)#O?>wqOgC>jXKN3Slk_yaQX zLf|4D8T4k|wHW`;#ZQVocNF|3izi0sOqXzi7@KlYC3CXBG`94wD;tMI1bj|8Vm zY}9`VI9!plSfhAal$M_HlaYOVNU?9Z#0<$o?lXXbX3O(l_?f)i3_~r+GcO-x#+x^X zfsZl0>Rj2iP1rsT;+b;Mr? z4Vu&O)Q5ru4j;qaSP5gA{az@XTS1NpT0d9Xhl_FkkRpcEGA0(QQ~YMh#&zwDUkNzm z6cgkdgl9W{iL6ArJ1TQHqnQ^SQ1WGu?FT|93$Ba}mPCH~!$3}0Y0g zcoG%bdTd$bmBx9Y<`Jc+=Cp4}c@EUfjiz;Rcz101p z=?#i$wo>gBE9|szaZMt-d4nUIhBnYRuBVyx+p?5#aZQgUe(!ah`J#l1$%bl5avL27 zU2~@V`3Ic&!?FhDX@Cw!R4%xtWark#p8DLT)HCZ?VJxf^yr@AD*!ERK3#L$E^*Yr? zzN&uF9Roh4rP+r`Z#7U$tzl6>k!b~HgM$C<_crP=vC>6=q{j?(I}!9>g3rJU(&){o z`R^E*9%+kEa8H_fkD9VT7(Fks&Y-RcHaUJYf-|B+eMXMaRM;{FKRiTB>1(=Iij4k1(X__|WqAd-~t#2@UQ}Z&<1Th0azdXfoll!dd)6>1miA z!&=6sDJm=e$?L&06+Q3`D-HNSkK-3$3DdZMX-6Xjn;wd#9A{~ur!2NcX>(qY_oZL0~H7dnQ9sgLe!W>~2|RSW7|hWn<({Pg*xF$%B-!rKe^_R_vc z(LO!0agxxP;FWPV({8#lEv$&&GVakGus=@!3YVG`y^AO1m{2%Np;>HNA1e{=?ra1C}H zAwT0sbwG|!am;fl?*_t^^#yLDXZ*Nx)_FqueZi0c-G~omtpHW0Cu)mEJ`Z1X8brq$ z%vK##b~o*^b&Hz!hgrD=^6P8}aW40lhzMLB5T5*v`1QH?+L~-@CDi3+C@nRf2{7UE zyDIe{@LKw`Eu=Z%6<<_=#V|yxJIKiq_N?ZJ_v0$c)N4l07ZV_mIXG}glfBSPivOhw z-~+9GdckSpMBNR9eR`Y|9_)sXS+u_OiQ%!9rE(2AFjoxN8lk16Sb~^Sq6kRoEp3yD(mm`HsYIXcag_EAB8MHc}nahxVVUTts~U9P|f;7Ul$_` zStR4v&P4q_$KXOEni$lkxy8=9w8G&47VY0oDb^+jT+>ARe3NHUg~St`$RDxY)?;_F znqTujR&chZd2qHF7y8D$4&E3+e@J~!X3&BW4BF(Ebp#TEjrd+9SU!)j;qH+ZkL@AW z?J6Mj}v0_+D zH0qlbzCkHf|EZ`6c>5ig5NAFF%|La%M-}g(7&}Vx8K)qg30YD;H!S!??{;YivzrH0 z(M%2*b_S-)yh&Aiqai)GF^c!<1Xemj|13>dZ_M#)41SrP;OEMaRJ)bCeX*ZT7W`4Y zQ|8L@NHpD@Tf(5>1U(s5iW~Zdf7$@pAL`a3X@YUv1J>q-uJ_(Dy5nYTCUHC}1(dlI zt;5>DLcHh&jbysqt?G01MhXI3!8wgf){Hv}=0N|L$t8M#L7d6WscO8Om2|NBz2Ga^ zs86y%x$H18)~akOWD7@em7)ldlWgb?_sRN>-EcYQO_}aX@+b$dR{146>{kXWP4$nN{V0_+|3{Lt|8uX_fhKh~i{(x%cj*PU$i{PO(5$uA? zQzO>a6oPj-TUk&{zq?JD2MNb6Mf~V3g$ra+PB;ujLJ2JM(a7N*b`y{MX--!fAd}5C zF$D_b8S;+Np(!cW)(hnv5b@@|EMt*RLKF*wy>ykFhEhlPN~n_Bj>LT9B^_yj>z#fx z3JuE4H&?Cc!;G@}E*3k`HK#8ag`yE3Z1)5JUlSua%qkF zkTu|<9{w9OSi$qr)WD#7EzITnch=xnR63E*d~WGvi*Co9BBE?ETHud;!Z)7&wz+l6 zuKODYG1>I1U#a%&(GNJ`AqRfg=H!BtSl+_;CEeufF-#+*2EMMz-22@>18=8PH{PHd z);mN=aR0MPF>eutLiS#-AOX>#2%+pTGEOj!j4L(m0~&xR=0+g#HNpno6@veLhJp}e zyNVC$a>4;!9&iGvU_dj&xbKt@^t6r%f^)+}eV^suRTLP52+BVs0kOLwg6n`=NUv50E7My8XQUh?y%mW62OT1pMrKI3Q(r`7vU&@93=G~A?b(^pvC-8x=bSk zZ60BQR96WB1Z@9Df(M1IQh+YrU8sEjB=Tc2;(zBn-pete*icZE|M&Uc+oHg`|1o`g zH~m+k=D$o);{Rs)b<9Zo|9_Z6L6QHLNki(N>Dw^^i1LITprZeeqIaT#+)fw)PlllU zldphHC)t!0Gf(i9zgVm>`*TbmITF zH1FZ4{wrjRCx{t^26VK_2srZuWuY*EMAsMrJYFFCH35Ky7bq8<0K|ey2wHnrFMZyr z&^yEgX{{3i@&iE5>xKZ{Ads36G3a!i50D!C4?^~cLB<<|fc1!XN(HJRM)H^21sEs%vv+Mu0h*HkLHaEffMwc0n6)JhNXY#M5w@iO@dfXY z0c6dM2a4Hd1SA*#qYj@jK}uVgAZdaBj8t6uuhUNe>)ne9vfd#C6qLV9+@Q7{MnF#0 zJ7fd-ivG_~u3bVvOzpcw1u~ZSp8-kl(sunnX>L~*K-ByWDM2E8>;Si6kn^58AZQxI xVa^It*?521mj4+UJO?7%w*+`EfEcU=@KhDx-s^WzP+ae~{CgHDE&XryzW}Nww%-5% diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b1159fc54f..2ec77e51a9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787337..a69d9cb6c2 100755 --- a/gradlew +++ b/gradlew @@ -205,6 +205,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index ac1b06f938..53a6b238d4 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal -- GitLab From be649e3ba0a0c1e0a4fee74b0f4dc2b6328816c4 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 5 Aug 2022 23:51:32 +0200 Subject: [PATCH 25/38] Update Koin to version 3.2.0 --- app/autodiscovery/providersxml/build.gradle | 1 + app/autodiscovery/srvrecords/build.gradle | 1 + app/autodiscovery/thunderbird/build.gradle | 1 + app/core/build.gradle | 1 + app/k9mail/build.gradle | 1 + app/storage/build.gradle | 1 + app/ui/legacy/build.gradle | 1 + app/ui/setup/build.gradle | 1 + build.gradle | 2 +- 9 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/autodiscovery/providersxml/build.gradle b/app/autodiscovery/providersxml/build.gradle index 9cd4bae54b..1ec0a36c0b 100644 --- a/app/autodiscovery/providersxml/build.gradle +++ b/app/autodiscovery/providersxml/build.gradle @@ -16,6 +16,7 @@ dependencies { testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" + testImplementation "io.insert-koin:koin-test:${versions.koin}" testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" } diff --git a/app/autodiscovery/srvrecords/build.gradle b/app/autodiscovery/srvrecords/build.gradle index 061b93041d..6744bdc6ff 100644 --- a/app/autodiscovery/srvrecords/build.gradle +++ b/app/autodiscovery/srvrecords/build.gradle @@ -17,6 +17,7 @@ dependencies { testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" + testImplementation "io.insert-koin:koin-test:${versions.koin}" testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" } diff --git a/app/autodiscovery/thunderbird/build.gradle b/app/autodiscovery/thunderbird/build.gradle index 11007e7206..fe11b712e5 100644 --- a/app/autodiscovery/thunderbird/build.gradle +++ b/app/autodiscovery/thunderbird/build.gradle @@ -17,6 +17,7 @@ dependencies { testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" + testImplementation "io.insert-koin:koin-test:${versions.koin}" testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" } diff --git a/app/core/build.gradle b/app/core/build.gradle index 52b520b3c1..447bcfca0c 100644 --- a/app/core/build.gradle +++ b/app/core/build.gradle @@ -38,6 +38,7 @@ dependencies { testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" testImplementation "org.jdom:jdom2:2.0.6" + testImplementation "io.insert-koin:koin-test:${versions.koin}" testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" } diff --git a/app/k9mail/build.gradle b/app/k9mail/build.gradle index e4cf021699..1e5a394bed 100644 --- a/app/k9mail/build.gradle +++ b/app/k9mail/build.gradle @@ -36,6 +36,7 @@ dependencies { testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" + testImplementation "io.insert-koin:koin-test:${versions.koin}" testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" } diff --git a/app/storage/build.gradle b/app/storage/build.gradle index afbf61f7ca..d4db393c3e 100644 --- a/app/storage/build.gradle +++ b/app/storage/build.gradle @@ -18,6 +18,7 @@ dependencies { testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" + testImplementation "io.insert-koin:koin-test:${versions.koin}" testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" testImplementation "commons-io:commons-io:${versions.commonsIo}" } diff --git a/app/ui/legacy/build.gradle b/app/ui/legacy/build.gradle index 154f3da4e4..e6df9341fa 100644 --- a/app/ui/legacy/build.gradle +++ b/app/ui/legacy/build.gradle @@ -63,6 +63,7 @@ dependencies { testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" + testImplementation "io.insert-koin:koin-test:${versions.koin}" testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:${versions.kotlinCoroutines}" testImplementation "app.cash.turbine:turbine:${versions.turbine}" diff --git a/app/ui/setup/build.gradle b/app/ui/setup/build.gradle index 42c10c8337..a4279c21e0 100644 --- a/app/ui/setup/build.gradle +++ b/app/ui/setup/build.gradle @@ -22,6 +22,7 @@ dependencies { testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-core:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" + testImplementation "io.insert-koin:koin-test:${versions.koin}" testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" } diff --git a/build.gradle b/build.gradle index 4392000820..e10ede4851 100644 --- a/build.gradle +++ b/build.gradle @@ -35,7 +35,7 @@ buildscript { 'okio': '3.2.0', 'moshi': '1.13.0', 'timber': '5.0.1', - 'koin': '3.1.5', + 'koin': '3.2.0', 'commonsIo': '2.6', 'mime4j': '0.8.6', 'okhttp': '4.10.0', -- GitLab From bd6264794631039b9fcfaa3499b51acb90078e15 Mon Sep 17 00:00:00 2001 From: cketti Date: Sat, 6 Aug 2022 00:02:36 +0200 Subject: [PATCH 26/38] Update Android Gradle Plugin to version 7.2.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e10ede4851..2e70b964e8 100644 --- a/build.gradle +++ b/build.gradle @@ -66,7 +66,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "org.jlleitschuh.gradle:ktlint-gradle:10.0.0" } -- GitLab From 14d5ce7ee3ce27426add149085c6b055b22c2fea Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 7 Aug 2022 19:57:31 +0200 Subject: [PATCH 27/38] Revert "Update MaterialDrawer to version 9.0.1" This reverts commit 8b2fbd00604918d43df53b02ae7dd4a051da46df. --- app/ui/legacy/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ui/legacy/build.gradle b/app/ui/legacy/build.gradle index e6df9341fa..ed5187a19a 100644 --- a/app/ui/legacy/build.gradle +++ b/app/ui/legacy/build.gradle @@ -32,8 +32,8 @@ dependencies { implementation "de.cketti.library.changelog:ckchangelog-core:2.0.0-beta02" implementation "com.splitwise:tokenautocomplete:4.0.0-beta01" implementation "de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0" - implementation 'com.mikepenz:materialdrawer:9.0.1' - implementation 'com.mikepenz:materialdrawer-iconics:9.0.1' + implementation 'com.mikepenz:materialdrawer:8.4.5' + implementation 'com.mikepenz:materialdrawer-iconics:8.4.5' implementation 'com.mikepenz:fontawesome-typeface:5.9.0.0-kotlin@aar' implementation 'com.github.ByteHamster:SearchPreference:v2.2.1' implementation "com.mikepenz:fastadapter:${versions.fastAdapter}" -- GitLab From 9eb081e51bd15fa4cafe4c1aedf1447f13cc5474 Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 7 Aug 2022 20:10:29 +0200 Subject: [PATCH 28/38] Update LeakCanary to version 2.9.1 --- app/k9mail/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/k9mail/build.gradle b/app/k9mail/build.gradle index 1e5a394bed..881c605e97 100644 --- a/app/k9mail/build.gradle +++ b/app/k9mail/build.gradle @@ -25,7 +25,7 @@ dependencies { annotationProcessor "com.github.bumptech.glide:compiler:${versions.glide}" if (project.hasProperty('k9mail.enableLeakCanary') && project.property('k9mail.enableLeakCanary') == "true") { - debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' } // Required for DependencyInjectionTest to be able to resolve OpenPgpApiManager -- GitLab From 7783cc30748d429dfb4ea54465533e9e5322d42c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=8Ao=E9=A2=9Diu=E9=B1=BC?= Date: Mon, 8 Aug 2022 16:24:23 +0800 Subject: [PATCH 29/38] move fulltext entry when message moving Otherwise, the moved messages cannot be searched, --- .../storage/messages/MoveMessageOperations.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt b/app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt index a3f49ae381..fc1745c825 100644 --- a/app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt +++ b/app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt @@ -23,11 +23,29 @@ internal class MoveMessageOperations( threadMessageOperations.createThreadEntryIfNecessary(database, destinationMessageId, threadInfo) convertOriginalMessageEntryToPlaceholderEntry(database, messageId) + moveFulltextEntry(database, messageId, destinationMessageId) destinationMessageId } } + private fun moveFulltextEntry( + database: SQLiteDatabase, + messageId: Long, + destinationMessageId: Long + ) { + val values = ContentValues().apply { + put("docid", destinationMessageId) + } + + database.update( + "messages_fulltext", + values, + "docid = ?", + arrayOf(messageId.toString()) + ) + } + private fun createMessageEntry( database: SQLiteDatabase, messageId: Long, -- GitLab From 0c449eb70a33dbe796bf0c12dbf7d2fba07f75dc Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 2 Aug 2022 18:00:10 +0200 Subject: [PATCH 30/38] Add (failing) tests for converting consecutive spaces to HTML The tests demonstrate the behavior used by Thunderbird. --- .../fsck/k9/message/html/HtmlConverterTest.kt | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/app/core/src/test/java/com/fsck/k9/message/html/HtmlConverterTest.kt b/app/core/src/test/java/com/fsck/k9/message/html/HtmlConverterTest.kt index 178110da15..e2c02528e4 100644 --- a/app/core/src/test/java/com/fsck/k9/message/html/HtmlConverterTest.kt +++ b/app/core/src/test/java/com/fsck/k9/message/html/HtmlConverterTest.kt @@ -400,6 +400,60 @@ class HtmlConverterTest { ) } + @Test + fun `textToHtmlFragment() with single space at the start of a line`() { + val text = " foo" + + val result = HtmlConverter.textToHtmlFragment(text) + + assertThat(result).isEqualTo("\u00A0foo") + } + + @Test + fun `textToHtmlFragment() with two spaces at the start of a line`() { + val text = " foo" + + val result = HtmlConverter.textToHtmlFragment(text) + + assertThat(result).isEqualTo("\u00A0 foo") + } + + @Test + fun `textToHtmlFragment() with consecutive spaces at the start of a line`() { + val text = " some words here" + + val result = HtmlConverter.textToHtmlFragment(text) + + assertThat(result).isEqualTo("\u00A0\u00A0\u00A0 some words here") + } + + @Test + fun `textToHtmlFragment() with consecutive spaces between words`() { + val text = "foo bar" + + val result = HtmlConverter.textToHtmlFragment(text) + + assertThat(result).isEqualTo("foo\u00A0 bar") + } + + @Test + fun `textToHtmlFragment() with single space at the end of a line`() { + val text = "foo \n" + + val result = HtmlConverter.textToHtmlFragment(text) + + assertThat(result).isEqualTo("foo
") + } + + @Test + fun `textToHtmlFragment() with consecutive spaces at the end of a line`() { + val text = "some words here \n" + + val result = HtmlConverter.textToHtmlFragment(text) + + assertThat(result).isEqualTo("some words here\u00A0\u00A0
") + } + @Test fun `htmlToText() should convert BR tags to line breaks`() { val input = -- GitLab From 2d896196ad798415f81a9257da836cb88a090815 Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 2 Aug 2022 18:05:47 +0200 Subject: [PATCH 31/38] Add support for converting consecutive spaces to HTML We use non-breaking space characters when necessary. --- .../com/fsck/k9/message/TextBodyBuilder.java | 8 +-- .../fsck/k9/message/html/EmailTextToHtml.kt | 2 +- .../com/fsck/k9/message/html/HtmlConverter.kt | 13 ++++- .../com/fsck/k9/message/html/TextToHtml.kt | 56 +++++++++++++++++-- 4 files changed, 67 insertions(+), 12 deletions(-) diff --git a/app/core/src/main/java/com/fsck/k9/message/TextBodyBuilder.java b/app/core/src/main/java/com/fsck/k9/message/TextBodyBuilder.java index 85aba6d706..eb2235cb1b 100644 --- a/app/core/src/main/java/com/fsck/k9/message/TextBodyBuilder.java +++ b/app/core/src/main/java/com/fsck/k9/message/TextBodyBuilder.java @@ -188,7 +188,8 @@ class TextBodyBuilder { private String getSignatureHtml() { String signature = ""; if (!isEmpty(mSignature)) { - signature = "
" + textToHtmlFragment(mSignature) + "
"; + signature = "
" + + HtmlConverter.textToHtmlFragmentWithOriginalWhitespace(mSignature) + "
"; } return signature; } @@ -205,10 +206,7 @@ class TextBodyBuilder { return mQuotedTextHtml; } - /** - * protected for unit-test purposes - */ - protected String textToHtmlFragment(String text) { + private String textToHtmlFragment(String text) { return HtmlConverter.textToHtmlFragment(text); } diff --git a/app/core/src/main/java/com/fsck/k9/message/html/EmailTextToHtml.kt b/app/core/src/main/java/com/fsck/k9/message/html/EmailTextToHtml.kt index 51ac09c715..c14b569fc4 100644 --- a/app/core/src/main/java/com/fsck/k9/message/html/EmailTextToHtml.kt +++ b/app/core/src/main/java/com/fsck/k9/message/html/EmailTextToHtml.kt @@ -11,7 +11,7 @@ class EmailTextToHtml private constructor(private val text: String) { sections.forEach { section -> appendBlockQuoteElement(section.quoteDepth) - TextToHtml.appendAsHtmlFragment(html, section) + TextToHtml.appendAsHtmlFragment(html, section, retainOriginalWhitespace = true) } appendBlockQuoteElement(quoteDepth = 0) diff --git a/app/core/src/main/java/com/fsck/k9/message/html/HtmlConverter.kt b/app/core/src/main/java/com/fsck/k9/message/html/HtmlConverter.kt index 4e0f356ef6..826cabc2b5 100644 --- a/app/core/src/main/java/com/fsck/k9/message/html/HtmlConverter.kt +++ b/app/core/src/main/java/com/fsck/k9/message/html/HtmlConverter.kt @@ -47,6 +47,17 @@ object HtmlConverter { */ @JvmStatic fun textToHtmlFragment(text: String): String { - return TextToHtml.toHtmlFragment(text) + return TextToHtml.toHtmlFragment(text, retainOriginalWhitespace = false) + } + + /** + * Convert a plain text string into an HTML fragment. + * + * This does not convert consecutive spaces to a series of non-breaking spaces followed by a regular space. + * Only use this in combination with CSS to properly display the whitespace. + */ + @JvmStatic + fun textToHtmlFragmentWithOriginalWhitespace(text: String): String { + return TextToHtml.toHtmlFragment(text, retainOriginalWhitespace = true) } } diff --git a/app/core/src/main/java/com/fsck/k9/message/html/TextToHtml.kt b/app/core/src/main/java/com/fsck/k9/message/html/TextToHtml.kt index eff721397c..286c88c2d6 100644 --- a/app/core/src/main/java/com/fsck/k9/message/html/TextToHtml.kt +++ b/app/core/src/main/java/com/fsck/k9/message/html/TextToHtml.kt @@ -2,7 +2,11 @@ package com.fsck.k9.message.html import java.util.ArrayDeque -class TextToHtml private constructor(private val text: CharSequence, private val html: StringBuilder) { +class TextToHtml private constructor( + private val text: CharSequence, + private val html: StringBuilder, + private val retainOriginalWhitespace: Boolean +) { fun appendAsHtmlFragment() { val modifications = HTML_MODIFIERS .flatMap { it.findModifications(text) } @@ -51,11 +55,49 @@ class TextToHtml private constructor(private val text: CharSequence, private val } private fun appendHtmlEncoded(startIndex: Int, endIndex: Int) { + if (retainOriginalWhitespace) { + appendHtmlEncodedWithOriginalWhitespace(startIndex, endIndex) + } else { + appendHtmlEncodedWithNonBreakingSpaces(startIndex, endIndex) + } + } + + private fun appendHtmlEncodedWithOriginalWhitespace(startIndex: Int, endIndex: Int) { for (i in startIndex until endIndex) { appendHtmlEncoded(text[i]) } } + private fun appendHtmlEncodedWithNonBreakingSpaces(startIndex: Int, endIndex: Int) { + var adjustedStartIndex = startIndex + if (startIndex < endIndex && text[startIndex] == SPACE) { + html.append(NON_BREAKING_SPACE) + adjustedStartIndex++ + } + + var spaces = 0 + for (i in adjustedStartIndex until endIndex) { + if (text[i] == SPACE) { + spaces++ + } else { + appendSpaces(spaces) + spaces = 0 + appendHtmlEncoded(text[i]) + } + } + + appendSpaces(spaces) + } + + private fun appendSpaces(count: Int) { + if (count <= 0) return + + repeat(count - 1) { + html.append(NON_BREAKING_SPACE) + } + html.append(SPACE) + } + internal fun appendHtml(text: String) { html.append(text) } @@ -84,18 +126,22 @@ class TextToHtml private constructor(private val text: CharSequence, private val companion object { private val HTML_MODIFIERS = listOf(DividerReplacer, UriLinkifier, SignatureWrapper) + + private const val SPACE = ' ' + private const val NON_BREAKING_SPACE = '\u00A0' + private const val HTML_NEWLINE = "
" private const val TEXT_TO_HTML_EXTRA_BUFFER_LENGTH = 512 @JvmStatic - fun appendAsHtmlFragment(html: StringBuilder, text: CharSequence) { - TextToHtml(text, html).appendAsHtmlFragment() + fun appendAsHtmlFragment(html: StringBuilder, text: CharSequence, retainOriginalWhitespace: Boolean) { + TextToHtml(text, html, retainOriginalWhitespace).appendAsHtmlFragment() } @JvmStatic - fun toHtmlFragment(text: CharSequence): String { + fun toHtmlFragment(text: CharSequence, retainOriginalWhitespace: Boolean): String { val html = StringBuilder(text.length + TEXT_TO_HTML_EXTRA_BUFFER_LENGTH) - TextToHtml(text, html).appendAsHtmlFragment() + TextToHtml(text, html, retainOriginalWhitespace).appendAsHtmlFragment() return html.toString() } } -- GitLab From aed6b6bb7f10b84552a5541243ec5fab1c6379bf Mon Sep 17 00:00:00 2001 From: cketti Date: Mon, 8 Aug 2022 13:23:15 +0200 Subject: [PATCH 32/38] Code style fixes --- .../k9/storage/messages/MoveMessageOperations.kt | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt b/app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt index fc1745c825..62ae5124ed 100644 --- a/app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt +++ b/app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt @@ -29,21 +29,12 @@ internal class MoveMessageOperations( } } - private fun moveFulltextEntry( - database: SQLiteDatabase, - messageId: Long, - destinationMessageId: Long - ) { + private fun moveFulltextEntry(database: SQLiteDatabase, messageId: Long, destinationMessageId: Long) { val values = ContentValues().apply { put("docid", destinationMessageId) } - database.update( - "messages_fulltext", - values, - "docid = ?", - arrayOf(messageId.toString()) - ) + database.update("messages_fulltext", values, "docid = ?", arrayOf(messageId.toString())) } private fun createMessageEntry( -- GitLab From d3262629a41cc43d50057ea6fe47ef79046ae80b Mon Sep 17 00:00:00 2001 From: cketti Date: Mon, 8 Aug 2022 20:41:57 +0200 Subject: [PATCH 33/38] Convert :app:autodiscovery:api to a JVM project --- app/autodiscovery/api/build.gradle | 33 ++++--------------- .../api/src/main/AndroidManifest.xml | 2 -- 2 files changed, 7 insertions(+), 28 deletions(-) delete mode 100644 app/autodiscovery/api/src/main/AndroidManifest.xml diff --git a/app/autodiscovery/api/build.gradle b/app/autodiscovery/api/build.gradle index 7959cef84e..0ae651e62a 100644 --- a/app/autodiscovery/api/build.gradle +++ b/app/autodiscovery/api/build.gradle @@ -1,30 +1,11 @@ -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.android' +apply plugin: 'java-library' +apply plugin: 'kotlin' -dependencies { - implementation project(":app:core") +java { + sourceCompatibility = javaVersion + targetCompatibility = javaVersion } -android { - compileSdkVersion buildConfig.compileSdk - buildToolsVersion buildConfig.buildTools - - defaultConfig { - minSdkVersion buildConfig.minSdk - targetSdkVersion buildConfig.robolectricSdk - } - - lintOptions { - abortOnError false - lintConfig file("$rootProject.projectDir/config/lint/lint.xml") - } - - compileOptions { - sourceCompatibility javaVersion - targetCompatibility javaVersion - } - - kotlinOptions { - jvmTarget = kotlinJvmVersion - } +dependencies { + implementation project(":mail:common") } diff --git a/app/autodiscovery/api/src/main/AndroidManifest.xml b/app/autodiscovery/api/src/main/AndroidManifest.xml deleted file mode 100644 index f94c1b149c..0000000000 --- a/app/autodiscovery/api/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - -- GitLab From 8156a3832bd7c3821fe00b4977e6ec0483189f28 Mon Sep 17 00:00:00 2001 From: cketti Date: Mon, 8 Aug 2022 20:58:54 +0200 Subject: [PATCH 34/38] Move `EmailHelper` from :app:core to :mail:common --- .../common}/src/main/java/com/fsck/k9/helper/EmailHelper.kt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {app/core => mail/common}/src/main/java/com/fsck/k9/helper/EmailHelper.kt (100%) diff --git a/app/core/src/main/java/com/fsck/k9/helper/EmailHelper.kt b/mail/common/src/main/java/com/fsck/k9/helper/EmailHelper.kt similarity index 100% rename from app/core/src/main/java/com/fsck/k9/helper/EmailHelper.kt rename to mail/common/src/main/java/com/fsck/k9/helper/EmailHelper.kt -- GitLab From 694b79ab7bdb41df516aeb1af1bb0e5fdab62c6b Mon Sep 17 00:00:00 2001 From: cketti Date: Mon, 8 Aug 2022 21:07:09 +0200 Subject: [PATCH 35/38] Convert :app:autodiscovery:srvrecords to a JVM project --- app/autodiscovery/api/build.gradle | 2 +- app/autodiscovery/srvrecords/build.gradle | 50 +++---------------- .../srvrecords/src/main/AndroidManifest.xml | 2 - .../srvrecords/SrvServiceDiscoveryTest.kt | 3 +- 4 files changed, 10 insertions(+), 47 deletions(-) delete mode 100644 app/autodiscovery/srvrecords/src/main/AndroidManifest.xml diff --git a/app/autodiscovery/api/build.gradle b/app/autodiscovery/api/build.gradle index 0ae651e62a..55914b0cc0 100644 --- a/app/autodiscovery/api/build.gradle +++ b/app/autodiscovery/api/build.gradle @@ -7,5 +7,5 @@ java { } dependencies { - implementation project(":mail:common") + api project(":mail:common") } diff --git a/app/autodiscovery/srvrecords/build.gradle b/app/autodiscovery/srvrecords/build.gradle index 6744bdc6ff..36a5976850 100644 --- a/app/autodiscovery/srvrecords/build.gradle +++ b/app/autodiscovery/srvrecords/build.gradle @@ -1,52 +1,18 @@ -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.android' +apply plugin: 'java-library' +apply plugin: 'kotlin' + +java { + sourceCompatibility = javaVersion + targetCompatibility = javaVersion +} dependencies { - implementation project(":app:core") - implementation project(":mail:common") - implementation project(":app:autodiscovery:api") + api project(":app:autodiscovery:api") - implementation "com.jakewharton.timber:timber:${versions.timber}" implementation "org.minidns:minidns-hla:${versions.minidns}" - testImplementation project(':app:testing') - testImplementation project(":backend:imap") - testImplementation "org.robolectric:robolectric:${versions.robolectric}" - testImplementation "androidx.test:core:${versions.androidxTestCore}" testImplementation "junit:junit:${versions.junit}" testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" - testImplementation "io.insert-koin:koin-test:${versions.koin}" - testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" -} - -android { - compileSdkVersion buildConfig.compileSdk - buildToolsVersion buildConfig.buildTools - - defaultConfig { - minSdkVersion buildConfig.minSdk - targetSdkVersion buildConfig.robolectricSdk - } - - lintOptions { - abortOnError false - lintConfig file("$rootProject.projectDir/config/lint/lint.xml") - } - - compileOptions { - sourceCompatibility javaVersion - targetCompatibility javaVersion - } - - kotlinOptions { - jvmTarget = kotlinJvmVersion - } - - testOptions { - unitTests { - includeAndroidResources = true - } - } } diff --git a/app/autodiscovery/srvrecords/src/main/AndroidManifest.xml b/app/autodiscovery/srvrecords/src/main/AndroidManifest.xml deleted file mode 100644 index a18001ee09..0000000000 --- a/app/autodiscovery/srvrecords/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/app/autodiscovery/srvrecords/src/test/java/com/fsck/k9/autodiscovery/srvrecords/SrvServiceDiscoveryTest.kt b/app/autodiscovery/srvrecords/src/test/java/com/fsck/k9/autodiscovery/srvrecords/SrvServiceDiscoveryTest.kt index 387edb3ff6..5123822d74 100644 --- a/app/autodiscovery/srvrecords/src/test/java/com/fsck/k9/autodiscovery/srvrecords/SrvServiceDiscoveryTest.kt +++ b/app/autodiscovery/srvrecords/src/test/java/com/fsck/k9/autodiscovery/srvrecords/SrvServiceDiscoveryTest.kt @@ -1,6 +1,5 @@ package com.fsck.k9.autodiscovery.srvrecords -import com.fsck.k9.RobolectricTest import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings import com.fsck.k9.autodiscovery.api.DiscoveryResults import com.fsck.k9.autodiscovery.api.DiscoveryTarget @@ -12,7 +11,7 @@ import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.verifyNoMoreInteractions -class SrvServiceDiscoveryTest : RobolectricTest() { +class SrvServiceDiscoveryTest { @Test fun discover_whenNoMailServices_shouldReturnNoResults() { -- GitLab From f4a47858dac2b8f1e086b23b488fd9029b001432 Mon Sep 17 00:00:00 2001 From: cketti Date: Mon, 8 Aug 2022 23:38:27 +0200 Subject: [PATCH 36/38] Convert :app:autodiscovery:thunderbird to a JVM project --- app/autodiscovery/thunderbird/build.gradle | 52 ++++--------------- .../thunderbird/src/main/AndroidManifest.xml | 2 - .../thunderbird/ThunderbirdAutoconfigTest.kt | 3 +- 3 files changed, 11 insertions(+), 46 deletions(-) delete mode 100644 app/autodiscovery/thunderbird/src/main/AndroidManifest.xml diff --git a/app/autodiscovery/thunderbird/build.gradle b/app/autodiscovery/thunderbird/build.gradle index fe11b712e5..dc48d2c50f 100644 --- a/app/autodiscovery/thunderbird/build.gradle +++ b/app/autodiscovery/thunderbird/build.gradle @@ -1,52 +1,20 @@ -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.android' +apply plugin: 'java-library' +apply plugin: 'kotlin' + +java { + sourceCompatibility = javaVersion + targetCompatibility = javaVersion +} dependencies { - implementation project(":app:core") - implementation project(":mail:common") - implementation project(":app:autodiscovery:api") + api project(":app:autodiscovery:api") - implementation "com.jakewharton.timber:timber:${versions.timber}" + compileOnly 'com.github.cketti:xmlpull-extracted-from-android:1.0' implementation "com.squareup.okhttp3:okhttp:${versions.okhttp}" - testImplementation project(':app:testing') - testImplementation project(":backend:imap") - testImplementation "org.robolectric:robolectric:${versions.robolectric}" - testImplementation "androidx.test:core:${versions.androidxTestCore}" testImplementation "junit:junit:${versions.junit}" testImplementation "com.google.truth:truth:${versions.truth}" testImplementation "org.mockito:mockito-inline:${versions.mockito}" testImplementation "org.mockito.kotlin:mockito-kotlin:${versions.mockitoKotlin}" - testImplementation "io.insert-koin:koin-test:${versions.koin}" - testImplementation "io.insert-koin:koin-test-junit4:${versions.koin}" -} - -android { - compileSdkVersion buildConfig.compileSdk - buildToolsVersion buildConfig.buildTools - - defaultConfig { - minSdkVersion buildConfig.minSdk - targetSdkVersion buildConfig.robolectricSdk - } - - lintOptions { - abortOnError false - lintConfig file("$rootProject.projectDir/config/lint/lint.xml") - } - - compileOptions { - sourceCompatibility javaVersion - targetCompatibility javaVersion - } - - kotlinOptions { - jvmTarget = kotlinJvmVersion - } - - testOptions { - unitTests { - includeAndroidResources = true - } - } + testImplementation 'com.github.cketti:kxml2-extracted-from-android:1.0' } diff --git a/app/autodiscovery/thunderbird/src/main/AndroidManifest.xml b/app/autodiscovery/thunderbird/src/main/AndroidManifest.xml deleted file mode 100644 index b3794dd016..0000000000 --- a/app/autodiscovery/thunderbird/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/app/autodiscovery/thunderbird/src/test/java/com/fsck/k9/autodiscovery/thunderbird/ThunderbirdAutoconfigTest.kt b/app/autodiscovery/thunderbird/src/test/java/com/fsck/k9/autodiscovery/thunderbird/ThunderbirdAutoconfigTest.kt index 3ab8c970fd..4648f67560 100644 --- a/app/autodiscovery/thunderbird/src/test/java/com/fsck/k9/autodiscovery/thunderbird/ThunderbirdAutoconfigTest.kt +++ b/app/autodiscovery/thunderbird/src/test/java/com/fsck/k9/autodiscovery/thunderbird/ThunderbirdAutoconfigTest.kt @@ -1,6 +1,5 @@ package com.fsck.k9.autodiscovery.thunderbird -import com.fsck.k9.RobolectricTest import com.fsck.k9.autodiscovery.api.DiscoveredServerSettings import com.fsck.k9.autodiscovery.api.DiscoveryResults import com.fsck.k9.mail.AuthType @@ -8,7 +7,7 @@ import com.fsck.k9.mail.ConnectionSecurity import com.google.common.truth.Truth.assertThat import org.junit.Test -class ThunderbirdAutoconfigTest : RobolectricTest() { +class ThunderbirdAutoconfigTest { private val parser = ThunderbirdAutoconfigParser() @Test -- GitLab From 098e89b2971d7a7e268657ef7baf994c3be93267 Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 9 Aug 2022 11:42:36 +0200 Subject: [PATCH 37/38] Update translations --- .../legacy/src/main/res/values-ar/strings.xml | 1 - .../legacy/src/main/res/values-be/strings.xml | 1 - .../legacy/src/main/res/values-bg/strings.xml | 1 - .../legacy/src/main/res/values-br/strings.xml | 1 - .../legacy/src/main/res/values-ca/strings.xml | 5 +- .../legacy/src/main/res/values-cs/strings.xml | 1 - .../legacy/src/main/res/values-cy/strings.xml | 1 - .../legacy/src/main/res/values-da/strings.xml | 1 - .../legacy/src/main/res/values-de/strings.xml | 1 - .../legacy/src/main/res/values-el/strings.xml | 1 - .../legacy/src/main/res/values-eo/strings.xml | 1 - .../legacy/src/main/res/values-es/strings.xml | 1 - .../legacy/src/main/res/values-et/strings.xml | 7 +- .../legacy/src/main/res/values-eu/strings.xml | 1 - .../legacy/src/main/res/values-fa/strings.xml | 1 - .../legacy/src/main/res/values-fi/strings.xml | 1 - .../legacy/src/main/res/values-fr/strings.xml | 1 - .../legacy/src/main/res/values-fy/strings.xml | 1 - .../legacy/src/main/res/values-gd/strings.xml | 1 - .../src/main/res/values-gl-rES/strings.xml | 1 - .../legacy/src/main/res/values-gl/strings.xml | 1 - .../legacy/src/main/res/values-hr/strings.xml | 1 - .../legacy/src/main/res/values-hu/strings.xml | 1 - .../legacy/src/main/res/values-in/strings.xml | 1 - .../legacy/src/main/res/values-is/strings.xml | 1 - .../legacy/src/main/res/values-it/strings.xml | 5 +- .../legacy/src/main/res/values-iw/strings.xml | 1 - .../legacy/src/main/res/values-ja/strings.xml | 2 +- .../legacy/src/main/res/values-ko/strings.xml | 1 - .../legacy/src/main/res/values-lt/strings.xml | 1 - .../legacy/src/main/res/values-lv/strings.xml | 1 - .../legacy/src/main/res/values-ml/strings.xml | 1 - .../legacy/src/main/res/values-nb/strings.xml | 1 - .../legacy/src/main/res/values-nl/strings.xml | 543 +++++++++--------- .../legacy/src/main/res/values-pl/strings.xml | 1 - .../src/main/res/values-pt-rBR/strings.xml | 3 +- .../src/main/res/values-pt-rPT/strings.xml | 1 - .../legacy/src/main/res/values-ro/strings.xml | 1 - .../legacy/src/main/res/values-ru/strings.xml | 1 - .../legacy/src/main/res/values-sk/strings.xml | 1 - .../legacy/src/main/res/values-sl/strings.xml | 5 +- .../legacy/src/main/res/values-sq/strings.xml | 1 - .../legacy/src/main/res/values-sr/strings.xml | 1 - .../legacy/src/main/res/values-sv/strings.xml | 1 - .../legacy/src/main/res/values-tr/strings.xml | 1 - .../legacy/src/main/res/values-uk/strings.xml | 1 - .../src/main/res/values-zh-rCN/strings.xml | 1 - .../src/main/res/values-zh-rTW/strings.xml | 1 - 48 files changed, 293 insertions(+), 318 deletions(-) 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 0176257ea9..6f34880a73 100644 --- a/app/ui/legacy/src/main/res/values-ar/strings.xml +++ b/app/ui/legacy/src/main/res/values-ar/strings.xml @@ -611,7 +611,6 @@ احفظ أو إلغ الرسالة؟ هل تريد إلغاء الرسالة ؟ هل أنت متأكد من أنك تود إلغاء هذه الرسالة ؟ - حدّد النص للنسخ تأكيد الحذف أتريد حذف هذه الرسالة؟ نعم 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 9d8f5f222c..db88ba087a 100644 --- a/app/ui/legacy/src/main/res/values-be/strings.xml +++ b/app/ui/legacy/src/main/res/values-be/strings.xml @@ -681,7 +681,6 @@ K-9 Mail - шматфункцыянальны свабодны паштовы к Захаваць альбо адкінуць змены? Скасаваць ліст? Сапраўды хочаце скасаваць ліст? - Абраць тэкст для капіявання. Выдаліць лакальныя лісты? Гэта выдаліць усе лакальныя лісты з каталога. Лісты на серверы не крануцца. Выдаліць лісты 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 530e445c0f..85a3ee775d 100644 --- a/app/ui/legacy/src/main/res/values-bg/strings.xml +++ b/app/ui/legacy/src/main/res/values-bg/strings.xml @@ -678,7 +678,6 @@ K-9 Mail е мощен, безплатен имейл клиент за Андр Запази или Откажи промените? Изтриване на съобщението? Сигурен ли сте, че желаете да изтрието това съобщение? - Изберете текст за копиране. Изчисти локалните съобщения? Това ще премахне всички локални съобщения от папката. Няма да бъдат изтрити съобщения от сървара. Изчисти съобщения 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 19e80a9da3..2abaf87a9d 100644 --- a/app/ui/legacy/src/main/res/values-br/strings.xml +++ b/app/ui/legacy/src/main/res/values-br/strings.xml @@ -648,7 +648,6 @@ Danevellit beugoù, kenlabourit war keweriusterioù nevez ha savit goulennoù wa Enrollañ pe dilezel ar gemennadenn? Dilezel ar gemennadenn? Sur oc’h e fell deoc’h dilezel ar gemennadenn? - Diuzit an destenn da eilañ Kadarnat an dilamadur Fellout a ra deoc’h dilemel ar gemennadenn-mañ? 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 92e68f1ff5..c28db5e2c9 100644 --- a/app/ui/legacy/src/main/res/values-ca/strings.xml +++ b/app/ui/legacy/src/main/res/values-ca/strings.xml @@ -12,6 +12,8 @@ Llicència d\'Apache, versió 2.0 Projecte de codi obert Lloc web + Manual de l\'usuari + Obtingueu ajuda Fòrum d\'usuaris Fediverse Twitter @@ -167,7 +169,9 @@ Si us plau, envieu informes d\'errors, contribuïu-hi amb noves millores i feu p Ha fallat l\'autenticació Ha fallat l\'autenticació de %s. Actualitzeu la configuració del servidor. + Error de notificació + S\'ha produït un error en intentar crear una notificació del sistema per a un missatge nou. El motiu més probable és que falti un so de notificació.\n\nToqueu per obrir la configuració de notificació. S\'està comprovant el correu: %s:%s S\'està comprovant el correu S\'està enviant correu: %s @@ -732,7 +736,6 @@ Si us plau, envieu informes d\'errors, contribuïu-hi amb noves millores i feu p Voleu desar o descartar els canvis? Descarto el missatge? Segur que voleu descartar aquest missatge? - Seleccioneu el text a copiar. Voleu netejar els missatges locals? Això suprimirà tots els missatges locals de la carpeta. No se suprimirà cap missatge del servidor. Neteja els missatges 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 a747a7c96a..f998146ee5 100644 --- a/app/ui/legacy/src/main/res/values-cs/strings.xml +++ b/app/ui/legacy/src/main/res/values-cs/strings.xml @@ -740,7 +740,6 @@ Hlášení o chyb, úpravy pro nové funkce a dotazy zadávejte prostřednictví Uložit nebo zahodit změny? Zahodit zprávu? Opravdu chcete tuto zprávu zahodit? - Vyberte text pro kopírování. Vymazat zprávy uložené lokálně? Toto ze složky odebere všechny lokálně uložené zprávy. Ze serveru nebudou vymazány žádné zprávy. Vyčistit zprávy 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 feb2433950..5116b0e7ed 100644 --- a/app/ui/legacy/src/main/res/values-cy/strings.xml +++ b/app/ui/legacy/src/main/res/values-cy/strings.xml @@ -733,7 +733,6 @@ Plîs rho wybod am unrhyw wallau, syniadau am nodweddion newydd, neu ofyn cwesti Cadw neu Ddiddymu\'r newidiadau? Dileu\'r neges? Wyt ti\'n sicr dy fod am ddileu\'r neges hon? - Dewisa destun i\'w gopïo. Clirio negeseuon lleol? Bydd hyn yn tynnu pob neges leol o\'r ffolder. Ni chaiff negeseuon eu dileu o\'r gweinydd. Clirio negeseuon 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 663d0c276d..ce9a14db47 100644 --- a/app/ui/legacy/src/main/res/values-da/strings.xml +++ b/app/ui/legacy/src/main/res/values-da/strings.xml @@ -707,7 +707,6 @@ Rapporter venligst fejl, forslag til nye funktioner eller stil spørgsmål på: Gem eller Kassér ændringer? Annuller meddelelse? Er du sikker på at du ønsker at annullere denne meddelelse? - Vælg tekst som skal kopieres. Ryd lokale beskeder Dette vil slette alle lokale beskeder fra mappen. Ingen beskeder slettes fra serveren. Rens beskeder 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 eecd25df4c..0ec38c7c78 100644 --- a/app/ui/legacy/src/main/res/values-de/strings.xml +++ b/app/ui/legacy/src/main/res/values-de/strings.xml @@ -736,7 +736,6 @@ Bitte senden Sie Fehlerberichte, Ideen für neue Funktionen und stellen Sie Frag Änderungen speichern oder verwerfen? Nachricht verwerfen? Sind Sie sicher, dass Sie die Nachricht verwerfen möchten? - Text auswählen, um ihn zu kopieren. Lokale Nachrichten löschen? Dadurch werden alle lokalen Nachrichten aus dem Ordner entfernt. Es werden keine Nachrichten vom Server gelöscht. Nachrichten löschen 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 8a610f542e..4540bddf3d 100644 --- a/app/ui/legacy/src/main/res/values-el/strings.xml +++ b/app/ui/legacy/src/main/res/values-el/strings.xml @@ -696,7 +696,6 @@ Αποθήκευση ή Απόρριψη αλλαγών; Απόρριψη μηνύματος; Είστε σίγουροι ότι θέλετε να απορρίψετε αυτό το μήνυμα; - Επιλογή κειμένου για αντιγραφή Καθαρισμός τοπικών μηνυμάτων; Αυτό θα καταργήσει όλα τα τοπικά μηνύματα από το φάκελο. Δε θα διαγραφούν μηνύματα από τον εξυπηρετητή. Καθαρισμός μηνυμάτων 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 8384b37216..2c0f23711b 100644 --- a/app/ui/legacy/src/main/res/values-eo/strings.xml +++ b/app/ui/legacy/src/main/res/values-eo/strings.xml @@ -696,7 +696,6 @@ Bonvolu raporti erarojn, kontribui novajn eblojn kaj peti pri novaj funkcioj per Ĉu konservi aŭ nuligi ŝanĝojn? Ĉu forigi mesaĝon? Ĉu vi certe volas forigi tiun ĉi mesaĝon? - Elektu tekston por kopii. Ĉu forviŝi lokajn mesaĝojn? Tio ĉi forigos ĉiujn lokajn mesaĝojn el la mesaĝujo. Neniuj mesaĝoj estos forigitaj el la servilo. Forviŝi mesaĝojn 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 abf543fe8e..1e8241f2c0 100644 --- a/app/ui/legacy/src/main/res/values-es/strings.xml +++ b/app/ui/legacy/src/main/res/values-es/strings.xml @@ -736,7 +736,6 @@ Puedes informar de fallos, contribuir con su desarrollo y hacer preguntas en ¿Guardar o descartar cambios? ¿Descartar mensaje? ¿Seguro que quieres descartar este mensaje? - Selecciona el texto a copiar. ¿Limpiar mensajes locales? Esto borrará todos los mensajes locales de la carpeta. No se eliminará ningún mensaje en el servidor. Limpiar mensajes 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 eb5d57b305..eddc5ec0b8 100644 --- a/app/ui/legacy/src/main/res/values-et/strings.xml +++ b/app/ui/legacy/src/main/res/values-et/strings.xml @@ -11,7 +11,9 @@ Lähtekood Apache litsents, versioon 2.0 Avatud lähtekoodiga projekt - Veebileht + Veebisait + Kasutusjuhend + Abiteave Foorum huvilistele Fediverse Twitter @@ -168,7 +170,9 @@ Veateated saad saata, kaastööd teha ning küsida teavet järgmisel lehel: Autentimine ebaõnnestus Autentimine ebaõnnestus konto %s puhul. Uuenda serveri seadeid. + Viga teavitusel + Uue saabunud sõnumi kohta süsteemise teavituse loomisel tekkis viga. Üks võimalik põhjus on teavitusele määratud heli puudumine.\n\nAva teavituste seadistused. Kontrollib e-kirju: %s:%s Kontrollib e-kirju Saadab e-kirja: %s @@ -735,7 +739,6 @@ Veateated saad saata, kaastööd teha ning küsida teavet järgmisel lehel: Salvestada või loobuda muudatustest? Kas loobud kirjast? Kas sa oled kindel, et soovid kirjast loobuda? - Vali kopeerimiseks tekst. Kas kustutame kohalikud kirjad? Sellega kustutame kõik kirjade kohalikud koopiad antud kaustast. Serveris asuvad kirjad jäävad alles. Kustuta kirjad 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 f8cf13713d..f1ec34ef5d 100644 --- a/app/ui/legacy/src/main/res/values-eu/strings.xml +++ b/app/ui/legacy/src/main/res/values-eu/strings.xml @@ -684,7 +684,6 @@ Mesedez akatsen berri emateko, ezaugarri berriak gehitzeko eta galderak egiteko Gorde edo baztertu aldaketak? Baztertu mezua? Ziur mezu hau baztertu nahi duzula? - Hautatu kopiatzeko testua. Garbitu mezu lokalak? Honek tokiko mezu guztiak kenduko ditu karpetatik. Ez da mezurik ezabatuko zerbitzarian. Garbitu mezuak 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 ec66e10b44..4778ea848e 100644 --- a/app/ui/legacy/src/main/res/values-fa/strings.xml +++ b/app/ui/legacy/src/main/res/values-fa/strings.xml @@ -723,7 +723,6 @@ تغییرات حفظ شود یا دور ریخته شود؟ پیام از بین برود؟ آیا از دورانداختن این پیام مطمئن هستید؟ - متن را انتخاب کنید تا کپی شود. پیام‌ها از روی دستگاه پاک شود؟ این کار همهٔ پیام‌ها را از پوشهٔ روی دستگاه پاک می‌کند. هیچ پیامی از روی کارساز پاک نمی‌شود. پاک‌کردن پیام‌ها 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 6e55cc11c6..15d34f76b9 100644 --- a/app/ui/legacy/src/main/res/values-fi/strings.xml +++ b/app/ui/legacy/src/main/res/values-fi/strings.xml @@ -735,7 +735,6 @@ Ilmoita virheistä, ota osaa sovelluskehitykseen ja esitä kysymyksiä osoittees Tallennetaanko vai hylätäänkö muutokset? Hylkää viesti? Haluatko varmasti hylätä tämän viestin? - Valitse kopioitava teksti. Poistetaanko paikalliset viestit? Tämä poistaa kaikki paikalliset viestit kansiosta. Viestejä ei poisteta palvelimelta. Poista viestit 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 9bc3f709d0..4aeb628f93 100644 --- a/app/ui/legacy/src/main/res/values-fr/strings.xml +++ b/app/ui/legacy/src/main/res/values-fr/strings.xml @@ -739,7 +739,6 @@ Rapportez les bogues, recommandez de nouvelles fonctions et posez vos questions Enregistrer ou abandonner les changements ? Abandonner le courriel ? Voulez-vous vraiment abandonner ce courriel ? - Sélectionner le texte à copier. Effacer les courriels locaux ? Tous les courriels locaux seront supprimés du dossier. Aucun courriel ne sera supprimé du serveur. Effacer les courriels 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 ad2c4723a2..3f42c9df78 100644 --- a/app/ui/legacy/src/main/res/values-fy/strings.xml +++ b/app/ui/legacy/src/main/res/values-fy/strings.xml @@ -731,7 +731,6 @@ Graach flaterrapporten stjoere, bydragen foar nije funksjes en fragen stelle op Wizigingen bewarje of ferwerpe? Berjocht ôfbrekke? Binne jo wis dat jo dit berjocht fuortsmite wolle - Selektearje tekst om te kopiearjen. Lokale berjochten wiskje? Dit sil alle lokale berjochten út dizze map wiskje. Der wurde gjin berjochten fan de server wiske. Berjochten wiskje 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 f78c709f96..a862afd95f 100644 --- a/app/ui/legacy/src/main/res/values-gd/strings.xml +++ b/app/ui/legacy/src/main/res/values-gd/strings.xml @@ -668,7 +668,6 @@ A bheil thu airson an teachdaireachd seo a shàbhaladh no a thilgeil air falbh\? A bheil thu airson an teachdaireachd seo a thilgeil air falbh\? A bheil thu cinnteach gu bheil thu airson an teachdaireachd seo a thilgeil air falbh\? - Tagh teacsa airson lethbhreac a dhèanamh dheth. Dearbh an sguabadh às A bheil thu cinnteach gu bheil thu airson an teachdaireachd seo a sguabadh às\? 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 af0ff0fa96..a19b136d35 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 @@ -545,7 +545,6 @@ Gardar ou descartar esta mensaxe? Descartar mensaxe? Tes a certeza de querer descartar esta mensaxe? - Seleccionar texto para copiar. Confirmar borrado Queres eliminar esta mensaxe? 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 fb5e0e3369..1c1f9dc7b9 100644 --- a/app/ui/legacy/src/main/res/values-gl/strings.xml +++ b/app/ui/legacy/src/main/res/values-gl/strings.xml @@ -702,7 +702,6 @@ Por favor envíen informes de fallos, contribúa con novas características e co Gardar ou desbotar os cambios? Descartar mensaxe? Tes a certeza de querer descartar esta mensaxe? - Seleccionar texto a copiar. Borrar as mensaxes locais? Isto eliminará todas as mensaxes locais do cartafol. Non se eliminarán as mensaxes deste servidor. Borrar mensaxes 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 83815e066a..d3da56b326 100644 --- a/app/ui/legacy/src/main/res/values-hr/strings.xml +++ b/app/ui/legacy/src/main/res/values-hr/strings.xml @@ -639,7 +639,6 @@ Spremiti ili Odbaciti ovu poruku? Odbaciti poruku? Jeste li sigurni da želite odbaciti ovu poruku? - Odaberi tekst za kopiranje.. Očistiti lokalne poruke? Očisti poruke Potvrda brisanja 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 7f00550e51..fa50446e9a 100644 --- a/app/ui/legacy/src/main/res/values-hu/strings.xml +++ b/app/ui/legacy/src/main/res/values-hu/strings.xml @@ -696,7 +696,6 @@ Hibajelentések beküldésével közreműködhet az új funkciókban, és kérd Menti vagy elveti a változtatásokat? Elveti az üzenet? Biztosan el szeretné vetni ezt az üzenetet? - Szöveg kijelölése a másoláshoz. Helyi üzenetek kiürítése Ez eltávolítja az összes helyi üzenetet mappából. Az üzenetek nem kerülnek törlésre a szerverről. Üzenetek kiürítése 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 a6ff5108a9..db82a65874 100644 --- a/app/ui/legacy/src/main/res/values-in/strings.xml +++ b/app/ui/legacy/src/main/res/values-in/strings.xml @@ -675,7 +675,6 @@ Kirimkan laporan bug, kontribusikan fitur baru dan ajukan pertanyaan di Simpan atau Buang pesan ini? Buang pesan? Anda yakin ingin membuang pesan ini? - Pilih teks yang akan disalin. Bersihkan pesan lokal? Ini akan menghapus semua pesan lokal dari folder. Tidak ada pesan yang akan dihapus dari server. Bersihkan pesan 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 742e28c0af..42c44c837d 100644 --- a/app/ui/legacy/src/main/res/values-is/strings.xml +++ b/app/ui/legacy/src/main/res/values-is/strings.xml @@ -697,7 +697,6 @@ Sendu inn villuskýrslur, leggðu fram nýja eiginleika og spurðu spurninga á Vista eða henda breytingum? Henda skilaboðum? Ertu viss um að þú viljir henda þessum skilaboðum? - Veldu texta til að afrita. Hreinsa staðvær skilaboð? Þetta mun fjarlægja öll staðvær skilaboð úr þessari möppu. Engum skilaboðum verður eytt af póstþjóninum. Hreinsa skilaboð 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 bab28d5de4..f42bcb9fef 100644 --- a/app/ui/legacy/src/main/res/values-it/strings.xml +++ b/app/ui/legacy/src/main/res/values-it/strings.xml @@ -12,6 +12,8 @@ Apache License, Versione 2.0 Progetto Open Source Sito web + Manuale utente + Hai bisogno d\'aiuto? Forum utenti Fediverse Twitter @@ -170,7 +172,9 @@ Invia segnalazioni di bug, contribuisci con nuove funzionalità e poni domande s Autenticazione non riuscita Autenticazione non riuscita per %s. Aggiorna le impostazioni del server. + Errore su notifica + È avvenuto un errore durante la creazione di un avviso di ricezione di un nuovo messaggio. Questo errore è probabilmente dovuto all\'avviso sonoro di ricezione messaggio, che può non essere indicato, oppure non è stato trovato. \n\nClicca qui per esaminare i parametri di notifica. Controllo posta: %s:%s Controllo posta Invio posta: %s @@ -735,7 +739,6 @@ Invia segnalazioni di bug, contribuisci con nuove funzionalità e poni domande s Vuoi salvare o scartare le modifiche? Vuoi eliminare il messaggio? Sei sicuro di voler eliminare questo messaggio? - Seleziona il testo da copiare. Vuoi cancellare i messaggi locali? Questo rimuoverà tutti i messaggi locali dalla cartella. Nessun messaggio sarà eliminato dal server. Cancella messaggi 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 4d8c5a194c..52ce836d7a 100644 --- a/app/ui/legacy/src/main/res/values-iw/strings.xml +++ b/app/ui/legacy/src/main/res/values-iw/strings.xml @@ -545,7 +545,6 @@ לשמור או להשליך הודעה זו? לשמור או לבטל שינויים? להשליך את ההודעה? - בחר טקסט כדי להעתיק. אשר מחיקה אתה בטוח שאתה רוצה למחוק את ההודעה הזאת? מחק 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 e479d2962c..5e974b73c4 100644 --- a/app/ui/legacy/src/main/res/values-ja/strings.xml +++ b/app/ui/legacy/src/main/res/values-ja/strings.xml @@ -13,6 +13,7 @@ オープンソースプロジェクト ウェブサイト ユーザーマニュアル + 助けを得る ユーザーフォーラム Fediverse Twitter @@ -733,7 +734,6 @@ K-9 は大多数のメールクライアントと同様に、ほとんどのフ 変更を保存しますか? メッセージ破棄? このメッセージを破棄しますか? - 選択したテキストをコピーします ローカルのメッセージをクリアしますか? この操作はすべてのローカルメッセージをフォルダーから削除します。 サーバ上のメッセージは削除されません。 メッセージのクリア 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 7050bf0dcb..7ecc6f9b3c 100644 --- a/app/ui/legacy/src/main/res/values-ko/strings.xml +++ b/app/ui/legacy/src/main/res/values-ko/strings.xml @@ -589,7 +589,6 @@ 이 메시지를 저장하거나 버리시겠습니까? 메시지 버림 메시지 작성을 취소하고 버리겠습니까? - 복사할 텍스트 선택 삭제 확인 이 메시지를 삭제하시겠습니까? 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 c1edc32ebb..6b046d1457 100644 --- a/app/ui/legacy/src/main/res/values-lt/strings.xml +++ b/app/ui/legacy/src/main/res/values-lt/strings.xml @@ -735,7 +735,6 @@ Pateikite pranešimus apie klaidas, prisidėkite prie naujų funkcijų kūrimo i Išsaugoti ar atmesti pakeitimus? Nepaisyti laiško? Ar tikrai norite nepaisyti šio pranešimo? - Pasirinkti tesktą kopijavimui. Išvalyti vietinius laiškus? Tai iš aplanko pašalins visus vietinius laiškus. Iš serverio laiškai nebus ištrinti. Išvalyti laiškus 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 ded9952a38..6185f0beda 100644 --- a/app/ui/legacy/src/main/res/values-lv/strings.xml +++ b/app/ui/legacy/src/main/res/values-lv/strings.xml @@ -703,7 +703,6 @@ pat %d vairāk Saglabāt vai atcelt izmaiņas? Izmest vēstuli? Vai tiešām izmest šo vēstuli? - Iezīmēt tekstu, lai kopētu. Izdzēst ierīcē esošās vēstules? Šādi no mapes tiks izdzēstas visas lejupielādētās vēstules. No servera vēstules netiks izdzēstas. Izdzēst vēstules 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 4051047303..685299adf2 100644 --- a/app/ui/legacy/src/main/res/values-ml/strings.xml +++ b/app/ui/legacy/src/main/res/values-ml/strings.xml @@ -703,7 +703,6 @@ ഈ സന്ദേശം സംരക്ഷിക്കണോ അതോ നിരസിക്കണോ? സന്ദേശം നിരസിക്കണോ? ഈ സന്ദേശം നിരസിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ? - പകർത്താൻ വാചകം തിരഞ്ഞെടുക്കുക. പ്രാദേശിക സന്ദേശങ്ങൾ മായ്‌ക്കണോ? ഇത് എല്ലാ പ്രാദേശിക സന്ദേശങ്ങളും ഫോൾഡറിൽ നിന്ന് നീക്കംചെയ്യും. സെർവറിൽ നിന്ന് സന്ദേശങ്ങളൊന്നും ഇല്ലാതാക്കില്ല. സന്ദേശങ്ങൾ മായ്‌ക്കുക 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 660828fec9..5a0d0cfd39 100644 --- a/app/ui/legacy/src/main/res/values-nb/strings.xml +++ b/app/ui/legacy/src/main/res/values-nb/strings.xml @@ -674,7 +674,6 @@ til %d flere Lagre eller Forkast denne meldingen? Forkast melding? Er du sikker på at du vil forkaste denne meldingen? - Velg teksten du vil kopiere. Fjern lokale meldinger? Dette vil fjerne alle lokale meldinger fra mappen. Ingen meldinger vil bli slettet fra tjener. Fjern meldinger 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 487906a775..9861d682c3 100644 --- a/app/ui/legacy/src/main/res/values-nl/strings.xml +++ b/app/ui/legacy/src/main/res/values-nl/strings.xml @@ -7,11 +7,13 @@ K-9 Accounts K-9 Ongelezen - Het K-9 ontwikkelingsteam + Het K-9-ontwikkelteam Broncode - Apache Licentie, versie 2.0 - Openbroncode-project + Apache-licentie, versie 2.0 + Openbroncodeproject Website + Gebruikershandleiding + Hulp verkrijgen Gebruikersforum Fediverse Twitter @@ -25,23 +27,23 @@ Ontdek wat er nieuw is in deze versie Welkom bij K-9 Mail - K-9 Mail is een gratis krachtige e-mail client voor Android.

De verbeterde mogelijkheden bestaan uit ondermeer: + K-9 Mail is een gratis krachtige e-mailclient voor Android.

De verbeterde mogelijkheden bestaan ondermeer uit:

    -
  • Push mail middels IMAP IDLE
  • +
  • Pushmail middels IMAP IDLE
  • Betere prestaties
  • -
  • Bericht herclassificatie
  • -
  • E-mail handtekeningen
  • +
  • Berichtherclassificatie
  • +
  • E-mailhandtekeningen
  • Bcc naar jezelf
  • -
  • Map abonnementen
  • +
  • Mapabonnementen
  • Synchronisatie van alle mappen
  • -
  • Antwoord adres instellen
  • -
  • Toetsenbord snelkoppelingen
  • -
  • Betere IMAP ondersteuning
  • +
  • Antwoordadres instellen
  • +
  • Toetsenbordsnelkoppelingen
  • +
  • Betere IMAP-ondersteuning
  • Bijlage opslaan naar SD
  • Prullenbak legen
  • Berichten sorteren
  • -
  • en meer …
  • +
  • en meer…

Houd er rekening mee dat K-9 de meeste gratis Hotmail-accounts niet ondersteund, en net als veel e-mailclients, problemen kan hebben om te verbinden met Microsoft Exchange. @@ -51,19 +53,19 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op

]]>
- -- \nVerstuurd vanaf mijn Android apparaat met K-9 Mail. + -- \nVerstuurd vanaf mijn Android-apparaat met K-9 Mail. - Het account \"%s\" wordt verwijderd uit K-9 Mail. + De account ‘%s’ wordt uit K-9 Mail verwijderd. Auteurs - Over K-9 mail + Over K-9 Mail Accounts Geavanceerd Nieuw bericht - Antwoorden - Allen antwoorden + Beantwoorden + Allen beantwoorden Doorsturen - Doorsturen als bijlage + Als bijlage doorsturen Kies account Kies een map Verplaatsen naar … @@ -76,22 +78,22 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Annuleren Verzenden Er is geen onderwerp ingevuld. Tik nogmaals om toch te versturen. - Antwoorden - Iedereen antwoorden + Beantwoorden + Allen beantwoorden Verwijderen Archief Spam Doorsturen Doorsturen als bijlage - Bewerken als nieuw bericht + Als nieuw bericht bewerken Verplaatsen - Verplaatsen naar concepten + Naar concepten verplaatsen Verzenden … Opnieuw opslaan … Klaar Vergeten - Opslaan als concept - Controleer e-mail + Als concept opslaan + Op e-mail controleren Berichten versturen Maplijst verversen Map vinden @@ -104,27 +106,27 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Instellingen Mappen beheren Accountinstellingen - Verwijder account - Markeer als gelezen + Account verwijderen + Als gelezen markeren Delen Kies afzender Ster toevoegen Ster verwijderen - Kopieer + Kopieren Uitschrijven - Laat koppen zien + Koppen tonen Adres naar klembord gekopieerd Adressen naar klembord gekopieerd - De onderwerpsregel is naar het klembord gekopieerd + Het onderwerp is naar het klembord gekopieerd Schakel naar donker thema Schakel naar licht thema - Markeer als ongelezen - Lees rapport - Lees rapport vragen - Geen lees rapport vragen - Voeg bijlage toe + Als ongelezen markeren + Rapport lezen + Leesbevestiging vragen + Geen leesbevestiging vragen + Bijlage toevoegen Prullenbak legen Wissen Over @@ -162,7 +164,9 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Authenticatie mislukt Authenticatie mislukt voor %s. Werk de server instellingen bij. + Meldingsfout + Er is een fout opgetreden tijdens het maken van een systeemmelding voor een nieuw bericht. De reden is waarschijnlijk een ontbrekend meldingsgeluid.\n\nTik om meldingsinstellingen te openen. Controleer berichten: %s:%s Controleren berichten Versturen van berichten: %s @@ -174,16 +178,16 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Meldingen gerelateerd aan berichten Diversen Overige meldingen zoals fouten en dergelijke. - Postvak-in - Postvak-uit + Postvak In + Postvak Uit Concepten Prullenbak Verzonden Fout bij verzenden van berichten Versie - Debug log toestaan - Log extra diagnostische informatie - Log gevoelige informatie + Debuglog toestaan + Extra diagnostische informatie loggen + Gevoelige informatie loggen Kan wachtwoorden laten zien in logs. Logs exporteren Exporteren is geslaagd. Er zit mogelijk persoonlijke informatie in de logs. Kies verstandig naar wie je je logs stuurt. @@ -191,7 +195,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Laad meer berichten Aan:%s Onderwerp - Bericht tekst + Berichttekst Handtekening -------- Origineel bericht -------- Onderwerp: @@ -205,7 +209,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op De ontvanger is niet (volledig) ingevuld! Geen e-mailadres gevonden. Sommige bijlagen kunnen niet worden doorgestuurd omdat ze niet zijn gedownload. - Dit bericht kan niet worden doorgestuurd omdat bijlagen niet zijn gedownload. + Dit bericht kan niet worden doorgestuurd, omdat bijlagen niet zijn gedownload. Geciteerd bericht bijvoegen Citaattekst verwijderen Citaattekst bewerken @@ -215,9 +219,9 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op CC: BCC: Kan bijlage niet opslaan. - Laat afbeeldingen zien + Afbeeldingen tonen Niet in staat viewer te vinden voor %s. - Download compleet bericht + Compleet bericht downloaden via %1$s Meer van deze afzender Van %s @@ -226,14 +230,14 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Sterren weergeven Sterren geven gemarkeerde berichten aan Preview regels - Toon naam bij bericht + Naam bij bericht tonen Geef bij voorkeur naam van afzender/geadresseerde weer i.p.v. e-mailadres Correspondent boven onderwerp - Correspondent namen boven de onderwerp-regel, niet eronder - Toon naam uit contactenlijst - Gebruik naam uit het adresboek - Kleuren contacten - Kleur de namen in jouw contact lijst + Correspondentnamen boven het onderwerp, niet eronder + Naam uit contactenlijst tonen + Naam uit het adresboek gebruiken + Contacten inkleuren + Kleur de namen in jouw contactlijst Kleur voor namen van contactpersonen Vaste breedte lettertypen Gebruik een lettertype met vaste breedte bij het weergeven van plain-tekstberichten @@ -243,49 +247,49 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Terug naar berichtenlijst na bericht verwijderen Volgend bericht laten zien na verwijderen Standaard volgend bericht laten zien na verwijderen - Bevestig acties + Acties bevestigen Toon een dialoogvenster altijd wanneer je de geselecteerde acties uitvoert - Verwijder + Verwijderen Berichten met een ster verwijderen (in berichtweergave) Spam Bericht afbreken - Markeer alles als gelezen - Verwijder (van notificaties) - Mail client verbergen - K-9 gebruikersagent van e-mailkoppen verwijderen + Alles als gelezen markeren + Verwijderen (van notificaties) + Mailclient verbergen + K-9-gebruikersagent van e-mailkoppen verwijderen Tijdzone verbergen Gebruik UTC in plaats van de lokale tijdzone in de e-mailkoppen en bij het antwoorden van e-mail - Toon \'Verwijder\' knop + ‘Verwijder’-knop tonen Nooit Notificatie voor los bericht Altijd - Start scherm notificatie - Geen start scherm notificatie + Startschermnotificaties + Geen startschermnotificatie Applicatienaam Aantal nieuwe berichten - Berichten teller (ook verzonden) + Berichtenteller (ook verzonden) Hetzelfde. Ook na schermontgrendeling Stilteperiode - Schakel beltoon, trillen en leds uit gedurende de nacht - Notificaties uitzetten - Notificaties volledig uitzetten tijdens stilteperiode + Beltoon, trillen en leds gedurende de nacht uitschakelen + Notificaties uitschakelen + Notificaties volledig uitschakelen tijdens stilteperiode Stilteperiode start Stilteperiode einde Een nieuw account instellen E-mailadres Wachtwoord - Om met K-9 dit e-mailaccount te gebruiken moet je inloggen om K-9 toegang te geven tot je e-mails. + Om met K-9 dit e-mailaccount te gebruiken moet je inloggen om K-9 toegang te geven tot je e-mailberichten. - Inloggen + Aanmelden - Inloggen met Google + Aanmelden met Google Schakel op dit apparaat een schermvergrendeling in om hier je wachtwoord te kunnen zien Verifieer je identiteit Ontgrendel om je wachtwoord te zien - Handmatige setup + Handmatig instellen - Ophalen account informatie\u2026 + Ophalen accountinformatie\u2026 Controleren van inkomende serverinstellingen\u2026 Controleren van uitgaande serverinstellingen\u2026 Authenticatie\u2026 @@ -301,28 +305,28 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Normaal wachtwoord Wachtwoord, onveilig verzonden Versleuteld wachtwoord - Client certificaat + Clientcertificaat OAuth 2.0 - Inkomende server instellingen + Inkomende serverinstellingen Gebruikersnaam Wachtwoord - Client certificaat + Clientcertificaat POP3-server IMAP-server - WebDAV (Exchange) server + WebDAV (Exchange)-server Poort Beveiligingstype Authenticatietype Geen SSL/TLS STARTTLS - \"%1$s = %2$s\" is niet geldig met \"%3$s = %4$s\" + %1$s = %2$s’ is niet geldig met ‘%3$s = %4$s Wanneer ik een bericht verwijder - Verwijder niet van server - Verwijder van server - Markeer als gelezen op server + Niet van server verwijderen + Van server verwijderen + Als gelezen op server markeren Compressie gebruiken - Wissen berichten + Verwijderde berichten op server wissen Onmiddellijk na verwijderen of verplaatsen Tijdens iedere peiling Alleen handmatig @@ -335,19 +339,19 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Spammap Alleen geabonneerde mappen weergeven Map automatisch uitvouwen - WebDAV (Exchange) path - Authenticatie pad - Mailbox alias - Uitgaande server instellingen + WebDAV (Exchange)-pad + Authenticatiepad + Mailboxalias + Uitgaande serverinstellingen SMTP-server Poort Beveiligingstype - Inloggen vereist. + Aanmelden vereist. Gebruikersnaam Wachtwoord Authenticatietype - \"%1$s = %2$s\" is niet geldig met \"%3$s = %4$s\" - Ongeldige setup: %s + %1$s = %2$s’ is niet geldig met ‘%3$s = %4$s + Ongeldige instelling: %s Accountopties Map-peiling-frequentie Nooit @@ -368,8 +372,8 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Elke 36 minuten Elke 48 minuten Elke 60 minuten - Waarschuw me wanneer nieuwe e-mail binnenkomt - Aantal berichten om te laten zien + Waarschuw wanneer nieuw e-mailbericht binnenkomt + Aantal berichten om te tonen 10 berichten 25 berichten 50 berichten @@ -381,21 +385,21 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op 5000 berichten 10000 berichten alle berichten - Kan bericht niet kopiëren of verplaatsen omdat deze niet gesynchroniseerd is met de server - Setup kon niet afronden + Kan bericht niet kopiëren of verplaatsen, omdat deze niet gesynchroniseerd is met de server + Instellen kon niet voltooien Gebruikersnaam of wachtwoord ongeldig.\n(%s) - De server presenteerde een ongeldig SSL certificaat. Dit kan komen door een verkeerd geconfigureerde server. Dit kan ook komen doordat iemand jouw mailserver aan probeert te vallen. Als je niet zeker weet wat er aan de hand is klik dan op Reject en neem contact op met de beheerder van de mailserver.\n\n(%s) + De server presenteerde een ongeldig SSL-certificaat. Dit kan komen door een verkeerd geconfigureerde server. Dit kan ook komen doordat iemand de mailserver probeert aan te vallen. Als het niet zeker is wat er aan de hand is klik dan op Reject en neem contact op met de beheerder van de mailserver.\n\n(%s) Kan geen verbinding met server maken.\n(%s) Autorisatie is geannuleerd Autorisatie is mislukt met de volgende foutmelding: %s OAuth 2.0 wordt momenteel niet ondersteund door deze dienstverlener. - Deze app kan geen browser vinden. Een browser is nodig om toegang te geven tot je account. + Deze app kan geen browser vinden. Een browser is nodig om toegang te geven tot de account. Details aanpassen Doorgaan Geavanceerd Algemene instellingen - Nieuwe e-mail notificatie - Notificatie mappen + Nieuwe e-mailnotificatie + Notificatiemappen Alles Alleen 1e klasse mappen 1e en 2e klasse mappen @@ -405,8 +409,8 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Je e-mailadres Notificatie in statusbalk wanneer nieuwe e-mail binnenkomt Notificatie in statusbalk wanneer wordt gecontroleerd op nieuwe e-mail - Notificatie voor e-mail welke ik verstuur - Notificatie ook voor e-mail verzonden vanaf een identiteit + Notificatie voor e-mailbericht welke ik verstuur + Notificatie ook voor e-mailbericht verzonden vanaf een identiteit Alleen contacten Notificaties alleen weergeven voor bekende contacten Chatberichten negeren @@ -417,7 +421,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Markeer een bericht als gelezen wanneer die wordt gewist Meldingscategorieën Meldingen instellen voor nieuwe berichten - Error- en statusmeldingen instellen + Fout- en statusmeldingen instellen Laat afbeeldingen automatisch zien Nooit Alleen van contacten @@ -440,20 +444,20 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Prefix (zoals Gmail, Pine) Kop (zoals Outlook) Upload verzonden berichten - Upload berichten naar \'Verzonden\' map na verzenden + Berichten naar ‘Verzonden’-map na verzenden uploaden Algemene instellingen Berichten lezen Berichten ophalen Mappen - Citaat voorvoegsel - Eind-tot-eind versleuteling - OpenPGP ondersteuning inschakelen - OpenPGP app selecteren - Eind-tot-eind sleutel instellen + Citaatvoorvoegsel + Eind-tot-eind-versleuteling + OpenPGP-ondersteuning inschakelen + OpenPGP-app selecteren + Eind-tot-eind-sleutel instellen Geen OpenPGP-app ingesteld Verbonden met %s Aan het configureren … - Sla alle concepten versleuteld op. + Alle concepten versleuteld opslaan. Alle concepten zullen versleuteld worden opgeslagen Versleutel concepten alleen als versleuteling is ingeschakeld Map-peiling-frequentie @@ -476,7 +480,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op 5 MiB 10 MiB elke grootte (geen limiet) - Sync berichten van + Syngroniseer berichten van alles (geen limiet) vandaag laatste 2 dagen @@ -489,7 +493,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op afgelopen 3 maanden afgelopen 6 maanden afgelopen jaar - Mappen om weer te geven + Mappen om te tonen Alle Alleen 1e klasse mappen 1e en 2e klasse mappen @@ -506,18 +510,18 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op 1e en 2e klasse mappen Alle behalve 2e klasse mappen Geen - Verplaats/kopieer doel mappen + Verplaats/kopieer doelmappen Alle Alleen 1e klasse mappen 1e en 2e klasse mappen Alle behalve 2e klasse mappen Sync verwijderingen op server Verwijder berichten wanneer verwijderd van server - OpenPGP app niet aanwezig - is de app verwijderd? - Map instellingen - Laat zien in kopgroep - Laat zien bij de top van de maplijst - Map weergave klasse + OpenPGP-app niet aanwezig - is de app verwijderd? + Mapinstellingen + In topgroep tonen + Bij de top van de maplijst tonen + Mapweergave klasse Geen klasse 1e klasse 2e klasse @@ -538,15 +542,15 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Zelfde als push klasse Lokale berichten wissen Inkomende server - Instellen van de inkomende mail server + Inkomende mailserver instellen Uitgaande server - Configureren van de uitgaande (SMTP) server - Account naam + Uitgaande (SMTP)-server instellen + Accountnaam Jouw naam Notificaties Trillen Trillen - Tril-patroon + Trilpatroon Standaard Patroon 1 Patroon 2 @@ -555,7 +559,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Patroon 5 Aantal trillingen Uitgeschakeld - Nieuwe e-mail beltoon + Nieuwe e-mailbeltoon Meldingslicht Uitgeschakeld Accountkleur @@ -567,23 +571,23 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Geel Cyaan Magenta - Bericht samenstelling opties + Berichtsamenstellingopties Samenstelling standaarden Stel standaard in voor: Van, Bcc en handtekening - Beheer identiteiten - Instellen alternatieve \'Van\' adressen en handtekeningen - Beheer identiteiten - Beheer identiteit + Identiteiten beheren + Instellen alternatieve ‘Van’-adressen en handtekeningen + Identiteiten beheren + Identiteit beheren Identiteit aanpassen - Bewaar + Bewaren Nieuwe identiteit Bcc alle berichten naar Aanpassen - Verplaats ophoog - Verplaats omlaag - Verplaats naar top / maak standaard - Verwijder - Identiteit beschrijving + Omhoog verplaatsen + Omlaag verplaatsen + Naar top verplaatsen / standaard maken + Verwijderen + Identiteitsbeschrijving (Optioneel) Jouw naam (Optioneel) @@ -593,7 +597,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op (Optioneel) Handtekening (Optioneel) - Gebruik handtekening + Handtekening gebruiken Handtekening Initiële identiteit Kies identiteit @@ -604,41 +608,41 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Nieuwste berichten eerst Onderwerp alfabetische volgorde Onderwerp omgekeerd alfabetische volgorde - Verzender alfabetisch - Verzender omgekeerd alfabetisch + Afzender alfabetisch + Afzender omgekeerd alfabetisch Berichten met ster eerst Berichten zonder ster eerst Ongelezen berichten eerst Gelezen berichten eerst Berichten met bijlagen eerst Berichten zonder bijlagen eerst - Sorteren volgens … + Sorteren volgens… Datum - Aankomst + Ontvangen Onderwerp - Verzender + Afzender Ster Gelezen/ongelezen Bijlagen Account verwijderen Onbekend certificaat - Accepteer Sleutel - Verwerp Sleutel - Del (of D) - Verwijderen\nR - Antwoord\nA - Iedereen antwoorden\nC - Opstellen\nF - Doorsturen\nM - Verplaatsen\nV - Archiveren\nY - Kopiëren\nZ - Markeer (on)gelezen\nG - Ster\nO - Sorteer type\nI - Sorteer volgorde\nQ - Terug naar Mappen\nS - Selecteer/deselecteer\nJ of P - Vorig bericht\nK of N - Volgende bericht - Del (of D) - Verwijderen\nC - Opstellen\nM - Verplaatsen\nV - Archiveren\nY - Kopiëren\nZ - Markeer (on)gelezen\nG - Ster\nO - Sorteer type\nI - Sorteer volgorde\nQ - Terug naar Mappen\nS - Selecteer/deselecteer + Sleutel accepteren + Sleutel verwerpen + Del (of D) - Verwijderen\nR - Beantwoorden\nA - Iedereen beantwoorden\nC - Opstellen\nF - Doorsturen\nM - Verplaatsen\nV - Archiveren\nY - Kopiëren\nZ - Markeer (on)gelezen\nG - Ster\nO - Sorteer type\nI - Sorteervolgorde\nQ - Terug naar Mappen\nS - Selecteren/deselecteren\nJ of P - Vorige bericht\nK of N - Volgende bericht + Del (of D) - Verwijderen\nC - Opstellen\nM - Verplaatsen\nV - Archiveren\nY - Kopiëren\nZ - Markeer (on)gelezen\nG - Ster\nO - Sorteer type\nI - Sorteervolgorde\nQ - Terug naar Mappen\nS - Selecteren/deselecteren Mapnaam bevat Mappen - Laat alle mappen zien + Alle mappen tonen 1e klasse mappen 1e & 2e klasse mappen 2e klasse mappen verbergen Positie handtekening Voor geciteerd bericht Na geciteerd bericht - Gebruik app thema + Appthema gebruiken Donker Licht - Gebruik systeemstandaard + Systeemstandaard gebruiken Algemene instellingen Algemeen Debuggen @@ -653,15 +657,15 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Thema om berichten te schrijven Taal Geen instellingen gevonden - Vast berichten thema + Vast berichtenthema Kies het thema tijdens het bekijken van het bericht Gebruik een vast thema om het bericht te bekijken Systeemstandaard - Achtergrond sync + Achtergrondsynchronisatie Nooit Altijd - Als \'Auto-sync\' geselecteerd is - Selecteer alle + Als ‘Auto-sync’ is geselecteerd + Alle selecteren Max mappen om te controleren met push 5 mappen 10 mappen @@ -674,8 +678,8 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Animatie Gebruik opzichtige visuele effecten Volume op/neer navigatie - Bericht beeld - Variabele lijst weergave + Berichtbeeld + Variabele lijstweergave Gecombineerde postvak-in weergeven Het aantal berichten met een ster weergeven Gecombineerde postvak-in @@ -689,29 +693,29 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Geen Automatisch (%s) Lettergrootte - Instellen lettergrootte + Lettergrootte instellen Account lijst Accountnaam - Account beschrijving + Accountbeschrijving Maplijsten Mapnaam Mapstatus - Bericht lijsten - Bericht onderwerp - Bericht afzender - Bericht datum - Preview - Beeld berichten - Bericht afzender + Berichtlijsten + Onderwerp + Afzender + Datum + Voorbeeld + Berichten + Afzender Bericht ontvanger (Aan) Bericht ontvanger (CC) Bericht ontvanger (BCC) Extra koppen - Bericht onderwerp - Bericht tijd en datum - Bericht inhoud + Onderwerp + Tijd en datum + Berichtinhoud Bericht opstellen - Tekst invoervelden + Tekstinvoervelden Standaard Kleinste Heel klein @@ -727,7 +731,6 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Wijzigingen opslaan of verwerpen? Bericht afbreken? Weet je zeker dat je dit bericht wilt verwijderen? - Selecteer tekst om te kopiëren. Lokale berichten wissen? Dit zal alle lokale berichten uit deze map wissen. Er worden geen berichten van de server gewist. Berichten wissen @@ -745,7 +748,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Wil je de prullenbak leeg maken? Ja Nee - Bevestig verplaatsing naar spam map + Bevestig verplaatsing naar spammap Wil je dit bericht echt verplaatsen naar de spam map? Wil je dit bericht echt verplaatsen naar de spam map? @@ -757,8 +760,8 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Back-up Diversen - Exporteer instellingen - Export + Instellingen exporteren + Exporteren Delen Instellingen exporteren … Instellingen succesvol geëxporteerd @@ -770,33 +773,33 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Voer de wachtwoorden in - Log in + Aanmelden - Log in en voer het wachtwoord in + Meld aan en voer het wachtwoord in Instellingen importeren mislukt Lezen van instellingenbestand mislukt Importeren van sommige instellingen mislukt Succesvol geïmporteerd Wachtwoord vereist - Inloggen vereist + Aanmelden vereist Niet geïmporteerd Importeren mislukt Later - Import instellingen + Importinstellingen Instellingen importeren … Om het account \"%s\" te gebruiken moet je het wachtwoord van de server opgeven. - Om het account \"%s\" te gebruiken moet je de wachtwoorden van de server opgeven. + Om de account ‘%s’ te gebruiken moet je de wachtwoorden van de server opgeven. - Binnenkomendeserver-wachtwoord - Uitgaandeserver-wachtwoord - Gebruik het zelfde wachtwoord voor de uitgaandeserver + Wachtwoord inkomende server + Wachtwoord uitgaande server + Gebruik hetzelfde wachtwoord voor de uitgaande server Servernaam: %s Ongelezen aantal weergeven voor … Account - Het account waarvan het aantal ongelezen berichten wordt getoond - Gecombineerde postvak-in + De account waarvan het aantal ongelezen berichten wordt getoond + Gecombineerd postvak-in Mapaantal Toon het aantal ongelezen berichten van een enkele map Map @@ -806,25 +809,25 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Geen account gekozen Geen folder gekozen Geen tekst - Verwijzing openen - Verwijzing delen - Verwijzing naar klembord kopiëren - Verwijzing - Verwijzingstekst naar klembord kopiëren - Verwijzingstekst + Koppeling openen + Koppeling delen + Koppeling naar klembord kopiëren + Koppeling + Koppelingstekst naar klembord kopiëren + Koppelingstekst Afbeelding - Afbeelding laten zien + Afbeelding tonen Afbeelding opslaan Afbeelding downloaden - Kopieer afbeelding-URL naar klembord + Afbeelding-URL naar klembord kopiëren Afbeelding-URL Nummer bellen Opslaan in contacten - Kopieer nummer naar klembord + Nummer naar klembord kopiëren Telefoonnummer Stuur e-mail Opslaan in contacten - Kopieer adres naar klembord + Adres naar klembord kopiëren E-mailadres Alle 10 @@ -834,7 +837,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op 250 500 1000 - Server-zoeklimiet + Zoeklimiet server Zoekopdracht naar server sturen %d resultaat ophalen @@ -847,83 +850,83 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Zoekopdracht mislukt Zoeken Berichten op server zoeken - Er is een netwerk verbinding nodig voor server zoeken. + Er is een netwerkverbinding nodig voor server zoeken. Kleur wijzigen na lezen - Een andere achtergrond laat zien nadat de e-mail is gelezen - Gesprek overzicht - Groepeer berichten per gesprek - Gegevensbanken bijwerken - Gegevensbanken aan het bijwerken … - Gegevensbanken van account \"%s\" bijwerken - Gespleten-scherm laten zien + Een andere achtergrond laten zien nadat de e-mail is gelezen + Gespreksoverzicht + Berichten per gesprek groeperen + Databases bijwerken + Databases bijwerken… + Databases van account ‘%s’ bijwerken + Gespleten scherm tonen Altijd Nooit In landschap oriëntatie Selecteer een bericht aan de linker kant Laat contactafbeeldingen zien Laat contactafbeeldingen in de berichtenlijst zien - Markeer alles als gelezen + Alles als gelezen markeren Contactafbeeldingen kleuren Voorzie afwezige contactafbeeldingen van een kleur Zichtbare berichtacties - Toon de geselecteerde acties in het Berichten-menu - Bijlage aan het laden … + Geselecteerde acties in het Berichten-menu tonen + Bijlage aan het laden… Bericht wordt verstuurd Concept wordt opgeslagen - Bijlage aan het ophalen … - Kan niet authenticeren. De server ondersteunt geen SASL EXTERNAL. Dit kan komen door een probleem met het client certificaat (verlopen of onbekende CA) of een ander configuratieprobleem. + Bijlage aan het ophalen… + Kan niet authenticeren. De server ondersteunt geen SASL EXTERNAL. Dit kan komen door een probleem met het clientcertificaat (verlopen of onbekende CA) of een ander configuratieprobleem. - Gebruik client certificaat - Geen client certificaat - Verwijder client certificaat selectie - Client certificaat niet ontvangen voor alias \"%s\" + Gebruik clientcertificaat + Geen clientcertificaat + Verwijder clientcertificaat selectie + Clientcertificaat niet ontvangen voor alias \‘%s\’ Geavanceerde opties - Client certificaat \"%1$s\" is verlopen of niet geldig (%2$s) + Client certificaat \‘%1$s\’ is verlopen of niet geldig (%2$s) *Versleuteld* - Toevoegen vanuit contacten - CC - BCC + Vanuit contacten toevoegen + Cc + Bcc Aan Van Antwoorden aan <Onbekende ontvanger> - <Onbekende verzender> + <Onbekende afzender> Privé Werk Anders Mobiel - Geen concepten map ingesteld voor dit account! - Geen sleutel ingesteld voor dit account! Controleer je instellingen. - Crypto provider gebruikt incompatibele versie. Controleer je instellingen! - Kan geen verbinding maken met de crypto provider. Controleer de instellingen of klik op het crypto icoontje om nogmaals te proberen. - Initialisatie van eind-tot-eind versleuteling is mislukt, controleer de instellingen - PGP/MIME instelling ondersteund geen bijlagen! + Geen conceptenmap ingesteld voor deze account! + Geen sleutel ingesteld voor deze account! Controleer de instellingen. + Cryptoprovider gebruikt incompatibele versie. Controleer de instellingen! + Kan geen verbinding maken met de cryptoprovider. Controleer de instellingen of klik op het crypto-pictogram om nogmaals te proberen. + Initialisatie van eind-tot-eind-versleuteling is mislukt, controleer de instellingen + PGP/MIME-instelling ondersteunt geen bijlagen! PGP/INLINE toestaan - PGP/INLINE uitzetten - PGP handtekening toestaan - PGP handtekening stoppen - PGP/INLINE instellingen - De e-mail is verzonden in PGP/INLINE formaat.\nDit word alleen gebruikt voor compatibiliteit: + PGP/INLINE uitschakelen + PGP-handtekening inschakelen + PGP-handtekening uitschakelen + PGP/INLINE-instellingen + Het e-mailbericht is in PGP/INLINE-formaat verzonden.\nDit wordt alleen gebruikt voor compatibiliteit: Sommige clients ondersteunen alleen dit formaat Handtekening kan onderweg breken - Bijlagen zijn niet ondersteund + Bijlagen worden niet ondersteund Begrepen! - Uitzetten - Keep toestaan + Uitschakelen + Ingeschakeld houden Begrepen! - Uitzetten - Houd ingeschakeld - alleen PGP handtekening modes - In deze mode wordt je PGP sleutel gebruikt voor een cryptografische handtekening of een ongecodeerde email. - Dit versleutelt niet de e-mail, maar controleert dat je eigen sleutel gebruikt is. + Uitschakelen + Ingeschakeld houden + alleen PGP-handtekeningmodus + In deze modus wordt de PGP-sleutel gebruikt voor een cryptografische handtekening of een ongecodeerd e-mailbericht. + Dit versleutelt niet het e-mailbericht, maar controleert of de eigen sleutel is gebruikt. Handtekening kan bij versturing naar verzendlijst breken - Handtekening kan worden weergegeven als \'signature.asc\' bijlage bij sommige programma\'s + Handtekening kan bij sommige programma’s als ‘signature.asc’-bijlage worden weergegeven Versleutelde berichten bevatten altijd een handtekening. Platte tekst - eind-tot-eind handtekening bevat een fout + eind-tot-eind-handtekening bevat een fout moet bericht volledig downloaden om handtekening te verwerken - bevat niet ondersteunde eind-tot-eind handtekening + bevat niet ondersteunde eind-tot-eind-handtekening Bericht is versleuteld, maar in een niet ondersteund formaat. Bericht is versleuteld, maar ontsleuteling was gestopt. Eind-tot-eind getekende platte tekst @@ -935,53 +938,53 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op maar eind-tot-eind sleutel is niet veilig van een onbekende eind-tot-eind sleutel Versleuteld - maar er is een ontsleutel fout opgetreden + maar er is een ontsleutelfout opgetreden moet bericht volledig downloaden voor ontsleuteling - maar er is geen crypto app geconfigureerd + maar er is geen crypto-app geconfigureerd Versleuteld maar niet eind-tot-eind Eind-tot-eind versleuteld van geverifieerde afzender Versleuteld - van een onbekende eind-tot-eind sleutel - maar eind-tot-eind sleutel komt niet overeen met afzender - maar eind-tot-eind sleutel is verlopen - maar eind-tot-eind sleutel is ingetrokken - maar eind-tot-eind sleutel is niet veilig - maar eind-tot-eind gegevens bevatten fouten + van een onbekende eind-tot-eind-sleutel + maar eind-tot-eind-sleutel komt niet overeen met afzender + maar eind-tot-eind-sleutel is verlopen + maar eind-tot-eind-sleutel is ingetrokken + maar eind-tot-eind-sleutel is niet veilig + maar eind-tot-eind-gegevens bevatten fouten maar versleuteling is niet veilig OK - Zoek Sleutel + Zoek sleutel Bekijk ondertekenaar Bekijk afzender Details - Deblokkeer + Deblokkeren Dit onderdeel is niet versleuteld en is misschien niet veilig. - Onbeveiligde Bijlage - Aan het laden … + Onbeveiligde bijlage + Laden… Ontsleuteling is gestopt. Opnieuw Versleuteld bericht moet gedownload zijn voor ontsleuteling. - Fout tijdens ontsleutelen e-mail + Fout tijdens ontsleutelen e-mailbericht Speciale leestekens worden nog niet ondersteund! - Fout bij parsen van adres! + Fout bij verwerken van adres! Verberg niet-versleutelde handtekeningen Alleen versleutelde handtekeningen worden weergegeven Alle handtekeningen worden weergegeven - Versleuteling niet mogelijk in sign-only mode! + Versleuteling niet mogelijk in sign-onlymodus! niet getekende tekst - Deze e-mail is versleuteld - Deze e-mail is OpenPGP versleuteld.\nInstalleer en stel een OpenPGP App in om de e-mail te lezen. + Dit e-mailbericht is versleuteld + Dit e-mailbericht is OpenPGP versleuteld.\nInstalleer en stel een OpenPGP-app in om het e-mailbericht te lezen. Ga naar Instellingen - K-9 Bericht Lijst - Berichten aan het laden … + K-9-berichtenlijst + Berichten aan het laden… Versleuteling niet mogelijk Sommige van de ontvangers ondersteunen deze functie niet! Versleuteling inschakelen Versleuteling uitschakelen - Versleuteling maakt dat berichten alleen door de ontvanger gelezen kunnen worden, en niemand anders. - Versleuteling is alleen beschikbaar als alle ontvangers dit ondersteunen, en zij moeten je reeds eerder een e-mail gestuurd hebben. - Schakel versleuteling aan of uit met dit icoon. + Versleuteling maakt dat berichten alleen door de ontvanger gelezen kunnen worden en niemand anders. + Versleuteling is alleen beschikbaar als alle ontvangers dit ondersteunen en zij moeten je reeds eerder een e-mailbericht hebben gestuurd. + Schakel versleuteling in of uit met dit pictogram. Ik snap het Terug Versleuteling uitschakelen @@ -989,51 +992,51 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Autocrypt wederzijdse modus Autocrypt wederzijdse modus Berichten worden op verzoek versleuteld, of bij beantwoorden van een versleuteld bericht. - Als verzender en ontvanger de wederzijdse modus inschakelen dan wordt standaard versleuteling ingesteld. + Als afzender en ontvanger de wederzijdse modus inschakelen dan wordt standaard versleuteling ingesteld.
Klik hier voor meer informatie. Algemene instellingen - Geen OpenPGP app geïnstalleerd + Geen OpenPGP-app geïnstalleerd Installeren - K-9 Mail vereist OpenKeychain voor eind-tot-eind versleuteling. + K-9 Mail vereist OpenKeychain voor eind-tot-eind-versleuteling. Versleuteld bericht Onderwerp van bericht versleutelen Mogelijk niet ondersteund door alle ontvangers Interne fout: Ongeldig account! Fout bij het verbinden met %s! Verstuur Autocrypt Setup bericht - Veilig delen van eind-tot-eind instellingen met andere apparaten - Autocrypt Setup bericht - Een Autocrypt Setup bericht deelt uw eind-tot-eind instellingen op een beveiligde manier met andere apparaten. - Verstuur Setup bericht + Veilig delen van eind-tot-eind-instellingen met andere apparaten + Autocrypt-instelbericht + Een Autocrypt-instelbericht deelt uw eind-tot-eind-instellingen op een beveiligde manier met andere apparaten. + Verstuur instelbericht Het bericht wordt verstuurd naar jouw adres: Instelbericht aan het genereren … Bericht sturen naar: - Om te voltooien, open het bericht op je andere apparaat en voer de Setup Code in. - Setup Code weergeven - Autocrypt Setup bericht - Dit bericht bevat alle informatie om jouw Autocrypt instellingen met geheime sleutel beveiligd over te brengen vanaf jouw oorspronkelijke apparaat. + Om te voltooien, open het bericht op het andere apparaat en voer de instelcode in. + Instelcode weergeven + Autocrypt-instelbericht + Dit bericht bevat alle informatie om de Autocrypt-instellingen met geheime sleutel beveiligd over te brengen vanaf het oorspronkelijke apparaat. -Volg de instructies op je nieuwe apparaat om daarop Autocrypt in te stellen. +Volg de instructies op het nieuwe apparaat om daarop Autocrypt in te stellen. -Je kunt dit bericht bewaren als backup voor jouw geheime sleutel. Als je dit wilt doen, schrijf dan het wachtwoord op en bewaar het op een veilige plek. +Je kunt dit bericht bewaren als back-up voor de geheime sleutel. Als je dit wilt doen, schrijf dan het wachtwoord op en bewaar het op een veilige plek. - Er is een fout opgetreden tijdens het verzenden van het bericht. Controleer de netwerk verbinding en uitgaande server configuratie. + Er is een fout opgetreden tijdens het verzenden van het bericht. Controleer de netwerkverbinding en uitgaande serverconfiguratie. Aan Uit - Sta toegang tot contacten toe - Om contact suggesties te kunnen bieden en om namen en/of foto\'s van contacten weer te geven, heeft de app toegang nodig tot je contactenlijst. + Toegang tot contacten toestaan + Om contactsuggesties te kunnen bieden en om namen en/of foto’s van contacten weer te geven, heeft de app toegang nodig tot de contactenlijst. Er is een fout opgetreden bij het laden van de gegevens - Aan het initialiseren … - In afwachting van nieuwe e-mails + Aan het initialiseren… + In afwachting van nieuwe e-mailberichten Doet niets totdat achtergrondsynchronisatie wordt toegestaan Doet niets totdat er een netwerk beschikbaar is Tik hier om er meer over te leren. - Push informatie - Als je push gebruikt, dan houd K-9 mail een verbinding open met de e-mail server. Android vereist dat een app die op de achtergrond actief blijft een melding plaatst. %s + Push-informatie + Als je push gebruikt, dan houd K-9 Mail een verbinding open met de e-mailserver. Android vereist dat een app die op de achtergrond actief blijft een melding plaatst. %s Android maakt het echter ook mogelijk om meldingen te verbergen. - Meer leren hierover + Meer info Melding instellen - Als je het niet nodig vindt om per direct meldingen te ontvangen van nieuwe berichten, dan kun je beter push uitschakelen en in plaats daarvan kiezen voor peilen. Met peilen wordt er om de zoveel tijd gekeken of er nieuwe e-mails zijn binnengekomen. Daarvoor is het weergeven van een melding niet continu nodig. + Als je het niet nodig vindt om per direct meldingen van nieuwe berichten te ontvangen, dan kun je beter push uitschakelen en in plaats daarvan kiezen voor peilen. Met peilen wordt er om de zoveel tijd gekeken of er nieuwe e-mailberichten zijn binnengekomen. Daarvoor is het weergeven van een melding niet continu nodig. Push uitschakelen 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 366c2599b7..1ac2170efc 100644 --- a/app/ui/legacy/src/main/res/values-pl/strings.xml +++ b/app/ui/legacy/src/main/res/values-pl/strings.xml @@ -740,7 +740,6 @@ Wysłane z urządzenia Android za pomocą K-9 Mail. Proszę wybaczyć moją zwi Zapisać czy odrzucić zmiany? Usunąć wiadomość? Czy na pewno chcesz usunąć tą wiadomość? - Wybierz tekst do skopiowania. Usunąć wiadomości lokalne? Wszystkie wiadomości lokalne z folderu zostaną usunięte. Wiadomości nie zostaną usunięte z serwera. Wyczyść wiadomości 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 0cbf238634..0437e04a04 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 @@ -170,7 +170,9 @@ Por favor encaminhe relatórios de bugs, contribua com novos recursos e tire dú Falha na autenticação Falha na autenticação de %s. Atualize suas configurações de servidor. + Erro de notificação + Ocorreu um erro ao tentar criar uma notificação de sistema para uma nova mensagem. O provável motivo é a ausência de um som de notificação.\n\nToque para abrir as configurações de notificação. Verificando email: %s:%s Verificando email Enviando mensagem: %s @@ -735,7 +737,6 @@ Por favor encaminhe relatórios de bugs, contribua com novos recursos e tire dú Salvar ou descartar as alterações? Descartar a mensagem? Tem certeza que deseja descartar esta mensagem? - Selecione o texto a ser copiado. Limpar mensagens locais? Isso removerá todas as mensagens locais da pasta. Nenhuma mensagem será excluída no servidor. Limpar mensagens 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 d17db445df..353730993a 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 @@ -669,7 +669,6 @@ Por favor envie relatórios de falhas, contribua com novas funcionalidades e col Guardar ou rejeitar esta mensagem? Rejeitar mensagem? Tem a certeza que pretende rejeitar esta mensagem? - Selecione o texto para copiar. Limpar mensagens locais? Isto removerá todas as mensagens locais da pasta. Não serão apagadas mensagens do servidor. Limpar mensagens 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 4807bcde05..10d9b54b40 100644 --- a/app/ui/legacy/src/main/res/values-ro/strings.xml +++ b/app/ui/legacy/src/main/res/values-ro/strings.xml @@ -726,7 +726,6 @@ Uneori datorită faptului că cineva încearcă să te atace pe tine sau serveru Salvați sau respingeți modificările? Renunți la mesaj? Sigur dorești să renunți la mesaj? - Selectează textul de copiat. Eliminare mesaje locale? Această acțiune va elimina toate mesejele locale din dosar. Niciun mesaj nu va fi șters de pe server. Elimină mesajele 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 ec1ea0a15a..63a77bd67e 100644 --- a/app/ui/legacy/src/main/res/values-ru/strings.xml +++ b/app/ui/legacy/src/main/res/values-ru/strings.xml @@ -735,7 +735,6 @@ K-9 Mail — почтовый клиент для Android. Сохранить или отменить изменения? Удаление Отменить сообщение? - Выберите текст длительным нажатием Стереть локальные сообщения? Это удалит все локальные сообщения из папки.Сообщения не будут удалены с сервера. Стереть сообщения 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 2d21900d9d..64f79ba155 100644 --- a/app/ui/legacy/src/main/res/values-sk/strings.xml +++ b/app/ui/legacy/src/main/res/values-sk/strings.xml @@ -681,7 +681,6 @@ Prosím, nahlasujte prípadné chyby, prispievajte novými funkciami a pýtajte Uložiť alebo zahodiť túto správu? Zahodiť správu? Naozaj chcete zahodiť túto správu? - Vyberte text na kopírovanie. Zmazať lokálne uložené správy? Týmto odstránite všetky správy z priečinka. Na servi nebude žiadna spŕava zmazaná. Vyčistiť zprávy 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 32a9256a6d..dd98849469 100644 --- a/app/ui/legacy/src/main/res/values-sl/strings.xml +++ b/app/ui/legacy/src/main/res/values-sl/strings.xml @@ -12,6 +12,8 @@ Dovoljenje Apache, različica 2.0 Odprtokodni projekt Spletna stran + Navodila za uporabo + Poišči pomoč Uporabniški forum Fediverse Twitter @@ -171,7 +173,9 @@ dodatnih %d sporočil Overjanje je spodletelo Overjanje je spodletelo za račun %s. Posodobiti je treba nastavitve strežnika. + Napaka obveščanja + Med poskusom ustvarjanja sistemskega obvestila za novo sporočilo je prišlo do napake. Razlog je najverjetneje manjkajoči zvok obvestila.\n\nTapni, za odpreti nastavitve obvestil. Preverjanje pošte: %s:%s Preverjanje pošte Pošiljanje pošte: %s @@ -736,7 +740,6 @@ dodatnih %d sporočil Ali želite shraniti ali zavreči spremembe? Ali želite zavreči sporočilo? Ali ste prepričani, da želite zavreči to sporočilo? - Izberite besedilo za kopiranje. Ali želite počistiti krajevna sporočila? S tem bodo iz mape odstranjena vsa krajevna sporočila. Nobeno sporočilo ne bo izbrisano s strežnika. Počisti sporočila 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 ebc12c382c..339aeb20ae 100644 --- a/app/ui/legacy/src/main/res/values-sq/strings.xml +++ b/app/ui/legacy/src/main/res/values-sq/strings.xml @@ -737,7 +737,6 @@ Ju lutemi, parashtrim njoftimesh për të meta, kontribute për veçori të reaj Të ruhen apo të Hidhen tej ndryshimet? Të hidhet tej mesazhi? Jeni i sigurt se doni të hidhet tej ky mesazh? - Përzgjidhni tekst për kopjim. Të spastrohen mesazhe vendore? Kjo do të heqë nga dosja krejt mesazhet vendore. Prej shërbyesit s’do të fshihet ndonjë mesazh. Spastroji mesazhet 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 1dc8d6c89e..50db72cb9f 100644 --- a/app/ui/legacy/src/main/res/values-sr/strings.xml +++ b/app/ui/legacy/src/main/res/values-sr/strings.xml @@ -679,7 +679,6 @@ Да сачувам или одбацим ову поруку? Одбацити поруку? Желите ли заиста да одбаците ову поруку? - Изаберите текст за копирање. Да очистим локалне поруке? Ово ће обрисати све локалне поруке из фасцикле. Ниједна порука са сервера неће бити обрисана. Очисти поруке 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 052be388ac..6d0655bc9c 100644 --- a/app/ui/legacy/src/main/res/values-sv/strings.xml +++ b/app/ui/legacy/src/main/res/values-sv/strings.xml @@ -736,7 +736,6 @@ Skicka in felrapporter, bidra med nya funktioner och ställ frågor på Spara eller kassera ändringar? Kassera meddelandet? Är du säker på att du vill kassera detta meddelande? - Välj text att kopiera. Rensa lokala meddelanden? Detta tar bort alla lokala meddelanden från mappen. Inga meddelanden tas bort från servern. Rensa meddelanden 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 a0f6688be6..875d6ead13 100644 --- a/app/ui/legacy/src/main/res/values-tr/strings.xml +++ b/app/ui/legacy/src/main/res/values-tr/strings.xml @@ -718,7 +718,6 @@ Microsoft Exchange ile konuşurken bazı tuhaflıklar yaşadığını not ediniz Değişikliklerden vazgeç veya kaydet? İleti silinsin mi? Bu mesajı silmek istediğinizden emin misiniz? - Kopyalamak için metni seç. Yerel iletiler temizlensin mi? Bu işlem tüm yerel iletileri klasörden kaldıracak. İletiler sunucudan silinmeyecek. İletileri temizle 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 42f3b7b860..24e2f7ed10 100644 --- a/app/ui/legacy/src/main/res/values-uk/strings.xml +++ b/app/ui/legacy/src/main/res/values-uk/strings.xml @@ -728,7 +728,6 @@ K-9 Mail — це вільний клієнт електронної пошти Зберегти чи Скасувати зміни? Скасувати повідомлення? Ви дійсно хочете скасувати це повідомлення? - Виберіть текст для копіювання. Очистити локальні повідомлення? Це видалить всі локальні повідомлення з теки. Жодне повідомлення не буде видалене з сервера. Очистити повідомлення 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 891b2d58a3..790c733ce3 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 @@ -734,7 +734,6 @@ K-9 Mail 是 Android 上一款功能强大的免费邮件客户端。 保存或取消更改? 丢弃该邮件? 确定丢弃该邮件? - 选择需要拷贝的文本。 清除本地消息? 这将从文件夹中删除所有本地邮件。 没有消息会从服务器中被删除。 清除消息 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 2bb6ab8efa..55c22a4873 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 @@ -732,7 +732,6 @@ K-9 Mail 是 Android 上一款功能強大,免費的電子郵件用戶端。 儲存還是捨棄變更? 捨棄郵件? 是否確定捨棄儲存目前的郵件? - 選擇需要複製的文字內容。 清除本地訊息? 這將從信件匣中刪除所有本地郵件。 沒有訊息會從伺服器中被刪除。 清除訊息 -- GitLab From 77f9404c47faf2c1769f6309d7014ad07ca13d33 Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 9 Aug 2022 11:59:35 +0200 Subject: [PATCH 38/38] Version 6.301 --- app/k9mail/build.gradle | 4 ++-- app/ui/legacy/src/main/res/raw/changelog_master.xml | 7 +++++++ fastlane/metadata/android/en-US/changelogs/33001.txt | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/33001.txt diff --git a/app/k9mail/build.gradle b/app/k9mail/build.gradle index 881c605e97..0c2b5c96be 100644 --- a/app/k9mail/build.gradle +++ b/app/k9mail/build.gradle @@ -48,8 +48,8 @@ android { applicationId "com.fsck.k9" testApplicationId "com.fsck.k9.tests" - versionCode 33000 - versionName '6.301-SNAPSHOT' + versionCode 33001 + versionName '6.301' // Keep in sync with the resource string array 'supported_languages' resConfigs "in", "br", "ca", "cs", "cy", "da", "de", "et", "en", "en_GB", "es", "eo", "eu", "fr", "gd", "gl", 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 4b7fdf4b09..698125bb54 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,13 @@ Locale-specific versions are kept in res/raw-/changelog.xml. --> + + Fixed crash when viewing a message and OpenKeychain needed to display its user interface, e.g. to ask for a password + When composing a message containing consecutive spaces convert them to non-breaking spaces in the generated HTML part of the message + Fixed bug where moving a message to another folder wouldn't update the apps search index + Fixed small bug where not all cached values were removed when using "clear local messages" + Updated translations + Added support for swiping between messages Fixed multiple bugs when there are notifications for more than 8 messages diff --git a/fastlane/metadata/android/en-US/changelogs/33001.txt b/fastlane/metadata/android/en-US/changelogs/33001.txt new file mode 100644 index 0000000000..feae1067c2 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/33001.txt @@ -0,0 +1,5 @@ +- Fixed crash when viewing a message and OpenKeychain needed to display its user interface, e.g. to ask for a password +- When composing a message containing consecutive spaces convert them to non-breaking spaces in the generated HTML part of the message +- Fixed bug where moving a message to another folder wouldn't update the apps search index +- Fixed small bug where not all cached values were removed when using "clear local messages" +- Updated translations -- GitLab