From 266831552bc8bbc0923b4b1c98be2fbb159f593a Mon Sep 17 00:00:00 2001 From: cketti Date: Mon, 14 Oct 2024 15:04:37 +0200 Subject: [PATCH 01/45] Add 'import from Thunderbird' screen to onboarding --- app-k9mail/build.gradle.kts | 1 + .../main/kotlin/app/k9mail/K9KoinModule.kt | 2 + app-thunderbird/build.gradle.kts | 2 + .../android/ThunderbirdKoinModule.kt | 2 + .../atom/card/CardFilledPreview.kt | 22 ++++ .../designsystem/atom/card/CardFilled.kt | 19 +++ feature/onboarding/main/build.gradle.kts | 1 + .../main/navigation/OnboardingNavHost.kt | 54 +++++++-- .../onboarding/migration/api/build.gradle.kts | 13 +++ .../api/OnboardingMigrationManager.kt | 13 +++ .../migration/noop/build.gradle.kts | 12 ++ .../migration/OnboardingMigrationModule.kt | 10 ++ .../noop/NoOpOnboardingMigrationManager.kt | 14 +++ .../migration/thunderbird/build.gradle.kts | 17 +++ .../TbOnboardingMigrationScreenPreview.kt | 23 ++++ .../migration/OnboardingMigrationModule.kt | 10 ++ .../TbOnboardingMigrationManager.kt | 19 +++ .../TbOnboardingMigrationScreen.kt | 110 ++++++++++++++++++ .../src/main/res/values/strings.xml | 8 ++ .../TbOnboardingMigrationScreenKtTest.kt | 57 +++++++++ .../import/ui/SettingsImportAction.kt | 25 ++++ .../import/ui/SettingsImportFragment.kt | 5 + .../import/ui/SettingsImportScreen.kt | 5 +- .../import/ui/SettingsImportViewModel.kt | 26 ++++- settings.gradle.kts | 3 + 25 files changed, 462 insertions(+), 11 deletions(-) create mode 100644 core/ui/compose/designsystem/src/debug/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilledPreview.kt create mode 100644 core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt create mode 100644 feature/onboarding/migration/api/build.gradle.kts create mode 100644 feature/onboarding/migration/api/src/main/kotlin/app/k9mail/feature/onboarding/migration/api/OnboardingMigrationManager.kt create mode 100644 feature/onboarding/migration/noop/build.gradle.kts create mode 100644 feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/OnboardingMigrationModule.kt create mode 100644 feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/noop/NoOpOnboardingMigrationManager.kt create mode 100644 feature/onboarding/migration/thunderbird/build.gradle.kts create mode 100644 feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt create mode 100644 feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/OnboardingMigrationModule.kt create mode 100644 feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationManager.kt create mode 100644 feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt create mode 100644 feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml create mode 100644 feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt create mode 100644 feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportAction.kt diff --git a/app-k9mail/build.gradle.kts b/app-k9mail/build.gradle.kts index 7f6904b6f08..4fd685caed0 100644 --- a/app-k9mail/build.gradle.kts +++ b/app-k9mail/build.gradle.kts @@ -25,6 +25,7 @@ dependencies { implementation(projects.feature.widget.unread) implementation(projects.feature.telemetry.noop) implementation(projects.feature.funding.noop) + implementation(projects.feature.onboarding.migration.noop) implementation(libs.androidx.work.runtime) diff --git a/app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt b/app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt index 941d77ca8df..09dd01d4da0 100644 --- a/app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt +++ b/app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt @@ -8,6 +8,7 @@ import app.k9mail.core.ui.theme.api.FeatureThemeProvider import app.k9mail.core.ui.theme.api.ThemeProvider import app.k9mail.dev.developmentModuleAdditions import app.k9mail.feature.funding.featureFundingModule +import app.k9mail.feature.onboarding.migration.onboardingMigrationModule import app.k9mail.feature.telemetry.telemetryModule import app.k9mail.feature.widget.shortcut.LauncherShortcutActivity import app.k9mail.featureflag.K9FeatureFlagFactory @@ -28,6 +29,7 @@ val appModule = module { includes(appWidgetModule) includes(telemetryModule) includes(featureFundingModule) + includes(onboardingMigrationModule) single(named("ClientInfoAppName")) { BuildConfig.CLIENT_INFO_APP_NAME } single(named("ClientInfoAppVersion")) { BuildConfig.VERSION_NAME } diff --git a/app-thunderbird/build.gradle.kts b/app-thunderbird/build.gradle.kts index 2478b7b0118..ae065988c32 100644 --- a/app-thunderbird/build.gradle.kts +++ b/app-thunderbird/build.gradle.kts @@ -225,6 +225,8 @@ dependencies { fullBetaImplementation(projects.feature.funding.googleplay) fullReleaseImplementation(projects.feature.funding.googleplay) + implementation(projects.feature.onboarding.migration.thunderbird) + testImplementation(libs.robolectric) // Required for DependencyInjectionTest to be able to resolve OpenPgpApiManager diff --git a/app-thunderbird/src/main/kotlin/net/thunderbird/android/ThunderbirdKoinModule.kt b/app-thunderbird/src/main/kotlin/net/thunderbird/android/ThunderbirdKoinModule.kt index eaf6b49dc10..7e289e989f4 100644 --- a/app-thunderbird/src/main/kotlin/net/thunderbird/android/ThunderbirdKoinModule.kt +++ b/app-thunderbird/src/main/kotlin/net/thunderbird/android/ThunderbirdKoinModule.kt @@ -6,6 +6,7 @@ import app.k9mail.core.featureflag.FeatureFlagFactory import app.k9mail.core.ui.theme.api.FeatureThemeProvider import app.k9mail.core.ui.theme.api.ThemeProvider import app.k9mail.feature.funding.featureFundingModule +import app.k9mail.feature.onboarding.migration.onboardingMigrationModule import app.k9mail.feature.telemetry.telemetryModule import app.k9mail.feature.widget.shortcut.LauncherShortcutActivity import com.fsck.k9.AppConfig @@ -27,6 +28,7 @@ val appModule = module { includes(appWidgetModule) includes(telemetryModule) includes(featureFundingModule) + includes(onboardingMigrationModule) single(named("ClientInfoAppName")) { BuildConfig.CLIENT_INFO_APP_NAME } single(named("ClientInfoAppVersion")) { BuildConfig.VERSION_NAME } diff --git a/core/ui/compose/designsystem/src/debug/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilledPreview.kt b/core/ui/compose/designsystem/src/debug/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilledPreview.kt new file mode 100644 index 00000000000..e17a9d25b75 --- /dev/null +++ b/core/ui/compose/designsystem/src/debug/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilledPreview.kt @@ -0,0 +1,22 @@ +package app.k9mail.core.ui.compose.designsystem.atom.card + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes +import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium +import app.k9mail.core.ui.compose.theme2.MainTheme + +@Composable +@Preview(showBackground = true) +internal fun CardFilledPreview() { + PreviewWithThemes { + CardFilled { + Box(modifier = Modifier.padding(MainTheme.spacings.double)) { + TextBodyMedium("Text in card") + } + } + } +} diff --git a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt new file mode 100644 index 00000000000..27bc159878b --- /dev/null +++ b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt @@ -0,0 +1,19 @@ +package app.k9mail.core.ui.compose.designsystem.atom.card + +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.material3.Card as Material3Card + +@Composable +fun CardFilled( + modifier: Modifier = Modifier, + onClick: () -> Unit = {}, + content: @Composable ColumnScope.() -> Unit, +) { + Material3Card( + onClick = onClick, + modifier = modifier, + content = content, + ) +} diff --git a/feature/onboarding/main/build.gradle.kts b/feature/onboarding/main/build.gradle.kts index c763c93d08b..a2a70b3da0e 100644 --- a/feature/onboarding/main/build.gradle.kts +++ b/feature/onboarding/main/build.gradle.kts @@ -14,4 +14,5 @@ dependencies { implementation(projects.feature.account.setup) implementation(projects.feature.settings.import) implementation(projects.feature.onboarding.permissions) + implementation(projects.feature.onboarding.migration.api) } diff --git a/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt b/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt index 1c00ff94cd8..78e3dae0706 100644 --- a/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt +++ b/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt @@ -10,17 +10,25 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import app.k9mail.feature.account.setup.navigation.AccountSetupNavHost +import app.k9mail.feature.onboarding.migration.api.OnboardingMigrationManager import app.k9mail.feature.onboarding.permissions.domain.PermissionsDomainContract.UseCase.HasRuntimePermissions import app.k9mail.feature.onboarding.permissions.ui.PermissionsScreen import app.k9mail.feature.onboarding.welcome.ui.WelcomeScreen +import app.k9mail.feature.settings.import.ui.SettingsImportAction import app.k9mail.feature.settings.import.ui.SettingsImportScreen import org.koin.compose.koinInject private const val NESTED_NAVIGATION_ROUTE_WELCOME = "welcome" +private const val NESTED_NAVIGATION_ROUTE_MIGRATION = "migration" private const val NESTED_NAVIGATION_ROUTE_ACCOUNT_SETUP = "account_setup" private const val NESTED_NAVIGATION_ROUTE_SETTINGS_IMPORT = "settings_import" +private const val NESTED_NAVIGATION_ROUTE_SETTINGS_IMPORT_QR_CODE = "settings_import_qr_code" private const val NESTED_NAVIGATION_ROUTE_PERMISSIONS = "permissions" +private fun NavController.navigateToMigration() { + navigate(NESTED_NAVIGATION_ROUTE_MIGRATION) +} + private fun NavController.navigateToAccountSetup() { navigate(NESTED_NAVIGATION_ROUTE_ACCOUNT_SETUP) } @@ -29,6 +37,10 @@ private fun NavController.navigateToSettingsImport() { navigate(NESTED_NAVIGATION_ROUTE_SETTINGS_IMPORT) } +private fun NavController.navigateToSettingsImportQrCode() { + navigate(NESTED_NAVIGATION_ROUTE_SETTINGS_IMPORT_QR_CODE) +} + private fun NavController.navigateToPermissions() { navigate(NESTED_NAVIGATION_ROUTE_PERMISSIONS) { popUpTo(NESTED_NAVIGATION_ROUTE_WELCOME) { @@ -37,26 +49,49 @@ private fun NavController.navigateToPermissions() { } } +@Suppress("LongMethod") @Composable fun OnboardingNavHost( onFinish: (String?) -> Unit, hasRuntimePermissions: HasRuntimePermissions = koinInject(), + onboardingMigrationManager: OnboardingMigrationManager = koinInject(), ) { val navController = rememberNavController() var accountUuid by rememberSaveable { mutableStateOf(null) } + fun onImportSuccess() { + if (hasRuntimePermissions()) { + navController.navigateToPermissions() + } else { + onFinish(null) + } + } + NavHost( navController = navController, startDestination = NESTED_NAVIGATION_ROUTE_WELCOME, ) { composable(route = NESTED_NAVIGATION_ROUTE_WELCOME) { WelcomeScreen( - onStartClick = { navController.navigateToAccountSetup() }, + onStartClick = { + if (onboardingMigrationManager.isFeatureIncluded()) { + navController.navigateToMigration() + } else { + navController.navigateToAccountSetup() + } + }, onImportClick = { navController.navigateToSettingsImport() }, appNameProvider = koinInject(), ) } + composable(route = NESTED_NAVIGATION_ROUTE_MIGRATION) { + onboardingMigrationManager.OnboardingMigrationScreen( + onQrCodeScanClick = { navController.navigateToSettingsImportQrCode() }, + onAddAccountClick = { navController.navigateToAccountSetup() }, + ) + } + composable(route = NESTED_NAVIGATION_ROUTE_ACCOUNT_SETUP) { AccountSetupNavHost( onBack = { navController.popBackStack() }, @@ -73,13 +108,16 @@ fun OnboardingNavHost( composable(route = NESTED_NAVIGATION_ROUTE_SETTINGS_IMPORT) { SettingsImportScreen( - onImportSuccess = { - if (hasRuntimePermissions()) { - navController.navigateToPermissions() - } else { - onFinish(null) - } - }, + action = SettingsImportAction.Overview, + onImportSuccess = ::onImportSuccess, + onBack = { navController.popBackStack() }, + ) + } + + composable(route = NESTED_NAVIGATION_ROUTE_SETTINGS_IMPORT_QR_CODE) { + SettingsImportScreen( + action = SettingsImportAction.ScanQrCode, + onImportSuccess = ::onImportSuccess, onBack = { navController.popBackStack() }, ) } diff --git a/feature/onboarding/migration/api/build.gradle.kts b/feature/onboarding/migration/api/build.gradle.kts new file mode 100644 index 00000000000..ade7f0d6196 --- /dev/null +++ b/feature/onboarding/migration/api/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + id(ThunderbirdPlugins.Library.androidCompose) + alias(libs.plugins.kotlin.serialization) +} + +android { + namespace = "app.k9mail.feature.onboarding.migration.api" + resourcePrefix = "onboarding_migration_api_" +} + +dependencies { + api(projects.core.ui.compose.navigation) +} diff --git a/feature/onboarding/migration/api/src/main/kotlin/app/k9mail/feature/onboarding/migration/api/OnboardingMigrationManager.kt b/feature/onboarding/migration/api/src/main/kotlin/app/k9mail/feature/onboarding/migration/api/OnboardingMigrationManager.kt new file mode 100644 index 00000000000..a750ef22457 --- /dev/null +++ b/feature/onboarding/migration/api/src/main/kotlin/app/k9mail/feature/onboarding/migration/api/OnboardingMigrationManager.kt @@ -0,0 +1,13 @@ +package app.k9mail.feature.onboarding.migration.api + +import androidx.compose.runtime.Composable + +interface OnboardingMigrationManager { + fun isFeatureIncluded(): Boolean + + @Composable + fun OnboardingMigrationScreen( + onQrCodeScanClick: () -> Unit, + onAddAccountClick: () -> Unit, + ) +} diff --git a/feature/onboarding/migration/noop/build.gradle.kts b/feature/onboarding/migration/noop/build.gradle.kts new file mode 100644 index 00000000000..5a9a87cd298 --- /dev/null +++ b/feature/onboarding/migration/noop/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + id(ThunderbirdPlugins.Library.androidCompose) +} + +android { + namespace = "app.k9mail.feature.onboarding.migration.noop" + resourcePrefix = "onboarding_migration_noop_" +} + +dependencies { + api(projects.feature.onboarding.migration.api) +} diff --git a/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/OnboardingMigrationModule.kt b/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/OnboardingMigrationModule.kt new file mode 100644 index 00000000000..9412d626976 --- /dev/null +++ b/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/OnboardingMigrationModule.kt @@ -0,0 +1,10 @@ +package app.k9mail.feature.onboarding.migration + +import app.k9mail.feature.onboarding.migration.api.OnboardingMigrationManager +import app.k9mail.feature.onboarding.migration.noop.NoOpOnboardingMigrationManager +import org.koin.core.module.Module +import org.koin.dsl.module + +val onboardingMigrationModule: Module = module { + single { NoOpOnboardingMigrationManager() } +} diff --git a/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/noop/NoOpOnboardingMigrationManager.kt b/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/noop/NoOpOnboardingMigrationManager.kt new file mode 100644 index 00000000000..e535451905c --- /dev/null +++ b/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/noop/NoOpOnboardingMigrationManager.kt @@ -0,0 +1,14 @@ +package app.k9mail.feature.onboarding.migration.noop + +import androidx.compose.runtime.Composable +import app.k9mail.feature.onboarding.migration.api.OnboardingMigrationManager + +class NoOpOnboardingMigrationManager : OnboardingMigrationManager { + override fun isFeatureIncluded(): Boolean = false + + @Composable + override fun OnboardingMigrationScreen( + onQrCodeScanClick: () -> Unit, + onAddAccountClick: () -> Unit, + ) = Unit +} diff --git a/feature/onboarding/migration/thunderbird/build.gradle.kts b/feature/onboarding/migration/thunderbird/build.gradle.kts new file mode 100644 index 00000000000..c9663f0ec1c --- /dev/null +++ b/feature/onboarding/migration/thunderbird/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + id(ThunderbirdPlugins.Library.androidCompose) +} + +android { + namespace = "app.k9mail.feature.onboarding.migration.thunderbird" + resourcePrefix = "onboarding_migration_thunderbird_" +} + +dependencies { + api(projects.feature.onboarding.migration.api) + implementation(projects.core.common) + implementation(projects.core.ui.compose.designsystem) + implementation(projects.feature.account.common) + + testImplementation(projects.core.ui.compose.testing) +} diff --git a/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt b/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt new file mode 100644 index 00000000000..61a7aeb8b7f --- /dev/null +++ b/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt @@ -0,0 +1,23 @@ +package app.k9mail.feature.onboarding.migration.thunderbird + +import androidx.compose.runtime.Composable +import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.ui.compose.common.annotation.PreviewDevices +import app.k9mail.core.ui.compose.designsystem.atom.Surface +import app.k9mail.core.ui.compose.theme2.thunderbird.ThunderbirdTheme2 + +@Composable +@PreviewDevices +internal fun TbOnboardingMigrationScreenPreview() { + ThunderbirdTheme2 { + Surface { + TbOnboardingMigrationScreen( + onQrCodeScanClick = {}, + onAddAccountClick = {}, + appNameProvider = object : AppNameProvider { + override val appName: String = "Thunderbird" + }, + ) + } + } +} diff --git a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/OnboardingMigrationModule.kt b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/OnboardingMigrationModule.kt new file mode 100644 index 00000000000..e6f7afb65d1 --- /dev/null +++ b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/OnboardingMigrationModule.kt @@ -0,0 +1,10 @@ +package app.k9mail.feature.onboarding.migration + +import app.k9mail.feature.onboarding.migration.api.OnboardingMigrationManager +import app.k9mail.feature.onboarding.migration.thunderbird.TbOnboardingMigrationManager +import org.koin.core.module.Module +import org.koin.dsl.module + +val onboardingMigrationModule: Module = module { + single { TbOnboardingMigrationManager() } +} diff --git a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationManager.kt b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationManager.kt new file mode 100644 index 00000000000..ef4691f5e6b --- /dev/null +++ b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationManager.kt @@ -0,0 +1,19 @@ +package app.k9mail.feature.onboarding.migration.thunderbird + +import androidx.compose.runtime.Composable +import app.k9mail.feature.onboarding.migration.api.OnboardingMigrationManager + +class TbOnboardingMigrationManager : OnboardingMigrationManager { + override fun isFeatureIncluded(): Boolean = true + + @Composable + override fun OnboardingMigrationScreen( + onQrCodeScanClick: () -> Unit, + onAddAccountClick: () -> Unit, + ) { + TbOnboardingMigrationScreen( + onQrCodeScanClick, + onAddAccountClick, + ) + } +} diff --git a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt new file mode 100644 index 00000000000..177828cfb29 --- /dev/null +++ b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt @@ -0,0 +1,110 @@ +package app.k9mail.feature.onboarding.migration.thunderbird + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.stringResource +import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilled +import app.k9mail.core.ui.compose.designsystem.atom.card.CardFilled +import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium +import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium +import app.k9mail.core.ui.compose.designsystem.template.ResponsiveWidthContainer +import app.k9mail.core.ui.compose.theme2.MainTheme +import app.k9mail.feature.account.common.ui.AppTitleTopHeader +import org.koin.compose.koinInject + +@Composable +internal fun TbOnboardingMigrationScreen( + onQrCodeScanClick: () -> Unit, + onAddAccountClick: () -> Unit, + modifier: Modifier = Modifier, + appNameProvider: AppNameProvider = koinInject(), +) { + val scrollState = rememberScrollState() + + ResponsiveWidthContainer( + modifier = Modifier + .fillMaxSize() + .then(modifier), + ) { + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(scrollState), + ) { + AppTitleTopHeader( + title = appNameProvider.appName, + ) + + Spacer(modifier = Modifier.height(MainTheme.spacings.double)) + + TextCard(title = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_title)) { + TextBodyMedium( + text = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_description), + modifier = Modifier + .padding(bottom = MainTheme.spacings.double), + ) + + ButtonFilled( + text = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_button_text), + onClick = onQrCodeScanClick, + modifier = Modifier + .testTag("QrCodeImportButton") + .align(Alignment.CenterHorizontally), + ) + } + + Spacer(modifier = Modifier.height(MainTheme.spacings.double)) + + TextCard(title = stringResource(R.string.onboarding_migration_thunderbird_new_account_title)) { + ButtonFilled( + text = stringResource(R.string.onboarding_migration_thunderbird_new_account_button_text), + onClick = onAddAccountClick, + modifier = Modifier + .testTag("AddAccountButton") + .align(Alignment.CenterHorizontally), + ) + } + + Spacer(modifier = Modifier.height(MainTheme.spacings.double)) + } + } +} + +@Composable +private fun TextCard( + title: String, + content: @Composable ColumnScope.() -> Unit, +) { + CardFilled( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = MainTheme.spacings.quadruple), + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(MainTheme.spacings.double), + ) { + TextTitleMedium( + text = title, + color = MainTheme.colors.primary, + modifier = Modifier + .padding(bottom = MainTheme.spacings.double), + ) + + content() + } + } +} diff --git a/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml b/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml new file mode 100644 index 00000000000..b907f8a426d --- /dev/null +++ b/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml @@ -0,0 +1,8 @@ + + + Already using Thunderbird on desktop? + You can easily import your account settings.\n\nIn your Thunderbird desktop client, go to the top menu bar, click on ‘Settings’, and select ‘Export for Mobile’.\n\nA new tab with QR codes will appear. Use your Android device to scan the codes. + Import settings + New to Thunderbird? + Add an email account now + diff --git a/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt b/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt new file mode 100644 index 00000000000..7579aa999d2 --- /dev/null +++ b/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt @@ -0,0 +1,57 @@ +package app.k9mail.feature.onboarding.migration.thunderbird + +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performScrollTo +import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.ui.compose.testing.ComposeTest +import app.k9mail.core.ui.compose.testing.setContentWithTheme +import assertk.assertThat +import assertk.assertions.isEqualTo +import org.junit.Test + +class TbOnboardingMigrationScreenKtTest : ComposeTest() { + @Test + fun `pressing QrCodeImportButton should call onQrCodeScanClick`() = runComposeTest { + var qrCodeScanClickCounter = 0 + var addAccountClickCounter = 0 + setContentWithTheme { + TbOnboardingMigrationScreen( + onQrCodeScanClick = { qrCodeScanClickCounter++ }, + onAddAccountClick = { addAccountClickCounter++ }, + appNameProvider = FakeAppNameProvider(), + ) + } + + composeTestRule.onNodeWithTag("QrCodeImportButton") + .performScrollTo() + .performClick() + + assertThat(qrCodeScanClickCounter).isEqualTo(1) + assertThat(addAccountClickCounter).isEqualTo(0) + } + + @Test + fun `pressing AddAccountButton button should call onAddAccountClick`() = runComposeTest { + var qrCodeScanClickCounter = 0 + var addAccountClickCounter = 0 + setContentWithTheme { + TbOnboardingMigrationScreen( + onQrCodeScanClick = { qrCodeScanClickCounter++ }, + onAddAccountClick = { addAccountClickCounter++ }, + appNameProvider = FakeAppNameProvider(), + ) + } + + composeTestRule.onNodeWithTag("AddAccountButton") + .performScrollTo() + .performClick() + + assertThat(addAccountClickCounter).isEqualTo(1) + assertThat(qrCodeScanClickCounter).isEqualTo(0) + } +} + +private class FakeAppNameProvider : AppNameProvider { + override val appName = "Thunderbird" +} diff --git a/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportAction.kt b/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportAction.kt new file mode 100644 index 00000000000..8ad8be9d777 --- /dev/null +++ b/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportAction.kt @@ -0,0 +1,25 @@ +package app.k9mail.feature.settings.import.ui + +import android.os.Bundle +import androidx.core.os.bundleOf + +enum class SettingsImportAction(private val bundleValue: String) { + Overview("overview"), + ScanQrCode("scan_qr_code"), + ; + + fun toBundle(): Bundle { + return bundleOf( + BUNDLE_KEY_ACTION to bundleValue, + ) + } + + companion object { + const val BUNDLE_KEY_ACTION = "action" + + fun fromBundle(bundle: Bundle): SettingsImportAction { + val actionString = bundle.getString(BUNDLE_KEY_ACTION) + return entries.find { it.bundleValue == actionString } ?: Overview + } + } +} diff --git a/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportFragment.kt b/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportFragment.kt index 4f8da6a10f6..f378b009661 100644 --- a/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportFragment.kt +++ b/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportFragment.kt @@ -70,6 +70,11 @@ class SettingsImportFragment : Fragment() { viewModel.getUiModel().observeNotNull(this) { viewHolder.updateUi(it) } viewModel.getActionEvents().observeNotNull(this) { handleActionEvents(it) } + + arguments?.let { arguments -> + val action = SettingsImportAction.fromBundle(arguments) + viewModel.setAction(action) + } } private fun initializeSettingsImportList(recyclerView: RecyclerView) { diff --git a/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportScreen.kt b/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportScreen.kt index 6a18cd60584..bcb8d293eb3 100644 --- a/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportScreen.kt +++ b/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportScreen.kt @@ -19,6 +19,7 @@ import app.k9mail.feature.settings.importing.R @Composable fun SettingsImportScreen( + action: SettingsImportAction, onImportSuccess: () -> Unit, onBack: () -> Unit, modifier: Modifier = Modifier, @@ -38,12 +39,13 @@ fun SettingsImportScreen( }, modifier = modifier, ) { innerPadding -> - SettingsImportContent(onImportSuccess, onBack, innerPadding) + SettingsImportContent(action, onImportSuccess, onBack, innerPadding) } } @Composable private fun SettingsImportContent( + action: SettingsImportAction, onImportSuccess: () -> Unit, onBack: () -> Unit, paddingValues: PaddingValues, @@ -62,6 +64,7 @@ private fun SettingsImportContent( } AndroidFragment( + arguments = action.toBundle(), modifier = Modifier .fillMaxSize() .padding(paddingValues), diff --git a/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportViewModel.kt b/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportViewModel.kt index e8ae7baeb17..294171da149 100644 --- a/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportViewModel.kt +++ b/feature/settings/import/src/main/kotlin/app/k9mail/feature/settings/import/ui/SettingsImportViewModel.kt @@ -43,6 +43,9 @@ internal class SettingsImportViewModel( private val uiModelLiveData = MutableLiveData() private val actionLiveData = SingleLiveEvent() + private var action = SettingsImportAction.Overview + private var wasActionHandled = false + private val uiModel = SettingsImportUiModel() private var accountsMap: MutableMap = mutableMapOf() private val accountStateMap: MutableMap = mutableMapOf() @@ -98,7 +101,9 @@ internal class SettingsImportViewModel( return uiModelLiveData } + @Suppress("LongMethod") fun initializeFromSavedState(savedInstanceState: Bundle) { + wasActionHandled = true contentUri = BundleCompat.getParcelable(savedInstanceState, STATE_CONTENT_URI, Uri::class.java) currentlyAuthorizingAccountUuid = savedInstanceState.getString(STATE_CURRENTLY_AUTHORIZING_ACCOUNT_UUID) @@ -197,6 +202,19 @@ internal class SettingsImportViewModel( outState.putParcelable(STATE_CONTENT_URI, contentUri) } + fun setAction(action: SettingsImportAction) { + this.action = action + + if (!wasActionHandled) { + wasActionHandled = true + + when (action) { + SettingsImportAction.Overview -> Unit + SettingsImportAction.ScanQrCode -> onScanQrCodeButtonClicked() + } + } + } + fun onPickDocumentButtonClicked() { updateUiModel { disablePickButtons() @@ -222,8 +240,12 @@ internal class SettingsImportViewModel( } fun onDocumentPickCanceled() { - updateUiModel { - enablePickButtons() + if (action == SettingsImportAction.ScanQrCode) { + sendActionEvent(Action.Close(importSuccess = false)) + } else { + updateUiModel { + enablePickButtons() + } } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 29448a18885..a49d4994648 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -39,6 +39,9 @@ include( ":feature:onboarding:main", ":feature:onboarding:welcome", ":feature:onboarding:permissions", + ":feature:onboarding:migration:api", + ":feature:onboarding:migration:thunderbird", + ":feature:onboarding:migration:noop", ) include( From 7f17f70faf2c2ba411d3a0675b9751371e1f8e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 11:05:18 +0200 Subject: [PATCH 02/45] Add ProductDetailsMapper --- .../feature/funding/FeatureFundingModule.kt | 5 + .../funding/googleplay/data/DataContract.kt | 18 ++ .../data/mapper/ProductDetailsMapper.kt | 57 +++++++ .../domain/entity/OneTimeContribution.kt | 2 +- .../data/mapper/ProductDetailsMapperTest.kt | 159 ++++++++++++++++++ 5 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/DataContract.kt create mode 100644 feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/mapper/ProductDetailsMapper.kt create mode 100644 feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/data/mapper/ProductDetailsMapperTest.kt diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt index ecc5a2a45de..d672c70b126 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt @@ -4,6 +4,8 @@ import app.k9mail.feature.funding.api.FundingManager import app.k9mail.feature.funding.api.FundingNavigation import app.k9mail.feature.funding.googleplay.GooglePlayFundingManager import app.k9mail.feature.funding.googleplay.GooglePlayFundingNavigation +import app.k9mail.feature.funding.googleplay.data.DataContract +import app.k9mail.feature.funding.googleplay.data.mapper.ProductDetailsMapper import app.k9mail.feature.funding.googleplay.ui.contribution.ContributionViewModel import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.module @@ -12,5 +14,8 @@ val featureFundingModule = module { single { GooglePlayFundingManager() } single { GooglePlayFundingNavigation() } + single { + ProductDetailsMapper() + } viewModel { ContributionViewModel() } } diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/DataContract.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/DataContract.kt new file mode 100644 index 00000000000..ca717c34b58 --- /dev/null +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/DataContract.kt @@ -0,0 +1,18 @@ +package app.k9mail.feature.funding.googleplay.data + +import app.k9mail.feature.funding.googleplay.domain.entity.Contribution +import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution +import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution +import com.android.billingclient.api.ProductDetails + +interface DataContract { + + interface Mapper { + interface Product { + fun mapToContribution(product: ProductDetails): Contribution + + fun mapToOneTimeContribution(product: ProductDetails): OneTimeContribution + fun mapToRecurringContribution(product: ProductDetails): RecurringContribution + } + } +} diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/mapper/ProductDetailsMapper.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/mapper/ProductDetailsMapper.kt new file mode 100644 index 00000000000..a27017077ba --- /dev/null +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/mapper/ProductDetailsMapper.kt @@ -0,0 +1,57 @@ +package app.k9mail.feature.funding.googleplay.data.mapper + +import app.k9mail.feature.funding.googleplay.data.DataContract.Mapper +import app.k9mail.feature.funding.googleplay.domain.entity.Contribution +import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution +import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution +import com.android.billingclient.api.BillingClient +import com.android.billingclient.api.ProductDetails + +class ProductDetailsMapper : Mapper.Product { + + override fun mapToContribution(product: ProductDetails): Contribution { + return when (product.productType) { + BillingClient.ProductType.INAPP -> mapToOneTimeContribution(product) + BillingClient.ProductType.SUBS -> mapToRecurringContribution(product) + else -> throw IllegalArgumentException("Unknown product type: ${product.productType}") + } + } + + override fun mapToOneTimeContribution(product: ProductDetails): OneTimeContribution { + require(product.productType == BillingClient.ProductType.INAPP) { "Product type must be INAPP" } + + val offerDetails = product.oneTimePurchaseOfferDetails + + return if (offerDetails != null) { + OneTimeContribution( + id = product.productId, + title = product.name, + description = product.description.replace("\n", ""), + price = offerDetails.priceAmountMicros, + priceFormatted = offerDetails.formattedPrice, + ) + } else { + error("One-time product has no offer details: ${product.productId}") + } + } + + override fun mapToRecurringContribution(product: ProductDetails): RecurringContribution { + require(product.productType == BillingClient.ProductType.SUBS) { "Product type must be SUBS" } + + // We assume the product has only one offer and one pricing phase + val pricingPhase = + product.subscriptionOfferDetails?.firstOrNull()?.pricingPhases?.pricingPhaseList?.firstOrNull() + + return if (pricingPhase != null) { + RecurringContribution( + id = product.productId, + title = product.name, + description = product.description.replace("\n", ""), + price = pricingPhase.priceAmountMicros, + priceFormatted = pricingPhase.formattedPrice, + ) + } else { + error("Subscription product has no pricing phase: ${product.productId}") + } + } +} diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/entity/OneTimeContribution.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/entity/OneTimeContribution.kt index 26b951c83b6..1d4d4c89577 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/entity/OneTimeContribution.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/entity/OneTimeContribution.kt @@ -1,6 +1,6 @@ package app.k9mail.feature.funding.googleplay.domain.entity -class OneTimeContribution( +data class OneTimeContribution( override val id: String, override val title: String, override val description: String, diff --git a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/data/mapper/ProductDetailsMapperTest.kt b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/data/mapper/ProductDetailsMapperTest.kt new file mode 100644 index 00000000000..d5dd82c6c03 --- /dev/null +++ b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/data/mapper/ProductDetailsMapperTest.kt @@ -0,0 +1,159 @@ +package app.k9mail.feature.funding.googleplay.data.mapper + +import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution +import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution +import assertk.assertFailure +import assertk.assertThat +import assertk.assertions.isEqualTo +import assertk.assertions.isInstanceOf +import com.android.billingclient.api.BillingClient.ProductType +import com.android.billingclient.api.ProductDetails +import kotlin.test.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock + +class ProductDetailsMapperTest { + + private val testSubject = ProductDetailsMapper() + + @Test + fun `mapToOneTimeContribution returns OneTimeContribution when product type is INAPP`() { + val productDetails = createInAppProductDetails() + + val result = testSubject.mapToOneTimeContribution(productDetails) + + assertThat(result).isEqualTo(ONE_TIME_CONTRIBUTION) + } + + @Test + fun `mapToOneTimeContribution throws IllegalStateException when in app product has no offer details`() { + val productDetails = createInAppProductDetails(hasOfferDetails = false) + + assertFailure { + testSubject.mapToOneTimeContribution(productDetails) + }.isInstanceOf(IllegalStateException::class) + } + + @Test + fun `mapToRecurringContribution returns RecurringContribution when product type is SUBS`() { + val productDetails = createSubscriptionProductDetails() + + val result = testSubject.mapToRecurringContribution(productDetails) + + assertThat(result).isEqualTo(RECURRING_CONTRIBUTION) + } + + @Test + fun `mapToRecurringContribution throws IllegalStateException when subscription product has no pricing phase`() { + val productDetails = createSubscriptionProductDetails(hasPricingPhase = false) + + assertFailure { + testSubject.mapToRecurringContribution(productDetails) + }.isInstanceOf(IllegalStateException::class) + } + + @Test + fun `mapToContribution return contribution for all supported types`() { + val inAppProductDetails = createInAppProductDetails() + val subscriptionProductDetails = createSubscriptionProductDetails() + + val oneTimeContribution = testSubject.mapToContribution(inAppProductDetails) + val recurringContribution = testSubject.mapToContribution(subscriptionProductDetails) + + assertThat(oneTimeContribution).isEqualTo(ONE_TIME_CONTRIBUTION) + assertThat(recurringContribution).isEqualTo(RECURRING_CONTRIBUTION) + } + + @Test + fun `mapToContribution throws IllegalArgumentException when product type is unknown`() { + val productDetails = mock { + on { productType } doReturn "unknown" + } + + assertFailure { + testSubject.mapToContribution(productDetails) + }.isInstanceOf(IllegalArgumentException::class) + } + + private fun createInAppProductDetails( + hasOfferDetails: Boolean = true, + ): ProductDetails { + val oneTimePurchaseOfferDetails = mock { + on { priceAmountMicros }.thenReturn(ONE_TIME_PRICE) + on { formattedPrice }.thenReturn(ONE_TIME_PRICE_FORMATTED) + } + + return mock { + on { productType } doReturn ProductType.INAPP + on { productId } doReturn ONE_TIME_ID + on { name } doReturn ONE_TIME_TITLE + on { description } doReturn ONE_TIME_DESCRIPTION_WITH_NEW_LINE + on { getOneTimePurchaseOfferDetails() } doReturn if (hasOfferDetails) { + oneTimePurchaseOfferDetails + } else { + null + } + } + } + + private fun createSubscriptionProductDetails( + hasPricingPhase: Boolean = true, + ): ProductDetails { + val pricingPhase = mock { + on { priceAmountMicros } doReturn RECURRING_PRICE + on { formattedPrice } doReturn RECURRING_PRICE_FORMATTED + } + + val pricingPhaseList = mock { + on { pricingPhaseList } doReturn listOf(pricingPhase) + } + + val subscriptionOfferDetails = mock { + on { pricingPhases } doReturn pricingPhaseList + } + + return mock { + on { productType } doReturn ProductType.SUBS + on { productId } doReturn RECURRING_ID + on { name } doReturn RECURRING_TITLE + on { description } doReturn RECURRING_DESCRIPTION_WITH_NEW_LINE + on { getSubscriptionOfferDetails() } doReturn if (hasPricingPhase) { + listOf(subscriptionOfferDetails) + } else { + null + } + } + } + + private companion object { + const val ONE_TIME_ID = "one_time_id" + const val ONE_TIME_TITLE = "One-Time" + const val ONE_TIME_DESCRIPTION = "One-Time Description" + const val ONE_TIME_DESCRIPTION_WITH_NEW_LINE = "One-Time\n Description" + const val ONE_TIME_PRICE = 1_000L + const val ONE_TIME_PRICE_FORMATTED = "$10.00" + + val ONE_TIME_CONTRIBUTION = OneTimeContribution( + id = ONE_TIME_ID, + title = ONE_TIME_TITLE, + description = ONE_TIME_DESCRIPTION, + price = ONE_TIME_PRICE, + priceFormatted = ONE_TIME_PRICE_FORMATTED, + ) + + const val RECURRING_ID = "recurring_product_id" + const val RECURRING_TITLE = "Recurring" + const val RECURRING_DESCRIPTION = "Recurring Description" + const val RECURRING_DESCRIPTION_WITH_NEW_LINE = "Recurring\n Description" + const val RECURRING_PRICE = 2_000L + const val RECURRING_PRICE_FORMATTED = "$20.00" + + val RECURRING_CONTRIBUTION = RecurringContribution( + id = RECURRING_ID, + title = RECURRING_TITLE, + description = RECURRING_DESCRIPTION, + price = RECURRING_PRICE, + priceFormatted = RECURRING_PRICE_FORMATTED, + ) + } +} From 133a3dafbe764cb87b725fd7d1cf463e15017e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 12:54:04 +0200 Subject: [PATCH 03/45] Add ContributionIdProvider --- .../feature/funding/FeatureFundingModule.kt | 7 +++++ .../domain/ContributionIdProvider.kt | 26 +++++++++++++++++++ .../googleplay/domain/DomainContract.kt | 11 ++++++++ 3 files changed, 44 insertions(+) create mode 100644 feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/ContributionIdProvider.kt create mode 100644 feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/DomainContract.kt diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt index d672c70b126..b6474fb6a88 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt @@ -6,6 +6,8 @@ import app.k9mail.feature.funding.googleplay.GooglePlayFundingManager import app.k9mail.feature.funding.googleplay.GooglePlayFundingNavigation import app.k9mail.feature.funding.googleplay.data.DataContract import app.k9mail.feature.funding.googleplay.data.mapper.ProductDetailsMapper +import app.k9mail.feature.funding.googleplay.domain.ContributionIdProvider +import app.k9mail.feature.funding.googleplay.domain.DomainContract import app.k9mail.feature.funding.googleplay.ui.contribution.ContributionViewModel import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.module @@ -17,5 +19,10 @@ val featureFundingModule = module { single { ProductDetailsMapper() } + + single { + ContributionIdProvider() + } + viewModel { ContributionViewModel() } } diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/ContributionIdProvider.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/ContributionIdProvider.kt new file mode 100644 index 00000000000..00799d5b535 --- /dev/null +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/ContributionIdProvider.kt @@ -0,0 +1,26 @@ +package app.k9mail.feature.funding.googleplay.domain + +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf + +// TODO should be provided externally per app variant +class ContributionIdProvider : + DomainContract.ContributionIdProvider { + override val oneTimeContributionIds: ImmutableList = persistentListOf( + "contribution_tfa_onetime_xs", + "contribution_tfa_onetime_s", + "contribution_tfa_onetime_m", + "contribution_tfa_onetime_l", + "contribution_tfa_onetime_xl", + "contribution_tfa_onetime_xxl", + ) + + override val recurringContributionIds: ImmutableList = persistentListOf( + "contribution_tfa_monthly_xs", + "contribution_tfa_monthly_s", + "contribution_tfa_monthly_m", + "contribution_tfa_monthly_l", + "contribution_tfa_monthly_xl", + "contribution_tfa_monthly_xxl", + ) +} diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/DomainContract.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/DomainContract.kt new file mode 100644 index 00000000000..0339d431965 --- /dev/null +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/DomainContract.kt @@ -0,0 +1,11 @@ +package app.k9mail.feature.funding.googleplay.domain + +import kotlinx.collections.immutable.ImmutableList + +interface DomainContract { + + interface ContributionIdProvider { + val oneTimeContributionIds: ImmutableList + val recurringContributionIds: ImmutableList + } +} From 1a129a645b63ff5463a8a167741c77d050e57d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 15:09:02 +0200 Subject: [PATCH 04/45] Add BillingManager --- .../feature/funding/FeatureFundingModule.kt | 14 ++- .../funding/googleplay/data/DataContract.kt | 43 +++++++++ .../googleplay/domain/BillingManager.kt | 44 ++++++++++ .../googleplay/domain/DomainContract.kt | 38 ++++++++ .../ui/contribution/ContributionViewModel.kt | 87 ++++++++++++++++++- .../contribution/ContributionViewModelTest.kt | 14 ++- .../ui/contribution/FakeBillingManager.kt | 22 +++++ 7 files changed, 258 insertions(+), 4 deletions(-) create mode 100644 feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/BillingManager.kt create mode 100644 feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeBillingManager.kt diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt index b6474fb6a88..f5acf906b62 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt @@ -6,6 +6,7 @@ import app.k9mail.feature.funding.googleplay.GooglePlayFundingManager import app.k9mail.feature.funding.googleplay.GooglePlayFundingNavigation import app.k9mail.feature.funding.googleplay.data.DataContract import app.k9mail.feature.funding.googleplay.data.mapper.ProductDetailsMapper +import app.k9mail.feature.funding.googleplay.domain.BillingManager import app.k9mail.feature.funding.googleplay.domain.ContributionIdProvider import app.k9mail.feature.funding.googleplay.domain.DomainContract import app.k9mail.feature.funding.googleplay.ui.contribution.ContributionViewModel @@ -24,5 +25,16 @@ val featureFundingModule = module { ContributionIdProvider() } - viewModel { ContributionViewModel() } + single { + BillingManager( + billingClient = get(), + contributionIdProvider = get(), + ) + } + + viewModel { + ContributionViewModel( + billingManager = get(), + ) + } } diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/DataContract.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/DataContract.kt index ca717c34b58..ea6ee5f9036 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/DataContract.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/DataContract.kt @@ -1,5 +1,6 @@ package app.k9mail.feature.funding.googleplay.data +import android.app.Activity import app.k9mail.feature.funding.googleplay.domain.entity.Contribution import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution @@ -15,4 +16,46 @@ interface DataContract { fun mapToRecurringContribution(product: ProductDetails): RecurringContribution } } + + interface BillingClient { + + /** + * Connect to the billing service. + * + * @param onConnected Callback to be invoked when the billing service is connected. + */ + suspend fun connect(onConnected: suspend () -> T): T + + /** + * Disconnect from the billing service. + */ + fun disconnect() + + /** + * Load one-time contributions. + */ + suspend fun loadOneTimeContributions( + productIds: List, + ): List + + /** + * Load recurring contributions. + */ + suspend fun loadRecurringContributions( + productIds: List, + ): List + + /** + * Load purchased contributions. + */ + suspend fun loadPurchasedContributions(): List + + /** + * Purchase a contribution. + */ + suspend fun purchaseContribution( + activity: Activity, + contribution: Contribution, + ): Contribution? + } } diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/BillingManager.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/BillingManager.kt new file mode 100644 index 00000000000..086666721ea --- /dev/null +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/BillingManager.kt @@ -0,0 +1,44 @@ +package app.k9mail.feature.funding.googleplay.domain + +import android.app.Activity +import app.k9mail.feature.funding.googleplay.data.DataContract +import app.k9mail.feature.funding.googleplay.domain.entity.Contribution +import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution +import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution + +class BillingManager( + private val billingClient: DataContract.BillingClient, + private val contributionIdProvider: DomainContract.ContributionIdProvider, +) : DomainContract.BillingManager { + + override suspend fun loadOneTimeContributions(): List { + return billingClient.connect { + billingClient.loadOneTimeContributions(contributionIdProvider.oneTimeContributionIds) + .sortedByDescending { it.price } + } + } + + override suspend fun loadRecurringContributions(): List { + return billingClient.connect { + billingClient.loadRecurringContributions(contributionIdProvider.recurringContributionIds) + .sortedByDescending { it.price } + } + } + + override suspend fun loadPurchasedContributions(): List { + return billingClient.connect { + billingClient.loadPurchasedContributions() + .sortedByDescending { it.price } + } + } + + override suspend fun purchaseContribution(activity: Activity, contribution: Contribution): Contribution? { + return billingClient.connect { + billingClient.purchaseContribution(activity, contribution) + } + } + + override fun clear() { + billingClient.disconnect() + } +} diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/DomainContract.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/DomainContract.kt index 0339d431965..67c3193096d 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/DomainContract.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/domain/DomainContract.kt @@ -1,5 +1,9 @@ package app.k9mail.feature.funding.googleplay.domain +import android.app.Activity +import app.k9mail.feature.funding.googleplay.domain.entity.Contribution +import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution +import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution import kotlinx.collections.immutable.ImmutableList interface DomainContract { @@ -8,4 +12,38 @@ interface DomainContract { val oneTimeContributionIds: ImmutableList val recurringContributionIds: ImmutableList } + + interface BillingManager { + /** + * Load contributions. + */ + suspend fun loadOneTimeContributions(): List + + /** + * Load recurring contributions. + */ + suspend fun loadRecurringContributions(): List + + /** + * Load purchased contributions. + */ + suspend fun loadPurchasedContributions(): List + + /** + * Purchase a contribution. + * + * @param activity The activity to use for the purchase flow. + * @param contribution The contribution to purchase. + * @return The purchased contribution or null if the purchase failed. + */ + suspend fun purchaseContribution( + activity: Activity, + contribution: Contribution, + ): Contribution? + + /** + * Release all resources. + */ + fun clear() + } } diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt index fc964212534..99255a68bed 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt @@ -1,17 +1,86 @@ package app.k9mail.feature.funding.googleplay.ui.contribution import android.app.Activity +import androidx.lifecycle.viewModelScope import app.k9mail.core.ui.compose.common.mvi.BaseViewModel +import app.k9mail.feature.funding.googleplay.domain.DomainContract import app.k9mail.feature.funding.googleplay.domain.entity.Contribution import app.k9mail.feature.funding.googleplay.ui.contribution.ContributionContract.Event import app.k9mail.feature.funding.googleplay.ui.contribution.ContributionContract.State import app.k9mail.feature.funding.googleplay.ui.contribution.ContributionContract.ViewModel +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.launch +@Suppress("TooManyFunctions") internal class ContributionViewModel( + private val billingManager: DomainContract.BillingManager, initialState: State = State(), ) : BaseViewModel(initialState), ViewModel { + init { + viewModelScope.launch { + loadOneTimeContributions() + loadRecurringContributions() + loadPurchasedContribution() + selectDefaultContribution() + } + } + + private suspend fun loadOneTimeContributions() { + val result = billingManager.loadOneTimeContributions() + + updateState { state -> + state.copy( + oneTimeContributions = result.toImmutableList(), + selectedContribution = if ( + !state.isRecurringContributionSelected && + result.contains(state.selectedContribution).not() + ) { + result.firstOrNull() + } else { + state.selectedContribution + }, + ) + } + } + + private suspend fun loadRecurringContributions() { + val result = billingManager.loadRecurringContributions() + + updateState { state -> + state.copy( + recurringContributions = result.toImmutableList(), + selectedContribution = if ( + state.isRecurringContributionSelected && + result.contains(state.selectedContribution).not() + ) { + result.firstOrNull() + } else { + state.selectedContribution + }, + ) + } + } + + private suspend fun loadPurchasedContribution() { + val purchasedContribution = billingManager.loadPurchasedContributions().firstOrNull() + updateState { state -> + state.copy( + purchasedContribution = purchasedContribution, + ) + } + } + + private fun selectDefaultContribution() { + val selectedContribution = state.value.selectedContribution ?: return + if (state.value.oneTimeContributions.contains(selectedContribution)) { + onOneTimeContributionSelected() + } else if (state.value.recurringContributions.contains(selectedContribution)) { + onRecurringContributionSelected() + } + } + override fun event(event: Event) { when (event) { Event.OnOneTimeContributionSelected -> onOneTimeContributionSelected() @@ -48,13 +117,27 @@ internal class ContributionViewModel( } } - @Suppress("UnusedParameter") private fun onPurchaseClicked(activity: Activity) { - // TODO: Implement purchase logic + viewModelScope.launch { + val result = billingManager.purchaseContribution(activity, state.value.selectedContribution!!) + + if (result != null) { + updateState { + it.copy( + purchasedContribution = result, + ) + } + } + } } @Suppress("UnusedParameter") private fun onManagePurchaseClicked(contribution: Contribution) { // TODO: Implement manage purchase logic } + + override fun onCleared() { + super.onCleared() + billingManager.clear() + } } diff --git a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt index 5bb02a5b7f9..b5c40a887e1 100644 --- a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt +++ b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt @@ -23,6 +23,9 @@ class ContributionViewModelTest { val initialState = State( isRecurringContributionSelected = true, oneTimeContributions = FakeData.oneTimeContributions, + recurringContributions = FakeData.recurringContributions, + purchasedContribution = FakeData.oneTimeContributions.first(), + selectedContribution = FakeData.recurringContributions.first(), ) contributionRobot(initialState) { @@ -35,7 +38,10 @@ class ContributionViewModelTest { fun `should change selected contribution and selected type when recurring contribution selected`() = runMviTest { val initialState = State( isRecurringContributionSelected = false, + oneTimeContributions = FakeData.oneTimeContributions, recurringContributions = FakeData.recurringContributions, + purchasedContribution = FakeData.oneTimeContributions.first(), + selectedContribution = FakeData.oneTimeContributions.first(), ) contributionRobot(initialState) { @@ -48,7 +54,10 @@ class ContributionViewModelTest { fun `should change selected contribution when contribution item clicked`() = runMviTest { val initialState = State( isRecurringContributionSelected = true, + oneTimeContributions = FakeData.oneTimeContributions, recurringContributions = FakeData.recurringContributions, + purchasedContribution = FakeData.oneTimeContributions.first(), + selectedContribution = FakeData.recurringContributions.first(), ) val selectedContribution = FakeData.recurringContributions[2] @@ -71,7 +80,10 @@ private class ContributionRobot( private val mviContext: MviContext, private val initialState: State = State(), ) { - private val viewModel = ContributionViewModel(initialState) + private val viewModel: ContributionContract.ViewModel = ContributionViewModel( + initialState = initialState, + billingManager = FakeBillingManager(), + ) private lateinit var turbines: MviTurbines suspend fun initialize() { diff --git a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeBillingManager.kt b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeBillingManager.kt new file mode 100644 index 00000000000..97386a69491 --- /dev/null +++ b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeBillingManager.kt @@ -0,0 +1,22 @@ +package app.k9mail.feature.funding.googleplay.ui.contribution + +import android.app.Activity +import app.k9mail.feature.funding.googleplay.domain.DomainContract +import app.k9mail.feature.funding.googleplay.domain.entity.Contribution + +class FakeBillingManager : DomainContract.BillingManager { + + override suspend fun loadOneTimeContributions() = FakeData.oneTimeContributions + + override suspend fun loadRecurringContributions() = FakeData.recurringContributions + + override suspend fun loadPurchasedContributions(): List { + return listOf( + FakeData.oneTimeContributions.first(), + ) + } + + override suspend fun purchaseContribution(activity: Activity, contribution: Contribution) = Unit + + override fun clear() = Unit +} From bfc8b3739c2c3ec4c20c6929594eae6ab5e8f80b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 15:40:28 +0200 Subject: [PATCH 05/45] Add GoogleBillingClient --- app-thunderbird/build.gradle.kts | 2 +- feature/funding/googleplay/build.gradle.kts | 2 + .../googleplay/src/debug/AndroidManifest.xml | 18 ++ .../feature/funding/FeatureFundingModule.kt | 10 + .../googleplay/data/GoogleBillingClient.kt | 306 ++++++++++++++++++ 5 files changed, 337 insertions(+), 1 deletion(-) create mode 100644 feature/funding/googleplay/src/debug/AndroidManifest.xml create mode 100644 feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/GoogleBillingClient.kt diff --git a/app-thunderbird/build.gradle.kts b/app-thunderbird/build.gradle.kts index 2478b7b0118..40c9b28f4f9 100644 --- a/app-thunderbird/build.gradle.kts +++ b/app-thunderbird/build.gradle.kts @@ -220,7 +220,7 @@ dependencies { "fossImplementation"(projects.feature.funding.link) - fullDebugImplementation(projects.feature.funding.link) + fullDebugImplementation(projects.feature.funding.googleplay) fullDailyImplementation(projects.feature.funding.googleplay) fullBetaImplementation(projects.feature.funding.googleplay) fullReleaseImplementation(projects.feature.funding.googleplay) diff --git a/feature/funding/googleplay/build.gradle.kts b/feature/funding/googleplay/build.gradle.kts index 5de7b3512ff..0af29b076c0 100644 --- a/feature/funding/googleplay/build.gradle.kts +++ b/feature/funding/googleplay/build.gradle.kts @@ -10,10 +10,12 @@ android { dependencies { api(projects.feature.funding.api) + implementation(projects.core.common) implementation(projects.core.ui.compose.designsystem) implementation(libs.android.billing) implementation(libs.android.billing.ktx) + implementation(libs.timber) testImplementation(projects.core.ui.compose.testing) } diff --git a/feature/funding/googleplay/src/debug/AndroidManifest.xml b/feature/funding/googleplay/src/debug/AndroidManifest.xml new file mode 100644 index 00000000000..43db1e8af73 --- /dev/null +++ b/feature/funding/googleplay/src/debug/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt index f5acf906b62..f0d41af574f 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/FeatureFundingModule.kt @@ -1,10 +1,12 @@ package app.k9mail.feature.funding +import app.k9mail.core.common.cache.InMemoryCache import app.k9mail.feature.funding.api.FundingManager import app.k9mail.feature.funding.api.FundingNavigation import app.k9mail.feature.funding.googleplay.GooglePlayFundingManager import app.k9mail.feature.funding.googleplay.GooglePlayFundingNavigation import app.k9mail.feature.funding.googleplay.data.DataContract +import app.k9mail.feature.funding.googleplay.data.GoogleBillingClient import app.k9mail.feature.funding.googleplay.data.mapper.ProductDetailsMapper import app.k9mail.feature.funding.googleplay.domain.BillingManager import app.k9mail.feature.funding.googleplay.domain.ContributionIdProvider @@ -21,6 +23,14 @@ val featureFundingModule = module { ProductDetailsMapper() } + single { + GoogleBillingClient( + context = get(), + productMapper = get(), + productCache = InMemoryCache(), + ) + } + single { ContributionIdProvider() } diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/GoogleBillingClient.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/GoogleBillingClient.kt new file mode 100644 index 00000000000..b12831d9380 --- /dev/null +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/GoogleBillingClient.kt @@ -0,0 +1,306 @@ +package app.k9mail.feature.funding.googleplay.data + +import android.app.Activity +import android.content.Context +import app.k9mail.core.common.cache.Cache +import app.k9mail.feature.funding.googleplay.domain.entity.Contribution +import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution +import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution +import com.android.billingclient.api.AcknowledgePurchaseParams +import com.android.billingclient.api.BillingClient +import com.android.billingclient.api.BillingClient.BillingResponseCode +import com.android.billingclient.api.BillingClient.ProductType +import com.android.billingclient.api.BillingClientStateListener +import com.android.billingclient.api.BillingFlowParams +import com.android.billingclient.api.BillingFlowParams.ProductDetailsParams +import com.android.billingclient.api.BillingResult +import com.android.billingclient.api.ConsumeParams +import com.android.billingclient.api.PendingPurchasesParams +import com.android.billingclient.api.ProductDetails +import com.android.billingclient.api.ProductDetailsResult +import com.android.billingclient.api.Purchase +import com.android.billingclient.api.PurchasesResult +import com.android.billingclient.api.PurchasesUpdatedListener +import com.android.billingclient.api.QueryProductDetailsParams +import com.android.billingclient.api.QueryPurchaseHistoryParams +import com.android.billingclient.api.QueryPurchasesParams +import com.android.billingclient.api.acknowledgePurchase +import com.android.billingclient.api.consumePurchase +import com.android.billingclient.api.queryProductDetails +import com.android.billingclient.api.queryPurchaseHistory +import com.android.billingclient.api.queryPurchasesAsync +import kotlin.coroutines.CoroutineContext +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.suspendCancellableCoroutine +import timber.log.Timber + +@Suppress("TooManyFunctions") +class GoogleBillingClient( + private val context: Context, + private val productMapper: DataContract.Mapper.Product, + private val productCache: Cache, + backgroundDispatcher: CoroutineContext = Dispatchers.IO, +) : DataContract.BillingClient, PurchasesUpdatedListener { + + private val coroutineScope = CoroutineScope(backgroundDispatcher) + + private val billingClient: BillingClient by lazy { + BillingClient.newBuilder(context) + .setListener(this) + .enablePendingPurchases( + PendingPurchasesParams.newBuilder() + .enableOneTimeProducts() + .build(), + ) + .build() + } + + override suspend fun connect(onConnected: suspend () -> T): T { + return suspendCancellableCoroutine { continuation -> + billingClient.startConnection( + object : BillingClientStateListener { + override fun onBillingSetupFinished(billingResult: BillingResult) { + if (billingResult.responseCode == BillingResponseCode.OK) { + continuation.resumeWith( + Result.runCatching { + runBlocking { onConnected() } + }, + ) + } else { + continuation.resumeWith( + Result.failure( + IllegalStateException( + "Error connecting to billing service: ${billingResult.responseCode}", + ), + ), + ) + } + } + + override fun onBillingServiceDisconnected() { + continuation.resumeWith( + Result.failure( + IllegalStateException("Billing service disconnected"), + ), + ) + } + }, + ) + } + } + + override fun disconnect() { + productCache.clear() + billingClient.endConnection() + } + + override suspend fun loadOneTimeContributions(productIds: List): List { + val oneTimeProductsResult = queryProducts(ProductType.INAPP, productIds) + return if (oneTimeProductsResult.billingResult.responseCode == BillingResponseCode.OK) { + oneTimeProductsResult.productDetailsList.orEmpty().map { + val contribution = productMapper.mapToOneTimeContribution(it) + productCache[it.productId] = it + contribution + } + } else { + Timber.e( + "Error loading one-time products: ${oneTimeProductsResult.billingResult.responseCode}", + ) + emptyList() + } + } + + override suspend fun loadRecurringContributions(productIds: List): List { + val recurringProductsResult = queryProducts(ProductType.SUBS, productIds) + return if (recurringProductsResult.billingResult.responseCode == BillingResponseCode.OK) { + recurringProductsResult.productDetailsList.orEmpty().map { + val contribution = productMapper.mapToRecurringContribution(it) + productCache[it.productId] = it + contribution + } + } else { + Timber.e( + "Error querying recurring products: ${recurringProductsResult.billingResult.debugMessage}", + ) + emptyList() + } + } + + override suspend fun loadPurchasedContributions(): List { + val inAppPurchases = queryPurchase(ProductType.INAPP) + val subscriptionPurchases = queryPurchase(ProductType.SUBS) + val contributions = handlePurchases(inAppPurchases.purchasesList + subscriptionPurchases.purchasesList) + val recentContribution = if (inAppPurchases.purchasesList.isEmpty()) { + loadInAppPurchaseHistory() + } else { + null + } + + return if (recentContribution != null) { + contributions + recentContribution + } else { + contributions + } + } + + private suspend fun loadInAppPurchaseHistory(): Contribution? { + val queryPurchaseHistoryParams = QueryPurchaseHistoryParams.newBuilder() + .setProductType(ProductType.INAPP) + .build() + + val result = billingClient.queryPurchaseHistory(queryPurchaseHistoryParams) + return if (result.billingResult.responseCode == BillingResponseCode.OK) { + val recentPurchaseId = result.purchaseHistoryRecordList.orEmpty().firstOrNull()?.products?.filter { + productCache.hasKey(it) + }?.firstOrNull() + + if (recentPurchaseId != null) { + val recentPurchase = productCache[recentPurchaseId] + productMapper.mapToContribution(recentPurchase!!) + } else { + Timber.e("No recent purchase found: ${result.billingResult.debugMessage}") + null + } + } else { + Timber.e("Error querying purchase history: ${result.billingResult.debugMessage}") + null + } + } + + private suspend fun queryProducts( + productType: String, + productIds: List, + ): ProductDetailsResult { + val productList = productIds.map { mapIdToProduct(productType, it) } + + val queryProductDetailsParams = QueryProductDetailsParams.newBuilder() + .setProductList(productList) + .build() + + return billingClient.queryProductDetails(queryProductDetailsParams) + } + + private fun mapIdToProduct( + productType: String, + productId: String, + ): QueryProductDetailsParams.Product { + return QueryProductDetailsParams.Product.newBuilder() + .setProductType(productType) + .setProductId(productId) + .build() + } + + private suspend fun queryPurchase(productType: String): PurchasesResult { + val queryPurchaseParams = QueryPurchasesParams.newBuilder() + .setProductType(productType) + .build() + + return billingClient.queryPurchasesAsync(queryPurchaseParams) + } + + override suspend fun purchaseContribution(activity: Activity, contribution: Contribution): Contribution? { + val productDetails = productCache[contribution.id] ?: return null + val offerToken = productDetails.subscriptionOfferDetails?.firstOrNull()?.offerToken + + val productDetailsParamsList = listOf( + ProductDetailsParams.newBuilder() + .setProductDetails(productDetails) + .apply { + if (offerToken != null) { + setOfferToken(offerToken) + } + } + .build(), + ) + + val billingFlowParams = BillingFlowParams.newBuilder() + .setProductDetailsParamsList(productDetailsParamsList) + .build() + + val result = billingClient.launchBillingFlow(activity, billingFlowParams) + return if (result.responseCode == BillingResponseCode.OK) { + contribution + } else { + null + } + } + + override fun onPurchasesUpdated(billingResult: BillingResult, purchases: MutableList?) { + when (billingResult.responseCode) { + BillingResponseCode.OK -> coroutineScope.launch { + handlePurchases(purchases) + } + + BillingResponseCode.USER_CANCELED -> { + Timber.d("User canceled the purchase") + } + + BillingResponseCode.ITEM_ALREADY_OWNED -> coroutineScope.launch { + Timber.d("Item already owned by the user") + // TODO: Update purchases in this case + } + + BillingResponseCode.DEVELOPER_ERROR -> { + // Make sure the SKU product id is correct and the test apk is signed with a release key. + Timber.e("Developer error: ${billingResult.debugMessage}") + } + + else -> { + Timber.e( + "Response Code: ${billingResult.responseCode} " + + "Billing error: ${billingResult.debugMessage}", + ) + } + } + } + + private suspend fun handlePurchases(purchases: List?): List { + return purchases?.mapNotNull { purchase -> + handlePurchase(purchase) + } ?: emptyList() + } + + private suspend fun handlePurchase(purchase: Purchase): Contribution? { + consumePurchase(purchase) + + return if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) { + val product = purchase.products.firstOrNull()?.let { productCache[it] } ?: return null + val contribution = productMapper.mapToContribution(product) + + if (!purchase.isAcknowledged) { + val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() + .setPurchaseToken(purchase.purchaseToken) + .build() + + val acknowledgeResult: BillingResult = billingClient.acknowledgePurchase(acknowledgePurchaseParams) + + if (acknowledgeResult.responseCode != BillingResponseCode.OK) { + contribution + } else { + // handle acknowledge error + Timber.e("acknowledgePurchase failed") + null + } + } else { + Timber.e("purchase already acknowledged") + null + } + } else { + Timber.e("purchase not purchased") + null + } + } + + private suspend fun consumePurchase(purchase: Purchase) { + val consumeParams = ConsumeParams.newBuilder() + .setPurchaseToken(purchase.purchaseToken) + .build() + + // This could fail but we can ignore the error as we handle purchases + // the next time the purchases are requested + billingClient.consumePurchase(consumeParams) + } +} From 35e6b7edbc3e493dbae97962bd56c3cec583e8f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 15:41:26 +0200 Subject: [PATCH 06/45] Enable billing feature --- .../net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-thunderbird/src/main/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt b/app-thunderbird/src/main/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt index 20108fa96fa..c9e18b37ffc 100644 --- a/app-thunderbird/src/main/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt +++ b/app-thunderbird/src/main/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt @@ -8,7 +8,7 @@ class TbFeatureFlagFactory : FeatureFlagFactory { override fun createFeatureCatalog(): List { return listOf( FeatureFlag(FeatureFlagKey("material3_navigation_drawer"), true), - FeatureFlag(FeatureFlagKey("funding_google_play"), false), + FeatureFlag(FeatureFlagKey("funding_google_play"), true), ) } } From d367ee477404b230de6bc6f11f1d977d422b30a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 16:04:20 +0200 Subject: [PATCH 07/45] Change selection to choose 2nd lowest contribution by default --- .../ui/contribution/ContributionViewModel.kt | 12 ++++++++++-- .../ui/contribution/ContributionViewModelTest.kt | 11 ++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt index 99255a68bed..2a0e7e4e75e 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt @@ -95,7 +95,7 @@ internal class ContributionViewModel( updateState { it.copy( isRecurringContributionSelected = false, - selectedContribution = it.oneTimeContributions.firstOrNull(), + selectedContribution = it.oneTimeContributions.getSecondLowestOrNull(), ) } } @@ -104,11 +104,19 @@ internal class ContributionViewModel( updateState { it.copy( isRecurringContributionSelected = true, - selectedContribution = it.recurringContributions.firstOrNull(), + selectedContribution = it.recurringContributions.getSecondLowestOrNull(), ) } } + private fun List.getSecondLowestOrNull(): Contribution? { + return when { + this.size > 1 -> this.sortedBy { it.price }[1] + this.size == 1 -> this[0] + else -> null + } + } + private fun onContributionItemClicked(item: Contribution) { updateState { it.copy( diff --git a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt index b5c40a887e1..bcae779ce18 100644 --- a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt +++ b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt @@ -25,7 +25,7 @@ class ContributionViewModelTest { oneTimeContributions = FakeData.oneTimeContributions, recurringContributions = FakeData.recurringContributions, purchasedContribution = FakeData.oneTimeContributions.first(), - selectedContribution = FakeData.recurringContributions.first(), + selectedContribution = FakeData.recurringContributions[FakeData.recurringContributions.size - 2], ) contributionRobot(initialState) { @@ -41,7 +41,7 @@ class ContributionViewModelTest { oneTimeContributions = FakeData.oneTimeContributions, recurringContributions = FakeData.recurringContributions, purchasedContribution = FakeData.oneTimeContributions.first(), - selectedContribution = FakeData.oneTimeContributions.first(), + selectedContribution = FakeData.oneTimeContributions[FakeData.oneTimeContributions.size - 2], ) contributionRobot(initialState) { @@ -57,7 +57,7 @@ class ContributionViewModelTest { oneTimeContributions = FakeData.oneTimeContributions, recurringContributions = FakeData.recurringContributions, purchasedContribution = FakeData.oneTimeContributions.first(), - selectedContribution = FakeData.recurringContributions.first(), + selectedContribution = FakeData.recurringContributions[FakeData.oneTimeContributions.size - 2], ) val selectedContribution = FakeData.recurringContributions[2] @@ -98,7 +98,7 @@ private class ContributionRobot( assertThat(turbines.awaitStateItem()).isEqualTo( initialState.copy( isRecurringContributionSelected = false, - selectedContribution = initialState.oneTimeContributions.first(), + selectedContribution = initialState.oneTimeContributions[initialState.oneTimeContributions.size - 2], ), ) } @@ -111,7 +111,8 @@ private class ContributionRobot( assertThat(turbines.awaitStateItem()).isEqualTo( initialState.copy( isRecurringContributionSelected = true, - selectedContribution = initialState.recurringContributions.first(), + selectedContribution = initialState + .recurringContributions[initialState.recurringContributions.size - 2], ), ) } From d0b1726eea8b05b990996d5a40e5884ac685d99f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 17:11:07 +0200 Subject: [PATCH 08/45] Disable subscriptions and ignore billingClient.endConnection --- .../feature/funding/googleplay/data/GoogleBillingClient.kt | 3 ++- .../googleplay/ui/contribution/ContributionViewModel.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/GoogleBillingClient.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/GoogleBillingClient.kt index b12831d9380..20acfc30932 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/GoogleBillingClient.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/data/GoogleBillingClient.kt @@ -94,7 +94,8 @@ class GoogleBillingClient( override fun disconnect() { productCache.clear() - billingClient.endConnection() + // TODO: this is not working as expected and leads to crashes: SERVICE_DISCONNECTED +// billingClient.endConnection() } override suspend fun loadOneTimeContributions(productIds: List): List { diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt index 2a0e7e4e75e..acc71d180c4 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt @@ -21,7 +21,8 @@ internal class ContributionViewModel( init { viewModelScope.launch { loadOneTimeContributions() - loadRecurringContributions() + // TODO load recurring contributions + // loadRecurringContributions() loadPurchasedContribution() selectDefaultContribution() } From 31c332f0f1cc6b7abc572bb697c108c73dc52040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 17:34:37 +0200 Subject: [PATCH 09/45] Hide contribution list when purchase detected. --- .../contribution/ContributionFooterPreview.kt | 40 ++++++++++++++++++- .../ui/contribution/ContributionContent.kt | 36 +++++++++-------- .../ui/contribution/ContributionContract.kt | 5 ++- .../ui/contribution/ContributionFooter.kt | 33 +++++++++++---- .../ui/contribution/ContributionViewModel.kt | 11 +++++ .../src/main/res/values/strings.xml | 1 + .../ui/contribution/FakeBillingManager.kt | 3 +- 7 files changed, 101 insertions(+), 28 deletions(-) diff --git a/feature/funding/googleplay/src/debug/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionFooterPreview.kt b/feature/funding/googleplay/src/debug/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionFooterPreview.kt index d991d8bc5a9..c391b971ede 100644 --- a/feature/funding/googleplay/src/debug/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionFooterPreview.kt +++ b/feature/funding/googleplay/src/debug/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionFooterPreview.kt @@ -11,8 +11,10 @@ fun ContributionFooterPreview() { ContributionFooter( onPurchaseClick = {}, onManagePurchaseClick = {}, + onShowContributionListClick = {}, purchasedContribution = null, isPurchaseEnabled = true, + isContributionListShown = true, ) } } @@ -22,9 +24,11 @@ fun ContributionFooterPreview() { fun ContributionFooterDisabledPreview() { PreviewWithTheme { ContributionFooter( + purchasedContribution = null, onPurchaseClick = {}, onManagePurchaseClick = {}, - purchasedContribution = null, + onShowContributionListClick = {}, + isContributionListShown = false, isPurchaseEnabled = false, ) } @@ -35,10 +39,42 @@ fun ContributionFooterDisabledPreview() { fun ContributionFooterWithRecurringContributionPreview() { PreviewWithTheme { ContributionFooter( + purchasedContribution = FakeData.recurringContribution, onPurchaseClick = {}, onManagePurchaseClick = {}, - purchasedContribution = FakeData.recurringContribution, + onShowContributionListClick = {}, + isPurchaseEnabled = true, + isContributionListShown = false, + ) + } +} + +@Composable +@Preview(showBackground = true) +fun ContributionFooterWithOneTimeContributionPreview() { + PreviewWithTheme { + ContributionFooter( + purchasedContribution = FakeData.oneTimeContribution, + onPurchaseClick = {}, + onManagePurchaseClick = {}, + onShowContributionListClick = {}, + isPurchaseEnabled = true, + isContributionListShown = false, + ) + } +} + +@Composable +@Preview(showBackground = true) +fun ContributionFooterWithOneTimeContributionAndListPreview() { + PreviewWithTheme { + ContributionFooter( + purchasedContribution = FakeData.oneTimeContribution, + onPurchaseClick = {}, + onManagePurchaseClick = {}, + onShowContributionListClick = {}, isPurchaseEnabled = true, + isContributionListShown = true, ) } } diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionContent.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionContent.kt index 931f0a2affb..7cea4f044e8 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionContent.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionContent.kt @@ -44,27 +44,31 @@ internal fun ContributionContent( purchasedContribution = state.purchasedContribution, ) - ContributionList( - oneTimeContributions = state.oneTimeContributions, - recurringContributions = state.recurringContributions, - selectedItem = state.selectedContribution, - isRecurringContributionSelected = state.isRecurringContributionSelected, - onOneTimeContributionTypeClick = { - onEvent(Event.OnOneTimeContributionSelected) - }, - onRecurringContributionTypeClick = { - onEvent(Event.OnRecurringContributionSelected) - }, - onItemClick = { - onEvent(Event.OnContributionItemClicked(it)) - }, - ) + if (state.showContributionList) { + ContributionList( + oneTimeContributions = state.oneTimeContributions, + recurringContributions = state.recurringContributions, + selectedItem = state.selectedContribution, + isRecurringContributionSelected = state.isRecurringContributionSelected, + onOneTimeContributionTypeClick = { + onEvent(Event.OnOneTimeContributionSelected) + }, + onRecurringContributionTypeClick = { + onEvent(Event.OnRecurringContributionSelected) + }, + onItemClick = { + onEvent(Event.OnContributionItemClicked(it)) + }, + ) + } ContributionFooter( + purchasedContribution = state.purchasedContribution, onPurchaseClick = { onEvent(Event.OnPurchaseClicked(activity)) }, onManagePurchaseClick = { onEvent(Event.OnManagePurchaseClicked(it)) }, - purchasedContribution = state.purchasedContribution, + onShowContributionListClick = { onEvent(Event.OnShowContributionListClicked) }, isPurchaseEnabled = state.selectedContribution != null, + isContributionListShown = state.showContributionList, ) } } diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionContract.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionContract.kt index bcd8604b459..46a029c563b 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionContract.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionContract.kt @@ -17,8 +17,9 @@ internal class ContributionContract { data class State( val oneTimeContributions: ImmutableList = persistentListOf(), val recurringContributions: ImmutableList = persistentListOf(), - val purchasedContribution: Contribution? = null, val selectedContribution: Contribution? = null, + val purchasedContribution: Contribution? = null, + val showContributionList: Boolean = true, val isRecurringContributionSelected: Boolean = false, ) @@ -26,6 +27,8 @@ internal class ContributionContract { data object OnOneTimeContributionSelected : Event data object OnRecurringContributionSelected : Event + data object OnShowContributionListClicked : Event + data class OnContributionItemClicked( val item: Contribution, ) : Event diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionFooter.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionFooter.kt index 150641aa869..5eacc58f645 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionFooter.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionFooter.kt @@ -8,6 +8,7 @@ import androidx.compose.ui.res.stringResource import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilled import app.k9mail.feature.funding.googleplay.R import app.k9mail.feature.funding.googleplay.domain.entity.Contribution +import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution @Composable @@ -15,20 +16,36 @@ internal fun ContributionFooter( purchasedContribution: Contribution?, onPurchaseClick: () -> Unit, onManagePurchaseClick: (Contribution) -> Unit, + onShowContributionListClick: () -> Unit, isPurchaseEnabled: Boolean, + isContributionListShown: Boolean, modifier: Modifier = Modifier, ) { Column( modifier = modifier, ) { - if (purchasedContribution != null && purchasedContribution is RecurringContribution) { - ButtonFilled( - text = stringResource( - R.string.funding_googleplay_contribution_footer_manage_button, - ), - onClick = { onManagePurchaseClick(purchasedContribution) }, - modifier = Modifier.fillMaxWidth(), - ) + if (purchasedContribution != null && !isContributionListShown) { + when (purchasedContribution) { + is RecurringContribution -> { + ButtonFilled( + text = stringResource( + R.string.funding_googleplay_contribution_footer_manage_button, + ), + onClick = { onManagePurchaseClick(purchasedContribution) }, + modifier = Modifier.fillMaxWidth(), + ) + } + + is OneTimeContribution -> { + ButtonFilled( + text = stringResource( + R.string.funding_googleplay_contribution_footer_show_contribution_list_button, + ), + onClick = onShowContributionListClick, + modifier = Modifier.fillMaxWidth(), + ) + } + } } else { ButtonFilled( text = stringResource( diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt index acc71d180c4..7f046be93a1 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt @@ -69,6 +69,7 @@ internal class ContributionViewModel( updateState { state -> state.copy( purchasedContribution = purchasedContribution, + showContributionList = purchasedContribution == null, ) } } @@ -89,6 +90,7 @@ internal class ContributionViewModel( is Event.OnContributionItemClicked -> onContributionItemClicked(event.item) is Event.OnPurchaseClicked -> onPurchaseClicked(event.activity) is Event.OnManagePurchaseClicked -> onManagePurchaseClicked(event.contribution) + Event.OnShowContributionListClicked -> onShowContributionListClicked() } } @@ -134,6 +136,7 @@ internal class ContributionViewModel( updateState { it.copy( purchasedContribution = result, + showContributionList = false, ) } } @@ -145,6 +148,14 @@ internal class ContributionViewModel( // TODO: Implement manage purchase logic } + private fun onShowContributionListClicked() { + updateState { + it.copy( + showContributionList = true, + ) + } + } + override fun onCleared() { super.onCleared() billingManager.clear() diff --git a/feature/funding/googleplay/src/main/res/values/strings.xml b/feature/funding/googleplay/src/main/res/values/strings.xml index 6e1f72faa22..f0a0f9184e7 100644 --- a/feature/funding/googleplay/src/main/res/values/strings.xml +++ b/feature/funding/googleplay/src/main/res/values/strings.xml @@ -14,4 +14,5 @@ Continue to payment Modify monthly payment + Help keep Thunderbird alive diff --git a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeBillingManager.kt b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeBillingManager.kt index 97386a69491..075a2a0e372 100644 --- a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeBillingManager.kt +++ b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeBillingManager.kt @@ -16,7 +16,8 @@ class FakeBillingManager : DomainContract.BillingManager { ) } - override suspend fun purchaseContribution(activity: Activity, contribution: Contribution) = Unit + override suspend fun purchaseContribution(activity: Activity, contribution: Contribution) = + FakeData.oneTimeContributions.first() override fun clear() = Unit } From 53f63d1c88bccaa5784e3b311c00e475198dd6cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 17:40:45 +0200 Subject: [PATCH 10/45] Change funding_googleplay_contribution_title --- .../googleplay/ui/contribution/ContributionViewModel.kt | 2 ++ feature/funding/googleplay/src/main/res/values/strings.xml | 2 +- .../googleplay/ui/contribution/ContributionViewModelTest.kt | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt index 7f046be93a1..64cd197ebc0 100644 --- a/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt +++ b/feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModel.kt @@ -99,6 +99,7 @@ internal class ContributionViewModel( it.copy( isRecurringContributionSelected = false, selectedContribution = it.oneTimeContributions.getSecondLowestOrNull(), + showContributionList = true, ) } } @@ -108,6 +109,7 @@ internal class ContributionViewModel( it.copy( isRecurringContributionSelected = true, selectedContribution = it.recurringContributions.getSecondLowestOrNull(), + showContributionList = true, ) } } diff --git a/feature/funding/googleplay/src/main/res/values/strings.xml b/feature/funding/googleplay/src/main/res/values/strings.xml index f0a0f9184e7..bc3243922e4 100644 --- a/feature/funding/googleplay/src/main/res/values/strings.xml +++ b/feature/funding/googleplay/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - Settings + Support Thunderbird Support Thunderbird We never show advertisements or sell your data. We are fully funded by financial contributions from our users. If you’re enjoying Thunderbird, please help support it. We can’t do this without you! diff --git a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt index bcae779ce18..22547a8d7ea 100644 --- a/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt +++ b/feature/funding/googleplay/src/test/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionViewModelTest.kt @@ -26,6 +26,7 @@ class ContributionViewModelTest { recurringContributions = FakeData.recurringContributions, purchasedContribution = FakeData.oneTimeContributions.first(), selectedContribution = FakeData.recurringContributions[FakeData.recurringContributions.size - 2], + showContributionList = true, ) contributionRobot(initialState) { @@ -42,6 +43,7 @@ class ContributionViewModelTest { recurringContributions = FakeData.recurringContributions, purchasedContribution = FakeData.oneTimeContributions.first(), selectedContribution = FakeData.oneTimeContributions[FakeData.oneTimeContributions.size - 2], + showContributionList = true, ) contributionRobot(initialState) { @@ -58,6 +60,7 @@ class ContributionViewModelTest { recurringContributions = FakeData.recurringContributions, purchasedContribution = FakeData.oneTimeContributions.first(), selectedContribution = FakeData.recurringContributions[FakeData.oneTimeContributions.size - 2], + showContributionList = true, ) val selectedContribution = FakeData.recurringContributions[2] @@ -99,6 +102,7 @@ private class ContributionRobot( initialState.copy( isRecurringContributionSelected = false, selectedContribution = initialState.oneTimeContributions[initialState.oneTimeContributions.size - 2], + showContributionList = true, ), ) } @@ -113,6 +117,7 @@ private class ContributionRobot( isRecurringContributionSelected = true, selectedContribution = initialState .recurringContributions[initialState.recurringContributions.size - 2], + showContributionList = true, ), ) } From 48aee309e66f49e89c0852b2570c96458624a57e Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 15 Oct 2024 19:11:49 +0200 Subject: [PATCH 11/45] Translated using Weblate (Spanish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (5 of 5 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Spanish) Currently translated at 80.0% (4 of 5 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (10 of 10 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (10 of 10 strings) Translated using Weblate (Frisian) Currently translated at 100.0% (10 of 10 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 100.0% (10 of 10 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (10 of 10 strings) Translated using Weblate (Polish) Currently translated at 100.0% (10 of 10 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (10 of 10 strings) Translated using Weblate (Russian) Currently translated at 100.0% (10 of 10 strings) Translated using Weblate (Frisian) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Frisian) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Russian) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Frisian) Currently translated at 100.0% (14 of 14 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (34 of 34 strings) Translated using Weblate (Russian) Currently translated at 50.0% (5 of 10 strings) Translated using Weblate (Russian) Currently translated at 100.0% (5 of 5 strings) Translated using Weblate (Russian) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Russian) Currently translated at 66.6% (2 of 3 strings) Translated using Weblate (Russian) Currently translated at 66.6% (2 of 3 strings) Translated using Weblate (Persian) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Persian) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Persian) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Polish) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Czech) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (3 of 3 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (3 of 3 strings) Update translations (Weblate) Co-authored-by: AO Localisation Lab Co-authored-by: Aino Varis Co-authored-by: Andreas Pettersson Co-authored-by: ButterflyOfFire Co-authored-by: Bård Sigurd Møller Co-authored-by: Danial Behzadi Co-authored-by: Ettore Atalan Co-authored-by: Fa_b Co-authored-by: Femini Co-authored-by: Fjuro Co-authored-by: Ghost of Sparta Co-authored-by: Hosted Weblate Co-authored-by: Ihor Hordiichuk Co-authored-by: Jordi Sanfeliu Co-authored-by: Kazushi Hayama Co-authored-by: Languages add-on Co-authored-by: LucasMZ Co-authored-by: Matthaiks Co-authored-by: Olvcpr423 Co-authored-by: Oğuz Ersen Co-authored-by: Priit Jõerüüt Co-authored-by: Remus-Gabriel Chelu Co-authored-by: Reza Zarchi Co-authored-by: Selim Şumlu Co-authored-by: Sketch6580 Co-authored-by: Stephan Paternotte Co-authored-by: Vaclovas Intas Co-authored-by: Wim Benes Co-authored-by: bittin1ddc447d824349b2 Co-authored-by: gallegonovato Co-authored-by: nautilusx Co-authored-by: niedzwiedz63 Co-authored-by: solokot Co-authored-by: victor dargallo Translate-URL: https://hosted.weblate.org/projects/tb-android/account-common/az/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-common/kab/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/cs/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/de/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/es/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/et/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/fa/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/fr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/fy/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/ja/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/kab/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/lt/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/nl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/pl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/ro/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/ru/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/tr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/uk/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-edit/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-oauth/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-server-settings/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-server-settings/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-server-validation/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-server-validation/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-setup/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/account-setup/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-k9mail/kab/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-k9mail/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-k9mail/fy/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-k9mail/ja/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-k9mail/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-k9mail/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-k9mail/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/cs/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/de/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/fa/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/fr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/fy/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/ja/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/lt/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/nl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/ro/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/ru/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/tr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/uk/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird-beta/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/cs/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/de/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/fa/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/fr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/fy/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/ja/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/lt/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/nl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/ru/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/tr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/uk/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-store-metadata-thunderbird/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/az/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/ca/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/cs/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/et/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/fa/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/kab/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/tr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-strings/uk/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-ui-base/az/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-ui-base/fa/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-ui-base/kab/ Translate-URL: https://hosted.weblate.org/projects/tb-android/app-ui-base/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/designsystem/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/cs/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/fa/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/fy/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/ja/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/nl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/pl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/ru/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/funding-googleplay/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/cs/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/de/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/es/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/et/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/fa/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/fr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/fy/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/hu/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/ja/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/lt/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/nl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/pl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/ro/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/ru/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/tr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/uk/ Translate-URL: https://hosted.weblate.org/projects/tb-android/migration-qrcode/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/tb-android/navigation-drawer/cs/ Translate-URL: https://hosted.weblate.org/projects/tb-android/navigation-drawer/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/onboarding-permissions/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/onboarding/az/ Translate-URL: https://hosted.weblate.org/projects/tb-android/onboarding/kab/ Translate-URL: https://hosted.weblate.org/projects/tb-android/onboarding/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/onboarding/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/cs/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/de/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/fa/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/fy/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/ja/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/nl/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/ru/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/sv/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/tr/ Translate-URL: https://hosted.weblate.org/projects/tb-android/settings-import/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/tb-android/widget-message-list/az/ Translate-URL: https://hosted.weblate.org/projects/tb-android/widget-message-list/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/widget-shortcut/lt/ Translate-URL: https://hosted.weblate.org/projects/tb-android/widget-unread/et/ Translate-URL: https://hosted.weblate.org/projects/tb-android/widget-unread/nn/ Translate-URL: https://hosted.weblate.org/projects/tb-android/widget-unread/pl/ Translation: K-9 Mail/Thunderbird/App Store Metadata (K-9 Mail) Translation: K-9 Mail/Thunderbird/App Store Metadata (Thunderbird Beta) Translation: K-9 Mail/Thunderbird/App Store Metadata (Thunderbird) Translation: K-9 Mail/Thunderbird/account-common Translation: K-9 Mail/Thunderbird/account-edit Translation: K-9 Mail/Thunderbird/account-oauth Translation: K-9 Mail/Thunderbird/account-server-settings Translation: K-9 Mail/Thunderbird/account-server-validation Translation: K-9 Mail/Thunderbird/account-setup Translation: K-9 Mail/Thunderbird/app-k9mail Translation: K-9 Mail/Thunderbird/designsystem Translation: K-9 Mail/Thunderbird/funding-googleplay Translation: K-9 Mail/Thunderbird/legacy-ui-base Translation: K-9 Mail/Thunderbird/legacy-ui-legacy Translation: K-9 Mail/Thunderbird/migration-qrcode Translation: K-9 Mail/Thunderbird/navigation-drawer Translation: K-9 Mail/Thunderbird/onboarding-permissions Translation: K-9 Mail/Thunderbird/onboarding-welcome Translation: K-9 Mail/Thunderbird/settings-import Translation: K-9 Mail/Thunderbird/widget-message-list Translation: K-9 Mail/Thunderbird/widget-shortcut Translation: K-9 Mail/Thunderbird/widget-unread --- .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-kab/strings.xml | 4 + app-k9mail/src/main/res/values-kk/strings.xml | 2 + app-k9mail/src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-zh-rCN/strings.xml | 2 +- .../com.fsck.k9/bg/short_description.txt | 1 + app-metadata/com.fsck.k9/bg/title.txt | 1 + .../com.fsck.k9/fy/changelogs/37016.txt | 2 +- .../com.fsck.k9/fy/changelogs/38001.txt | 2 +- .../com.fsck.k9/hr/full_description.txt | 24 + .../com.fsck.k9/hr/short_description.txt | 1 + app-metadata/com.fsck.k9/hr/title.txt | 1 + .../com.fsck.k9/ja/full_description.txt | 2 +- .../com.fsck.k9/nl-NL/changelogs/38001.txt | 2 +- .../com.fsck.k9/nn/changelogs/37015.txt | 10 + .../com.fsck.k9/nn/changelogs/37016.txt | 5 + .../com.fsck.k9/nn/changelogs/37017.txt | 5 + .../com.fsck.k9/nn/changelogs/38000.txt | 7 + .../com.fsck.k9/nn/changelogs/38001.txt | 7 + .../com.fsck.k9/nn/changelogs/38002.txt | 5 + .../com.fsck.k9/nn/changelogs/39000.txt | 6 + .../com.fsck.k9/nn/changelogs/39001.txt | 1 + .../com.fsck.k9/nn/changelogs/39002.txt | 8 + .../com.fsck.k9/nn/changelogs/39003.txt | 1 + .../com.fsck.k9/nn/changelogs/39004.txt | 2 + .../com.fsck.k9/nn/full_description.txt | 24 + .../com.fsck.k9/sv-SE/changelogs/37015.txt | 10 + .../com.fsck.k9/sv-SE/changelogs/37016.txt | 5 + .../com.fsck.k9/sv-SE/changelogs/37017.txt | 5 + .../com.fsck.k9/sv-SE/changelogs/38000.txt | 7 + .../com.fsck.k9/sv-SE/changelogs/38001.txt | 7 + .../com.fsck.k9/sv-SE/changelogs/38002.txt | 5 + .../com.fsck.k9/sv-SE/changelogs/39000.txt | 6 + .../com.fsck.k9/sv-SE/changelogs/39001.txt | 1 + .../com.fsck.k9/sv-SE/changelogs/39002.txt | 8 + .../com.fsck.k9/sv-SE/changelogs/39003.txt | 1 + .../com.fsck.k9/sv-SE/changelogs/39004.txt | 2 + .../com.fsck.k9/sv-SE/full_description.txt | 24 + .../com.fsck.k9/tr/changelogs/37015.txt | 4 +- .../com.fsck.k9/tr/changelogs/37016.txt | 6 +- .../com.fsck.k9/tr/changelogs/37017.txt | 4 +- .../com.fsck.k9/tr/changelogs/39001.txt | 2 +- .../com.fsck.k9/tr/full_description.txt | 18 +- .../com.fsck.k9/tr/short_description.txt | 2 +- app-metadata/com.fsck.k9/uk/title.txt | 1 + app-metadata/com.fsck.k9/zh-CN/title.txt | 2 +- .../cs-CZ/full_description.txt | 37 ++ .../cs-CZ/short_description.txt | 1 + .../cs-CZ/title.txt | 1 + .../de-DE/short_description.txt | 1 + .../de-DE/title.txt | 1 + .../es-ES/full_description.txt | 37 ++ .../es-ES/short_description.txt | 1 + .../es-ES/title.txt | 1 + .../et/short_description.txt | 1 + .../net.thunderbird.android.beta/et/title.txt | 1 + .../fa-IR/full_description.txt | 37 ++ .../fa-IR/short_description.txt | 1 + .../fa-IR/title.txt | 1 + .../fr-FR/full_description.txt | 37 ++ .../fr-FR/short_description.txt | 1 + .../fr-FR/title.txt | 1 + .../fy/full_description.txt | 37 ++ .../fy/short_description.txt | 1 + .../net.thunderbird.android.beta/fy/title.txt | 1 + .../ja-JP/full_description.txt | 37 ++ .../ja-JP/short_description.txt | 1 + .../ja-JP/title.txt | 1 + .../lt/short_description.txt | 1 + .../net.thunderbird.android.beta/lt/title.txt | 1 + .../nl-NL/full_description.txt | 37 ++ .../nl-NL/short_description.txt | 1 + .../nl-NL/title.txt | 1 + .../nn/full_description.txt | 37 ++ .../nn/short_description.txt | 1 + .../net.thunderbird.android.beta/nn/title.txt | 1 + .../pl-PL/full_description.txt | 37 ++ .../pl-PL/short_description.txt | 1 + .../pl-PL/title.txt | 1 + .../pt-BR/short_description.txt | 1 + .../pt-BR/title.txt | 1 + .../ro/short_description.txt | 1 + .../net.thunderbird.android.beta/ro/title.txt | 1 + .../ru-RU/short_description.txt | 1 + .../ru-RU/title.txt | 1 + .../sv-SE/full_description.txt | 37 ++ .../sv-SE/short_description.txt | 1 + .../sv-SE/title.txt | 1 + .../tr-TR/short_description.txt | 1 + .../tr-TR/title.txt | 1 + .../uk/full_description.txt | 37 ++ .../uk/short_description.txt | 1 + .../net.thunderbird.android.beta/uk/title.txt | 1 + .../zh-CN/full_description.txt | 37 ++ .../zh-CN/short_description.txt | 1 + .../zh-CN/title.txt | 1 + .../cs-CZ/full_description.txt | 31 ++ .../cs-CZ/short_description.txt | 1 + .../net.thunderbird.android/cs-CZ/title.txt | 1 + .../de-DE/short_description.txt | 1 + .../net.thunderbird.android/de-DE/title.txt | 1 + .../es-ES/short_description.txt | 1 + .../net.thunderbird.android/es-ES/title.txt | 1 + .../et/short_description.txt | 1 + .../net.thunderbird.android/et/title.txt | 1 + .../fa-IR/full_description.txt | 31 ++ .../fa-IR/short_description.txt | 1 + .../net.thunderbird.android/fa-IR/title.txt | 1 + .../fr-FR/full_description.txt | 31 ++ .../fr-FR/short_description.txt | 1 + .../net.thunderbird.android/fr-FR/title.txt | 1 + .../fy/full_description.txt | 31 ++ .../fy/short_description.txt | 1 + .../net.thunderbird.android/fy/title.txt | 1 + .../ja-JP/full_description.txt | 31 ++ .../ja-JP/short_description.txt | 1 + .../net.thunderbird.android/ja-JP/title.txt | 1 + .../lt/short_description.txt | 1 + .../net.thunderbird.android/lt/title.txt | 1 + .../nl-NL/full_description.txt | 31 ++ .../nl-NL/short_description.txt | 1 + .../net.thunderbird.android/nl-NL/title.txt | 1 + .../nn/full_description.txt | 31 ++ .../nn/short_description.txt | 1 + .../net.thunderbird.android/nn/title.txt | 1 + .../pl-PL/full_description.txt | 31 ++ .../pl-PL/short_description.txt | 1 + .../net.thunderbird.android/pl-PL/title.txt | 1 + .../pt-BR/short_description.txt | 1 + .../ro/short_description.txt | 1 + .../net.thunderbird.android/ro/title.txt | 1 + .../ru-RU/full_description.txt | 31 ++ .../ru-RU/short_description.txt | 1 + .../net.thunderbird.android/ru-RU/title.txt | 1 + .../sv-SE/full_description.txt | 31 ++ .../sv-SE/short_description.txt | 1 + .../net.thunderbird.android/sv-SE/title.txt | 1 + .../tr-TR/short_description.txt | 1 + .../net.thunderbird.android/tr-TR/title.txt | 1 + .../uk/full_description.txt | 31 ++ .../uk/short_description.txt | 1 + .../net.thunderbird.android/uk/title.txt | 1 + .../zh-CN/full_description.txt | 31 ++ .../zh-CN/short_description.txt | 1 + .../net.thunderbird.android/zh-CN/title.txt | 1 + .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-hr/strings.xml | 8 +- .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-sv/strings.xml | 2 +- .../src/main/res/values-uk/strings.xml | 8 +- .../common/src/main/res/values-az/strings.xml | 1 + .../common/src/main/res/values-bg/strings.xml | 1 + .../common/src/main/res/values-br/strings.xml | 4 +- .../src/main/res/values-enm/strings.xml | 2 + .../common/src/main/res/values-hr/strings.xml | 6 +- .../src/main/res/values-kab/strings.xml | 5 + .../common/src/main/res/values-kk/strings.xml | 2 + .../common/src/main/res/values-pt/strings.xml | 2 + .../common/src/main/res/values-uk/strings.xml | 6 +- .../edit/src/main/res/values-ar/strings.xml | 2 + .../edit/src/main/res/values-az/strings.xml | 2 + .../edit/src/main/res/values-be/strings.xml | 2 + .../edit/src/main/res/values-bg/strings.xml | 2 + .../edit/src/main/res/values-br/strings.xml | 2 + .../edit/src/main/res/values-bs/strings.xml | 2 + .../edit/src/main/res/values-ca/strings.xml | 2 + .../edit/src/main/res/values-co/strings.xml | 2 + .../edit/src/main/res/values-cs/strings.xml | 6 + .../edit/src/main/res/values-cy/strings.xml | 2 + .../edit/src/main/res/values-da/strings.xml | 2 + .../edit/src/main/res/values-de/strings.xml | 6 + .../edit/src/main/res/values-el/strings.xml | 2 + .../src/main/res/values-en-rGB/strings.xml | 2 + .../edit/src/main/res/values-enm/strings.xml | 2 + .../edit/src/main/res/values-eo/strings.xml | 2 + .../edit/src/main/res/values-es/strings.xml | 6 + .../edit/src/main/res/values-et/strings.xml | 6 + .../edit/src/main/res/values-eu/strings.xml | 2 + .../edit/src/main/res/values-fa/strings.xml | 6 + .../edit/src/main/res/values-fi/strings.xml | 2 + .../edit/src/main/res/values-fr/strings.xml | 6 + .../edit/src/main/res/values-fy/strings.xml | 6 + .../edit/src/main/res/values-gd/strings.xml | 2 + .../edit/src/main/res/values-gl/strings.xml | 2 + .../edit/src/main/res/values-hi/strings.xml | 2 + .../edit/src/main/res/values-hr/strings.xml | 2 + .../edit/src/main/res/values-hu/strings.xml | 2 + .../edit/src/main/res/values-hy/strings.xml | 2 + .../edit/src/main/res/values-in/strings.xml | 2 + .../edit/src/main/res/values-is/strings.xml | 2 + .../edit/src/main/res/values-it/strings.xml | 2 + .../edit/src/main/res/values-iw/strings.xml | 2 + .../edit/src/main/res/values-ja/strings.xml | 6 + .../edit/src/main/res/values-ka/strings.xml | 2 + .../edit/src/main/res/values-kab/strings.xml | 4 + .../edit/src/main/res/values-kk/strings.xml | 2 + .../edit/src/main/res/values-ko/strings.xml | 2 + .../edit/src/main/res/values-lt/strings.xml | 6 + .../edit/src/main/res/values-lv/strings.xml | 2 + .../edit/src/main/res/values-ml/strings.xml | 2 + .../src/main/res/values-nb-rNO/strings.xml | 2 + .../edit/src/main/res/values-nl/strings.xml | 6 + .../edit/src/main/res/values-nn/strings.xml | 6 + .../edit/src/main/res/values-pl/strings.xml | 6 + .../src/main/res/values-pt-rBR/strings.xml | 6 + .../src/main/res/values-pt-rPT/strings.xml | 2 + .../edit/src/main/res/values-pt/strings.xml | 2 + .../edit/src/main/res/values-ro/strings.xml | 6 + .../edit/src/main/res/values-ru/strings.xml | 6 + .../edit/src/main/res/values-sk/strings.xml | 2 + .../edit/src/main/res/values-sl/strings.xml | 2 + .../edit/src/main/res/values-sq/strings.xml | 2 + .../edit/src/main/res/values-sr/strings.xml | 2 + .../edit/src/main/res/values-sv/strings.xml | 6 + .../edit/src/main/res/values-ta/strings.xml | 2 + .../edit/src/main/res/values-tr/strings.xml | 6 + .../edit/src/main/res/values-uk/strings.xml | 6 + .../edit/src/main/res/values-vi/strings.xml | 2 + .../src/main/res/values-zh-rCN/strings.xml | 6 + .../src/main/res/values-zh-rTW/strings.xml | 2 + .../oauth/src/main/res/values-enm/strings.xml | 2 + .../oauth/src/main/res/values-hr/strings.xml | 12 +- .../oauth/src/main/res/values-kab/strings.xml | 2 + .../oauth/src/main/res/values-kk/strings.xml | 2 + .../oauth/src/main/res/values-nn/strings.xml | 7 +- .../oauth/src/main/res/values-pl/strings.xml | 2 +- .../oauth/src/main/res/values-pt/strings.xml | 2 + .../oauth/src/main/res/values-uk/strings.xml | 12 +- .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-hr/strings.xml | 13 +- .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-pl/strings.xml | 5 +- .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-uk/strings.xml | 16 +- .../src/main/res/values-bg/strings.xml | 4 +- .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-nn/strings.xml | 4 + .../src/main/res/values-pl/strings.xml | 2 +- .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-sv/strings.xml | 10 +- .../src/main/res/values-uk/strings.xml | 25 +- .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-nn/strings.xml | 7 + .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-sv/strings.xml | 5 +- .../src/main/res/values-uk/strings.xml | 19 +- .../setup/src/main/res/values-bg/strings.xml | 4 +- .../setup/src/main/res/values-enm/strings.xml | 2 + .../setup/src/main/res/values-kab/strings.xml | 2 + .../setup/src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-nb-rNO/strings.xml | 2 +- .../setup/src/main/res/values-nn/strings.xml | 8 + .../setup/src/main/res/values-pl/strings.xml | 10 +- .../setup/src/main/res/values-pt/strings.xml | 2 + .../setup/src/main/res/values-sv/strings.xml | 10 +- .../setup/src/main/res/values-uk/strings.xml | 68 ++- .../src/main/res/values-ar/strings.xml | 2 + .../src/main/res/values-az/strings.xml | 2 + .../src/main/res/values-be/strings.xml | 2 + .../src/main/res/values-bg/strings.xml | 2 + .../src/main/res/values-br/strings.xml | 2 + .../src/main/res/values-bs/strings.xml | 2 + .../src/main/res/values-ca/strings.xml | 2 + .../src/main/res/values-co/strings.xml | 2 + .../src/main/res/values-cs/strings.xml | 10 + .../src/main/res/values-cy/strings.xml | 2 + .../src/main/res/values-da/strings.xml | 2 + .../src/main/res/values-de/strings.xml | 2 + .../src/main/res/values-el/strings.xml | 2 + .../src/main/res/values-en-rGB/strings.xml | 2 + .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-eo/strings.xml | 2 + .../src/main/res/values-es/strings.xml | 2 + .../src/main/res/values-et/strings.xml | 2 + .../src/main/res/values-eu/strings.xml | 2 + .../src/main/res/values-fa/strings.xml | 10 + .../src/main/res/values-fi/strings.xml | 2 + .../src/main/res/values-fr/strings.xml | 2 + .../src/main/res/values-fy/strings.xml | 13 + .../src/main/res/values-gd/strings.xml | 2 + .../src/main/res/values-gl/strings.xml | 2 + .../src/main/res/values-hi/strings.xml | 2 + .../src/main/res/values-hr/strings.xml | 2 + .../src/main/res/values-hu/strings.xml | 2 + .../src/main/res/values-hy/strings.xml | 2 + .../src/main/res/values-in/strings.xml | 2 + .../src/main/res/values-is/strings.xml | 2 + .../src/main/res/values-it/strings.xml | 2 + .../src/main/res/values-iw/strings.xml | 2 + .../src/main/res/values-ja/strings.xml | 13 + .../src/main/res/values-ka/strings.xml | 2 + .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-ko/strings.xml | 2 + .../src/main/res/values-lt/strings.xml | 2 + .../src/main/res/values-lv/strings.xml | 2 + .../src/main/res/values-ml/strings.xml | 2 + .../src/main/res/values-nb-rNO/strings.xml | 2 + .../src/main/res/values-nl/strings.xml | 13 + .../src/main/res/values-nn/strings.xml | 13 + .../src/main/res/values-pl/strings.xml | 13 + .../src/main/res/values-pt-rBR/strings.xml | 2 + .../src/main/res/values-pt-rPT/strings.xml | 2 + .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-ro/strings.xml | 2 + .../src/main/res/values-ru/strings.xml | 13 + .../src/main/res/values-sk/strings.xml | 2 + .../src/main/res/values-sl/strings.xml | 2 + .../src/main/res/values-sq/strings.xml | 2 + .../src/main/res/values-sr/strings.xml | 2 + .../src/main/res/values-sv/strings.xml | 13 + .../src/main/res/values-ta/strings.xml | 2 + .../src/main/res/values-tr/strings.xml | 2 + .../src/main/res/values-uk/strings.xml | 2 + .../src/main/res/values-vi/strings.xml | 2 + .../src/main/res/values-zh-rCN/strings.xml | 13 + .../src/main/res/values-zh-rTW/strings.xml | 2 + .../qrcode/src/main/res/values-ar/strings.xml | 2 + .../qrcode/src/main/res/values-az/strings.xml | 2 + .../qrcode/src/main/res/values-be/strings.xml | 2 + .../qrcode/src/main/res/values-bg/strings.xml | 2 + .../qrcode/src/main/res/values-br/strings.xml | 2 + .../qrcode/src/main/res/values-bs/strings.xml | 2 + .../qrcode/src/main/res/values-ca/strings.xml | 2 + .../qrcode/src/main/res/values-co/strings.xml | 2 + .../qrcode/src/main/res/values-cs/strings.xml | 8 + .../qrcode/src/main/res/values-cy/strings.xml | 2 + .../qrcode/src/main/res/values-da/strings.xml | 2 + .../qrcode/src/main/res/values-de/strings.xml | 8 + .../qrcode/src/main/res/values-el/strings.xml | 2 + .../src/main/res/values-en-rGB/strings.xml | 2 + .../src/main/res/values-enm/strings.xml | 2 + .../qrcode/src/main/res/values-eo/strings.xml | 2 + .../qrcode/src/main/res/values-es/strings.xml | 8 + .../qrcode/src/main/res/values-et/strings.xml | 8 + .../qrcode/src/main/res/values-eu/strings.xml | 2 + .../qrcode/src/main/res/values-fa/strings.xml | 8 + .../qrcode/src/main/res/values-fi/strings.xml | 2 + .../qrcode/src/main/res/values-fr/strings.xml | 8 + .../qrcode/src/main/res/values-fy/strings.xml | 8 + .../qrcode/src/main/res/values-gd/strings.xml | 2 + .../qrcode/src/main/res/values-gl/strings.xml | 2 + .../qrcode/src/main/res/values-hi/strings.xml | 2 + .../qrcode/src/main/res/values-hr/strings.xml | 2 + .../qrcode/src/main/res/values-hu/strings.xml | 8 + .../qrcode/src/main/res/values-hy/strings.xml | 2 + .../qrcode/src/main/res/values-in/strings.xml | 2 + .../qrcode/src/main/res/values-is/strings.xml | 2 + .../qrcode/src/main/res/values-it/strings.xml | 2 + .../qrcode/src/main/res/values-iw/strings.xml | 2 + .../qrcode/src/main/res/values-ja/strings.xml | 8 + .../qrcode/src/main/res/values-ka/strings.xml | 2 + .../src/main/res/values-kab/strings.xml | 2 + .../qrcode/src/main/res/values-kk/strings.xml | 2 + .../qrcode/src/main/res/values-ko/strings.xml | 2 + .../qrcode/src/main/res/values-lt/strings.xml | 8 + .../qrcode/src/main/res/values-lv/strings.xml | 2 + .../qrcode/src/main/res/values-ml/strings.xml | 2 + .../src/main/res/values-nb-rNO/strings.xml | 2 + .../qrcode/src/main/res/values-nl/strings.xml | 8 + .../qrcode/src/main/res/values-nn/strings.xml | 8 + .../qrcode/src/main/res/values-pl/strings.xml | 8 + .../src/main/res/values-pt-rBR/strings.xml | 2 + .../src/main/res/values-pt-rPT/strings.xml | 2 + .../qrcode/src/main/res/values-pt/strings.xml | 2 + .../qrcode/src/main/res/values-ro/strings.xml | 8 + .../qrcode/src/main/res/values-ru/strings.xml | 8 + .../qrcode/src/main/res/values-sk/strings.xml | 2 + .../qrcode/src/main/res/values-sl/strings.xml | 2 + .../qrcode/src/main/res/values-sq/strings.xml | 2 + .../qrcode/src/main/res/values-sr/strings.xml | 2 + .../qrcode/src/main/res/values-sv/strings.xml | 8 + .../qrcode/src/main/res/values-ta/strings.xml | 2 + .../qrcode/src/main/res/values-tr/strings.xml | 8 + .../qrcode/src/main/res/values-uk/strings.xml | 8 + .../qrcode/src/main/res/values-vi/strings.xml | 2 + .../src/main/res/values-zh-rCN/strings.xml | 8 + .../src/main/res/values-zh-rTW/strings.xml | 2 + .../drawer/src/main/res/values-az/strings.xml | 2 + .../drawer/src/main/res/values-cs/strings.xml | 2 +- .../src/main/res/values-enm/strings.xml | 2 + .../drawer/src/main/res/values-hr/strings.xml | 11 +- .../src/main/res/values-kab/strings.xml | 2 + .../drawer/src/main/res/values-kk/strings.xml | 2 + .../drawer/src/main/res/values-nn/strings.xml | 11 +- .../drawer/src/main/res/values-pt/strings.xml | 2 + .../drawer/src/main/res/values-ro/strings.xml | 9 +- .../drawer/src/main/res/values-uk/strings.xml | 11 +- .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-hr/strings.xml | 10 +- .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-nn/strings.xml | 3 + .../src/main/res/values-pl/strings.xml | 2 +- .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-uk/strings.xml | 10 +- .../src/main/res/values-az/strings.xml | 5 +- .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-hr/strings.xml | 6 +- .../src/main/res/values-kab/strings.xml | 5 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-nb-rNO/strings.xml | 5 +- .../src/main/res/values-nn/strings.xml | 3 +- .../src/main/res/values-pl/strings.xml | 4 +- .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-sl/strings.xml | 6 +- .../src/main/res/values-sv/strings.xml | 2 +- .../src/main/res/values-uk/strings.xml | 6 +- .../import/src/main/res/values-br/strings.xml | 10 +- .../import/src/main/res/values-cs/strings.xml | 2 + .../import/src/main/res/values-de/strings.xml | 2 + .../src/main/res/values-enm/strings.xml | 2 + .../import/src/main/res/values-es/strings.xml | 2 + .../import/src/main/res/values-et/strings.xml | 2 + .../import/src/main/res/values-fa/strings.xml | 2 + .../import/src/main/res/values-fr/strings.xml | 2 + .../import/src/main/res/values-fy/strings.xml | 2 + .../import/src/main/res/values-hr/strings.xml | 29 +- .../import/src/main/res/values-hu/strings.xml | 2 + .../import/src/main/res/values-ja/strings.xml | 2 + .../src/main/res/values-kab/strings.xml | 2 + .../import/src/main/res/values-kk/strings.xml | 2 + .../import/src/main/res/values-nl/strings.xml | 2 + .../import/src/main/res/values-nn/strings.xml | 35 +- .../import/src/main/res/values-pl/strings.xml | 14 +- .../src/main/res/values-pt-rBR/strings.xml | 1 + .../import/src/main/res/values-pt/strings.xml | 2 + .../import/src/main/res/values-ro/strings.xml | 2 + .../import/src/main/res/values-ru/strings.xml | 2 + .../import/src/main/res/values-sl/strings.xml | 2 + .../import/src/main/res/values-sq/strings.xml | 3 + .../import/src/main/res/values-sv/strings.xml | 2 + .../import/src/main/res/values-tr/strings.xml | 2 + .../import/src/main/res/values-uk/strings.xml | 38 +- .../src/main/res/values-zh-rCN/strings.xml | 4 +- .../src/main/res/values-az/strings.xml | 8 +- .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-hr/strings.xml | 13 +- .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-nn/strings.xml | 6 +- .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-uk/strings.xml | 7 +- .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-hr/strings.xml | 4 +- .../src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-kk/strings.xml | 2 + .../src/main/res/values-lt/strings.xml | 4 +- .../src/main/res/values-nb-rNO/strings.xml | 4 +- .../src/main/res/values-pt/strings.xml | 2 + .../src/main/res/values-uk/strings.xml | 4 +- .../src/main/res/values-enm/strings.xml | 2 + .../unread/src/main/res/values-et/strings.xml | 2 +- .../unread/src/main/res/values-fy/strings.xml | 4 +- .../unread/src/main/res/values-hr/strings.xml | 14 +- .../src/main/res/values-kab/strings.xml | 2 + .../unread/src/main/res/values-kk/strings.xml | 2 + .../unread/src/main/res/values-nl/strings.xml | 2 +- .../unread/src/main/res/values-nn/strings.xml | 10 + .../unread/src/main/res/values-pl/strings.xml | 2 +- .../unread/src/main/res/values-pt/strings.xml | 2 + .../unread/src/main/res/values-sv/strings.xml | 5 +- .../unread/src/main/res/values-uk/strings.xml | 15 +- .../base/src/main/res/values-az/strings.xml | 3 +- .../base/src/main/res/values-bg/strings.xml | 5 +- .../base/src/main/res/values-cs/strings.xml | 3 +- .../base/src/main/res/values-de/strings.xml | 1 + .../base/src/main/res/values-enm/strings.xml | 2 + .../base/src/main/res/values-es/strings.xml | 3 +- .../base/src/main/res/values-et/strings.xml | 3 +- .../base/src/main/res/values-fa/strings.xml | 3 +- .../base/src/main/res/values-fr/strings.xml | 1 + .../base/src/main/res/values-fy/strings.xml | 1 + .../base/src/main/res/values-hr/strings.xml | 5 +- .../base/src/main/res/values-hu/strings.xml | 3 +- .../base/src/main/res/values-ja/strings.xml | 3 +- .../base/src/main/res/values-kab/strings.xml | 5 + .../base/src/main/res/values-kk/strings.xml | 2 + .../base/src/main/res/values-nl/strings.xml | 1 + .../base/src/main/res/values-nn/strings.xml | 3 +- .../base/src/main/res/values-pl/strings.xml | 3 +- .../src/main/res/values-pt-rBR/strings.xml | 3 +- .../base/src/main/res/values-pt/strings.xml | 2 + .../base/src/main/res/values-ro/strings.xml | 3 +- .../base/src/main/res/values-ru/strings.xml | 3 +- .../base/src/main/res/values-sq/strings.xml | 1 + .../base/src/main/res/values-sv/strings.xml | 3 +- .../base/src/main/res/values-tr/strings.xml | 1 + .../base/src/main/res/values-uk/strings.xml | 3 +- .../src/main/res/values-zh-rCN/strings.xml | 3 +- .../folder/src/main/res/values-az/strings.xml | 2 + .../src/main/res/values-enm/strings.xml | 2 + .../src/main/res/values-kab/strings.xml | 2 + .../folder/src/main/res/values-kk/strings.xml | 2 + .../folder/src/main/res/values-pt/strings.xml | 2 + .../legacy/src/main/res/values-ar/strings.xml | 21 - .../legacy/src/main/res/values-az/strings.xml | 38 +- .../legacy/src/main/res/values-be/strings.xml | 21 - .../legacy/src/main/res/values-bg/strings.xml | 23 +- .../legacy/src/main/res/values-br/strings.xml | 21 - .../legacy/src/main/res/values-ca/strings.xml | 29 +- .../legacy/src/main/res/values-co/strings.xml | 21 - .../legacy/src/main/res/values-cs/strings.xml | 25 +- .../legacy/src/main/res/values-cy/strings.xml | 21 - .../legacy/src/main/res/values-da/strings.xml | 21 - .../legacy/src/main/res/values-de/strings.xml | 23 +- .../legacy/src/main/res/values-el/strings.xml | 21 - .../src/main/res/values-en-rGB/strings.xml | 21 - .../src/main/res/values-enm/strings.xml | 2 + .../legacy/src/main/res/values-eo/strings.xml | 21 - .../legacy/src/main/res/values-es/strings.xml | 33 +- .../legacy/src/main/res/values-et/strings.xml | 25 +- .../legacy/src/main/res/values-eu/strings.xml | 21 - .../legacy/src/main/res/values-fa/strings.xml | 23 +- .../legacy/src/main/res/values-fi/strings.xml | 21 - .../legacy/src/main/res/values-fr/strings.xml | 23 +- .../legacy/src/main/res/values-fy/strings.xml | 43 +- .../legacy/src/main/res/values-gd/strings.xml | 21 - .../legacy/src/main/res/values-gl/strings.xml | 21 - .../legacy/src/main/res/values-hr/strings.xml | 72 ++- .../legacy/src/main/res/values-hu/strings.xml | 31 +- .../legacy/src/main/res/values-hy/strings.xml | 20 - .../legacy/src/main/res/values-in/strings.xml | 21 - .../legacy/src/main/res/values-is/strings.xml | 21 - .../legacy/src/main/res/values-it/strings.xml | 21 - .../legacy/src/main/res/values-iw/strings.xml | 21 - .../legacy/src/main/res/values-ja/strings.xml | 23 +- .../legacy/src/main/res/values-ka/strings.xml | 19 - .../src/main/res/values-kab/strings.xml | 66 +++ .../legacy/src/main/res/values-ko/strings.xml | 20 - .../legacy/src/main/res/values-lt/strings.xml | 96 ++-- .../legacy/src/main/res/values-lv/strings.xml | 21 - .../legacy/src/main/res/values-ml/strings.xml | 21 - .../legacy/src/main/res/values-nb/strings.xml | 22 +- .../legacy/src/main/res/values-nl/strings.xml | 35 +- .../legacy/src/main/res/values-nn/strings.xml | 327 ++++++++++- .../legacy/src/main/res/values-pl/strings.xml | 216 ++++--- .../src/main/res/values-pt-rBR/strings.xml | 25 +- .../src/main/res/values-pt-rPT/strings.xml | 21 - .../legacy/src/main/res/values-pt/strings.xml | 2 + .../legacy/src/main/res/values-ro/strings.xml | 23 +- .../legacy/src/main/res/values-ru/strings.xml | 25 +- .../legacy/src/main/res/values-sk/strings.xml | 21 - .../legacy/src/main/res/values-sl/strings.xml | 21 - .../legacy/src/main/res/values-sq/strings.xml | 29 +- .../legacy/src/main/res/values-sr/strings.xml | 21 - .../legacy/src/main/res/values-sv/strings.xml | 52 +- .../src/main/res/values-ta-rIN/strings.xml | 3 - .../legacy/src/main/res/values-tr/strings.xml | 321 +++++------ .../legacy/src/main/res/values-uk/strings.xml | 526 +++++++++--------- .../legacy/src/main/res/values-vi/strings.xml | 21 - .../src/main/res/values-zh-rCN/strings.xml | 23 +- .../src/main/res/values-zh-rTW/strings.xml | 21 - 564 files changed, 3573 insertions(+), 1882 deletions(-) create mode 100644 app-k9mail/src/main/res/values-enm/strings.xml create mode 100644 app-k9mail/src/main/res/values-kab/strings.xml create mode 100644 app-k9mail/src/main/res/values-kk/strings.xml create mode 100644 app-k9mail/src/main/res/values-pt/strings.xml create mode 100644 app-metadata/com.fsck.k9/bg/short_description.txt create mode 100644 app-metadata/com.fsck.k9/bg/title.txt create mode 100644 app-metadata/com.fsck.k9/hr/full_description.txt create mode 100644 app-metadata/com.fsck.k9/hr/short_description.txt create mode 100644 app-metadata/com.fsck.k9/hr/title.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/37015.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/37016.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/37017.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/38000.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/38001.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/38002.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/39000.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/39001.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/39002.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/39003.txt create mode 100644 app-metadata/com.fsck.k9/nn/changelogs/39004.txt create mode 100644 app-metadata/com.fsck.k9/nn/full_description.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/37015.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/37016.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/37017.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/38000.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/38001.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/38002.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/39000.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/39001.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/39002.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/39003.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/changelogs/39004.txt create mode 100644 app-metadata/com.fsck.k9/sv-SE/full_description.txt create mode 100644 app-metadata/com.fsck.k9/uk/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/cs-CZ/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/cs-CZ/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/cs-CZ/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/de-DE/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/de-DE/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/es-ES/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/es-ES/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/es-ES/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/et/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/et/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fa-IR/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fa-IR/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fa-IR/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fr-FR/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fr-FR/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fr-FR/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fy/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fy/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/fy/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/ja-JP/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/ja-JP/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/ja-JP/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/lt/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/lt/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/nl-NL/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/nl-NL/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/nl-NL/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/nn/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/nn/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/nn/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/pl-PL/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/pl-PL/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/pl-PL/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/pt-BR/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/pt-BR/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/ro/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/ro/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/ru-RU/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/ru-RU/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/sv-SE/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/sv-SE/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/sv-SE/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/tr-TR/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/tr-TR/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/uk/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/uk/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/uk/title.txt create mode 100644 app-metadata/net.thunderbird.android.beta/zh-CN/full_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/zh-CN/short_description.txt create mode 100644 app-metadata/net.thunderbird.android.beta/zh-CN/title.txt create mode 100644 app-metadata/net.thunderbird.android/cs-CZ/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/cs-CZ/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/cs-CZ/title.txt create mode 100644 app-metadata/net.thunderbird.android/de-DE/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/de-DE/title.txt create mode 100644 app-metadata/net.thunderbird.android/es-ES/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/es-ES/title.txt create mode 100644 app-metadata/net.thunderbird.android/et/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/et/title.txt create mode 100644 app-metadata/net.thunderbird.android/fa-IR/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/fa-IR/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/fa-IR/title.txt create mode 100644 app-metadata/net.thunderbird.android/fr-FR/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/fr-FR/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/fr-FR/title.txt create mode 100644 app-metadata/net.thunderbird.android/fy/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/fy/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/fy/title.txt create mode 100644 app-metadata/net.thunderbird.android/ja-JP/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/ja-JP/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/ja-JP/title.txt create mode 100644 app-metadata/net.thunderbird.android/lt/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/lt/title.txt create mode 100644 app-metadata/net.thunderbird.android/nl-NL/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/nl-NL/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/nl-NL/title.txt create mode 100644 app-metadata/net.thunderbird.android/nn/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/nn/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/nn/title.txt create mode 100644 app-metadata/net.thunderbird.android/pl-PL/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/pl-PL/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/pl-PL/title.txt create mode 100644 app-metadata/net.thunderbird.android/pt-BR/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/ro/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/ro/title.txt create mode 100644 app-metadata/net.thunderbird.android/ru-RU/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/ru-RU/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/ru-RU/title.txt create mode 100644 app-metadata/net.thunderbird.android/sv-SE/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/sv-SE/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/sv-SE/title.txt create mode 100644 app-metadata/net.thunderbird.android/tr-TR/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/tr-TR/title.txt create mode 100644 app-metadata/net.thunderbird.android/uk/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/uk/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/uk/title.txt create mode 100644 app-metadata/net.thunderbird.android/zh-CN/full_description.txt create mode 100644 app-metadata/net.thunderbird.android/zh-CN/short_description.txt create mode 100644 app-metadata/net.thunderbird.android/zh-CN/title.txt create mode 100644 app-thunderbird/src/main/res/values-enm/strings.xml create mode 100644 app-thunderbird/src/main/res/values-kab/strings.xml create mode 100644 app-thunderbird/src/main/res/values-kk/strings.xml create mode 100644 app-thunderbird/src/main/res/values-pt/strings.xml create mode 100644 core/ui/compose/designsystem/src/main/res/values-enm/strings.xml create mode 100644 core/ui/compose/designsystem/src/main/res/values-kab/strings.xml create mode 100644 core/ui/compose/designsystem/src/main/res/values-kk/strings.xml create mode 100644 core/ui/compose/designsystem/src/main/res/values-pt/strings.xml create mode 100644 feature/account/common/src/main/res/values-enm/strings.xml create mode 100644 feature/account/common/src/main/res/values-kab/strings.xml create mode 100644 feature/account/common/src/main/res/values-kk/strings.xml create mode 100644 feature/account/common/src/main/res/values-pt/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ar/strings.xml create mode 100644 feature/account/edit/src/main/res/values-az/strings.xml create mode 100644 feature/account/edit/src/main/res/values-be/strings.xml create mode 100644 feature/account/edit/src/main/res/values-bg/strings.xml create mode 100644 feature/account/edit/src/main/res/values-br/strings.xml create mode 100644 feature/account/edit/src/main/res/values-bs/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ca/strings.xml create mode 100644 feature/account/edit/src/main/res/values-co/strings.xml create mode 100644 feature/account/edit/src/main/res/values-cs/strings.xml create mode 100644 feature/account/edit/src/main/res/values-cy/strings.xml create mode 100644 feature/account/edit/src/main/res/values-da/strings.xml create mode 100644 feature/account/edit/src/main/res/values-de/strings.xml create mode 100644 feature/account/edit/src/main/res/values-el/strings.xml create mode 100644 feature/account/edit/src/main/res/values-en-rGB/strings.xml create mode 100644 feature/account/edit/src/main/res/values-enm/strings.xml create mode 100644 feature/account/edit/src/main/res/values-eo/strings.xml create mode 100644 feature/account/edit/src/main/res/values-es/strings.xml create mode 100644 feature/account/edit/src/main/res/values-et/strings.xml create mode 100644 feature/account/edit/src/main/res/values-eu/strings.xml create mode 100644 feature/account/edit/src/main/res/values-fa/strings.xml create mode 100644 feature/account/edit/src/main/res/values-fi/strings.xml create mode 100644 feature/account/edit/src/main/res/values-fr/strings.xml create mode 100644 feature/account/edit/src/main/res/values-fy/strings.xml create mode 100644 feature/account/edit/src/main/res/values-gd/strings.xml create mode 100644 feature/account/edit/src/main/res/values-gl/strings.xml create mode 100644 feature/account/edit/src/main/res/values-hi/strings.xml create mode 100644 feature/account/edit/src/main/res/values-hr/strings.xml create mode 100644 feature/account/edit/src/main/res/values-hu/strings.xml create mode 100644 feature/account/edit/src/main/res/values-hy/strings.xml create mode 100644 feature/account/edit/src/main/res/values-in/strings.xml create mode 100644 feature/account/edit/src/main/res/values-is/strings.xml create mode 100644 feature/account/edit/src/main/res/values-it/strings.xml create mode 100644 feature/account/edit/src/main/res/values-iw/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ja/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ka/strings.xml create mode 100644 feature/account/edit/src/main/res/values-kab/strings.xml create mode 100644 feature/account/edit/src/main/res/values-kk/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ko/strings.xml create mode 100644 feature/account/edit/src/main/res/values-lt/strings.xml create mode 100644 feature/account/edit/src/main/res/values-lv/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ml/strings.xml create mode 100644 feature/account/edit/src/main/res/values-nb-rNO/strings.xml create mode 100644 feature/account/edit/src/main/res/values-nl/strings.xml create mode 100644 feature/account/edit/src/main/res/values-nn/strings.xml create mode 100644 feature/account/edit/src/main/res/values-pl/strings.xml create mode 100644 feature/account/edit/src/main/res/values-pt-rBR/strings.xml create mode 100644 feature/account/edit/src/main/res/values-pt-rPT/strings.xml create mode 100644 feature/account/edit/src/main/res/values-pt/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ro/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ru/strings.xml create mode 100644 feature/account/edit/src/main/res/values-sk/strings.xml create mode 100644 feature/account/edit/src/main/res/values-sl/strings.xml create mode 100644 feature/account/edit/src/main/res/values-sq/strings.xml create mode 100644 feature/account/edit/src/main/res/values-sr/strings.xml create mode 100644 feature/account/edit/src/main/res/values-sv/strings.xml create mode 100644 feature/account/edit/src/main/res/values-ta/strings.xml create mode 100644 feature/account/edit/src/main/res/values-tr/strings.xml create mode 100644 feature/account/edit/src/main/res/values-uk/strings.xml create mode 100644 feature/account/edit/src/main/res/values-vi/strings.xml create mode 100644 feature/account/edit/src/main/res/values-zh-rCN/strings.xml create mode 100644 feature/account/edit/src/main/res/values-zh-rTW/strings.xml create mode 100644 feature/account/oauth/src/main/res/values-enm/strings.xml create mode 100644 feature/account/oauth/src/main/res/values-kab/strings.xml create mode 100644 feature/account/oauth/src/main/res/values-kk/strings.xml create mode 100644 feature/account/oauth/src/main/res/values-pt/strings.xml create mode 100644 feature/account/server/certificate/src/main/res/values-enm/strings.xml create mode 100644 feature/account/server/certificate/src/main/res/values-kab/strings.xml create mode 100644 feature/account/server/certificate/src/main/res/values-kk/strings.xml create mode 100644 feature/account/server/certificate/src/main/res/values-pt/strings.xml create mode 100644 feature/account/server/settings/src/main/res/values-enm/strings.xml create mode 100644 feature/account/server/settings/src/main/res/values-kab/strings.xml create mode 100644 feature/account/server/settings/src/main/res/values-kk/strings.xml create mode 100644 feature/account/server/settings/src/main/res/values-pt/strings.xml create mode 100644 feature/account/server/validation/src/main/res/values-enm/strings.xml create mode 100644 feature/account/server/validation/src/main/res/values-kab/strings.xml create mode 100644 feature/account/server/validation/src/main/res/values-kk/strings.xml create mode 100644 feature/account/server/validation/src/main/res/values-pt/strings.xml create mode 100644 feature/account/setup/src/main/res/values-enm/strings.xml create mode 100644 feature/account/setup/src/main/res/values-kab/strings.xml create mode 100644 feature/account/setup/src/main/res/values-kk/strings.xml create mode 100644 feature/account/setup/src/main/res/values-pt/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ar/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-az/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-be/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-bg/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-br/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-bs/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ca/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-co/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-cs/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-cy/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-da/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-de/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-el/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-en-rGB/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-enm/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-eo/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-es/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-et/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-eu/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-fa/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-fi/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-fr/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-fy/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-gd/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-gl/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-hi/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-hr/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-hu/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-hy/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-in/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-is/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-it/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-iw/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ja/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ka/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-kab/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-kk/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ko/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-lt/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-lv/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ml/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-nb-rNO/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-nl/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-nn/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-pl/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-pt-rBR/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-pt-rPT/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-pt/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ro/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ru/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-sk/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-sl/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-sq/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-sr/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-sv/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-ta/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-tr/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-uk/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-vi/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-zh-rCN/strings.xml create mode 100644 feature/funding/googleplay/src/main/res/values-zh-rTW/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ar/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-az/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-be/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-bg/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-br/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-bs/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ca/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-co/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-cs/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-cy/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-da/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-de/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-el/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-en-rGB/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-enm/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-eo/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-es/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-et/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-eu/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-fa/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-fi/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-fr/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-fy/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-gd/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-gl/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-hi/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-hr/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-hu/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-hy/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-in/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-is/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-it/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-iw/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ja/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ka/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-kab/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-kk/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ko/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-lt/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-lv/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ml/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-nb-rNO/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-nl/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-nn/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-pl/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-pt-rBR/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-pt-rPT/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-pt/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ro/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ru/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-sk/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-sl/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-sq/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-sr/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-sv/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-ta/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-tr/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-uk/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-vi/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-zh-rCN/strings.xml create mode 100644 feature/migration/qrcode/src/main/res/values-zh-rTW/strings.xml create mode 100644 feature/navigation/drawer/src/main/res/values-az/strings.xml create mode 100644 feature/navigation/drawer/src/main/res/values-enm/strings.xml create mode 100644 feature/navigation/drawer/src/main/res/values-kab/strings.xml create mode 100644 feature/navigation/drawer/src/main/res/values-kk/strings.xml create mode 100644 feature/navigation/drawer/src/main/res/values-pt/strings.xml create mode 100644 feature/onboarding/permissions/src/main/res/values-enm/strings.xml create mode 100644 feature/onboarding/permissions/src/main/res/values-kab/strings.xml create mode 100644 feature/onboarding/permissions/src/main/res/values-kk/strings.xml create mode 100644 feature/onboarding/permissions/src/main/res/values-pt/strings.xml create mode 100644 feature/onboarding/welcome/src/main/res/values-enm/strings.xml create mode 100644 feature/onboarding/welcome/src/main/res/values-kab/strings.xml create mode 100644 feature/onboarding/welcome/src/main/res/values-kk/strings.xml create mode 100644 feature/onboarding/welcome/src/main/res/values-pt/strings.xml create mode 100644 feature/settings/import/src/main/res/values-enm/strings.xml create mode 100644 feature/settings/import/src/main/res/values-kab/strings.xml create mode 100644 feature/settings/import/src/main/res/values-kk/strings.xml create mode 100644 feature/settings/import/src/main/res/values-pt/strings.xml create mode 100644 feature/widget/message-list/src/main/res/values-enm/strings.xml create mode 100644 feature/widget/message-list/src/main/res/values-kab/strings.xml create mode 100644 feature/widget/message-list/src/main/res/values-kk/strings.xml create mode 100644 feature/widget/message-list/src/main/res/values-pt/strings.xml create mode 100644 feature/widget/shortcut/src/main/res/values-enm/strings.xml create mode 100644 feature/widget/shortcut/src/main/res/values-kab/strings.xml create mode 100644 feature/widget/shortcut/src/main/res/values-kk/strings.xml create mode 100644 feature/widget/shortcut/src/main/res/values-pt/strings.xml create mode 100644 feature/widget/unread/src/main/res/values-enm/strings.xml create mode 100644 feature/widget/unread/src/main/res/values-kab/strings.xml create mode 100644 feature/widget/unread/src/main/res/values-kk/strings.xml create mode 100644 feature/widget/unread/src/main/res/values-pt/strings.xml create mode 100644 legacy/ui/base/src/main/res/values-enm/strings.xml create mode 100644 legacy/ui/base/src/main/res/values-kab/strings.xml create mode 100644 legacy/ui/base/src/main/res/values-kk/strings.xml create mode 100644 legacy/ui/base/src/main/res/values-pt/strings.xml create mode 100644 legacy/ui/folder/src/main/res/values-az/strings.xml create mode 100644 legacy/ui/folder/src/main/res/values-enm/strings.xml create mode 100644 legacy/ui/folder/src/main/res/values-kab/strings.xml create mode 100644 legacy/ui/folder/src/main/res/values-kk/strings.xml create mode 100644 legacy/ui/folder/src/main/res/values-pt/strings.xml create mode 100644 legacy/ui/legacy/src/main/res/values-enm/strings.xml create mode 100644 legacy/ui/legacy/src/main/res/values-kab/strings.xml create mode 100644 legacy/ui/legacy/src/main/res/values-pt/strings.xml diff --git a/app-k9mail/src/main/res/values-enm/strings.xml b/app-k9mail/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/app-k9mail/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app-k9mail/src/main/res/values-kab/strings.xml b/app-k9mail/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..5f57a58706e --- /dev/null +++ b/app-k9mail/src/main/res/values-kab/strings.xml @@ -0,0 +1,4 @@ + + + Imayl K-9 + \ No newline at end of file diff --git a/app-k9mail/src/main/res/values-kk/strings.xml b/app-k9mail/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/app-k9mail/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app-k9mail/src/main/res/values-pt/strings.xml b/app-k9mail/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/app-k9mail/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app-k9mail/src/main/res/values-zh-rCN/strings.xml b/app-k9mail/src/main/res/values-zh-rCN/strings.xml index 58052439ded..f7944fb85d2 100644 --- a/app-k9mail/src/main/res/values-zh-rCN/strings.xml +++ b/app-k9mail/src/main/res/values-zh-rCN/strings.xml @@ -1,4 +1,4 @@ - K-9 邮件 + K-9 Mail \ No newline at end of file diff --git a/app-metadata/com.fsck.k9/bg/short_description.txt b/app-metadata/com.fsck.k9/bg/short_description.txt new file mode 100644 index 00000000000..6825e75cb58 --- /dev/null +++ b/app-metadata/com.fsck.k9/bg/short_description.txt @@ -0,0 +1 @@ +Пълнофункционален клиент за електронна поща diff --git a/app-metadata/com.fsck.k9/bg/title.txt b/app-metadata/com.fsck.k9/bg/title.txt new file mode 100644 index 00000000000..0f4989ef44e --- /dev/null +++ b/app-metadata/com.fsck.k9/bg/title.txt @@ -0,0 +1 @@ +K-9 Поща diff --git a/app-metadata/com.fsck.k9/fy/changelogs/37016.txt b/app-metadata/com.fsck.k9/fy/changelogs/37016.txt index 367dd572876..fd742288ec9 100644 --- a/app-metadata/com.fsck.k9/fy/changelogs/37016.txt +++ b/app-metadata/com.fsck.k9/fy/changelogs/37016.txt @@ -1,5 +1,5 @@ - Lytse bugfixes en UI/UX oppoetse by it ynstellen fan in account - In crash ferholpen dy’t feroarsake waard troch in ynteraksje mei OpenKeychain 6.0.0 - Fokus op ûnderwerp- of lichemsynfierfjilden by it iepenjen fan it opstelskerm fia in mailto: URI -- Hebriuwske en Koreaanske oersettingen ferwijdere, omdat minder as 70% fan de strings oerset wie. Frijwilligers om de oersettingen by te wurkjen binne altyd wolkom! +- Hebriuwske en Koreaanske oersettingen ferwidere, omdat minder as 70% fan de strings oerset wie. Frijwilligers om de oersettingen by te wurkjen binne altyd wolkom! - Restearjende oersettingen bywurke diff --git a/app-metadata/com.fsck.k9/fy/changelogs/38001.txt b/app-metadata/com.fsck.k9/fy/changelogs/38001.txt index be5f261904d..e842dc7e32d 100644 --- a/app-metadata/com.fsck.k9/fy/changelogs/38001.txt +++ b/app-metadata/com.fsck.k9/fy/changelogs/38001.txt @@ -1,7 +1,7 @@ - DNSSEC-stipe tafoege by it sykjen nei serverynstellingen wylst de ynstallaasje - Der is in wiziging oanbrocht om foar te kommen dat guon softwaretoetseboerden e-mailadressen mei in haadletter skriuwe/automatysk korrizjearje by it ynstellen fan in account - In crash ferholpen wannear’t in hiel lang ûnderwerp brûkt waard -- Probleem oplost mei it werjaan fan OAuth 2.0-flatermeldingen +- Probleem oplost mei it toanen fan OAuth 2.0-flatermeldingen - Seldsume crash ferholpen by it downloaden fan in bylage - Koade tafoege om regeleinen yn tekstynfier fan ien regel net ta te stean - Bywurke oersettingen diff --git a/app-metadata/com.fsck.k9/hr/full_description.txt b/app-metadata/com.fsck.k9/hr/full_description.txt new file mode 100644 index 00000000000..e66e1294fb0 --- /dev/null +++ b/app-metadata/com.fsck.k9/hr/full_description.txt @@ -0,0 +1,24 @@ +K-9 Mail je open source klijent za e-mailove koja radi sa praktično svakim e-mail poslužiteljem. + +Značajke + +* Podržava više računa +* Ujedinjen Inbox +* Privatan (bez praćenja, samo se spaja e-mail poslužiteljem) +* Automatska sinkronizacija u površini ili push obavijesti +* Lokalno i poslužiteljsko pretraživanje +* OpenPGP e-mail šifriranje (PGP/MIME) + +Instalirajte aplikaciju OpenKeychain: Lagan PGP za šifriranje ili dešifriranje vaših e-mailova koristeći OpenPGP. + + +Podrška + +Ako imate problema sa K-9 Mailom, potražite pomoć u našem forumu za podršci. + + +Želite li pomoći? + +K-9 Mail je zajedničko razvijen projekt. Ako želite pomoći poboljšati aplikaciju, pridružite nam se! +Možete pronaći naš tragač bugova, izvorni kod i wiki na https://github.com/thunderbird/thunderbird-android. +Uvijek nam je drago dočekati nove programere, dizajnere, dokumentatore, prevoditelje, osobe za prijavu grešaka i prijatelje. diff --git a/app-metadata/com.fsck.k9/hr/short_description.txt b/app-metadata/com.fsck.k9/hr/short_description.txt new file mode 100644 index 00000000000..f6549744e39 --- /dev/null +++ b/app-metadata/com.fsck.k9/hr/short_description.txt @@ -0,0 +1 @@ +Potpuno opremljeni email klijent diff --git a/app-metadata/com.fsck.k9/hr/title.txt b/app-metadata/com.fsck.k9/hr/title.txt new file mode 100644 index 00000000000..f6c47543be4 --- /dev/null +++ b/app-metadata/com.fsck.k9/hr/title.txt @@ -0,0 +1 @@ +K-9 Mail diff --git a/app-metadata/com.fsck.k9/ja/full_description.txt b/app-metadata/com.fsck.k9/ja/full_description.txt index 5ccf39dfaa9..1e2fe3a7fc7 100644 --- a/app-metadata/com.fsck.k9/ja/full_description.txt +++ b/app-metadata/com.fsck.k9/ja/full_description.txt @@ -20,5 +20,5 @@ K-9 Mail を使用していて問題に遭遇した場合、https://github.com/thunderbird/thunderbird-android です。 +https://github.com/thunderbird/thunderbird-android でバグトラッカーやソースコード、Wiki を確認できます。。 開発者、デザイナー、ドキュメントライター、翻訳者、バグハンターと新しい友達はいつでも大歓迎です。 diff --git a/app-metadata/com.fsck.k9/nl-NL/changelogs/38001.txt b/app-metadata/com.fsck.k9/nl-NL/changelogs/38001.txt index 5346b671de7..603ae589162 100644 --- a/app-metadata/com.fsck.k9/nl-NL/changelogs/38001.txt +++ b/app-metadata/com.fsck.k9/nl-NL/changelogs/38001.txt @@ -1,7 +1,7 @@ - DNSSEC-ondersteuning toegevoegd bij het zoeken naar serverinstellingen tijdens de installatie - Er is een wijziging aangebracht om te voorkomen dat sommige softwaretoetsenborden e-mailadressen met een hoofdletter schrijven/automatisch corrigeren bij het instellen van een account - Een crash verholpen wanneer een zeer lang onderwerp werd gebruikt -- Probleem opgelost met het weergeven van OAuth 2.0-foutmeldingen +- Probleem opgelost met het tonen van OAuth 2.0-foutmeldingen - Zeldzame crash verholpen bij het downloaden van een bijlage - Code toegevoegd om regeleinden in tekstinvoer van één regel niet toe te staan - Bijgewerkte vertalingen diff --git a/app-metadata/com.fsck.k9/nn/changelogs/37015.txt b/app-metadata/com.fsck.k9/nn/changelogs/37015.txt new file mode 100644 index 00000000000..0656b0c7379 --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/37015.txt @@ -0,0 +1,10 @@ +- La til bilete-handtering i konteksmenyen for hyperlenkjer +- La til moglegheit for å vidaresende opna vedlegg til nye e-postar +- Forbetra sertifikat-handtering under konto-oppsett +- Forbetra importering av innstillingar under konto-oppsett +- Forbetra UI/UX under konto-oppsett +- Forbetra vising av konto-oppsett på små skjermar +- Forbetra UI/UX for tenarinnstillingar for kontoen +- Fiksa AlarmManager krasj på Android 14 +- Interne endringar +- Oppdaterte omsetjingar diff --git a/app-metadata/com.fsck.k9/nn/changelogs/37016.txt b/app-metadata/com.fsck.k9/nn/changelogs/37016.txt new file mode 100644 index 00000000000..a30c61de903 --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/37016.txt @@ -0,0 +1,5 @@ +- Små feilrettingar og UI/UX finpuss i konto-oppsett +- Fiksa krasj som følgje av samhandling med OpenKeychain 6.0.0 +- Fokuser på emne eller kropp input-felter under opning av komposeringskjerm via ein mailto: URI +- Fjerna hebraisk og koreansk omsetjing fordi under 70% av strengene var omsatt. Bidragsytarar er alltid velkommen til å oppdatere omsetjingane! +- Oppdaterte gjenverande omsetjingar diff --git a/app-metadata/com.fsck.k9/nn/changelogs/37017.txt b/app-metadata/com.fsck.k9/nn/changelogs/37017.txt new file mode 100644 index 00000000000..4de66ef4636 --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/37017.txt @@ -0,0 +1,5 @@ +- Fiksa rekkefølgje for oppdagingstrinnene for automatisk konfigurasjon +- Endra standard antal viste til 100 +- Aktiverte notifikasjonar for nye kontoar som standard +- Tilbakeførte endringar på handtering av mailto: URI-ar introdusert i K-9 Mail 6.716 på grunn av uønskte bivirkningar +- Fiksa bug for å få "fargelegg kontaktar" til å virke igjen i meldingsvising diff --git a/app-metadata/com.fsck.k9/nn/changelogs/38000.txt b/app-metadata/com.fsck.k9/nn/changelogs/38000.txt new file mode 100644 index 00000000000..06d3b8f7674 --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/38000.txt @@ -0,0 +1,7 @@ +- Nytt og forbetra konto-oppsett +- La til moglegheit for å returnere til meldingsliste etter å ha markert ein melding som ulesen i meldingsvisinga +- Gjorde det vanskelegare å feilaktig utløse ei sveip-handling i meldingslista +- Forbetra skjermlesar oppleving eit par stader +- IMAP: La til stønad for å sende ID-kommandoen (påkravd av nokre e-postleverandørar) +- Fleire andre feilrettingar og forbetringar; se endringar for versjonane 6.7xx +- Fjerna hebraisk og koreanske omsetjingar på grunn av kor ukomplette dei var; frivillige omsetjarar er velkomne! diff --git a/app-metadata/com.fsck.k9/nn/changelogs/38001.txt b/app-metadata/com.fsck.k9/nn/changelogs/38001.txt new file mode 100644 index 00000000000..d65177126cf --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/38001.txt @@ -0,0 +1,7 @@ +- La til DNSSEC stønad når det leitast etter tenar-innstillingar under oppsett +- Gjorde ei endring som forhindra nokre programvare-tastatur frå å kapitalisere/auto-korrigere e-postadresser i konto-oppsett +- Fiksa ein krasj når eit veldig langt emne var brukt +- Fiksa vising av OAuth 2.0 feilmeldingar +- Fiksa ein sjeldan krasj under nedlasting av vedlegg +- La til kode for å forhindre linjebrot i enkeltlinje tekstfelt +- Oppdaterte omsetjingar diff --git a/app-metadata/com.fsck.k9/nn/changelogs/38002.txt b/app-metadata/com.fsck.k9/nn/changelogs/38002.txt new file mode 100644 index 00000000000..e0b0dd57b11 --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/38002.txt @@ -0,0 +1,5 @@ +- Push: Opplys brukaren om løyve for å planleggje eksakte alarmar manglar +- Endra innstilinga "Send klient-ID" til "Send klient-informasjon" +- IMAP: La til stønad for \NonExistent LIST respons-attributen +- IMAP: Send EXPUNGE-kommando etter flytting utan MOVE utviding +- Oppdaterte omsetjingar; la til hebraisk omsetjing diff --git a/app-metadata/com.fsck.k9/nn/changelogs/39000.txt b/app-metadata/com.fsck.k9/nn/changelogs/39000.txt new file mode 100644 index 00000000000..15949adc2bf --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/39000.txt @@ -0,0 +1,6 @@ +- Starta å konvertere brukargrensesnittet til Material 3 +- La til stønad for mailto: URI på NFC tagg +- La til eksperimentell omgåing for krasj av appen i bakgrunnen +- Optimaliserte nokre IMAP-protokoll interaksjonar +- Ikkje utset vising av notifikasjonen når Push er aktiv +- Oppdaterte omsetjingar diff --git a/app-metadata/com.fsck.k9/nn/changelogs/39001.txt b/app-metadata/com.fsck.k9/nn/changelogs/39001.txt new file mode 100644 index 00000000000..ac2f04da1b6 --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/39001.txt @@ -0,0 +1 @@ +- Fiksa ein krasj under opning av meldingskomposisjonsvindauget diff --git a/app-metadata/com.fsck.k9/nn/changelogs/39002.txt b/app-metadata/com.fsck.k9/nn/changelogs/39002.txt new file mode 100644 index 00000000000..0d7c10e4077 --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/39002.txt @@ -0,0 +1,8 @@ +- Gjorde mange interne endringar for å klargjere migrering til Material 3. Hugs at Material 3 grensesnittet er framleis i ein tidlig versjon. +- Endra rekkefølgje på verktøylinje-handlingar i meldingsvising, for å samsvare med rekkefølgja i fleirvalgsmodus +- Endra standardverdi for "Hent meldingar opp til" til 128KiB +- Fiksa ein feil der verktøylinje-ikona var viste med feil farge etter å ha utført ein sveip-handling +- Fiksa krasj under klipping av e-postadresse frå mottakarfelt under skriving av melding +- Fiksa verktøylinjestorleik når ein ikkje-standard systemskriftstorleik er i bruk +- La til korsiske, koreanske og vietnamesiske omsetjingar +- Oppdaterte omsetjingar diff --git a/app-metadata/com.fsck.k9/nn/changelogs/39003.txt b/app-metadata/com.fsck.k9/nn/changelogs/39003.txt new file mode 100644 index 00000000000..08cbc4be8fd --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/39003.txt @@ -0,0 +1 @@ +- Fiksa ein krasj når ein meldingsliste sveip-funksjon var sett til "Ingen" diff --git a/app-metadata/com.fsck.k9/nn/changelogs/39004.txt b/app-metadata/com.fsck.k9/nn/changelogs/39004.txt new file mode 100644 index 00000000000..ebb78de952a --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/changelogs/39004.txt @@ -0,0 +1,2 @@ +- Fiksa ein krasj når delt skjerm er aktivert +- Oppdaterte omsetjingar diff --git a/app-metadata/com.fsck.k9/nn/full_description.txt b/app-metadata/com.fsck.k9/nn/full_description.txt new file mode 100644 index 00000000000..a41d3cf8aa6 --- /dev/null +++ b/app-metadata/com.fsck.k9/nn/full_description.txt @@ -0,0 +1,24 @@ +K-9 Mail er ein e-post klient med 100% open kjeldekode, som verker med omtrent kvar einaste e-post tilbydar. + +Funksjonar + +* Støttar fleire kontoar +* Samla innboks +* Personvern-vennleg (ingen sporing i det heile, kontaktar kun e-post-tilbydaren din) +* Automatisk bakkgrunnssynkronisering eller push-notifikasjonar +* Lokal og tenar-side søk +* OpenPGP e-post kryptering (PGP/MIME) + +Installer appen OpenKeychain: Easy PGP for å enkryptere/dekryptere e-postane dine med hjelp av OpenPGP. + + +Kundestønad + +Om du har problem med K-9 Mail, spør om hjelp på vårt kundestønadsforum. + + +Vil du hjelpa? + +K-9 Mail er eit prosjekt utvikla i fellesskap. Om du er du interessert i å hjelpe å forbetre appen, ver vennleg og bli med oss! +Du kan finne vår feilsporar, kjedekode og wiki på https://github.com/thunderbird/thunderbird-android. +Me er alltid glade for å ønskje nye utviklarar, designarar, dokumentarmakarar, omsetjarar, feilprioriterarar og vennar velkommen. diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/37015.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/37015.txt new file mode 100644 index 00000000000..152e2ebaecf --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/37015.txt @@ -0,0 +1,10 @@ +- Lagt till bildhantering i snabbmenyn för hyperlänkar +- Lagt till möjlighet att vidarebefordra öppnade bilagor till nya e-postmeddelanden +- Förbättrad skärm för certifikatfel under kontoinställning +- Förbättrad import av inställningar under kontoinställning +- Förbättrat kontoinställningar UI/UX +- Förbättrad rendering av kontoinställningar på små skärmar +- Förbättrat gränssnitt för redigering av kontoserverinställningar UI/UX +- Fixat AlarmManager-krasch på Android 14 +- Interna förändringar +- Uppdaterade översättningar diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/37016.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/37016.txt new file mode 100644 index 00000000000..62b2c9010a8 --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/37016.txt @@ -0,0 +1,5 @@ +- Små buggfixar och UI/UX-putsning i kontoinställningar +- Fixade en krasch orsakad av en interaktion med OpenKeychain 6.0.0 +- Fokusera på ämnes- eller bodyinmatningsfält när du öppnar skrivskärmen via en mailto: URI +- Tog bort hebreiska och koreanska översättningar eftersom mindre än 70 % av strängarna översattes. Volontärer för att uppdatera översättningarna är alltid välkomna! +- Uppdaterade återstående översättningar diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/37017.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/37017.txt new file mode 100644 index 00000000000..ac53ad4711e --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/37017.txt @@ -0,0 +1,5 @@ +- Fixade ordning på steg för upptäckt av autokonfiguration +- Ändrad standardvisningsantal till 100 +- Aktiverade aviseringar för nya konton som standard +- Återställde ändringen till hantering av mailto: URI:er infördes i K-9 Mail 6.716 på grund av oavsiktliga biverkningar +- Fixat bugg för att få "färglägga kontakter" att fungera igen i meddelandevyn diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/38000.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/38000.txt new file mode 100644 index 00000000000..95c373c8b62 --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/38000.txt @@ -0,0 +1,7 @@ +- Ny och förbättrad kontokonfiguration +- Lagt till alternativ för att återgå till meddelandelistan efter att ha markerat ett meddelande som oläst i meddelandevyn +- Gjorde det svårare att av misstag utlösa svepåtgärder på skärmen med meddelandelistan +- Förbättrad skärmläsarupplevelse på olika platser +- IMAP: Tillagt stöd för att skicka ID-kommandot (som krävs av vissa e-postleverantörer) +- Diverse andra buggfixar och förbättringar; se ändringar för version 6.7xx +- Tog bort hebreiska och koreanska översättningar på grund av hur ofullständiga de var; frivilliga översättare välkomna! diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/38001.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/38001.txt new file mode 100644 index 00000000000..bd09e7d7595 --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/38001.txt @@ -0,0 +1,7 @@ +- Lagt till DNSSEC-stöd när du letar efter serverinställningar under installationen +- Gjorde en ändring för att förhindra att vissa mjukvarutangentbord aktiverar/automatiskt korrigerar e-postadresser i kontoinställningarna +– Fixade en krasch när ett väldigt långt ämne användes +- Fixat visning av OAuth 2.0-felmeddelanden +- Fixade en sällsynt krasch vid nedladdning av en bilaga +- Lagt till kod för att inte tillåta radbrytningar i en rad textinmatningar +- Uppdaterade översättningar diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/38002.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/38002.txt new file mode 100644 index 00000000000..62bbbe007c2 --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/38002.txt @@ -0,0 +1,5 @@ +- Push: Meddela användaren om behörighet att schemalägga exakta larm saknas +- Omdöpt inställningen "Skicka klient-ID" till "Skicka klientinformation" +- IMAP: Lade till stöd för svarsattributet \NonExistent LIST +- IMAP: Utfärda EXPUNGE-kommandot efter flyttning utan MOVE-tillägg +- Uppdaterade översättningar; lagt till hebreisk översättning diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/39000.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/39000.txt new file mode 100644 index 00000000000..ab7ff63d4ac --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/39000.txt @@ -0,0 +1,6 @@ +- Började konvertera användargränssnittet till Material 3 +- Lagt till stöd för mailto: URI på NFC-tagg +- Lade till experimentell lösning för appen som kraschar i bakgrunden +- Optimerade några av IMAP-protokollets interaktioner +- Dröj inte med att visa meddelandet när Push är aktivt +- Uppdaterade översättningar diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/39001.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/39001.txt new file mode 100644 index 00000000000..ae778d76c67 --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/39001.txt @@ -0,0 +1 @@ +- Fixade en krasch när skärmen öppnades för att skriva ett meddelande diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/39002.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/39002.txt new file mode 100644 index 00000000000..c34bc4f3355 --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/39002.txt @@ -0,0 +1,8 @@ +- Ändrade många interna funktioner för att migrera till Material 3. Observera att Material 3-gränssnittet fortfarande är i ett tidigt tillstånd. +- Ändrade ordningen på verktygsfältsåtgärder i meddelandevyn för att matcha ordningen i flervalsläge +- Ändrade standardvärde för "Hämta meddelanden upp till" till 128KiB +- Fixat bugg där verktygsfältsikoner visades i fel färg efter att ha utfört en svepåtgärd +- Fixat krasch när du klippte ut e-postadresser från ett mottagarfält när du skrev ett meddelande +- Fixade verktygsfältsstorlek när du använder en icke-standardtypsnittsstorlek för systemet +- Lagt till korsikanska, koreanska och vietnamesiska översättningar +- Uppdaterade översättningar diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/39003.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/39003.txt new file mode 100644 index 00000000000..a5ae1075597 --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/39003.txt @@ -0,0 +1 @@ +- Fixade en krasch när en svepåtgärd för meddelandelistan var inställd på "Ingen" diff --git a/app-metadata/com.fsck.k9/sv-SE/changelogs/39004.txt b/app-metadata/com.fsck.k9/sv-SE/changelogs/39004.txt new file mode 100644 index 00000000000..13aa339d679 --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/changelogs/39004.txt @@ -0,0 +1,2 @@ +- Fixat krasch när delad skärm var aktiverad +- Uppdaterade översättningar diff --git a/app-metadata/com.fsck.k9/sv-SE/full_description.txt b/app-metadata/com.fsck.k9/sv-SE/full_description.txt new file mode 100644 index 00000000000..13ae7e0892a --- /dev/null +++ b/app-metadata/com.fsck.k9/sv-SE/full_description.txt @@ -0,0 +1,24 @@ +K-9 Mail är en e-postklient med öppen källkod som fungerar med de flesta e-postleverantörer. + +Funktioner + +* Stöder flera konton +* Samlad inkorg +* Sekretessvänlig (ingen spårning alls, ansluter endast till din e-postleverantör) +* Automatisk bakgrundssynkronisering eller push-meddelanden +* Lokal sökning och sökning på serversidan +* OpenPGP e-postkryptering (PGP/MIME) + +Installera appen OpenKeychain: Easy PGP för att kryptera/dekryptera dina e-postmeddelanden med OpenPGP. + + +Support + +Om du har problem med K-9 Mail, be om hjälp i vårt supportforum. + + +Vill du hjälpa till? + +K-9 Mail är ett gemenskapsutvecklat projekt. Om du är intresserad av att hjälpa till att förbättra appen, gå med oss! +Du kan hitta vår buggspårare, källkod och wiki på https://github.com/thunderbird/thunderbird-android . +Vi är alltid glada att välkomna nya utvecklare, designers, dokumenterare, översättare, bugstriagrar och vänner. diff --git a/app-metadata/com.fsck.k9/tr/changelogs/37015.txt b/app-metadata/com.fsck.k9/tr/changelogs/37015.txt index 5ebfd6fd755..b3adda94f4e 100644 --- a/app-metadata/com.fsck.k9/tr/changelogs/37015.txt +++ b/app-metadata/com.fsck.k9/tr/changelogs/37015.txt @@ -1,8 +1,8 @@ -- Köprüler için içerik menüsüne resim kullanım özelliği eklendi +- Bağlantılar için bağlam menüsüne resim kullanım özelliği eklendi - Açılan ekleri yeni e-postalara iletme özelliği eklendi - Hesap kurulumu sırasında sertifika hata ekranı iyileştirildi - Hesap kurulumu sırasında ayarların içe aktarılması iyileştirildi -- Hesap kurulum kullanıcı arayüzü/deneyimi iyileştirildi +- Hesap kurulumu kullanıcı arayüzü/deneyimi iyileştirildi - Küçük ekranlarda hesap kurulumunun görüntülenmesi iyileştirildi - Hesap sunucu ayarlarını düzenleme kullanıcı arayüzü/deneyimi iyileştirildi - Android 14'te AlarmManager çökmesi düzeltildi diff --git a/app-metadata/com.fsck.k9/tr/changelogs/37016.txt b/app-metadata/com.fsck.k9/tr/changelogs/37016.txt index 6922831d94d..14b5e1f8d21 100644 --- a/app-metadata/com.fsck.k9/tr/changelogs/37016.txt +++ b/app-metadata/com.fsck.k9/tr/changelogs/37016.txt @@ -1,5 +1,5 @@ - Hesap kurulumunda küçük hata düzeltmeleri ve kullanıcı deneyimi iyileştirmeleri - OpenKeychain 6.0.0 ile etkileşimden kaynaklanan bir çökme düzeltildi -- Bir mailto: URI aracılığıyla oluşturma ekranı açılırken konu veya gövde girdi alanlarına odaklan -- Dizgelerin %70'inden azı çevrildiği için İbranice ve Korece çeviriler kaldırıldı. Çevirileri güncellemek için gönüllülere her zaman ihtiyacımız var! -- Kalan çeviriler güncellendi +- mailto: URI'leri aracılığıyla oluşturma ekranı açılırken artık konu veya gövde alanlarına odaklanılacak +- Dizgelerin %70'inden azı çevrildiği için İbranice ve Korece çeviriler kaldırıldı. Çevirileri güncelleyecek gönüllüleri kapımız daima açık! +- Çeviriler güncellendi diff --git a/app-metadata/com.fsck.k9/tr/changelogs/37017.txt b/app-metadata/com.fsck.k9/tr/changelogs/37017.txt index f5545733f38..89d6bb3e242 100644 --- a/app-metadata/com.fsck.k9/tr/changelogs/37017.txt +++ b/app-metadata/com.fsck.k9/tr/changelogs/37017.txt @@ -1,5 +1,5 @@ - Otomatik yapılandırma keşif adımlarının sırası düzeltildi -- Öntanımlı gösterim sayısı 100 olarak değiştirildi -- Yeni hesaplar için bildirimler öntanımlı olarak etkinleştirildi +- Varsayılan gösterim sayısı 100 olarak değiştirildi +- Yeni hesaplar için bildirimler varsayılan olarak etkinleştirildi - İstenmeyen yan etkiler nedeniyle K-9 Mail 6.716'da tanıtılan mailto: URI'leri işleme değişikliği geri alındı - İleti görünümünde "kişileri renklendir" özelliğinin tekrar çalışması için hata düzeltildi diff --git a/app-metadata/com.fsck.k9/tr/changelogs/39001.txt b/app-metadata/com.fsck.k9/tr/changelogs/39001.txt index 2e61712485a..a97a9662bdd 100644 --- a/app-metadata/com.fsck.k9/tr/changelogs/39001.txt +++ b/app-metadata/com.fsck.k9/tr/changelogs/39001.txt @@ -1 +1 @@ -- Mesaj oluşturmak için ekran açıldığında oluşan çökme düzeltildi +- İleti oluşturmak için ekran açıldığında oluşan çökme düzeltildi diff --git a/app-metadata/com.fsck.k9/tr/full_description.txt b/app-metadata/com.fsck.k9/tr/full_description.txt index 3b777a09b64..71debda63b9 100644 --- a/app-metadata/com.fsck.k9/tr/full_description.txt +++ b/app-metadata/com.fsck.k9/tr/full_description.txt @@ -1,24 +1,24 @@ -K-9 Posta, her e-posta sağlayıcısı ile çalışan açık kaynaklı bir e-posta istemcisidir. +K-9 Posta, her e-posta sağlayıcısıyla çalışan açık kaynaklı bir e-posta istemcisidir. Özellikler * Çoklu hesap desteği * Birleşik gelen kutusu -* Gizlilik dostu (hiçbir şekilde izleme yok, yalnızca e-posta sağlayıcınıza bağlanır) -* Otomatik arka planda eşzamanlama veya anlık bildirimler -* Yerel ve sunucu tarafında arama +* Gizlilik dostu (Hiçbir şekilde sizi izlemez, yalnızca e-posta sağlayıcınıza bağlanır) +* Arka planda otomatik senkronizasyon veya anlık bildirimler +* Yerel ve sunucuda arama * OpenPGP e-posta şifrelemesi (PGP/MIME) -E-postalarınızı OpenPGP kullanarak şifrelemek/şifresini çözmek için OpenKeychain: Kolay PGP uygulamasını kurun. +E-postalarınızı OpenPGP kullanarak şifrelemek ve çözmek isterseniz OpenKeychain: Kolay PGP uygulamasını yüklemelisiniz. Destek -K-9 Mail ile ilgili sorun yaşıyorsanız, destek forumumuzda yardım isteyin. +K-9 Posta ile ilgili sorun yaşıyorsanız destek forumumuzda yardım isteyebilirsiniz. Yardım etmek ister misiniz? -K-9 Posta topluluk tarafından geliştirilen bir projedir. Uygulamayı geliştirmeye yardım etmekle ilgileniyorsanız, lütfen bize katılın! -Hata izleyicimizi, kaynak kodumuzu ve wiki sayfamızı https://github.com/thunderbird/thunderbird-android adresinde bulabilirsiniz. -Yeni geliştiricileri, tasarımcıları, belgeleyicileri, çevirmenleri, hata takipçilerini ve arkadaşlarımızı ağırlamaktan her zaman mutluluk duyarız. +K-9 Posta topluluk tarafından geliştirilen bir projedir. Uygulamayı geliştirmemizew yardım etmek isterseniz lütfen aramıza katılın! +Hata izleyicimizi, kaynak kodlarımızı ve wiki sayfamızı https://github.com/thunderbird/thunderbird-android adresinde bulabilirsiniz. +Yeni geliştiricileri, tasarımcıları, belgeleyicileri, çevirmenleri, hata takipçilerini ve arkadaşlarımızı aramızda görmekten her zaman mutluluk duyarız. diff --git a/app-metadata/com.fsck.k9/tr/short_description.txt b/app-metadata/com.fsck.k9/tr/short_description.txt index ca5d05b7483..2453dd72988 100644 --- a/app-metadata/com.fsck.k9/tr/short_description.txt +++ b/app-metadata/com.fsck.k9/tr/short_description.txt @@ -1 +1 @@ -Tam özellikli e-posta istemcisi +Tam donanımlı e-posta istemcisi diff --git a/app-metadata/com.fsck.k9/uk/title.txt b/app-metadata/com.fsck.k9/uk/title.txt new file mode 100644 index 00000000000..f6c47543be4 --- /dev/null +++ b/app-metadata/com.fsck.k9/uk/title.txt @@ -0,0 +1 @@ +K-9 Mail diff --git a/app-metadata/com.fsck.k9/zh-CN/title.txt b/app-metadata/com.fsck.k9/zh-CN/title.txt index 0148cbe64cf..f6c47543be4 100644 --- a/app-metadata/com.fsck.k9/zh-CN/title.txt +++ b/app-metadata/com.fsck.k9/zh-CN/title.txt @@ -1 +1 @@ -K-9 邮件 +K-9 Mail diff --git a/app-metadata/net.thunderbird.android.beta/cs-CZ/full_description.txt b/app-metadata/net.thunderbird.android.beta/cs-CZ/full_description.txt new file mode 100644 index 00000000000..2f54bfca122 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/cs-CZ/full_description.txt @@ -0,0 +1,37 @@ +Pomozte nám, aby bylo další vydání Thunderbirdu co nejúžasnější stažením Thunderbird Beta a získáním předběžného přístupu k nejnovějším funkcím a oprpavám chyb před jejich oficiálním vydáním. Vaše testování a zpětná vazba jsou důležité, proto nám prosím hlaste chyby, nedodělky a podělte se s námi o své názory! + +Náš systém sledování chyb, zdrojový kód a wiki najdete na stránce https://github.com/thunderbird/thunderbird-android. + +Vždy rádi přivítáme nové vývojáře, designéry, dokumentátory, překladatele, řešitele chyb a přátele. Navštivte nás na webu https://thunderbird.net/participate a začněte. + +Thunderbird je výkonná e-mailová aplikace zaměřená na ochranu soukromí. Snadno spravujte několik e-mailových účtů z jedné aplikace s možností jednotné schránky pro maximální produktivitu. Aplikace je postavena na open-source technologii a je podporována specializovaným týmem vývojářů spolu s celosvětovou komunitou dobrovolníků, a proto s vašimi soukromými údaji nikdy nezachází jako s produktem. Je podporována výhradně finančními příspěvky našich uživatelů, takže už nikdy neuvidíte reklamy přimíchané do svých e-mailů. + +Co aplikace umí +
    +
  • Zbavte se více aplikací a webové pošty. Používejte jednu aplikaci s volitelnou jednotnou schránkou, která vám pomůže zvládnout celý den.
  • +
  • Užijte si e-mailový klient zaměřený na ochranu soukromí, který nikdy nesbírá ani neprodává vaše osobní údaje. Přímo vás propojíme s vaším poskytovatelem e-mailu. Nic víc!
  • +
  • Posuňte své soukromí na vyšší úroveň pomocí šifrování e-mailů pomocí OpenPGP (PGP/MIME) s aplikací „OpenKeychain“, která šifruje a dešifruje vaše zprávy.
  • +
  • Nastavte si, zda chcete synchronizovat svou poštu ihned, v nastavených intervalech nebo na vyžádání. Jak chcete kontrolovat svůj e-mail je jen na vás!
  • +
  • Najděte své důležité zprávy s lokálním i serverovým vyhledáváním.
  • +
+ +Kompatibilita +
    +
  • Thunderbird pracuje s protokoly IMAP a POP3 a podporuje širokou škálu poskytovatelů e-mailových služeb, včetně Gmailu, Outlooku, Yahoo Mailu, iCloudu a dalších.
  • +
+ +Proč používat Thunderbird +
    +
  • Důvěryhodné jméno v e-mailu již více než 20 let - nyní i pro Android.
  • +
  • Thunderbird je plně financován z dobrovolných příspěvků našich uživatelů. Vaše osobní údaje s nikým nesdílíme. Nikdy nejste produktem.
  • +
  • Vytvořeno týmem, který má rád efektivitu stejně, jako vy. Chceme, abyste používáním aplikace strávili co nejméně času a přitom získali maximum.
  • +
  • Díky přispěvatelům z celého světa byl Thunderbird pro Android přeložen do více než 20 jazyků.
  • +
  • Thunderbird je součástí MZLA Technologies Corporation, dceřiné společnosti plně vlastněné Mozilla Foundation.
  • +
+ +Open-source a komunitní +
    +
  • Thunderbird je zdarma a open-source, což znamená, že jeho kód je k dispozici k nahlédnutí, úpravám, používání a volnému sdílení. Jeho licence také zaručuje, že bude zdarma navždy. Thunderbird můžete považovat za dar tisíců přispěvatelů pro vás.
  • +
  • Vyvíjíme se otevřeně, s pravidelnými a transparentními aktualizacemi na našem blogu a v e-mailových zpravodajích.
  • +
  • Naši uživatelskou podporu zajišťuje globální komunita. Najděte odpovědi, které potřebujete, nebo se zapojte do role přispěvatele – ať už jde o zodpovídání otázek, překládání aplikace nebo vyprávění přátelům a rodině o Thunderbirdu.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/cs-CZ/short_description.txt b/app-metadata/net.thunderbird.android.beta/cs-CZ/short_description.txt new file mode 100644 index 00000000000..a59edf750f2 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/cs-CZ/short_description.txt @@ -0,0 +1 @@ +Thunderbird je 100% open-source e-mailová aplikace zaměřená na ochranu soukromí. diff --git a/app-metadata/net.thunderbird.android.beta/cs-CZ/title.txt b/app-metadata/net.thunderbird.android.beta/cs-CZ/title.txt new file mode 100644 index 00000000000..8366302c83d --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/cs-CZ/title.txt @@ -0,0 +1 @@ +Thunderbird Beta pro testery diff --git a/app-metadata/net.thunderbird.android.beta/de-DE/short_description.txt b/app-metadata/net.thunderbird.android.beta/de-DE/short_description.txt new file mode 100644 index 00000000000..458e18e8192 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/de-DE/short_description.txt @@ -0,0 +1 @@ +Thunderbird ist eine 100 % quelloffene, datenschutzfreundliche E-Mail-App. diff --git a/app-metadata/net.thunderbird.android.beta/de-DE/title.txt b/app-metadata/net.thunderbird.android.beta/de-DE/title.txt new file mode 100644 index 00000000000..5ccc48a683e --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/de-DE/title.txt @@ -0,0 +1 @@ +Thunderbird Beta für Tester diff --git a/app-metadata/net.thunderbird.android.beta/es-ES/full_description.txt b/app-metadata/net.thunderbird.android.beta/es-ES/full_description.txt new file mode 100644 index 00000000000..f9817bed7aa --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/es-ES/full_description.txt @@ -0,0 +1,37 @@ +Ayude a que la próxima versión de Thunderbird sea lo mejor posible descargando la versión beta de Thunderbird y obteniendo acceso anticipado a las últimas funciones y correcciones de errores antes de que se publiquen oficialmente. Sus pruebas y comentarios son importantes, así que informe errores, problemas y comparta sus opiniones con nosotros. + +Encuentre nuestro rastreador de errores, código fuente y wiki en https://github.com/thunderbird/thunderbird-android . + +Siempre nos complace dar la bienvenida a nuevos desarrolladores, diseñadores, traductores, evaluadores de errores y amigos. Visítenos en https://thunderbird.net/participate para comenzar. + +Thunderbird es una potente aplicación de correo electrónico centrada en la privacidad. Administra fácilmente varias cuentas de correo electrónico desde una sola aplicación, con una opción de Bandeja de entrada unificada para una máxima productividad. Desarrollada con tecnología de código abierto y respaldada por un equipo dedicado de desarrolladores junto con una comunidad global de voluntarios, Thunderbird nunca trata tus datos privados como un producto. Se sustenta únicamente con contribuciones financieras de nuestros usuarios, por lo que nunca volverás a ver anuncios mezclados con tus correos electrónicos. + + ¿Qué puedes hacer? +
    +
  • Olvídate de las múltiples aplicaciones y del correo web. Utiliza una sola aplicación, con una bandeja de entrada unificada opcional, para afrontar tu día.
  • +
  • Disfruta de un cliente de correo electrónico que respeta la privacidad y que nunca recopila ni vende tus datos personales. Te conectamos directamente con tu proveedor de correo electrónico. ¡Eso es todo!
  • +
  • Lleve su privacidad al siguiente nivel utilizando el cifrado de correo electrónico OpenPGP (PGP/MIME) con la aplicación “OpenKeychain”, para cifrar y descifrar sus mensajes.
  • +
  • Elige sincronizar tu correo electrónico al instante, a intervalos establecidos o cuando lo necesites. ¡Tú decides cómo quieres consultar tu correo electrónico!
  • +
  • Encuentre sus mensajes importantes utilizando la búsqueda local y del lado del servidor.
  • +
+ + Compatibilidad +
    +
  • Thunderbird funciona con los protocolos IMAP y POP3 y es compatible con una amplia gama de proveedores de correo electrónico, incluidos Gmail, Outlook, Yahoo Mail, iCloud y más.
  • +
+ +¿ Por qué utilizar Thunderbird ? +
    +
  • El nombre de confianza en correo electrónico durante más de 20 años: ahora en Android.
  • +
  • Thunderbird se financia en su totalidad con contribuciones voluntarias de nuestros usuarios. No extraemos sus datos personales. Usted nunca es el producto.
  • +
  • Hecho por un equipo que se preocupa tanto por la eficiencia como tú. Queremos que utilices la aplicación lo menos posible y obtengas el máximo beneficio.
  • +
  • Con colaboradores de todo el mundo, Thunderbird para Android ha sido traducido a más de 20 idiomas.
  • +
  • Con el apoyo de MZLA Technologies Corporation, una subsidiaria de propiedad absoluta de la Fundación Mozilla.
  • +
+ +Código abierto y comunidad +
    +
  • Thunderbird es gratuito y de código abierto, lo que significa que su código está disponible para verlo, modificarlo, usarlo y compartirlo libremente. Su licencia también garantiza que será gratuito para siempre. Puedes pensar en Thunderbird como un regalo de miles de colaboradores para ti.
  • +
  • Nos desarrollamos de forma abierta con actualizaciones periódicas y transparentes en nuestro blog y listas de correo.
  • +
  • Nuestro servicio de asistencia al usuario está a cargo de nuestra comunidad global. Encuentra las respuestas que necesitas o asume el rol de colaborador, ya sea respondiendo preguntas, traduciendo la aplicación o contándoles a tus amigos y familiares sobre Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/es-ES/short_description.txt b/app-metadata/net.thunderbird.android.beta/es-ES/short_description.txt new file mode 100644 index 00000000000..6b88e2fd7c7 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/es-ES/short_description.txt @@ -0,0 +1 @@ +Thunderbird es una aplicación de correo electrónico 100% de código abierto y centrada en la privacidad. diff --git a/app-metadata/net.thunderbird.android.beta/es-ES/title.txt b/app-metadata/net.thunderbird.android.beta/es-ES/title.txt new file mode 100644 index 00000000000..099f6a55ff9 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/es-ES/title.txt @@ -0,0 +1 @@ +Versión beta de Thunderbird para testeadores diff --git a/app-metadata/net.thunderbird.android.beta/et/short_description.txt b/app-metadata/net.thunderbird.android.beta/et/short_description.txt new file mode 100644 index 00000000000..da57506adc2 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/et/short_description.txt @@ -0,0 +1 @@ +Thunderbird on avatud tarkvaral põhinev ja privaatsusest lähtuv e-posti klient. diff --git a/app-metadata/net.thunderbird.android.beta/et/title.txt b/app-metadata/net.thunderbird.android.beta/et/title.txt new file mode 100644 index 00000000000..addd20d4c90 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/et/title.txt @@ -0,0 +1 @@ +Thunderbird: beetaversioon diff --git a/app-metadata/net.thunderbird.android.beta/fa-IR/full_description.txt b/app-metadata/net.thunderbird.android.beta/fa-IR/full_description.txt new file mode 100644 index 00000000000..a74d12b72e8 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fa-IR/full_description.txt @@ -0,0 +1,37 @@ +با دانلود بتای تاندربرد و دسترسی زودهنگام به آخرین ویژگی‌ها و رفع اشکال‌ها قبل از انتشار رسمی، کمک کنید تا نسخه بعدی تاندربرد عالی‌ترین باشد. آزمایش و بازخورد شما مهم است، بنابراین لطفاً اشکالات، ناهنجاری‌های احتمالی را گزارش کنید و نظرات خود را با ما در میان بگذارید! + +دنبال‌کننده اشکالات، کد منبع و ویکی را در این آدرس پیدا کنید https://github.com/thunderbird/thunderbird-android. + +ما همیشه خوشحالیم که از توسعه دهندگان، طراحان، مستندسازان، مترجمان، گزارش‌کنندگان اشکال و دوستان جدید استقبال کنیم. جهت شروع از https://thunderbird.net/participate بازدید کنید. + +تاندربرد یک برنامه رایانامه قدرتمند و متمرکز بر حریم خصوصی است. با استفاده از گزینه صندوق ورودی یکپارچه برای حداکثر بهره‌وری، به راحتی چندین حساب رایانامه را از یک برنامه مدیریت کنید. تاندربرد که بر اساس فناوری متن‌باز ساخته شده و توسط یک تیم اختصاصی از توسعه دهندگان در کنار یک جامعه سراسری از داوطلبان پشتیبانی می شود، هرگز با داده های خصوصی شما به عنوان یک محصول رفتار نمی کند. صرفاً توسط کمک‌های مالی کاربران ما پشتیبانی می‌شود، بنابراین دیگر هیچ‌وقت مجبور نخواهید شد که دوباره تبلیغات را در ترکیب با رایانامه‌هایتان مشاهده کنید. + +کارهایی که می‌توانید انجام دهید +
    +
  • برنامه‌ها و وب‌های متعدد مرتبط با رایانامه را کنار بگذارید. از یک برنامه، با صندوق ورودی یکپارچه اختیاری، استفاده کنید تا یک روز با تمام قدرت داشته باشید.
  • +
  • از یک کارخواه رایانامه دوستدار حریم خصوصی که هرگز داده های شخصی شما را جمع آوری نمی‌کند یا نمی‌فروشد، لذت ببرید. ما مستقیماً شما را به ارائه‌دهنده‌های خدمت رایانامه متصل می کنیم. فقط همین!
  • +
  • با استفاده از رمزگذاری رایانامه OpenPGP (PGP/MIME) با برنامه OpenKeychain، برای رمزگذاری و رمزگشایی پیام‌های خود، حریم خصوصی خود را به سطح بالاتر ببرید.
  • +
  • انتخاب کنید تا رایانامه خود را فوراً، در فواصل زمانی تعیین شده یا بر اساس درخواست همگام کنید. هر طور که بخواهید رایانامه خود را چک کنید، این به شما بستگی دارد!
  • +
  • پیام‌های مهم خود را با استفاده از جستجوی محلی و برخط پیدا کنید.
  • +
+ +سازگاری +
    +
  • تاندربرد با پروتکل های IMAP و POP3 کار می کند و از طیف گسترده ای از ارائه دهندگان رایانامه از جمله Gmail، Outlook، Yahoo Mail، iCloud و غیره پشتیبانی می کند.
  • +
+ +چرا از تاندربرد استفاده کنیم +
    +
  • نام قابل اعتماد برای رایانامه در طول بیش از ۲۰ سال - اکنون در اندروید.
  • +
  • تاندربرد به طور کامل از طریق مشارکت های داوطلبانه کاربران ما حمایت و تأمین می شود. ما اطلاعات شخصی شما را استخراج نمی کنیم. شما هرگز به عنوان محصول مورد بهره‌برداری قرار نمی‌گیرید.
  • +
  • ساخته شده توسط تیمی که به اندازه شما کارآمد فکر می کند. ما می خواهیم که شما کمترین زمان خود را برای استفاده از برنامه صرف کنید و در ازای آن بیشترین آورده را داشته باشید.
  • +
  • با مشارکت کنندگان از سراسر جهان، تاندربرد برای اندروید به بیش از ۲۰ زبان ترجمه شده است.
  • +
  • توسط MZLA Technologies Corporation، یک شرکت تابعه کاملا متعلق به بنیاد موزیلا پشتیبانی می شود.
  • +
+ +متن‌باز بودن و جامعه +
    +
  • تاندربرد رایگان و منبع باز است، به این معنی که کد آن برای دیدن، تغییر، استفاده و اشتراک‌گذاری آزادانه در دسترس است. مجوز آن همچنین تضمین می کند که برای همیشه آزاد خواهد بود. شما می‌توانید تاندربرد را به عنوان هدیه‌ای از جانب هزاران مشارکت‌کننده در نظر بگیرید.
  • +
  • توسعه‌ ما در فضای باز با به‌روزرسانی‌های منظم و شفاف در وبلاگ و لیست‌های پستی خود می‌باشد.
  • +
  • پشتیبانی کاربر به وسیله جامعه سراسری ما قدرت می‌گیرد. پاسخ‌های مورد نیاز خود را بیابید، یا به عنوان یک مشارکت‌کننده فعالیت کنید که پاسخ دادن به سؤالات، ترجمه برنامه، یا گفتگو با دوستان و خانواده‌تان درباره تاندربرد، می‌تواند باشد.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/fa-IR/short_description.txt b/app-metadata/net.thunderbird.android.beta/fa-IR/short_description.txt new file mode 100644 index 00000000000..30d97ce48fc --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fa-IR/short_description.txt @@ -0,0 +1 @@ +تاندربرد کارهٔ رایانامه‌ای ۱۰۰٪ نرم‌افزار آزاد و با تمرکز بر محرمانگی است. diff --git a/app-metadata/net.thunderbird.android.beta/fa-IR/title.txt b/app-metadata/net.thunderbird.android.beta/fa-IR/title.txt new file mode 100644 index 00000000000..d34abf36f64 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fa-IR/title.txt @@ -0,0 +1 @@ +تاندربرد آزمایشی diff --git a/app-metadata/net.thunderbird.android.beta/fr-FR/full_description.txt b/app-metadata/net.thunderbird.android.beta/fr-FR/full_description.txt new file mode 100644 index 00000000000..8ed8ed3ca72 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fr-FR/full_description.txt @@ -0,0 +1,37 @@ +Aidez-nous à rendre la prochaine version de Thunderbird aussi fantastique que possible en téléchargeant Thunderbird version bêta et en profitant d’un accès anticipé aux dernières fonctions et correctifs de bogues avant leur sortie officielle. Vos tests et vos commentaires sont importants. Signalez-nous les bogues, les imperfections et parlez-nous de votre expérience. + +Vous trouverez notre système de suivi des bogues, notre code source et notre wiki sur https://github.com/thunderbird/thunderbird-android. + +Nous accueillons avec plaisir les nouveaux développeurs, concepteurs, documentalistes, traducteurs, trieurs des bogues et les amis. Rendez-nous visitez sur https://thunderbird.net/participate pour commencer. + +Thunderbird est une appli de courriel puissante qui protège vos renseignements personnels. Gérez sans effort plusieurs comptes de courriel avec une seule appli, avec une option de boîte de réception unifiée pour une productivité maximale. Construite sur une technologie à source ouverte et développée par une équipe de développeurs dévoués aux côtés d’une communauté mondiale de bénévoles, Thunderbird ne traite jamais vos données personnelles comme un produit. Entièrement financées par les dons de nos utilisateurs, vous ne verrez plus jamais de publicités mélangées à vos courriels. + +Ce que vous pouvez faire +
    +
  • Abandonnez les autres applis et le courriel Web. Une seule appli pour gérer vos courriels, avec une boîte de réception unifiée en option.
  • +
  • Profitez d’un client de courriel qui protège vos renseignements personnels sans jamais les recueillir ni les vendre. Nous vous connectons directement à votre service de courriel, c’est tout.
  • +
  • Protégez davantage votre vie privée en chiffrant vos courriels avec OpenPGP (PGP/MIME) grâce à l’appli « OpenKeychain », pour un chiffrement et déchiffrement transparent de vos courriels.
  • +
  • Choisissez de synchroniser vos courriels instantanément, périodiquement ou à la demande. Vous décidez comment consulter vos courriels.
  • +
  • Trouvez vos messages importants grâce à la recherche locale et côté serveur.
  • +
+ +Compatibilité +
    +
  • Thunderbird fonctionne avec les protocoles IMAP et POP3, compatible avec un large éventail de services de courriel dont Gmail, Outlook, Yahoo Mail, iCloud, et d’autres.
  • +
+ +Raisons d’utiliser Thunderbird +
    +
  • La marque de confiance en matière de courriel depuis plus de 20 ans, maintenant sur Android.
  • +
  • Thunderbird est entièrement financée par les dons de nos utilisateurs. Nous n’exploitons pas vos données personnelles. Vous n’êtes jamais le produit.
  • +
  • Conçue par une équipe aussi soucieuse d’efficacité que vous. Nous voulons que vous passiez un minimum de temps à utiliser l’appli et en profitiez au maximum.
  • +
  • Nos collaborateurs du monde entier traduisent Thunderbird pour Android en plus de 20 langues.
  • +
  • Soutenue par MZLA Technologies Corporation, une filiale à part entière de la Fondation Mozilla.
  • +
+ +Code source ouvert et communauté +
    +
  • Thunderbird est gratuite et à source ouverte. Son code peut être consulté, modifié, utilisé et partagé librement. Sa licence garantit que l’appli sera toujours gratuite. C’est un cadeau des milliers de contributeurs à vous.
  • +
  • Nous développons au grand jour, avec des mises à jour régulières et transparentes sur notre blogue et nos listes de diffusion.
  • +
  • L’assistance aux utilisateurs provient de notre communauté mondiale. Trouvez les réponses dont vous avez besoin ou contribuez en répondant aux questions, traduisant l’appli, ou en parlant de Thunderbird à vos amis et à votre famille.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/fr-FR/short_description.txt b/app-metadata/net.thunderbird.android.beta/fr-FR/short_description.txt new file mode 100644 index 00000000000..e9c5d197d32 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fr-FR/short_description.txt @@ -0,0 +1 @@ +Thunderbird, une appli de courriel à code source ouvert qui protège vos données. diff --git a/app-metadata/net.thunderbird.android.beta/fr-FR/title.txt b/app-metadata/net.thunderbird.android.beta/fr-FR/title.txt new file mode 100644 index 00000000000..25e13a5d56e --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fr-FR/title.txt @@ -0,0 +1 @@ +Thunderbird bêta pour testeurs diff --git a/app-metadata/net.thunderbird.android.beta/fy/full_description.txt b/app-metadata/net.thunderbird.android.beta/fy/full_description.txt new file mode 100644 index 00000000000..fd0765c9ddb --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fy/full_description.txt @@ -0,0 +1,37 @@ +Help mei om de folgjende Thunderbird-útjefte sa geweldich as mooglik te meitsjen troch Thunderbird Beta te downloaden en al betiid tagong te krijen ta de lêste funksjes en bugfixes, eardat se offisjeel útjûn wurde. Jo testen en kommentaar binne wichtich, dus rapportearje bugs, skerpe rânen, en diel jo tinzen mei ús! + +Besjoch ús bugtracker, boarnekoade, en wiki op https://github.com/thunderbird/thunderbird-android. + +Wy wolle altyd graach nije ûntwikkelers, ûntwerpers, dokumintalisten, oersetters, bugûndersikers en freonen wolkom hjitte. Besykje us op https://thunderbird.net/participate om te starten. + +Thunderbird is in krêftich, op privacy rjochte e-mail-app. Behear maklik meardere accounts fan ien app út, mei in opsje foar in Gearfoege Postfek YN foar maksimale produktiviteit. Boud op iepenboarnetechnology en stipe troch in tawijd team fan ûntwikkelers tegearre mei in wrâldwide mienskip fan frijwilligers, behannelet Thunderbird jo priveegegevens nea as in produkt. Omdat wy folslein stipe wurde troch finansjele donaasjes fan ús brûkers, hoege jo nea mear advertinsjes te sjen tusken jo e-mailberjochten. + +Wat kinne jo dwaan +
    +
  • Stopje mei it gebrûk fan meardere apps en webmail. Brûk ien app, mei opsjoneel in Gearfoege Postfek YN, om jo troch de dei te helpen.
  • +
  • Genietsje fan in privacyfreonlike e-mailclient dy’t nea jo persoanlike gegevens sammelet of ferkeapet. Wy ferbine streekrjocht mei jo e-mailprovider. Dat is it!
  • +
  • Bring jo privacy nei in noch heger nivo troch gebrûk te meitsjen fan OpenPGP e-mailfersifering (PGP/MIME) mei de ‘OpenKeychain’-app, om jo berjochten te fersiferjen en ûntsiferjen.
  • +
  • Kies derfoar jo e-mailberjochten daliks te syngronisearjen, op fêste tiden, of wannear’t jo mar wolle. Hoe’t jo jo e-mail ek kontrolearje wolle, dat is hielendal oan jo!
  • +
  • Fyn jo wichtige berjochten mei help fan sawol lokaal as op de server sykje.
  • +
+ +Komptabiliteit +
    +
  • Thunderbird wurket mei IMAP- en POP3-protokollen, stipet in breed skala oan e-mailproviders, ynklusyf Gmail, Outlook, Yahoo Mail, iCloud, en mear.
  • +
+ +Wêrom Thunderbird brûke +
    +
  • De fertroude namme yn e-mail foar mear as 20 jier – no op Android.
  • +
  • Thunderbird is folslein finansiere troch frijwillige bydragen fan ús brûkers. Wy sammelje jo persoanlike gegevens net. Jo binne nea it produkt.
  • +
  • Makke troch in team dat krekt sa tinkt oer effisjinsje as jo. Wy wolle dat jo sa min mooglik tiid spandearje oan it gebrûk fan de app, wylst jo it maksimale werom krije.
  • +
  • Mei meiwurkers fan oer de hiele wrâld, wurdt Thunderbird foar Android oerset yn mear as 20 talen.
  • +
  • Stipe troch MZLA Technologies Corporation, in folsleine dochterûndernimming fan de Mozilla Foundation.
  • +
+ +Iepen Boarne en Mienskip +
    +
  • Thunderbird is fergees en iepen boarne, wat betsjut dat de koade beskikber is om te besjen, bewurkjen, brûken en frij te dielen. De lisinsje garandearret ek dat it altyd frij bliuwe sil. Jo kinne Thunderbird beskôgje as in kado oan jo fan tûzenen meiwurkers.
  • +
  • Wy ûntwikkelje yn de iepenheid mei reguliere, transparante fernijingen op ús blog en mailinglisten.
  • +
  • Us brûkersstipe wurdt mooglik makke troch ús wrâldwide mienskip. Fyn de antwurden dy’t jo nedich hawwe, of stap yn de rol fan in meiwurker – oft it no it beäntwurdzjen is fan fragen, it oersetten fan de app, of jo freonen en famylje fertelle oer Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/fy/short_description.txt b/app-metadata/net.thunderbird.android.beta/fy/short_description.txt new file mode 100644 index 00000000000..5097d8a2755 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fy/short_description.txt @@ -0,0 +1 @@ +Thunderbird is in 100% iepen boarne, op privacy rjochte e-mail-app. diff --git a/app-metadata/net.thunderbird.android.beta/fy/title.txt b/app-metadata/net.thunderbird.android.beta/fy/title.txt new file mode 100644 index 00000000000..95ae71eb725 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/fy/title.txt @@ -0,0 +1 @@ +Thunderbird Beta foar testers diff --git a/app-metadata/net.thunderbird.android.beta/ja-JP/full_description.txt b/app-metadata/net.thunderbird.android.beta/ja-JP/full_description.txt new file mode 100644 index 00000000000..08df053c169 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/ja-JP/full_description.txt @@ -0,0 +1,37 @@ +公式リリース前の新機能とバグ修正へ早期アクセスできる Thunderbird Beta をダウンロードして、次の Thunderbird のリリースをできる限り最高なものにする協力をお願いします。あなたのテストとフィードバックはとても重要です。バグ、荒削りな部分のレポートやご意見の共有をよろしくお願いします! + +https://github.com/thunderbird/thunderbird-android でバグトラッカーやソースコード、Wiki を確認できます。 + +開発者、デザイナー、ドキュメントライター、翻訳者、バグハンターと新しい友達はいつでも大歓迎です。参加したい方はまず https://thunderbird.net/participate を確認してください。 + +Thunderbird はプライバシー重視の強力なメールアプリです。効率を最大化する統合受信トレイオプションを使用すれば、複数のメールアカウントを一つのアプリから簡単に管理できます。オープンソースで構築され、ボランティアの国際コミュニティとともに専任の開発者チームがサポートする Thunderbird では、あなたのプライバシーに関わる情報が商品として扱われることは決してありません。ユーザーの寄付のみに支えられているため、メールに広告を混ぜ込んで表示したりしません。 + +できること +
    +
  • アプリやウェブメールの併用にさよなら。一つのアプリに集約できるだけでなく、オプションの統合受信トレイが毎日のお役に立ちます。
  • +
  • 個人データを収集して販売しない、プライバシーを尊重するメールクライアントをお楽しみください。あなたとメールプロバイダーを直接繋ぎます。余計なことはしません。
  • +
  • 「OpenKeychain」アプリを併用すれば、あなたのプライバシーを次の段階に向上させる OpenPGP メール暗号化 (PGP/MIME) を使用したメッセージの暗号化と復号が可能になります。
  • +
  • メールを即時に同期するか、設定した間隔で同期するか、リクエストしたときのみ同期するかはあなたが選択できます。どのようにメールを確認するかはあなたが決められます。
  • +
  • ローカルとサーバー両方を検索して重要なメッセージを見つけられます。
  • +
+ +互換性 +
    +
  • Thunderbird は IMAP と POP3 プロトコルで動作し、Gmail、Outlook、Yahoo Mail、iCloud などを含む幅広いメールプロバイダーに対応します。
  • +
+ +Thunderbird を使う理由 +
    +
  • メールで 20 年以上信頼されてきた名前 - これからは Android にも
  • +
  • Thunderbird の資金はすべてユーザーからの寄付されています。あなたを商品にするために個人データを収集することは決してありません。
  • +
  • あなたと同じくらい効率を重視するチームが開発。アプリを使う時間は最小で、最大の効果を発揮したいと考えています。
  • +
  • 世界中の貢献者が Android 版 Thunderbird を 20 以上の言語に翻訳。
  • +
  • Mozilla Foundation の完全子会社である MZLA Technologies Corporation によってサポート。
  • +
+ +オープンソースのコミュニティ +
    +
  • Thunderbird は自由でオープンソースです。これは、コードを閲覧し、改変し、使用し、自由に共有できることを意味します。このライセンスは永遠に自由であることも保証します。Thunderbird は数千の貢献者からあなたへのギフトと考えてもらうことができます。
  • +
  • 私たちはブログやメーリングリストを活用した定期的かつ透明性を確保した更新によりオープンに開発しています。
  • +
  • ユーザーサポートは国際コミュニティによって提供されています。質問がある場合や、貢献者の一員 - 質問に回答する、アプリを翻訳する、友達や家族に Thunderbird を広める - となりたい場合はご参加ください。
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/ja-JP/short_description.txt b/app-metadata/net.thunderbird.android.beta/ja-JP/short_description.txt new file mode 100644 index 00000000000..04673b6fdc8 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/ja-JP/short_description.txt @@ -0,0 +1 @@ +Thunderbird はプライバシーを重視する 100% オープンソースのメールアプリです。 diff --git a/app-metadata/net.thunderbird.android.beta/ja-JP/title.txt b/app-metadata/net.thunderbird.android.beta/ja-JP/title.txt new file mode 100644 index 00000000000..0d4f6c71fd5 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/ja-JP/title.txt @@ -0,0 +1 @@ +Thunderbird Beta for Testers diff --git a/app-metadata/net.thunderbird.android.beta/lt/short_description.txt b/app-metadata/net.thunderbird.android.beta/lt/short_description.txt new file mode 100644 index 00000000000..b8db2a65ab9 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/lt/short_description.txt @@ -0,0 +1 @@ +„Thunderbird“ – 100 % atvirojo kodo, į privatumą orientuota el. pašto programa. diff --git a/app-metadata/net.thunderbird.android.beta/lt/title.txt b/app-metadata/net.thunderbird.android.beta/lt/title.txt new file mode 100644 index 00000000000..4bce018d78d --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/lt/title.txt @@ -0,0 +1 @@ +„Thunderbird“ beta bandytojams diff --git a/app-metadata/net.thunderbird.android.beta/nl-NL/full_description.txt b/app-metadata/net.thunderbird.android.beta/nl-NL/full_description.txt new file mode 100644 index 00000000000..0a2e7368500 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/nl-NL/full_description.txt @@ -0,0 +1,37 @@ +Help mee om de volgende Thunderbird-uitgave zo geweldig als mogelijk te maken door Thunderbird Beta te downloaden en al vroeg toegang te krijgen tot de laatste functies en bugfixes, voordat ze officieel wordt uitgegeven. Uw testen en feedback zijn belangrijk, dus rapporteer bugs, scherpe randjes, en deel uw gedachten met ons! + +Bekijk onze bugtracker, broncode, en wiki op https://github.com/thunderbird/thunderbird-android. + +We willen altijd graag nieuwe ontwikkelaars, ontwerpers, documentalisten, vertalers, bugonderzoekers en vrienden welkom heten. Bezoek ons op https://thunderbird.net/participate om te starten. + +Thunderbird is een krachtig, op privacy gerichte e-mail-app. Beheer gemakkelijk meerdere accounts vanuit één app, met een optie voor een Samengevoegd Postvak IN voor maximale productiviteit. Gebouwd op opensourcetechnologie en ondersteund door een toegewijd team van ontwikkelaars samen met een wereldwijde gemeenschap van vrijwilligers, behandelt Thunderbird uw privégegevens nooit als een product. Omdat wij volledig ondersteund worden door financiële donaties van onze gebruikers, hoeft u nooit meer advertenties te zien tussen uw e-mailberichten. + +Wat kunt u doen +
    +
  • Stoppen met het gebruik van meerdere apps en webmail. Gebruik één app, met een optioneel Samengevoegd Postvak IN, om u door de dag te helpen.
  • +
  • Geniet van een privacyvriendelijke e-mailclient die nooit uw persoonlijke gegevens verzameld of verkoopt. We verbinden rechtstreeks met uw e-mailprovider. Dat is het!
  • +
  • Breng uw privacy naar een nog hoger niveau door gebruik te maken van OpenPGP e-mailencryptie (PGP/MIME) met de ‘OpenKeychain’-app, om uw berichten te versleutelen en ontcijferen.
  • +
  • Kies ervoor uw e-mailberichten direct te synchroniseren, op gezette tijden, of wanneer u maar wilt. Hoe u uw e-mail ook wilt controleren, dat is helemaal aan u!
  • +
  • Vind uw belangrijke berichten met behulp van zowel lokaal als op de server zoeken.
  • +
+ +Compatibiliteit +
    +
  • Thunderbird werkt met IMAP- en POP3-protocollen, ondersteunt een breed scala aan e-mailproviders, inclusief Gmail, Outlook, Yahoo Mail, iCloud, en meer.
  • +
+ +Waarom Thunderbird gebruiken +
    +
  • De vertrouwde naam in e-mail voor meer dan 20 jaar – nu op Android.
  • +
  • Thunderbird is volledig gefinancierd door vrijwillige bijdragen van onze gebruikers. We verzamelen uw persoonlijke gegevens niet. U bent nooit het product.
  • +
  • Gemaakt door een team dat net zo denkt over efficiency als u. We willen dat u zo weinig mogelijk tijd spendeert aan het gebruik van de app, terwijl u het maximale terugkrijgt.
  • +
  • Met medewerkers van over de hele wereld, wordt Thunderbird voor Android vertaald in meer dan 20 talen.
  • +
  • Ondersteund door MZLA Technologies Corporation, een volledige dochteronderneming van de Mozilla Foundation.
  • +
+ +Open Source en Gemeenschap +
    +
  • Thunderbird is gratis en open source, wat betekent dat de code beschikbaar is om te bekijken, bewerken, gebruiken en vrij te delen. De licentie garandeert ook dat het altijd vrij zal blijven. U kunt Thunderbird beschouwen als een gift aan u van duizenden medewerkers.
  • +
  • We ontwikkelen in de openheid met reguliere, transparante updates op ons blog en mailinglijsten.
  • +
  • Onze gebruikersondersteuning wordt mogelijk gemaakt door onze wereldwijde gemeenschap. Vind de antwoorden die u nodig hebt, of stap in de rol van een medewerker – of het nu het beantwoorden is van vragen, het vertalen van de app, of uw vrienden en familie vertellen over Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/nl-NL/short_description.txt b/app-metadata/net.thunderbird.android.beta/nl-NL/short_description.txt new file mode 100644 index 00000000000..45b1fe0a65b --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/nl-NL/short_description.txt @@ -0,0 +1 @@ +Thunderbird is een 100% open source, op privacy gerichte e-mail-app. diff --git a/app-metadata/net.thunderbird.android.beta/nl-NL/title.txt b/app-metadata/net.thunderbird.android.beta/nl-NL/title.txt new file mode 100644 index 00000000000..f523e6e2d9e --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/nl-NL/title.txt @@ -0,0 +1 @@ +Thunderbird Beta voor testers diff --git a/app-metadata/net.thunderbird.android.beta/nn/full_description.txt b/app-metadata/net.thunderbird.android.beta/nn/full_description.txt new file mode 100644 index 00000000000..ac05433dbc9 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/nn/full_description.txt @@ -0,0 +1,37 @@ +Hjelp oss å gjere neste Thunderbird-utgjeving så god som mogleg med å laste ned Thunderbird Beta, og få tidleg tilgjenge til dei nyaste funksjonane og feilrettingane før dei er offisielt utgjevne. Testinga og tilbakemeldinga di er viktig, så ver vennleg å rapportere feil og røffe kantar, og del meiningane dine med oss! + +Finn vår feilsporar, kjeldekode og wiki på https://github.com/thunderbird/thunderbird-android. + +Me er alltid glade for å ønskje nye utviklarar, designarar, dokumentarmakarar, omsetjarar, feilprioriterarar og vennar velkommen. Besøk oss på https://thunderbird.net/participate for å byrje. + +Thunderbird er ein kraftfull, personvernfokusert e-postapp. Uanstrengt handering av fleire e-postkontar frå ein app, med samla innboks-moglegheit for maksimal produktivitet. Bygd på open kjeldekode teknologi og støtta av eit dedikert team av utviklarar, på sida av eit globalt samfunn av frivillige. Thunderbird behandlar aldri den private dataen din som eit produkt. Utelukkande støtta av økonomiske bidrag frå brukarane våre, så du aldri treng å sjå annonsar blanda med e-postane dine igjen. + +Kva du kan gjere +
    +
  • Dropp fleire appar og webmail. Bruk ein app, med ein valfri samla innboks, for å få deg gjennom dagen.
  • +
  • Nyt ein personversvennleg e-postklient som aldri samlar eller sel dine personlege data. Me koplar deg direkte til din e-posttenar. Det er det!
  • +
  • Ta ditt personvern til neste nivå med å bruke OpenPGP e-postkryptering (PGP/MIME) med “OpenKeychain”-appen, for å kryptere og dekryptere meldingane dine.
  • +
  • Vel å synkronisere dine e-postar umiddelbart, med faste intervall, eller etter førespurnad. Korleis du vil sjekke e-posten din er opp til deg!
  • +
  • Finn dine viktige meldingar med å bruke både lokalt og tenar-side søk.
  • +
+ +Kompatibilitet +
    +
  • Thunderbird fungerer med IMAP- og POP3-protokollar, og støtter eit vidt spenn e-post-tilbydarar som inkluderer Gmail, Outlook, Yahoo Mail, iCloud, og meir.
  • +
+ +Korfor bruke Thunderbird +
    +
  • Det pålitelege namnet innan e-post i over 20 år – no på Android
  • +
  • Thunderbird er fullstendig finansiert av frivillige bidrag frå brukarane våre. Me høstar ikkje din personlege data. Du er aldri produktet.
  • +
  • Laga av eit like effektivitetsfokusert team som deg sjølv. Me ønskjer at du bruker minimal tid på appen og får maksimal verdi i retur.
  • +
  • Med bidragsytarar frå heile verda, har Thunderbird for Android blitt omset til meir enn 20 språk.
  • +
  • Støtta av MZLA Technologies Corporation, eit dotterselskap fullstendig eigd av Mozilla Foundation.
  • +
+ +Open kjeldekode og samfunn +
    +
  • Thunderbird har fri og open kjeldekode, som betyr at koden er tilgjengeleg for å sjå, endre, bruke og dele fritt. Lisensen sikrar at den vil vere fri for alltid. Du kan tenkje på Thunderbird som ei gåve frå tusenar av bidragsytarar til deg.
  • +
  • Me utviklar i det opne, med regelmessige, transparante oppdateringar i vår blogg og våre e-postlister.
  • +
  • Vår brukarstønad er dreven av vårt globale samfunn. Finn svara du treng, og tre inn i rolla som bidragsytar - anten det er for å svare på spørsmål, omsetje appen, eller fortelje dine vennar og familie om Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/nn/short_description.txt b/app-metadata/net.thunderbird.android.beta/nn/short_description.txt new file mode 100644 index 00000000000..f4581dd6fff --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/nn/short_description.txt @@ -0,0 +1 @@ +Thunderbird er ein personvern-fokusert e-post app med 100% open kjeldekode. diff --git a/app-metadata/net.thunderbird.android.beta/nn/title.txt b/app-metadata/net.thunderbird.android.beta/nn/title.txt new file mode 100644 index 00000000000..22c09f41a6a --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/nn/title.txt @@ -0,0 +1 @@ +Thunderbird Beta for testarar diff --git a/app-metadata/net.thunderbird.android.beta/pl-PL/full_description.txt b/app-metadata/net.thunderbird.android.beta/pl-PL/full_description.txt new file mode 100644 index 00000000000..026f1a7477e --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/pl-PL/full_description.txt @@ -0,0 +1,37 @@ +Pomóż uczynić kolejną wersję Thunderbirda tak niesamowitą, jak to możliwe, pobierając wersję beta Thunderbirda i uzyskując wczesny dostęp do najnowszych funkcji i poprawek błędów, zanim zostaną oficjalnie wydane. Twoje testy i opinie są ważne, więc zgłaszaj błędy, niedociągnięcia i dziel się z nami swoimi przemyśleniami! + +Znajdź nasz system śledzenia błędów, kod źródłowy i wiki na https://github.com/thunderbird/thunderbird-android. + +Zawsze chętnie witamy nowych programistów, projektantów, tłumaczy, osoby zajmujące się dokumentacją, segregujących błędy oraz przyjaciół. Odwiedź nas na https://thunderbird.net/participate, aby rozpocząć. + +Thunderbird to potężna, skoncentrowana na prywatności aplikacja pocztowa. Bezproblemowo zarządzaj wieloma kontami e-mail z jednej aplikacji, z opcją zintegrowanej skrzynki odbiorczej dla maksymalnej produktywności. Zbudowana na technologii open source i wspierana przez oddany zespół programistów wraz z globalną społecznością wolontariuszy, Thunderbird nigdy nie traktuje Twoich prywatnych danych jako produktu. Wspierany wyłącznie dzięki wkładom finansowym od naszych użytkowników, więc nigdy więcej nie zobaczysz reklam w swoich e-mailach. + +Co możesz zrobić +
    +
  • Porzuć wiele aplikacji i pocztę w przeglądarce. Używaj jednej aplikacji z opcjonalną zintegrowaną skrzynką odbiorczą przez cały czas.
  • +
  • Ciesz się dbającym o prywatności klientem poczty e-mail, który nigdy nie zbiera ani nie sprzedaje Twoich danych osobowych. Łączymy Cię bezpośrednio z Twoim dostawcą poczty e-mail. To wszystko!
  • +
  • Przenieś swoją prywatność na wyższy poziom, używając szyfrowania wiadomości e-mail OpenPGP (PGP/MIME) z aplikacją „OpenKeychain”, aby szyfrować i odszyfrowywać wiadomości.
  • +
  • Wybierz synchronizację wiadomości e-mail natychmiast, w określonych odstępach czasu lub na żądanie. Jakkolwiek chcesz sprawdzić swoją pocztę, to zależy od Ciebie!
  • +
  • Znajdź ważne wiadomości, korzystając zarówno z wyszukiwania lokalnego, jak i po stronie serwera.
  • +
+ +Zgodność +
    +
  • Thunderbird współpracuje z protokołami IMAP i POP3, obsługując szeroką gamę dostawców poczty e-mail, w tym Gmail, Outlook, Yahoo Mail, iCloud i inne.
  • +
+ +Dlaczego warto używać Thunderbirda +
    +
  • Zaufana nazwa w dziedzinie poczty e-mail od ponad 20 lat — teraz na Androidzie.
  • +
  • Thunderbird jest w całości finansowany z dobrowolnych składek naszych użytkowników. Nie wydobywamy Twoich danych osobowych. Nigdy nie jesteś produktem.
  • +
  • Stworzony przez zespół, który — tak jak Ty — jest nastawiony na wydajność. Chcemy, aby użytkownicy spędzali jak najmniej czasu na korzystaniu z aplikacji, otrzymując w zamian jak najwięcej.
  • +
  • Dzięki współpracownikom z całego świata Thunderbird na Androida został przetłumaczony na ponad 20 języków.
  • +
  • Obsługiwany przez MZLA Technologies Corporation, spółkę zależną w całości należącą do Mozilla Foundation.
  • +
+ +Oprogramowanie typu open source i społeczność +
    +
  • Thunderbird jest darmowy i ma otwarte oprogramowanie, co oznacza, że jego kod można przeglądać, modyfikować, używać i udostępniać za darmo. Jego licencja zapewnia również, że będzie darmowy na zawsze. Możesz myśleć o aplikacji Thunderbird jako o darze od tysięcy współpracowników dla Ciebie.
  • +
  • Rozwijamy się w sposób otwarty, regularnie zamieszczając przejrzyste aktualizacje na naszym blogu i listach mailingowych.
  • +
  • Nasze wsparcie użytkowników jest obsługiwane przez naszą globalną społeczność. Znajdź odpowiedzi, których potrzebujesz, lub wciel się w rolę współautora — czy to odpowiadając na pytania, tłumacząc aplikację, czy opowiadając znajomym i rodzinie o aplikacji Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/pl-PL/short_description.txt b/app-metadata/net.thunderbird.android.beta/pl-PL/short_description.txt new file mode 100644 index 00000000000..0019c6b4c11 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/pl-PL/short_description.txt @@ -0,0 +1 @@ +Thunderbird to aplikacja pocztowa w 100% otwartoźródłowa i dbająca o prywatność. diff --git a/app-metadata/net.thunderbird.android.beta/pl-PL/title.txt b/app-metadata/net.thunderbird.android.beta/pl-PL/title.txt new file mode 100644 index 00000000000..541d9b4b286 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/pl-PL/title.txt @@ -0,0 +1 @@ +Thunderbird Beta dla testerów diff --git a/app-metadata/net.thunderbird.android.beta/pt-BR/short_description.txt b/app-metadata/net.thunderbird.android.beta/pt-BR/short_description.txt new file mode 100644 index 00000000000..a798d17882b --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/pt-BR/short_description.txt @@ -0,0 +1 @@ +O Thunderbird é um app de e-mail focado na privacidade 100% código aberto. diff --git a/app-metadata/net.thunderbird.android.beta/pt-BR/title.txt b/app-metadata/net.thunderbird.android.beta/pt-BR/title.txt new file mode 100644 index 00000000000..3e5f56b0431 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/pt-BR/title.txt @@ -0,0 +1 @@ +Thunderbird Beta para Testes diff --git a/app-metadata/net.thunderbird.android.beta/ro/short_description.txt b/app-metadata/net.thunderbird.android.beta/ro/short_description.txt new file mode 100644 index 00000000000..9b49c040c4c --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/ro/short_description.txt @@ -0,0 +1 @@ +Thunderbird este o aplicație de poștă electronică 100% cu cod sursă deschis, axată pe confidențialitate. diff --git a/app-metadata/net.thunderbird.android.beta/ro/title.txt b/app-metadata/net.thunderbird.android.beta/ro/title.txt new file mode 100644 index 00000000000..81ba048adf2 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/ro/title.txt @@ -0,0 +1 @@ +Thunderbird Beta pentru cei dispuși să riște pentru a testa lucruri noi diff --git a/app-metadata/net.thunderbird.android.beta/ru-RU/short_description.txt b/app-metadata/net.thunderbird.android.beta/ru-RU/short_description.txt new file mode 100644 index 00000000000..113178cf1d3 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/ru-RU/short_description.txt @@ -0,0 +1 @@ +Thunderbird — 100% открытый приватный почтовый клиент. diff --git a/app-metadata/net.thunderbird.android.beta/ru-RU/title.txt b/app-metadata/net.thunderbird.android.beta/ru-RU/title.txt new file mode 100644 index 00000000000..ef2b9e23c34 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/ru-RU/title.txt @@ -0,0 +1 @@ +Thunderbird Beta для тестеров diff --git a/app-metadata/net.thunderbird.android.beta/sv-SE/full_description.txt b/app-metadata/net.thunderbird.android.beta/sv-SE/full_description.txt new file mode 100644 index 00000000000..9d983d885c3 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/sv-SE/full_description.txt @@ -0,0 +1,37 @@ +Hjälp till att göra nästa Thunderbird-release så fantastisk som möjligt genom att ladda ner Thunderbird Beta och få tidig tillgång till de senaste funktionerna och buggfixarna innan de släpps officiellt. Dina tester och feedback är viktiga, så vänligen rapportera buggar, förbättringar och dela dina tankar med oss! + +Hitta vår buggspårare, källkod och wiki på https://github.com/thunderbird/thunderbird-android. + +Vi är alltid glada att välkomna nya utvecklare, designers, dokumenterare, översättare, bugstriagrar och vänner. Besök oss på https://thunderbird.net/participate för att komma igång. + +Thunderbird är en kraftfull, integritetsfokuserad e-postapp. Hantera flera e-postkonton enkelt från en app, med en samlad inkorg för maximal produktivitet. Byggd på teknologi med öppen källkod och stöds av ett dedikerat team av utvecklare tillsammans med en global gemenskap av frivilliga, Thunderbird behandlar aldrig din privata data som en produkt. Stöds enbart av ekonomiska bidrag från våra användare, så att du aldrig behöver se annonser blandade med dina e-postmeddelanden igen. + +Vad du kan göra +
    +
  • Skippa flera appar och webbmail. Använd en app, med en valfri samlad inkorg, för att klara din dag.
  • +
  • Njut av en integritetsvänlig e-postklient som aldrig samlar in eller säljer dina personuppgifter. Vi kopplar dig direkt till din e-postleverantör. Det är det!
  • +
  • Ta din integritet till nästa nivå genom att använda OpenPGP-e-postkryptering (PGP/MIME) med appen "OpenKeychain" för att kryptera och dekryptera dina meddelanden.
  • +
  • Välj att synkronisera din e-post direkt, med bestämda intervaller eller på begäran. Hur du än vill kontrollera din e-post så är det upp till dig!
  • +
  • Hitta dina viktiga meddelanden med hjälp av både lokal sökning och sökning på serversidan.
  • +
+ +Kompatibilitet +
    +
  • Thunderbird fungerar med IMAP- och POP3-protokoll och stöder ett brett utbud av e-postleverantörer, inklusive Gmail, Outlook, Yahoo Mail, iCloud och mer.
  • +
+ +Varför använda Thunderbird +
    +
  • Det betrodda namnet inom e-post i över 20 år – nu på Android.
  • +
  • Thunderbird finansieras helt av frivilliga bidrag från våra användare. Vi delar inte dina personuppgifter. Du är aldrig produkten.
  • +
  • Gjord av ett team som är lika effektivitetsinriktat som du. Vi vill att du ska spendera minimal tid med att använda appen samtidigt som du får maximalt i gengäld.
  • +
  • Med bidragsgivare från hela världen har Thunderbird för Android översatts till mer än 20 språk.
  • +
  • Stöds av MZLA Technologies Corporation, ett helägt dotterbolag till Mozilla Foundation.
  • +
+ +Öppen källkod och community +
    +
  • Thunderbird är gratis och öppen källkod, vilket innebär att dess kod är tillgänglig för att se, ändra, använda och dela fritt. Dess licens säkerställer också att den kommer att vara gratis för alltid. Du kan tänka på Thunderbird som en gåva från tusentals bidragsgivare till dig.
  • +
  • Vi utvecklas i det fria med regelbundna, transparenta uppdateringar på vår blogg och e-postlistor.
  • +
  • Vår användarsupport drivs av vårt globala community. Hitta svaren du behöver, eller gå in i rollen som en bidragsgivare – oavsett om det är att svara på frågor, översätta appen eller berätta för dina vänner och familj om Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/sv-SE/short_description.txt b/app-metadata/net.thunderbird.android.beta/sv-SE/short_description.txt new file mode 100644 index 00000000000..0fe8d9106d8 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/sv-SE/short_description.txt @@ -0,0 +1 @@ +Thunderbird är en sekretessfokuserad e-postapp med 100 % öppen källkod. diff --git a/app-metadata/net.thunderbird.android.beta/sv-SE/title.txt b/app-metadata/net.thunderbird.android.beta/sv-SE/title.txt new file mode 100644 index 00000000000..12c3f3db979 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/sv-SE/title.txt @@ -0,0 +1 @@ +Thunderbird Beta för testare diff --git a/app-metadata/net.thunderbird.android.beta/tr-TR/short_description.txt b/app-metadata/net.thunderbird.android.beta/tr-TR/short_description.txt new file mode 100644 index 00000000000..3c0991dc552 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/tr-TR/short_description.txt @@ -0,0 +1 @@ +Thunderbird %100 açık kaynaklı, gizlilik odaklı bir e-posta uygulamasıdır. diff --git a/app-metadata/net.thunderbird.android.beta/tr-TR/title.txt b/app-metadata/net.thunderbird.android.beta/tr-TR/title.txt new file mode 100644 index 00000000000..effb1789038 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/tr-TR/title.txt @@ -0,0 +1 @@ +Thunderbird Beta (Test Amaçlı) diff --git a/app-metadata/net.thunderbird.android.beta/uk/full_description.txt b/app-metadata/net.thunderbird.android.beta/uk/full_description.txt new file mode 100644 index 00000000000..0e222e21848 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/uk/full_description.txt @@ -0,0 +1,37 @@ +Допоможіть зробити наступний випуск Thunderbird якомога кращим, завантаживши Thunderbird Beta й отримавши ранній доступ до новітніх функцій і виправлень помилок ще до їх офіційного випуску. Ваше тестування та відгуки дуже важливі, тому повідомляйте про помилки, недоробки та діліться з нами своїми думками! + +Наш інструмент для відстеження помилок, код і вікі можна знайти за адресою https://github.com/thunderbird/thunderbird-android. +Ми завжди раді вітати нових розробників, дизайнерів, документаторів, перекладачів, менеджерів з упорядкування звернень та друзів. Щоб розпочати відвідайте нас за адресою https://thunderbird.net/participate. + + +Thunderbird - це потужний поштовий клієнт, орієнтований на приватність. Легко керуйте кількома обліковими записами електронної пошти з одного застосунку за допомогою опції «Об'єднана тека» для максимальної продуктивності. Створений на основі відкритих технологій і підтримуваний спеціальною командою розробників разом із глобальною спільнотою волонтерів, Thunderbird ніколи не розглядає ваші приватні дані як продукт. Thunderbird підтримується виключно коштом фінансових внесків наших користувачів, тому вам більше ніколи не доведеться бачити рекламу в електронних листах. + +Що ви можете робити +
    +
  • Відмовтеся від кількох застосунків і вебпошти. Використовуйте один застосунок з додатковою функцією «Об'єднані Вхідні», щоб керувати своїми справами протягом усього дня.
  • +
  • Користуйтеся поштовим клієнтом, який ніколи не збирає і не продає ваші особисті дані. Ми напряму з'єднуємо вас з вашим постачальником послуг електронної пошти. Це все!
  • +
  • Підніміть свою приватність на новий рівень, використовуючи шифрування електронної пошти OpenPGP (PGP/MIME) за допомогою застосунку «OpenKeychain» для шифрування та розшифрування ваших повідомлень.
  • +
  • Ви можете синхронізувати електронну пошту миттєво, через певні проміжки часу або на вимогу. Як саме ви хочете перевіряти свою електронну пошту, вирішувати вам!
  • +
  • Знаходьте важливі повідомлення за допомогою локального та серверного пошуку.
  • +
+ +Сумісність +
    +
  • Thunderbird працює з протоколами IMAP і POP3, підтримуючи широкий спектр провайдерів електронної пошти, включаючи Gmail, Outlook, Yahoo Mail, iCloud та інші.
  • +
+ +Чому варто користуватися Thunderbird +
    +
  • Ім'я, якому довіряють в електронній пошті вже понад 20 років, тепер і на Android.
  • +
  • Thunderbird повністю фінансується коштом добровільних внесків наших користувачів. Ми не видобуваємо ваші особисті дані. Ви ніколи не будете нашим засобом заробітку.
  • +
  • Створений командою, яка так само націлена на ефективність, як і ви. Ми хочемо, щоб ви витрачали якнайменше часу на користування застосунком і отримували якнайбільше користі.
  • +
  • Завдяки учасникам з усього світу Thunderbird для Android перекладено більш ніж 20 мовами.
  • +
  • За підтримки MZLA Technologies Corporation, дочірньої компанії Mozilla Foundation.
  • +
+ +Відкритість і спільнота +
    +
  • Thunderbird має вільний і відкритий код, що означає, що його код можна вільно переглядати, змінювати, використовувати й поширювати. Його ліцензія також гарантує, що він буде вільним назавжди. Ви можете вважати Thunderbird подарунком вам від тисяч учасників.
  • +
  • Ми розвиваємося відкрито, регулярно оновлюючи наш блог та списки розсилки.
  • +
  • Наша підтримка користувачів забезпечується глобальною спільнотою. Знайдіть відповіді, які вам потрібні, або візьміть на себе роль учасника — відповідайте на запитання, перекладайте застосунок або розповідайте про Thunderbird своїм друзям і родичам.
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/uk/short_description.txt b/app-metadata/net.thunderbird.android.beta/uk/short_description.txt new file mode 100644 index 00000000000..a77893082f8 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/uk/short_description.txt @@ -0,0 +1 @@ +Thunderbird зі 100% відкритим кодом і приватноцентричний застосунок е-пошти. diff --git a/app-metadata/net.thunderbird.android.beta/uk/title.txt b/app-metadata/net.thunderbird.android.beta/uk/title.txt new file mode 100644 index 00000000000..0ff09598c1d --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/uk/title.txt @@ -0,0 +1 @@ +Thunderbird Beta для тестів diff --git a/app-metadata/net.thunderbird.android.beta/zh-CN/full_description.txt b/app-metadata/net.thunderbird.android.beta/zh-CN/full_description.txt new file mode 100644 index 00000000000..e442f656ac9 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/zh-CN/full_description.txt @@ -0,0 +1,37 @@ +通过下载 Thunderbird 测试版并在正式发布之前抢先体验最新功能和错误修复,帮助我们尽可能完善 Thunderbird 的下一个版本。您的测试和反馈非常重要,因此请报告错误、不完善之处并与我们分享您的想法! + +您可以在 https://github.com/thunderbird/thunderbird-android 找到我们的错误跟踪器、源代码和维基。 + +我们随时欢迎新的开发人员、设计人员、文档编写人员、翻译人员、测试人员和朋友加入我们。请访问我们的网站 https://www.thunderbird.net/zh-CN/participate/ 开始。 + +Thunderbird 是功能强大、注重隐私的电子邮件应用。通过一个应用轻松管理多个电子邮件账号,并通过统一收件箱选项来最大限度地提高生产力。Thunderbird 基于开源技术构建,并得到了专门的开发团队和全球志愿者社区的支持,绝不会将您的私人数据视为产品。Thunderbird 仅由我们用户的捐款支持,因此您再也不会看到广告混入您的电子邮件中。 + +您可以做什么 +
    +
  • 摆脱多个应用和网络邮件。使用一个应用和可选的统一收件箱,即可轻松度过一天。
  • +
  • 享受隐私友好的电子邮件客户端,它永远不会收集或出售您的个人数据。我们直接将您连接到您的邮件服务提供者。就是这样!
  • +
  • 通过使用“OpenKeychain”应用的 OpenPGP 电子邮件加密(PGP/MIME)来加密和解密您的邮件,将您的隐私提升到一个新的水平。
  • +
  • 您可以选择立即、按设定的时间间隔或按需同步电子邮件。无论您想如何检查电子邮件,都取决于您!
  • +
  • 使用本地和服务器端搜索查找重要邮件。
  • +
+ +兼容性 +
    +
  • Thunderbird 使用 IMAP 和 POP3 协议,支持各种邮件服务提供者,包括 Gmail、Outlook、Yahoo Mail、iCloud 等。
  • +
+ +为什么使用 Thunderbird +
    +
  • 20 多年来电子邮件领域值得信赖的品牌——现在有 Android 版。
  • +
  • Thunderbird 的全部资金来自我们用户的自愿捐款。我们不会挖掘您的个人数据。您永远不是产品。
  • +
  • 由一支和您一样注重效率的团队创造。我们希望您花最少的时间使用本应用,同时获得最大的回报。
  • +
  • Thunderbird Android 版的贡献者来自世界各地,现已翻译成 20 多种语言。
  • +
  • 由 Mozilla 基金会的全资子公司 MZLA Technologies Corporation 提供支持。
  • +
+ +开源和社区 +
    +
  • Thunderbird 是自由和开源的,这意味着它的代码可以自由查看、修改、使用和共享。它的许可证还确保它将永远自由。您可以将 Thunderbird 视为数千名贡献者送给您的礼物。
  • +
  • 我们通过在我们的博客和邮件列表上透明的更新来公开开发。
  • +
  • 我们的用户支持由我们的全球社区提供支持。找到您需要的答案,或担任贡献者——无论是回答问题、翻译本应用还是向您的朋友和家人介绍 Thunderbird。
  • +
diff --git a/app-metadata/net.thunderbird.android.beta/zh-CN/short_description.txt b/app-metadata/net.thunderbird.android.beta/zh-CN/short_description.txt new file mode 100644 index 00000000000..1b2a5547a11 --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/zh-CN/short_description.txt @@ -0,0 +1 @@ +Thunderbird 是 100% 开源、注重隐私的电子邮件应用。 diff --git a/app-metadata/net.thunderbird.android.beta/zh-CN/title.txt b/app-metadata/net.thunderbird.android.beta/zh-CN/title.txt new file mode 100644 index 00000000000..60b9c63724a --- /dev/null +++ b/app-metadata/net.thunderbird.android.beta/zh-CN/title.txt @@ -0,0 +1 @@ +Thunderbird 测试版 diff --git a/app-metadata/net.thunderbird.android/cs-CZ/full_description.txt b/app-metadata/net.thunderbird.android/cs-CZ/full_description.txt new file mode 100644 index 00000000000..f8e3d19f098 --- /dev/null +++ b/app-metadata/net.thunderbird.android/cs-CZ/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird je výkonná e-mailová aplikace zaměřená na ochranu soukromí. Snadno spravujte několik e-mailových účtů z jedné aplikace s možností jednotné schránky pro maximální produktivitu. Aplikace je postavena na open-source technologii a je podporována specializovaným týmem vývojářů spolu s celosvětovou komunitou dobrovolníků, a proto s vašimi soukromými údaji nikdy nezachází jako s produktem. Je podporována výhradně finančními příspěvky našich uživatelů, takže už nikdy neuvidíte reklamy přimíchané do svých e-mailů. + +Co aplikace umí +
    +
  • Zbavte se více aplikací a webové pošty. Používejte jednu aplikaci s volitelnou jednotnou schránkou, která vám pomůže zvládnout celý den.
  • +
  • Užijte si e-mailový klient zaměřený na ochranu soukromí, který nikdy nesbírá ani neprodává vaše osobní údaje. Přímo vás propojíme s vaším poskytovatelem e-mailu. Nic víc!
  • +
  • Posuňte své soukromí na vyšší úroveň pomocí šifrování e-mailů pomocí OpenPGP (PGP/MIME) s aplikací „OpenKeychain“, která šifruje a dešifruje vaše zprávy.
  • +
  • Nastavte si, zda chcete synchronizovat svou poštu ihned, v nastavených intervalech nebo na vyžádání. Jak chcete kontrolovat svůj e-mail je jen na vás!
  • +
  • Najděte své důležité zprávy s lokálním i serverovým vyhledáváním.
  • +
+ +Kompatibilita +
    +
  • Thunderbird pracuje s protokoly IMAP a POP3 a podporuje širokou škálu poskytovatelů e-mailových služeb, včetně Gmailu, Outlooku, Yahoo Mailu, iCloudu a dalších.
  • +
+ +Proč používat Thunderbird +
    +
  • Důvěryhodné jméno v e-mailu již více než 20 let - nyní i pro Android.
  • +
  • Thunderbird je plně financován z dobrovolných příspěvků našich uživatelů. Vaše osobní údaje s nikým nesdílíme. Nikdy nejste produktem.
  • +
  • Vytvořeno týmem, který má rád efektivitu stejně, jako vy. Chceme, abyste používáním aplikace strávili co nejméně času a přitom získali maximum.
  • +
  • Díky přispěvatelům z celého světa byl Thunderbird pro Android přeložen do více než 20 jazyků.
  • +
  • Thunderbird je součástí MZLA Technologies Corporation, dceřiné společnosti plně vlastněné Mozilla Foundation.
  • +
+ +Open-source a komunitní +
    +
  • Thunderbird je zdarma a open-source, což znamená, že jeho kód je k dispozici k nahlédnutí, úpravám, používání a volnému sdílení. Jeho licence také zaručuje, že bude zdarma navždy. Thunderbird můžete považovat za dar tisíců přispěvatelů pro vás.
  • +
  • Vyvíjíme se otevřeně, s pravidelnými a transparentními aktualizacemi na našem blogu a v e-mailových zpravodajích.
  • +
  • Naši uživatelskou podporu zajišťuje globální komunita. Najděte odpovědi, které potřebujete, nebo se zapojte do role přispěvatele – ať už jde o zodpovídání otázek, překládání aplikace nebo vyprávění přátelům a rodině o Thunderbirdu.
  • +
diff --git a/app-metadata/net.thunderbird.android/cs-CZ/short_description.txt b/app-metadata/net.thunderbird.android/cs-CZ/short_description.txt new file mode 100644 index 00000000000..a59edf750f2 --- /dev/null +++ b/app-metadata/net.thunderbird.android/cs-CZ/short_description.txt @@ -0,0 +1 @@ +Thunderbird je 100% open-source e-mailová aplikace zaměřená na ochranu soukromí. diff --git a/app-metadata/net.thunderbird.android/cs-CZ/title.txt b/app-metadata/net.thunderbird.android/cs-CZ/title.txt new file mode 100644 index 00000000000..af9fe812223 --- /dev/null +++ b/app-metadata/net.thunderbird.android/cs-CZ/title.txt @@ -0,0 +1 @@ +Thunderbird: Osvoboďte poštu diff --git a/app-metadata/net.thunderbird.android/de-DE/short_description.txt b/app-metadata/net.thunderbird.android/de-DE/short_description.txt new file mode 100644 index 00000000000..458e18e8192 --- /dev/null +++ b/app-metadata/net.thunderbird.android/de-DE/short_description.txt @@ -0,0 +1 @@ +Thunderbird ist eine 100 % quelloffene, datenschutzfreundliche E-Mail-App. diff --git a/app-metadata/net.thunderbird.android/de-DE/title.txt b/app-metadata/net.thunderbird.android/de-DE/title.txt new file mode 100644 index 00000000000..7720b5338ec --- /dev/null +++ b/app-metadata/net.thunderbird.android/de-DE/title.txt @@ -0,0 +1 @@ +Thunderbird: Befreie deinen Posteingang diff --git a/app-metadata/net.thunderbird.android/es-ES/short_description.txt b/app-metadata/net.thunderbird.android/es-ES/short_description.txt new file mode 100644 index 00000000000..6b88e2fd7c7 --- /dev/null +++ b/app-metadata/net.thunderbird.android/es-ES/short_description.txt @@ -0,0 +1 @@ +Thunderbird es una aplicación de correo electrónico 100% de código abierto y centrada en la privacidad. diff --git a/app-metadata/net.thunderbird.android/es-ES/title.txt b/app-metadata/net.thunderbird.android/es-ES/title.txt new file mode 100644 index 00000000000..9222cafd9b3 --- /dev/null +++ b/app-metadata/net.thunderbird.android/es-ES/title.txt @@ -0,0 +1 @@ +Thunderbird: Libera tu bandeja de entrada diff --git a/app-metadata/net.thunderbird.android/et/short_description.txt b/app-metadata/net.thunderbird.android/et/short_description.txt new file mode 100644 index 00000000000..da57506adc2 --- /dev/null +++ b/app-metadata/net.thunderbird.android/et/short_description.txt @@ -0,0 +1 @@ +Thunderbird on avatud tarkvaral põhinev ja privaatsusest lähtuv e-posti klient. diff --git a/app-metadata/net.thunderbird.android/et/title.txt b/app-metadata/net.thunderbird.android/et/title.txt new file mode 100644 index 00000000000..2073b08fb61 --- /dev/null +++ b/app-metadata/net.thunderbird.android/et/title.txt @@ -0,0 +1 @@ +Thunderbird: e-post sinu jaoks diff --git a/app-metadata/net.thunderbird.android/fa-IR/full_description.txt b/app-metadata/net.thunderbird.android/fa-IR/full_description.txt new file mode 100644 index 00000000000..0d970318084 --- /dev/null +++ b/app-metadata/net.thunderbird.android/fa-IR/full_description.txt @@ -0,0 +1,31 @@ +تاندربرد یک برنامه رایانامه قدرتمند و متمرکز بر حریم خصوصی است. با استفاده از گزینه صندوق ورودی یکپارچه برای حداکثر بهره‌وری، به راحتی چندین حساب رایانامه را از یک برنامه مدیریت کنید. تاندربرد که بر اساس فناوری متن‌باز ساخته شده و توسط یک تیم اختصاصی از توسعه دهندگان در کنار یک جامعه سراسری از داوطلبان پشتیبانی می شود، هرگز با داده های خصوصی شما به عنوان یک محصول رفتار نمی کند. صرفاً توسط کمک‌های مالی کاربران ما پشتیبانی می‌شود، بنابراین دیگر هیچ‌وقت مجبور نخواهید شد که دوباره تبلیغات را در ترکیب با رایانامه‌هایتان مشاهده کنید. + +کارهایی که می‌توانید انجام دهید +
    +
  • برنامه‌ها و وب‌های متعدد مرتبط با رایانامه را کنار بگذارید. از یک برنامه، با صندوق ورودی یکپارچه اختیاری، استفاده کنید تا یک روز با تمام قدرت داشته باشید.
  • +
  • از یک کارخواه رایانامه دوستدار حریم خصوصی که هرگز داده های شخصی شما را جمع آوری نمی‌کند یا نمی‌فروشد، لذت ببرید. ما مستقیماً شما را به ارائه‌دهنده‌های خدمت رایانامه متصل می کنیم. فقط همین!
  • +
  • با استفاده از رمزگذاری رایانامه OpenPGP (PGP/MIME) با برنامه OpenKeychain، برای رمزگذاری و رمزگشایی پیام‌های خود، حریم خصوصی خود را به سطح بالاتر ببرید.
  • +
  • انتخاب کنید تا رایانامه خود را فوراً، در فواصل زمانی تعیین شده یا بر اساس درخواست همگام کنید. هر طور که بخواهید رایانامه خود را چک کنید، این به شما بستگی دارد!
  • +
  • پیام‌های مهم خود را با استفاده از جستجوی محلی و برخط پیدا کنید.
  • +
+ +سازگاری +
    +
  • تاندربرد با پروتکل های IMAP و POP3 کار می کند و از طیف گسترده ای از ارائه دهندگان رایانامه از جمله Gmail، Outlook، Yahoo Mail، iCloud و غیره پشتیبانی می کند.
  • +
+ +چرا از تاندربرد استفاده کنیم +
    +
  • نام قابل اعتماد برای رایانامه در طول بیش از ۲۰ سال - اکنون در اندروید.
  • +
  • تاندربرد به طور کامل از طریق مشارکت های داوطلبانه کاربران ما حمایت و تأمین می شود. ما اطلاعات شخصی شما را استخراج نمی کنیم. شما هرگز به عنوان محصول مورد بهره‌برداری قرار نمی‌گیرید.
  • +
  • ساخته شده توسط تیمی که به اندازه شما کارآمد فکر می کند. ما می خواهیم که شما کمترین زمان خود را برای استفاده از برنامه صرف کنید و در ازای آن بیشترین آورده را داشته باشید.
  • +
  • با مشارکت کنندگان از سراسر جهان، تاندربرد برای اندروید به بیش از ۲۰ زبان ترجمه شده است.
  • +
  • توسط MZLA Technologies Corporation، یک شرکت تابعه کاملا متعلق به بنیاد موزیلا پشتیبانی می شود.
  • +
+ +متن‌باز بودن و جامعه +
    +
  • تاندربرد رایگان و منبع باز است، به این معنی که کد آن برای دیدن، تغییر، استفاده و اشتراک‌گذاری آزادانه در دسترس است. مجوز آن همچنین تضمین می کند که برای همیشه آزاد خواهد بود. شما می‌توانید تاندربرد را به عنوان هدیه‌ای از جانب هزاران مشارکت‌کننده در نظر بگیرید.
  • +
  • توسعه‌ ما در فضای باز با به‌روزرسانی‌های منظم و شفاف در وبلاگ و لیست‌های پستی خود می‌باشد.
  • +
  • پشتیبانی کاربر به وسیله جامعه سراسری ما قدرت می‌گیرد. پاسخ‌های مورد نیاز خود را بیابید، یا به عنوان یک مشارکت‌کننده فعالیت کنید که پاسخ دادن به سؤالات، ترجمه برنامه، یا گفتگو با دوستان و خانواده‌تان درباره تاندربرد، می‌تواند باشد.
  • +
diff --git a/app-metadata/net.thunderbird.android/fa-IR/short_description.txt b/app-metadata/net.thunderbird.android/fa-IR/short_description.txt new file mode 100644 index 00000000000..30d97ce48fc --- /dev/null +++ b/app-metadata/net.thunderbird.android/fa-IR/short_description.txt @@ -0,0 +1 @@ +تاندربرد کارهٔ رایانامه‌ای ۱۰۰٪ نرم‌افزار آزاد و با تمرکز بر محرمانگی است. diff --git a/app-metadata/net.thunderbird.android/fa-IR/title.txt b/app-metadata/net.thunderbird.android/fa-IR/title.txt new file mode 100644 index 00000000000..a34411b862e --- /dev/null +++ b/app-metadata/net.thunderbird.android/fa-IR/title.txt @@ -0,0 +1 @@ +تاندربرد: آزادی صندوق ورودی diff --git a/app-metadata/net.thunderbird.android/fr-FR/full_description.txt b/app-metadata/net.thunderbird.android/fr-FR/full_description.txt new file mode 100644 index 00000000000..192215c509e --- /dev/null +++ b/app-metadata/net.thunderbird.android/fr-FR/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird est une appli de courriel puissante qui protège vos renseignements personnels. Gérez sans effort plusieurs comptes de courriel avec une seule appli, avec une option de boîte de réception unifiée pour une productivité maximale. Construite sur une technologie à source ouverte et développée par une équipe de développeurs dévoués aux côtés d’une communauté mondiale de bénévoles, Thunderbird ne traite jamais vos données personnelles comme un produit. Entièrement financées par les dons de nos utilisateurs, vous ne verrez plus jamais de publicités mélangées à vos courriels. + +Ce que vous pouvez faire +
    +
  • Abandonnez les autres applis et le courriel Web. Une seule appli pour gérer vos courriels, avec une boîte de réception unifiée en option.
  • +
  • Profitez d’un client de courriel qui protège vos renseignements personnels sans jamais les recueillir ni les vendre. Nous vous connectons directement à votre service de courriel, c’est tout.
  • +
  • Protégez davantage votre vie privée en chiffrant vos courriels avec OpenPGP (PGP/MIME) grâce à l’appli « OpenKeychain », pour un chiffrement et déchiffrement transparent de vos courriels.
  • +
  • Choisissez de synchroniser vos courriels instantanément, périodiquement ou à la demande. Vous décidez comment consulter vos courriels.
  • +
  • Trouvez vos messages importants grâce à la recherche locale et côté serveur.
  • +
+ +Compatibilité +
    +
  • Thunderbird fonctionne avec les protocoles IMAP et POP3, compatible avec un large éventail de services de courriel dont Gmail, Outlook, Yahoo Mail, iCloud, et d’autres.
  • +
+ +Pourquoi utiliser Thunderbird ? +
    +
  • La marque de confiance en matière de courriel depuis plus de 20 ans, maintenant sur Android.
  • +
  • Thunderbird est entièrement financée par les dons de nos utilisateurs. Nous n’exploitons pas vos données personnelles. Vous n’êtes jamais le produit.
  • +
  • Conçue par une équipe aussi soucieuse d’efficacité que vous. Nous voulons que vous passiez un minimum de temps à utiliser l’appli et en profitiez au maximum.
  • +
  • Nos collaborateurs du monde entier traduisent Thunderbird pour Android en plus de 20 langues.
  • +
  • Soutenue par MZLA Technologies Corporation, une filiale à part entière de la Fondation Mozilla.
  • +
+ +Code source ouvert et communauté +
    +
  • Thunderbird est gratuite et à source ouverte. Son code peut être consulté, modifié, utilisé et partagé librement. Sa licence garantit que l’appli sera toujours gratuite. C’est un cadeau des milliers de contributeurs à vous.
  • +
  • Nous développons au grand jour, avec des mises à jour régulières et transparentes sur notre blogue et nos listes de diffusion.
  • +
  • L’assistance aux utilisateurs provient de notre communauté mondiale. Trouvez les réponses dont vous avez besoin ou contribuez en répondant aux questions, traduisant l’appli, ou en parlant de Thunderbird à vos amis et à votre famille.
  • +
diff --git a/app-metadata/net.thunderbird.android/fr-FR/short_description.txt b/app-metadata/net.thunderbird.android/fr-FR/short_description.txt new file mode 100644 index 00000000000..e9c5d197d32 --- /dev/null +++ b/app-metadata/net.thunderbird.android/fr-FR/short_description.txt @@ -0,0 +1 @@ +Thunderbird, une appli de courriel à code source ouvert qui protège vos données. diff --git a/app-metadata/net.thunderbird.android/fr-FR/title.txt b/app-metadata/net.thunderbird.android/fr-FR/title.txt new file mode 100644 index 00000000000..e77699fc658 --- /dev/null +++ b/app-metadata/net.thunderbird.android/fr-FR/title.txt @@ -0,0 +1 @@ +Thunderbird : Courriel libre diff --git a/app-metadata/net.thunderbird.android/fy/full_description.txt b/app-metadata/net.thunderbird.android/fy/full_description.txt new file mode 100644 index 00000000000..05a842869f9 --- /dev/null +++ b/app-metadata/net.thunderbird.android/fy/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird is in krêftich, op privacy rjochte e-mail-app. Behear maklik meardere accounts fan ien app út, mei in opsje foar in Gearfoege Postfek YN foar maksimale produktiviteit. Boud op iepenboarnetechnology en stipe troch in tawijd team fan ûntwikkelers tegearre mei in wrâldwide mienskip fan frijwilligers, behannelet Thunderbird jo priveegegevens nea as in produkt. Omdat wy folslein stipe wurde troch finansjele donaasjes fan ús brûkers, hoege jo nea mear advertinsjes te sjen tusken jo e-mailberjochten. + +Wat kinne jo dwaan +
    +
  • Stopje mei it gebrûk fan meardere apps en webmail. Brûk ien app, mei opsjoneel in Gearfoege Postfek YN, om jo troch de dei te helpen.
  • +
  • Genietsje fan in privacyfreonlike e-mailclient dy’t nea jo persoanlike gegevens sammelet of ferkeapet. Wy ferbine streekrjocht mei jo e-mailprovider. Dat is it!
  • +
  • Bring jo privacy nei in noch heger nivo troch gebrûk te meitsjen fan OpenPGP e-mailfersifering (PGP/MIME) mei de ‘OpenKeychain’-app, om jo berjochten te fersiferjen en ûntsiferjen.
  • +
  • Kies derfoar jo e-mailberjochten daliks te syngronisearjen, op fêste tiden, of wannear’t jo mar wolle. Hoe’t jo jo e-mail ek kontrolearje wolle, dat is hielendal oan jo!
  • +
  • Fyn jo wichtige berjochten mei help fan sawol lokaal as op de server sykje.
  • +
+ +Komptabiliteit +
    +
  • Thunderbird wurket mei IMAP- en POP3-protokollen, stipet in breed skala oan e-mailproviders, ynklusyf Gmail, Outlook, Yahoo Mail, iCloud, en mear.
  • +
+ +Wêrom Thunderbird brûke +
    +
  • De fertroude namme yn e-mail foar mear as 20 jier – no op Android.
  • +
  • Thunderbird is folslein finansiere troch frijwillige bydragen fan ús brûkers. Wy sammelje jo persoanlike gegevens net. Jo binne nea it produkt.
  • +
  • Makke troch in team dat krekt sa tinkt oer effisjinsje as jo. Wy wolle dat jo sa min mooglik tiid spandearje oan it gebrûk fan de app, wylst jo it maksimale werom krije.
  • +
  • Mei meiwurkers fan oer de hiele wrâld, wurdt Thunderbird foar Android oerset yn mear as 20 talen.
  • +
  • Stipe troch MZLA Technologies Corporation, in folsleine dochterûndernimming fan de Mozilla Foundation.
  • +
+ +Iepen Boarne en Mienskip +
    +
  • Thunderbird is fergees en iepen boarne, wat betsjut dat de koade beskikber is om te besjen, bewurkjen, brûken en frij te dielen. De lisinsje garandearret ek dat it altyd frij bliuwe sil. Jo kinne Thunderbird beskôgje as in kado oan jo fan tûzenen meiwurkers.
  • +
  • Wy ûntwikkelje yn de iepenheid mei reguliere, transparante fernijingen op ús blog en mailinglisten.
  • +
  • Us brûkersstipe wurdt mooglik makke troch ús wrâldwide mienskip. Fyn de antwurden dy’t jo nedich hawwe, of stap yn de rol fan in meiwurker – oft it no it beäntwurdzjen is fan fragen, it oersetten fan de app, of jo freonen en famylje fertelle oer Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android/fy/short_description.txt b/app-metadata/net.thunderbird.android/fy/short_description.txt new file mode 100644 index 00000000000..5097d8a2755 --- /dev/null +++ b/app-metadata/net.thunderbird.android/fy/short_description.txt @@ -0,0 +1 @@ +Thunderbird is in 100% iepen boarne, op privacy rjochte e-mail-app. diff --git a/app-metadata/net.thunderbird.android/fy/title.txt b/app-metadata/net.thunderbird.android/fy/title.txt new file mode 100644 index 00000000000..cda07dc62e8 --- /dev/null +++ b/app-metadata/net.thunderbird.android/fy/title.txt @@ -0,0 +1 @@ +Thunderbird: Befrij jo Postfek diff --git a/app-metadata/net.thunderbird.android/ja-JP/full_description.txt b/app-metadata/net.thunderbird.android/ja-JP/full_description.txt new file mode 100644 index 00000000000..335c055768e --- /dev/null +++ b/app-metadata/net.thunderbird.android/ja-JP/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird はプライバシー重視の強力なメールアプリです。効率を最大化する統合受信トレイオプションを使用すれば、複数のメールアカウントを一つのアプリから簡単に管理できます。オープンソースで構築され、ボランティアの国際コミュニティとともに専任の開発者チームがサポートする Thunderbird では、あなたのプライバシーに関わる情報が商品として扱われることは決してありません。ユーザーの寄付のみに支えられているため、メールに広告を混ぜ込んで表示したりしません。 + +できること +
    +
  • アプリやウェブメールの併用にさよなら。一つのアプリに集約できるだけでなく、オプションの統合受信トレイが毎日のお役に立ちます。
  • +
  • 個人データを収集して販売しない、プライバシーを尊重するメールクライアントをお楽しみください。あなたとメールプロバイダーを直接繋ぎます。余計なことはしません。
  • +
  • 「OpenKeychain」アプリを併用すれば、あなたのプライバシーを次の段階に向上させる OpenPGP メール暗号化 (PGP/MIME) を使用したメッセージの暗号化と復号が可能になります。
  • +
  • メールを即時に同期するか、設定した間隔で同期するか、リクエストしたときのみ同期するかはあなたが選択できます。どのようにメールを確認するかはあなたが決められます。
  • +
  • ローカルとサーバー両方を検索して重要なメッセージを見つけられます。
  • +
+ +互換性 +
    +
  • Thunderbird は IMAP と POP3 プロトコルで動作し、Gmail、Outlook、Yahoo Mail、iCloud などを含む幅広いメールプロバイダーに対応します。
  • +
+ +Thunderbird を使う理由 +
    +
  • メールで 20 年以上信頼されてきた名前 - これからは Android にも
  • +
  • Thunderbird の資金はすべてユーザーからの寄付されています。あなたを商品にするために個人データを収集することは決してありません。
  • +
  • あなたと同じくらい効率を重視するチームが開発。アプリを使う時間は最小で、最大の効果を発揮したいと考えています。
  • +
  • 世界中の貢献者が Android 版 Thunderbird を 20 以上の言語に翻訳。
  • +
  • Mozilla Foundation の完全子会社である MZLA Technologies Corporation によってサポート。
  • +
+ +オープンソースのコミュニティ +
    +
  • Thunderbird は自由でオープンソースです。これは、コードを閲覧し、改変し、使用し、自由に共有できることを意味します。このライセンスは永遠に自由であることも保証します。Thunderbird は数千の貢献者からあなたへのギフトと考えてもらうことができます。
  • +
  • 私たちはブログやメーリングリストを活用した定期的かつ透明性を確保した更新によりオープンに開発しています。
  • +
  • ユーザーサポートは国際コミュニティによって提供されています。質問がある場合や、貢献者の一員 - 質問に回答する、アプリを翻訳する、友達や家族に Thunderbird を広める - となりたい場合はご参加ください。
  • +
diff --git a/app-metadata/net.thunderbird.android/ja-JP/short_description.txt b/app-metadata/net.thunderbird.android/ja-JP/short_description.txt new file mode 100644 index 00000000000..04673b6fdc8 --- /dev/null +++ b/app-metadata/net.thunderbird.android/ja-JP/short_description.txt @@ -0,0 +1 @@ +Thunderbird はプライバシーを重視する 100% オープンソースのメールアプリです。 diff --git a/app-metadata/net.thunderbird.android/ja-JP/title.txt b/app-metadata/net.thunderbird.android/ja-JP/title.txt new file mode 100644 index 00000000000..e6a6b91dcf9 --- /dev/null +++ b/app-metadata/net.thunderbird.android/ja-JP/title.txt @@ -0,0 +1 @@ +Thunderbird: 受信トレイを自由にするメールアプリ diff --git a/app-metadata/net.thunderbird.android/lt/short_description.txt b/app-metadata/net.thunderbird.android/lt/short_description.txt new file mode 100644 index 00000000000..b8db2a65ab9 --- /dev/null +++ b/app-metadata/net.thunderbird.android/lt/short_description.txt @@ -0,0 +1 @@ +„Thunderbird“ – 100 % atvirojo kodo, į privatumą orientuota el. pašto programa. diff --git a/app-metadata/net.thunderbird.android/lt/title.txt b/app-metadata/net.thunderbird.android/lt/title.txt new file mode 100644 index 00000000000..35ad65c405a --- /dev/null +++ b/app-metadata/net.thunderbird.android/lt/title.txt @@ -0,0 +1 @@ +Thunderbird: lais. savo gaut. diff --git a/app-metadata/net.thunderbird.android/nl-NL/full_description.txt b/app-metadata/net.thunderbird.android/nl-NL/full_description.txt new file mode 100644 index 00000000000..abaedcb3273 --- /dev/null +++ b/app-metadata/net.thunderbird.android/nl-NL/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird is een krachtig, op privacy gerichte e-mail-app. Beheer gemakkelijk meerdere accounts vanuit één app, met een optie voor een Samengevoegd Postvak IN voor maximale productiviteit. Gebouwd op opensourcetechnologie en ondersteund door een toegewijd team van ontwikkelaars samen met een wereldwijde gemeenschap van vrijwilligers, behandelt Thunderbird uw privégegevens nooit als een product. Omdat wij volledig ondersteund worden door financiële donaties van onze gebruikers, hoeft u nooit meer advertenties te zien tussen uw e-mailberichten. + +Wat kunt u doen +
    +
  • Stoppen met het gebruik van meerdere apps en webmail. Gebruik één app, met een optioneel Samengevoegd Postvak IN, om u door de dag te helpen.
  • +
  • Geniet van een privacyvriendelijke e-mailclient die nooit uw persoonlijke gegevens verzameld of verkoopt. We verbinden rechtstreeks met uw e-mailprovider. Dat is het!
  • +
  • Breng uw privacy naar een nog hoger niveau door gebruik te maken van OpenPGP e-mailencryptie (PGP/MIME) met de ‘OpenKeychain’-app, om uw berichten te versleutelen en ontcijferen.
  • +
  • Kies ervoor uw e-mailberichten direct te synchroniseren, op gezette tijden, of wanneer u maar wilt. Hoe u uw e-mail ook wilt controleren, dat is helemaal aan u!
  • +
  • Vind uw belangrijke berichten met behulp van zowel lokaal als op de server zoeken.
  • +
+ +Compatibiliteit +
    +
  • Thunderbird werkt met IMAP- en POP3-protocollen, ondersteunt een breed scala aan e-mailproviders, inclusief Gmail, Outlook, Yahoo Mail, iCloud, en meer.
  • +
+ +Waarom Thunderbird gebruiken +
    +
  • De vertrouwde naam in e-mail voor meer dan 20 jaar – nu op Android.
  • +
  • Thunderbird is volledig gefinancierd door vrijwillige bijdragen van onze gebruikers. We verzamelen uw persoonlijke gegevens niet. U bent nooit het product.
  • +
  • Gemaakt door een team dat net zo denkt over efficiency als u. We willen dat u zo weinig mogelijk tijd spendeert aan het gebruik van de app, terwijl u het maximale terugkrijgt.
  • +
  • Met medewerkers van over de hele wereld, wordt Thunderbird voor Android vertaald in meer dan 20 talen.
  • +
  • Ondersteund door MZLA Technologies Corporation, een volledige dochteronderneming van de Mozilla Foundation.
  • +
+ +Open Source en Gemeenschap +
    +
  • Thunderbird is gratis en open source, wat betekent dat de code beschikbaar is om te bekijken, bewerken, gebruiken en vrij te delen. De licentie garandeert ook dat het altijd vrij zal blijven. U kunt Thunderbird beschouwen als een gift aan u van duizenden medewerkers.
  • +
  • We ontwikkelen in de openheid met reguliere, transparante updates op ons blog en mailinglijsten.
  • +
  • Onze gebruikersondersteuning wordt mogelijk gemaakt door onze wereldwijde gemeenschap. Vind de antwoorden die u nodig hebt, of stap in de rol van een medewerker – of het nu het beantwoorden is van vragen, het vertalen van de app, of uw vrienden en familie vertellen over Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android/nl-NL/short_description.txt b/app-metadata/net.thunderbird.android/nl-NL/short_description.txt new file mode 100644 index 00000000000..45b1fe0a65b --- /dev/null +++ b/app-metadata/net.thunderbird.android/nl-NL/short_description.txt @@ -0,0 +1 @@ +Thunderbird is een 100% open source, op privacy gerichte e-mail-app. diff --git a/app-metadata/net.thunderbird.android/nl-NL/title.txt b/app-metadata/net.thunderbird.android/nl-NL/title.txt new file mode 100644 index 00000000000..4b0224cf0a8 --- /dev/null +++ b/app-metadata/net.thunderbird.android/nl-NL/title.txt @@ -0,0 +1 @@ +Thunderbird: Bevrijd uw Postvak diff --git a/app-metadata/net.thunderbird.android/nn/full_description.txt b/app-metadata/net.thunderbird.android/nn/full_description.txt new file mode 100644 index 00000000000..b140c0d418f --- /dev/null +++ b/app-metadata/net.thunderbird.android/nn/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird er ein kraftfull, personvernfokusert e-postapp. Uanstrengt handering av fleire e-postkontar frå ein app, med samla innboks-moglegheit for maksimal produktivitet. Bygd på open kjeldekode teknologi og støtta av eit dedikert team av utviklarar, på sida av eit globalt samfunn av frivillige. Thunderbird behandlar aldri den private dataen din som eit produkt. Utelukkande støtta av økonomiske bidrag frå brukarane våre, så du aldri treng å sjå annonsar blanda med e-postane dine igjen. + +Kva du kan gjere +
    +
  • Dropp fleire appar og webmail. Bruk ein app, med ein valfri samla innboks, for å få deg gjennom dagen.
  • +
  • Nyt ein personversvennleg e-postklient som aldri samlar eller sel dine personlege data. Me koplar deg direkte til din e-posttenar. Det er det!
  • +
  • Ta ditt personvern til neste nivå med å bruke OpenPGP e-postkryptering (PGP/MIME) med “OpenKeychain”-appen, for å kryptere og dekryptere meldingane dine.
  • +
  • Vel å synkronisere dine e-postar umiddelbart, med faste intervall, eller etter førespurnad. Korleis du vil sjekke e-posten din er opp til deg!
  • +
  • Finn dine viktige meldingar med å bruke både lokalt og tenar-side søk.
  • +
+ +Kompatibilitet +
    +
  • Thunderbird fungerer med IMAP- og POP3-protokollar, og støtter eit vidt spenn e-post-tilbydarar som inkluderer Gmail, Outlook, Yahoo Mail, iCloud, og meir.
  • +
+ +Korfor bruke Thunderbird +
    +
  • Det pålitelege namnet innan e-post i over 20 år – no på Android
  • +
  • Thunderbird er fullstendig finansiert av frivillige bidrag frå brukarane våre. Me høstar ikkje din personlege data. Du er aldri produktet.
  • +
  • Laga av eit like effektivitetsfokusert team som deg sjølv. Me ønskjer at du bruker minimal tid på appen og får maksimal verdi i retur.
  • +
  • Med bidragsytarar frå heile verda, har Thunderbird for Android blitt omset til meir enn 20 språk.
  • +
  • Støtta av MZLA Technologies Corporation, eit dotterselskap fullstendig eigd av Mozilla Foundation.
  • +
+ +Open kjeldekode og samfunn +
    +
  • Thunderbird har fri og open kjeldekode, som betyr at koden er tilgjengeleg for å sjå, endre, bruke og dele fritt. Lisensen sikrar at den vil vere fri for alltid. Du kan tenkje på Thunderbird som ei gåve frå tusenar av bidragsytarar til deg.
  • +
  • Me utviklar i det opne, med regelmessige, transparante oppdateringar i vår blogg og våre e-postlister.
  • +
  • Vår brukarstønad er dreven av vårt globale samfunn. Finn svara du treng, og tre inn i rolla som bidragsytar - anten det er for å svare på spørsmål, omsetje appen, eller fortelje dine vennar og familie om Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android/nn/short_description.txt b/app-metadata/net.thunderbird.android/nn/short_description.txt new file mode 100644 index 00000000000..f4581dd6fff --- /dev/null +++ b/app-metadata/net.thunderbird.android/nn/short_description.txt @@ -0,0 +1 @@ +Thunderbird er ein personvern-fokusert e-post app med 100% open kjeldekode. diff --git a/app-metadata/net.thunderbird.android/nn/title.txt b/app-metadata/net.thunderbird.android/nn/title.txt new file mode 100644 index 00000000000..767e1b1c197 --- /dev/null +++ b/app-metadata/net.thunderbird.android/nn/title.txt @@ -0,0 +1 @@ +Thunderbird: Frigjer innboksen diff --git a/app-metadata/net.thunderbird.android/pl-PL/full_description.txt b/app-metadata/net.thunderbird.android/pl-PL/full_description.txt new file mode 100644 index 00000000000..3770eec5ace --- /dev/null +++ b/app-metadata/net.thunderbird.android/pl-PL/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird to potężna, skoncentrowana na prywatności aplikacja pocztowa. Bezproblemowo zarządzaj wieloma kontami e-mail z jednej aplikacji, z opcją zintegrowanej skrzynki odbiorczej dla maksymalnej produktywności. Zbudowana na technologii open source i wspierana przez oddany zespół programistów wraz z globalną społecznością wolontariuszy, Thunderbird nigdy nie traktuje Twoich prywatnych danych jako produktu. Wspierany wyłącznie dzięki wkładom finansowym od naszych użytkowników, więc nigdy więcej nie zobaczysz reklam w swoich e-mailach. + +Co możesz zrobić +
    +
  • Porzuć wiele aplikacji i pocztę w przeglądarce. Używaj jednej aplikacji z opcjonalną zintegrowaną skrzynką odbiorczą przez cały czas.
  • +
  • Ciesz się dbającym o prywatności klientem poczty e-mail, który nigdy nie zbiera ani nie sprzedaje Twoich danych osobowych. Łączymy Cię bezpośrednio z Twoim dostawcą poczty e-mail. To wszystko!
  • +
  • Przenieś swoją prywatność na wyższy poziom, używając szyfrowania wiadomości e-mail OpenPGP (PGP/MIME) z aplikacją „OpenKeychain”, aby szyfrować i odszyfrowywać wiadomości.
  • +
  • Wybierz synchronizację wiadomości e-mail natychmiast, w określonych odstępach czasu lub na żądanie. Jakkolwiek chcesz sprawdzić swoją pocztę, to zależy od Ciebie!
  • +
  • Znajdź ważne wiadomości, korzystając zarówno z wyszukiwania lokalnego, jak i po stronie serwera.
  • +
+ +Zgodność +
    +
  • Thunderbird współpracuje z protokołami IMAP i POP3, obsługując szeroką gamę dostawców poczty e-mail, w tym Gmail, Outlook, Yahoo Mail, iCloud i inne.
  • +
+ +Dlaczego warto używać Thunderbirda +
    +
  • Zaufana nazwa w dziedzinie poczty e-mail od ponad 20 lat — teraz na Androidzie.
  • +
  • Thunderbird jest w całości finansowany z dobrowolnych składek naszych użytkowników. Nie wydobywamy Twoich danych osobowych. Nigdy nie jesteś produktem.
  • +
  • Stworzony przez zespół, który — tak jak Ty — jest nastawiony na wydajność. Chcemy, aby użytkownicy spędzali jak najmniej czasu na korzystaniu z aplikacji, otrzymując w zamian jak najwięcej.
  • +
  • Dzięki współpracownikom z całego świata Thunderbird na Androida został przetłumaczony na ponad 20 języków.
  • +
  • Obsługiwany przez MZLA Technologies Corporation, spółkę zależną w całości należącą do Mozilla Foundation.
  • +
+ +Oprogramowanie typu open source i społeczność +
    +
  • Thunderbird jest darmowy i ma otwarte oprogramowanie, co oznacza, że jego kod można przeglądać, modyfikować, używać i udostępniać za darmo. Jego licencja zapewnia również, że będzie darmowy na zawsze. Możesz myśleć o aplikacji Thunderbird jako o darze od tysięcy współpracowników dla Ciebie.
  • +
  • Rozwijamy się w sposób otwarty, regularnie zamieszczając przejrzyste aktualizacje na naszym blogu i listach mailingowych.
  • +
  • Nasze wsparcie użytkowników jest obsługiwane przez naszą globalną społeczność. Znajdź odpowiedzi, których potrzebujesz, lub wciel się w rolę współautora — czy to odpowiadając na pytania, tłumacząc aplikację, czy opowiadając znajomym i rodzinie o aplikacji Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android/pl-PL/short_description.txt b/app-metadata/net.thunderbird.android/pl-PL/short_description.txt new file mode 100644 index 00000000000..0019c6b4c11 --- /dev/null +++ b/app-metadata/net.thunderbird.android/pl-PL/short_description.txt @@ -0,0 +1 @@ +Thunderbird to aplikacja pocztowa w 100% otwartoźródłowa i dbająca o prywatność. diff --git a/app-metadata/net.thunderbird.android/pl-PL/title.txt b/app-metadata/net.thunderbird.android/pl-PL/title.txt new file mode 100644 index 00000000000..977e9713589 --- /dev/null +++ b/app-metadata/net.thunderbird.android/pl-PL/title.txt @@ -0,0 +1 @@ +Thunderbird: Uwolnij pocztę diff --git a/app-metadata/net.thunderbird.android/pt-BR/short_description.txt b/app-metadata/net.thunderbird.android/pt-BR/short_description.txt new file mode 100644 index 00000000000..a798d17882b --- /dev/null +++ b/app-metadata/net.thunderbird.android/pt-BR/short_description.txt @@ -0,0 +1 @@ +O Thunderbird é um app de e-mail focado na privacidade 100% código aberto. diff --git a/app-metadata/net.thunderbird.android/ro/short_description.txt b/app-metadata/net.thunderbird.android/ro/short_description.txt new file mode 100644 index 00000000000..9b49c040c4c --- /dev/null +++ b/app-metadata/net.thunderbird.android/ro/short_description.txt @@ -0,0 +1 @@ +Thunderbird este o aplicație de poștă electronică 100% cu cod sursă deschis, axată pe confidențialitate. diff --git a/app-metadata/net.thunderbird.android/ro/title.txt b/app-metadata/net.thunderbird.android/ro/title.txt new file mode 100644 index 00000000000..638617272e1 --- /dev/null +++ b/app-metadata/net.thunderbird.android/ro/title.txt @@ -0,0 +1 @@ +Thunderbird: eliberați-vă căsuța poștală diff --git a/app-metadata/net.thunderbird.android/ru-RU/full_description.txt b/app-metadata/net.thunderbird.android/ru-RU/full_description.txt new file mode 100644 index 00000000000..cc54b23daa4 --- /dev/null +++ b/app-metadata/net.thunderbird.android/ru-RU/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird — мощный почтовый клиент, ориентированной на конфиденциальность. Простое управление несколькими аккаунтами электронной почты из одного приложения с возможностью создания единого почтового ящика обеспечивает максимальную производительность. Созданный на основе технологии с открытым исходным кодом и поддерживаемый командой разработчиков и глобальным сообществом добровольцев, Thunderbird никогда не использует ваши личные данные как продукт. Поддерживается осуществляется исключительно за счёт финансовых пожертвований наших пользователей, так что вам больше никогда не придётся видеть рекламу вперемешку с вашими электронными письмами. + +Что вы сможете +
    +
  • Отказаться от нескольких приложений и веб-почты. Используйте одно приложение с дополнительным объединённым почтовым ящиком, чтобы с пользой провести день.
  • +
  • Пользоваться почтовым клиентом, который не собирает и не продаёт ваши личные данные. Он напрямую соединяет вас с вашим провайдером услуг электронной почты. Вот и всё!
  • +
  • Поднять свою конфиденциальность на новый уровень, используя шифрование электронной почты OpenPGP (PGP/MIME) через приложение «OpenKeychain» для шифрования/расшифровки сообщений.
  • +
  • Выбирать частоту синхронизацию электронной почты: мгновенно, через заданные промежутки времени или по требованию. Ва решать, как бы вы хотели проверить свою электронную почту!
  • +
  • Искать важные сообщения, используя как локальный, так и серверный поиск.
  • +
+ +Совместимость +
    +
  • Thunderbird работает с протоколами IMAP и POP3, поддерживая широкий спектр провайдеров электронной почты, включая Gmail, Outlook, Yahoo Mail, iCloud и другие.
  • +
+ +Почему Thunderbird +
    +
  • Имя, которому доверяют электронную почту более 20 лет, теперь и на Android.
  • +
  • Thunderbird полностью финансируется за счёт добровольных пожертвований наших пользователей. Мы не обрабатываем ваши персональные данные. Вы никогда не станете товаром.
  • +
  • Создан командой, которая так же, как и вы, стремится к эффективности. Мы хотим, чтобы вы тратили минимум времени на использование приложения, получая при этом максимальную отдачу.
  • +
  • Благодаря участникам со всего мира Thunderbird для Android переведён более чем на 20 языков.
  • +
  • Поддерживается MZLA Technologies Corporation, дочерней компанией Mozilla Foundation.
  • +
+ +Открытый исходный код и сообщество +
    +
  • Thunderbird бесплатен и имеет открытый исходный код. Это означает, что его код можно свободно просматривать, изменять, использовать и делиться им. Лицензия также гарантирует, что он будет бесплатным всегда. Можно рассматривать Thunderbird как подарок вам от тысяч участников.
  • +
  • Развитие происходит открыто с регулярными публикациями обновлений в нашем блоге и списках рассылки.
  • +
  • Поддержка пользователей осуществляется глобальным сообществом. Найдите ответы на интересующие вас вопросы или станьте участником проекта: отвечайте на вопросы, переводите приложение или рассказывайте о Thunderbird своим друзьям и близким.
  • +
diff --git a/app-metadata/net.thunderbird.android/ru-RU/short_description.txt b/app-metadata/net.thunderbird.android/ru-RU/short_description.txt new file mode 100644 index 00000000000..113178cf1d3 --- /dev/null +++ b/app-metadata/net.thunderbird.android/ru-RU/short_description.txt @@ -0,0 +1 @@ +Thunderbird — 100% открытый приватный почтовый клиент. diff --git a/app-metadata/net.thunderbird.android/ru-RU/title.txt b/app-metadata/net.thunderbird.android/ru-RU/title.txt new file mode 100644 index 00000000000..f1781e6c476 --- /dev/null +++ b/app-metadata/net.thunderbird.android/ru-RU/title.txt @@ -0,0 +1 @@ +Thunderbird: свободная почта diff --git a/app-metadata/net.thunderbird.android/sv-SE/full_description.txt b/app-metadata/net.thunderbird.android/sv-SE/full_description.txt new file mode 100644 index 00000000000..52990b24477 --- /dev/null +++ b/app-metadata/net.thunderbird.android/sv-SE/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird är en kraftfull, integritetsfokuserad e-postapp. Hantera flera e-postkonton enkelt från en app, med en samlad inkorg för maximal produktivitet. Byggd på teknologi med öppen källkod och stöds av ett dedikerat team av utvecklare tillsammans med en global gemenskap av frivilliga, Thunderbird behandlar aldrig din privata data som en produkt. Stöds enbart av ekonomiska bidrag från våra användare, så att du aldrig behöver se annonser blandade med dina e-postmeddelanden igen. + +Vad du kan göra +
    +
  • Skippa flera appar och webbmail. Använd en app, med en valfri samlad inkorg, för att klara din dag.
  • +
  • Njut av en integritetsvänlig e-postklient som aldrig samlar in eller säljer dina personuppgifter. Vi kopplar dig direkt till din e-postleverantör. Det är det!
  • +
  • Ta din integritet till nästa nivå genom att använda OpenPGP-e-postkryptering (PGP/MIME) med appen "OpenKeychain" för att kryptera och dekryptera dina meddelanden.
  • +
  • Välj att synkronisera din e-post direkt, med bestämda intervaller eller på begäran. Hur du än vill kontrollera din e-post så är det upp till dig!
  • +
  • Hitta dina viktiga meddelanden med hjälp av både lokal sökning och sökning på serversidan.
  • +
+ +Kompatibilitet +
    +
  • Thunderbird fungerar med IMAP- och POP3-protokoll och stöder ett brett utbud av e-postleverantörer, inklusive Gmail, Outlook, Yahoo Mail, iCloud och mer.
  • +
+ +Varför använda Thunderbird +
    +
  • Det betrodda namnet inom e-post i över 20 år – nu på Android.
  • +
  • Thunderbird finansieras helt av frivilliga bidrag från våra användare. Vi delar inte dina personuppgifter. Du är aldrig produkten.
  • +
  • Gjord av ett team som är lika effektivitetsinriktat som du. Vi vill att du ska spendera minimal tid med att använda appen samtidigt som du får maximalt i gengäld.
  • +
  • Med bidragsgivare från hela världen har Thunderbird för Android översatts till mer än 20 språk.
  • +
  • Stöds av MZLA Technologies Corporation, ett helägt dotterbolag till Mozilla Foundation.
  • +
+ +Öppen källkod och community +
    +
  • Thunderbird är gratis och öppen källkod, vilket innebär att dess kod är tillgänglig för att se, ändra, använda och dela fritt. Dess licens säkerställer också att den kommer att vara gratis för alltid. Du kan tänka på Thunderbird som en gåva från tusentals bidragsgivare till dig.
  • +
  • Vi utvecklas i det fria med regelbundna, transparenta uppdateringar på vår blogg och e-postlistor.
  • +
  • Vår användarsupport drivs av vårt globala community. Hitta svaren du behöver, eller gå in i rollen som en bidragsgivare – oavsett om det är att svara på frågor, översätta appen eller berätta för dina vänner och familj om Thunderbird.
  • +
diff --git a/app-metadata/net.thunderbird.android/sv-SE/short_description.txt b/app-metadata/net.thunderbird.android/sv-SE/short_description.txt new file mode 100644 index 00000000000..0fe8d9106d8 --- /dev/null +++ b/app-metadata/net.thunderbird.android/sv-SE/short_description.txt @@ -0,0 +1 @@ +Thunderbird är en sekretessfokuserad e-postapp med 100 % öppen källkod. diff --git a/app-metadata/net.thunderbird.android/sv-SE/title.txt b/app-metadata/net.thunderbird.android/sv-SE/title.txt new file mode 100644 index 00000000000..8c048564118 --- /dev/null +++ b/app-metadata/net.thunderbird.android/sv-SE/title.txt @@ -0,0 +1 @@ +Thunderbird: Frigör din inkorg diff --git a/app-metadata/net.thunderbird.android/tr-TR/short_description.txt b/app-metadata/net.thunderbird.android/tr-TR/short_description.txt new file mode 100644 index 00000000000..3c0991dc552 --- /dev/null +++ b/app-metadata/net.thunderbird.android/tr-TR/short_description.txt @@ -0,0 +1 @@ +Thunderbird %100 açık kaynaklı, gizlilik odaklı bir e-posta uygulamasıdır. diff --git a/app-metadata/net.thunderbird.android/tr-TR/title.txt b/app-metadata/net.thunderbird.android/tr-TR/title.txt new file mode 100644 index 00000000000..f21c6af6fe7 --- /dev/null +++ b/app-metadata/net.thunderbird.android/tr-TR/title.txt @@ -0,0 +1 @@ +Thunderbird: Özgür E-posta diff --git a/app-metadata/net.thunderbird.android/uk/full_description.txt b/app-metadata/net.thunderbird.android/uk/full_description.txt new file mode 100644 index 00000000000..25037bc54e5 --- /dev/null +++ b/app-metadata/net.thunderbird.android/uk/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird - це потужний поштовий клієнт, орієнтований на приватність. Легко керуйте кількома обліковими записами електронної пошти з одного застосунку за допомогою опції «Об'єднана тека» для максимальної продуктивності. Створений на основі відкритих технологій і підтримуваний спеціальною командою розробників разом із глобальною спільнотою волонтерів, Thunderbird ніколи не розглядає ваші приватні дані як продукт. Thunderbird підтримується виключно коштом фінансових внесків наших користувачів, тому вам більше ніколи не доведеться бачити рекламу в електронних листах. + +Що ви можете робити +
    +
  • Відмовтеся від кількох застосунків і вебпошти. Використовуйте один застосунок з додатковою функцією «Об'єднані Вхідні», щоб керувати своїми справами протягом усього дня.
  • +
  • Користуйтеся поштовим клієнтом, який ніколи не збирає і не продає ваші особисті дані. Ми напряму з'єднуємо вас з вашим постачальником послуг електронної пошти. Це все!
  • +
  • Підніміть свою приватність на новий рівень, використовуючи шифрування електронної пошти OpenPGP (PGP/MIME) за допомогою застосунку «OpenKeychain» для шифрування та розшифрування ваших повідомлень.
  • +
  • Ви можете синхронізувати електронну пошту миттєво, через певні проміжки часу або на вимогу. Як саме ви хочете перевіряти свою електронну пошту, вирішувати вам!
  • +
  • Знаходьте важливі повідомлення за допомогою локального та серверного пошуку.
  • +
+ +Сумісність +
    +
  • Thunderbird працює з протоколами IMAP і POP3, підтримуючи широкий спектр провайдерів електронної пошти, включаючи Gmail, Outlook, Yahoo Mail, iCloud та інші.
  • +
+ +Чому варто користуватися Thunderbird +
    +
  • Ім'я, якому довіряють в електронній пошті вже понад 20 років, тепер і на Android.
  • +
  • Thunderbird повністю фінансується коштом добровільних внесків наших користувачів. Ми не видобуваємо ваші особисті дані. Ви ніколи не будете нашим засобом заробітку.
  • +
  • Створений командою, яка так само націлена на ефективність, як і ви. Ми хочемо, щоб ви витрачали якнайменше часу на користування застосунком і отримували якнайбільше користі.
  • +
  • Завдяки учасникам з усього світу Thunderbird для Android перекладено більш ніж 20 мовами.
  • +
  • За підтримки MZLA Technologies Corporation, дочірньої компанії Mozilla Foundation.
  • +
+ +Відкритість і спільнота +
    +
  • Thunderbird має вільний і відкритий код, що означає, що його код можна вільно переглядати, змінювати, використовувати й поширювати. Його ліцензія також гарантує, що він буде вільним назавжди. Ви можете вважати Thunderbird подарунком вам від тисяч учасників.
  • +
  • Ми розвиваємося відкрито, регулярно оновлюючи наш блог та списки розсилки.
  • +
  • Наша підтримка користувачів забезпечується глобальною спільнотою. Знайдіть відповіді, які вам потрібні, або візьміть на себе роль учасника — відповідайте на запитання, перекладайте застосунок або розповідайте про Thunderbird своїм друзям і родичам.
  • +
diff --git a/app-metadata/net.thunderbird.android/uk/short_description.txt b/app-metadata/net.thunderbird.android/uk/short_description.txt new file mode 100644 index 00000000000..a77893082f8 --- /dev/null +++ b/app-metadata/net.thunderbird.android/uk/short_description.txt @@ -0,0 +1 @@ +Thunderbird зі 100% відкритим кодом і приватноцентричний застосунок е-пошти. diff --git a/app-metadata/net.thunderbird.android/uk/title.txt b/app-metadata/net.thunderbird.android/uk/title.txt new file mode 100644 index 00000000000..d1fea193139 --- /dev/null +++ b/app-metadata/net.thunderbird.android/uk/title.txt @@ -0,0 +1 @@ +Thunderbird: Вільна е-пошта diff --git a/app-metadata/net.thunderbird.android/zh-CN/full_description.txt b/app-metadata/net.thunderbird.android/zh-CN/full_description.txt new file mode 100644 index 00000000000..224fe3f870b --- /dev/null +++ b/app-metadata/net.thunderbird.android/zh-CN/full_description.txt @@ -0,0 +1,31 @@ +Thunderbird 是功能强大、注重隐私的电子邮件应用。通过一个应用轻松管理多个电子邮件账号,并通过统一收件箱选项来最大限度地提高生产力。Thunderbird 基于开源技术构建,并得到了专门的开发团队和全球志愿者社区的支持,绝不会将您的私人数据视为产品。Thunderbird 仅由我们用户的捐款支持,因此您再也不会看到广告混入您的电子邮件中。 + +您可以做什么 +
    +
  • 摆脱多个应用和网络邮件。使用一个应用和可选的统一收件箱,即可轻松度过一天。
  • +
  • 享受隐私友好的电子邮件客户端,它永远不会收集或出售您的个人数据。我们直接将您连接到您的邮件服务提供者。就是这样!
  • +
  • 通过使用“OpenKeychain”应用的 OpenPGP 电子邮件加密(PGP/MIME)来加密和解密您的邮件,将您的隐私提升到一个新的水平。
  • +
  • 您可以选择立即、按设定的时间间隔或按需同步电子邮件。无论您想如何检查电子邮件,都取决于您!
  • +
  • 使用本地和服务器端搜索查找重要邮件。
  • +
+ +兼容性 +
    +
  • Thunderbird 使用 IMAP 和 POP3 协议,支持各种邮件服务提供者,包括 Gmail、Outlook、Yahoo Mail、iCloud 等。
  • +
+ +为什么使用 Thunderbird +
    +
  • 20 多年来电子邮件领域值得信赖的品牌——现在有 Android 版。
  • +
  • Thunderbird 的全部资金来自我们用户的自愿捐款。我们不会挖掘您的个人数据。您永远不是产品。
  • +
  • 由一支和您一样注重效率的团队创造。我们希望您花最少的时间使用本应用,同时获得最大的回报。
  • +
  • Thunderbird Android 版的贡献者来自世界各地,现已翻译成 20 多种语言。
  • +
  • 由 Mozilla 基金会的全资子公司 MZLA Technologies Corporation 提供支持。
  • +
+ +开源和社区 +
    +
  • Thunderbird 是自由和开源的,这意味着它的代码可以自由查看、修改、使用和共享。它的许可证还确保它将永远自由。您可以将 Thunderbird 视为数千名贡献者送给您的礼物。
  • +
  • 我们通过在我们的博客和邮件列表上透明的更新来公开开发。
  • +
  • 我们的用户支持由我们的全球社区提供支持。找到您需要的答案,或担任贡献者——无论是回答问题、翻译本应用还是向您的朋友和家人介绍 Thunderbird。
  • +
diff --git a/app-metadata/net.thunderbird.android/zh-CN/short_description.txt b/app-metadata/net.thunderbird.android/zh-CN/short_description.txt new file mode 100644 index 00000000000..1b2a5547a11 --- /dev/null +++ b/app-metadata/net.thunderbird.android/zh-CN/short_description.txt @@ -0,0 +1 @@ +Thunderbird 是 100% 开源、注重隐私的电子邮件应用。 diff --git a/app-metadata/net.thunderbird.android/zh-CN/title.txt b/app-metadata/net.thunderbird.android/zh-CN/title.txt new file mode 100644 index 00000000000..474ce1fa393 --- /dev/null +++ b/app-metadata/net.thunderbird.android/zh-CN/title.txt @@ -0,0 +1 @@ +Thunderbird:释放您的收件箱 diff --git a/app-thunderbird/src/main/res/values-enm/strings.xml b/app-thunderbird/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/app-thunderbird/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app-thunderbird/src/main/res/values-kab/strings.xml b/app-thunderbird/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/app-thunderbird/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app-thunderbird/src/main/res/values-kk/strings.xml b/app-thunderbird/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/app-thunderbird/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app-thunderbird/src/main/res/values-pt/strings.xml b/app-thunderbird/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/app-thunderbird/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/core/ui/compose/designsystem/src/main/res/values-enm/strings.xml b/core/ui/compose/designsystem/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/core/ui/compose/designsystem/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/core/ui/compose/designsystem/src/main/res/values-hr/strings.xml b/core/ui/compose/designsystem/src/main/res/values-hr/strings.xml index a6b3daec935..671c04d2587 100644 --- a/core/ui/compose/designsystem/src/main/res/values-hr/strings.xml +++ b/core/ui/compose/designsystem/src/main/res/values-hr/strings.xml @@ -1,2 +1,8 @@ - \ No newline at end of file + + Sakrij lozinku + Prikaži lozinku + Adresa e-pošte + Lozinka + Pokušaj ponovo + \ No newline at end of file diff --git a/core/ui/compose/designsystem/src/main/res/values-kab/strings.xml b/core/ui/compose/designsystem/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/core/ui/compose/designsystem/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/core/ui/compose/designsystem/src/main/res/values-kk/strings.xml b/core/ui/compose/designsystem/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/core/ui/compose/designsystem/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/core/ui/compose/designsystem/src/main/res/values-pt/strings.xml b/core/ui/compose/designsystem/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/core/ui/compose/designsystem/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/core/ui/compose/designsystem/src/main/res/values-sv/strings.xml b/core/ui/compose/designsystem/src/main/res/values-sv/strings.xml index 993739e3c68..42b31541762 100644 --- a/core/ui/compose/designsystem/src/main/res/values-sv/strings.xml +++ b/core/ui/compose/designsystem/src/main/res/values-sv/strings.xml @@ -1,7 +1,7 @@ Dölj lösenord - E-post adress + E-postadress Visa lösenord Lösenord Försök igen diff --git a/core/ui/compose/designsystem/src/main/res/values-uk/strings.xml b/core/ui/compose/designsystem/src/main/res/values-uk/strings.xml index a6b3daec935..2e798fb0c78 100644 --- a/core/ui/compose/designsystem/src/main/res/values-uk/strings.xml +++ b/core/ui/compose/designsystem/src/main/res/values-uk/strings.xml @@ -1,2 +1,8 @@ - \ No newline at end of file + + Показати пароль + Сховати пароль + Адреса е-пошти + Пароль + Повторити спробу + \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-az/strings.xml b/feature/account/common/src/main/res/values-az/strings.xml index 44cdd477624..ebf0c07def9 100644 --- a/feature/account/common/src/main/res/values-az/strings.xml +++ b/feature/account/common/src/main/res/values-az/strings.xml @@ -2,4 +2,5 @@ Növbəti Geri + Server aşağıdakı məlumatı verdi: \n%s \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-bg/strings.xml b/feature/account/common/src/main/res/values-bg/strings.xml index aa5ac627558..16cdb5a13ba 100644 --- a/feature/account/common/src/main/res/values-bg/strings.xml +++ b/feature/account/common/src/main/res/values-bg/strings.xml @@ -2,4 +2,5 @@ Напред Назад + Сървърът връща следното съобщение\n%s \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-br/strings.xml b/feature/account/common/src/main/res/values-br/strings.xml index a6b3daec935..b1055386c1c 100644 --- a/feature/account/common/src/main/res/values-br/strings.xml +++ b/feature/account/common/src/main/res/values-br/strings.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + Da heul + \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-enm/strings.xml b/feature/account/common/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/common/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-hr/strings.xml b/feature/account/common/src/main/res/values-hr/strings.xml index a6b3daec935..cd080210fcb 100644 --- a/feature/account/common/src/main/res/values-hr/strings.xml +++ b/feature/account/common/src/main/res/values-hr/strings.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + Sljedeće + Natrag + Poslužitelj je vratio sljedeću poruku:\n%s + \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-kab/strings.xml b/feature/account/common/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..56d176801fd --- /dev/null +++ b/feature/account/common/src/main/res/values-kab/strings.xml @@ -0,0 +1,5 @@ + + + Uḍfir + Uɣal + \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-kk/strings.xml b/feature/account/common/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/common/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-pt/strings.xml b/feature/account/common/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/common/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/common/src/main/res/values-uk/strings.xml b/feature/account/common/src/main/res/values-uk/strings.xml index a6b3daec935..eec6b48fe2a 100644 --- a/feature/account/common/src/main/res/values-uk/strings.xml +++ b/feature/account/common/src/main/res/values-uk/strings.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + Далі + Назад + Сервер повернув таке повідомлення:\n%s + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ar/strings.xml b/feature/account/edit/src/main/res/values-ar/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-ar/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-az/strings.xml b/feature/account/edit/src/main/res/values-az/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-az/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-be/strings.xml b/feature/account/edit/src/main/res/values-be/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-be/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-bg/strings.xml b/feature/account/edit/src/main/res/values-bg/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-bg/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-br/strings.xml b/feature/account/edit/src/main/res/values-br/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-br/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-bs/strings.xml b/feature/account/edit/src/main/res/values-bs/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-bs/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ca/strings.xml b/feature/account/edit/src/main/res/values-ca/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-ca/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-co/strings.xml b/feature/account/edit/src/main/res/values-co/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-co/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-cs/strings.xml b/feature/account/edit/src/main/res/values-cs/strings.xml new file mode 100644 index 00000000000..497e4ea8232 --- /dev/null +++ b/feature/account/edit/src/main/res/values-cs/strings.xml @@ -0,0 +1,6 @@ + + + Nepodařilo se uložit nastavení serveru + Ukládání nastavení serveru… + Nastavení serveru uložena + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-cy/strings.xml b/feature/account/edit/src/main/res/values-cy/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-cy/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-da/strings.xml b/feature/account/edit/src/main/res/values-da/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-da/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-de/strings.xml b/feature/account/edit/src/main/res/values-de/strings.xml new file mode 100644 index 00000000000..e257ccfb216 --- /dev/null +++ b/feature/account/edit/src/main/res/values-de/strings.xml @@ -0,0 +1,6 @@ + + + Servereinstellungen werden gespeichert… + Servereinstellungen gespeichert + Servereinstellungen konnten nicht gespeichert werden + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-el/strings.xml b/feature/account/edit/src/main/res/values-el/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-el/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-en-rGB/strings.xml b/feature/account/edit/src/main/res/values-en-rGB/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-en-rGB/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-enm/strings.xml b/feature/account/edit/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-eo/strings.xml b/feature/account/edit/src/main/res/values-eo/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-eo/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-es/strings.xml b/feature/account/edit/src/main/res/values-es/strings.xml new file mode 100644 index 00000000000..a4fab4e445c --- /dev/null +++ b/feature/account/edit/src/main/res/values-es/strings.xml @@ -0,0 +1,6 @@ + + + Guardando los ajustes del servidor… + Error al guardar la configuración del servidor + Configuración del servidor guardada + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-et/strings.xml b/feature/account/edit/src/main/res/values-et/strings.xml new file mode 100644 index 00000000000..628a16750cc --- /dev/null +++ b/feature/account/edit/src/main/res/values-et/strings.xml @@ -0,0 +1,6 @@ + + + Serveri seadistuste salvestamine ei õnnestunud + Salvestame serveri seadistusi… + Serveri seadistused on salvestatud + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-eu/strings.xml b/feature/account/edit/src/main/res/values-eu/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-eu/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-fa/strings.xml b/feature/account/edit/src/main/res/values-fa/strings.xml new file mode 100644 index 00000000000..3e2fa75db07 --- /dev/null +++ b/feature/account/edit/src/main/res/values-fa/strings.xml @@ -0,0 +1,6 @@ + + + ذخیره کردن تنظیمات کارساز… + شکست در ذخیرهٔ تنظیمات کارساز + تنظیمات کارساز ذخیره شد + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-fi/strings.xml b/feature/account/edit/src/main/res/values-fi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-fi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-fr/strings.xml b/feature/account/edit/src/main/res/values-fr/strings.xml new file mode 100644 index 00000000000..04e5e00693f --- /dev/null +++ b/feature/account/edit/src/main/res/values-fr/strings.xml @@ -0,0 +1,6 @@ + + + Enregistrement des paramètres du serveur… + Échec à l’enregistrement des paramètres serveur + Paramètres du serveur enregistrés + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-fy/strings.xml b/feature/account/edit/src/main/res/values-fy/strings.xml new file mode 100644 index 00000000000..feb66cceda3 --- /dev/null +++ b/feature/account/edit/src/main/res/values-fy/strings.xml @@ -0,0 +1,6 @@ + + + Serverynstellingen bewarje… + Serverynstellingen net bewarre + Serverynstellingen bewarre + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-gd/strings.xml b/feature/account/edit/src/main/res/values-gd/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-gd/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-gl/strings.xml b/feature/account/edit/src/main/res/values-gl/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-gl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-hi/strings.xml b/feature/account/edit/src/main/res/values-hi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-hi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-hr/strings.xml b/feature/account/edit/src/main/res/values-hr/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-hr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-hu/strings.xml b/feature/account/edit/src/main/res/values-hu/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-hu/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-hy/strings.xml b/feature/account/edit/src/main/res/values-hy/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-hy/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-in/strings.xml b/feature/account/edit/src/main/res/values-in/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-in/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-is/strings.xml b/feature/account/edit/src/main/res/values-is/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-is/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-it/strings.xml b/feature/account/edit/src/main/res/values-it/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-it/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-iw/strings.xml b/feature/account/edit/src/main/res/values-iw/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-iw/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ja/strings.xml b/feature/account/edit/src/main/res/values-ja/strings.xml new file mode 100644 index 00000000000..02e62449475 --- /dev/null +++ b/feature/account/edit/src/main/res/values-ja/strings.xml @@ -0,0 +1,6 @@ + + + サーバー設定の保存中… + サーバー設定を保存できませんでした + サーバー設定を保存しました + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ka/strings.xml b/feature/account/edit/src/main/res/values-ka/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-ka/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-kab/strings.xml b/feature/account/edit/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..bd8e66fc234 --- /dev/null +++ b/feature/account/edit/src/main/res/values-kab/strings.xml @@ -0,0 +1,4 @@ + + + Asekles n iɣewwaṛen n useqdac… + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-kk/strings.xml b/feature/account/edit/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ko/strings.xml b/feature/account/edit/src/main/res/values-ko/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-ko/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-lt/strings.xml b/feature/account/edit/src/main/res/values-lt/strings.xml new file mode 100644 index 00000000000..e7f4f620180 --- /dev/null +++ b/feature/account/edit/src/main/res/values-lt/strings.xml @@ -0,0 +1,6 @@ + + + Įrašyti serverio nustatymai + Įrašoma serverio nustatymai… + Nepavyko įrašyti serverio nustatymų. + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-lv/strings.xml b/feature/account/edit/src/main/res/values-lv/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-lv/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ml/strings.xml b/feature/account/edit/src/main/res/values-ml/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-ml/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-nb-rNO/strings.xml b/feature/account/edit/src/main/res/values-nb-rNO/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-nb-rNO/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-nl/strings.xml b/feature/account/edit/src/main/res/values-nl/strings.xml new file mode 100644 index 00000000000..0710aa873a9 --- /dev/null +++ b/feature/account/edit/src/main/res/values-nl/strings.xml @@ -0,0 +1,6 @@ + + + Serverinstellingen opslaan… + Serverinstellingen niet opgeslagen + Serverinstellingen opgeslagen + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-nn/strings.xml b/feature/account/edit/src/main/res/values-nn/strings.xml new file mode 100644 index 00000000000..44b7f923a8f --- /dev/null +++ b/feature/account/edit/src/main/res/values-nn/strings.xml @@ -0,0 +1,6 @@ + + + Lagrar tenar-innstillingar… + Klarte ikkje lagre tenar-innstillingar + Tenar-innstillingar lagra + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-pl/strings.xml b/feature/account/edit/src/main/res/values-pl/strings.xml new file mode 100644 index 00000000000..5bb668a2246 --- /dev/null +++ b/feature/account/edit/src/main/res/values-pl/strings.xml @@ -0,0 +1,6 @@ + + + Zapisywanie ustawień serwera… + Nie udało się zapisać ustawień serwera + Zapisano ustawienia serwera + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-pt-rBR/strings.xml b/feature/account/edit/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 00000000000..e6746199517 --- /dev/null +++ b/feature/account/edit/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,6 @@ + + + Salvando configurações do servidor… + Falhou ao salvar configurações do servidor + Configurações do servidor salvas + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-pt-rPT/strings.xml b/feature/account/edit/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-pt/strings.xml b/feature/account/edit/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ro/strings.xml b/feature/account/edit/src/main/res/values-ro/strings.xml new file mode 100644 index 00000000000..74ec32193a7 --- /dev/null +++ b/feature/account/edit/src/main/res/values-ro/strings.xml @@ -0,0 +1,6 @@ + + + Salvarea configurației serverului a eșuat + Se salvează configurației serverului… + Configurația serverului a fost salvată + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ru/strings.xml b/feature/account/edit/src/main/res/values-ru/strings.xml new file mode 100644 index 00000000000..6b1eab1d43e --- /dev/null +++ b/feature/account/edit/src/main/res/values-ru/strings.xml @@ -0,0 +1,6 @@ + + + Сохранение настроек сервера… + Невозможно сохранить настройки сервера + Настройки сервера сохранены + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-sk/strings.xml b/feature/account/edit/src/main/res/values-sk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-sk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-sl/strings.xml b/feature/account/edit/src/main/res/values-sl/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-sl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-sq/strings.xml b/feature/account/edit/src/main/res/values-sq/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-sq/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-sr/strings.xml b/feature/account/edit/src/main/res/values-sr/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-sr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-sv/strings.xml b/feature/account/edit/src/main/res/values-sv/strings.xml new file mode 100644 index 00000000000..b8086521424 --- /dev/null +++ b/feature/account/edit/src/main/res/values-sv/strings.xml @@ -0,0 +1,6 @@ + + + Sparar serverinställningar… + Det gick inte att spara serverinställningarna + Serverinställningar sparade + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-ta/strings.xml b/feature/account/edit/src/main/res/values-ta/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-ta/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-tr/strings.xml b/feature/account/edit/src/main/res/values-tr/strings.xml new file mode 100644 index 00000000000..0c976edbe15 --- /dev/null +++ b/feature/account/edit/src/main/res/values-tr/strings.xml @@ -0,0 +1,6 @@ + + + Sunucu ayarları kaydediliyor… + Sunucu ayarları kaydedilemedi + Sunucu ayarları kaydedildi + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-uk/strings.xml b/feature/account/edit/src/main/res/values-uk/strings.xml new file mode 100644 index 00000000000..12f27ee0c9a --- /dev/null +++ b/feature/account/edit/src/main/res/values-uk/strings.xml @@ -0,0 +1,6 @@ + + + Збереження налаштувань сервера… + Не вдалося зберегти налаштування сервера + Налаштування сервера збережено + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-vi/strings.xml b/feature/account/edit/src/main/res/values-vi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-vi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-zh-rCN/strings.xml b/feature/account/edit/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 00000000000..863bb3f7d3c --- /dev/null +++ b/feature/account/edit/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,6 @@ + + + 正在保存服务器设置… + 保存服务器设置失败 + 服务器设置已保存 + \ No newline at end of file diff --git a/feature/account/edit/src/main/res/values-zh-rTW/strings.xml b/feature/account/edit/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/edit/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/oauth/src/main/res/values-enm/strings.xml b/feature/account/oauth/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/oauth/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/oauth/src/main/res/values-hr/strings.xml b/feature/account/oauth/src/main/res/values-hr/strings.xml index a6b3daec935..724d6baef8a 100644 --- a/feature/account/oauth/src/main/res/values-hr/strings.xml +++ b/feature/account/oauth/src/main/res/values-hr/strings.xml @@ -1,2 +1,12 @@ - \ No newline at end of file + + Preusmjerit ćemo Vas vašem davatelju usluga e-pošte da se prijavite. Morate aplikaciji odobriti pristup vašem računu e-pošte. + Prijavite se + Prijavite se s Googleom + Prijavite se koristeći OAuth + OAuth prijava nije uspjela + Autorizacija poništena + OAuth 2.0 trenutačno nije podržan kod ovog pružatelja usluga e-pošte. + Aplikacija nije mogla pronaći preglednik za davanje pristupa vašem računu. + Autorizacija nije uspjela sa sljedećom pogreškom: %s + \ No newline at end of file diff --git a/feature/account/oauth/src/main/res/values-kab/strings.xml b/feature/account/oauth/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/oauth/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/oauth/src/main/res/values-kk/strings.xml b/feature/account/oauth/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/oauth/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/oauth/src/main/res/values-nn/strings.xml b/feature/account/oauth/src/main/res/values-nn/strings.xml index 1005daad9f8..3231ab2f0b5 100644 --- a/feature/account/oauth/src/main/res/values-nn/strings.xml +++ b/feature/account/oauth/src/main/res/values-nn/strings.xml @@ -1,7 +1,12 @@ - + Logg inn Logg in med Google Du vil bli sendt til e-posttilbydaren din for innlogging. Du må gje programmet tilgang til e-postkontoen din. Loggar inn med OAuth + Mislykka innlogging med OAuth + Godkjenning avbroten + Mislykka godkjenning med følgjande feil: %s + OAuth 2.0 er ikkje støtta med denne tilbydaren. + Appen klarte ikkje å finne nokon nettlesar å bruke for å innvilge tilgang til kontoen din. \ No newline at end of file diff --git a/feature/account/oauth/src/main/res/values-pl/strings.xml b/feature/account/oauth/src/main/res/values-pl/strings.xml index 4e0db22e4bc..41a1b02b21d 100644 --- a/feature/account/oauth/src/main/res/values-pl/strings.xml +++ b/feature/account/oauth/src/main/res/values-pl/strings.xml @@ -2,7 +2,7 @@ Zaloguj się przez Google Logowanie OAuth nie powiodło się - Autoryzacja nie powiodła się z powodu następującego błędu: %s + Autoryzacja nie powiodła się z powodu następującego błędu: %s Aplikacja nie mogła znaleźć przeglądarki, za pomocą której można uzyskać dostęp do Twojego konta. Ten dostawca nie obsługuje obecnie protokołu OAuth 2.0. Autoryzacja anulowana diff --git a/feature/account/oauth/src/main/res/values-pt/strings.xml b/feature/account/oauth/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/oauth/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/oauth/src/main/res/values-uk/strings.xml b/feature/account/oauth/src/main/res/values-uk/strings.xml index a6b3daec935..265ed3a9be8 100644 --- a/feature/account/oauth/src/main/res/values-uk/strings.xml +++ b/feature/account/oauth/src/main/res/values-uk/strings.xml @@ -1,2 +1,12 @@ - \ No newline at end of file + + Ми переадресуємо вас до вашого постачальника послуг електронної пошти для входу. Вам потрібно надати застосунку доступ до вашого облікового запису електронної пошти. + Увійти + Увійти за допомогою Google + Увійти використовуючи OAuth + Не вдалося ввійти за допомогою OAuth + Авторизація скасована + Не вдалося авторизувати через цю помилку: %s + Цей постачальник наразі не підтримує OAuth 2.0. + Застосунок не може знайти браузер для надання доступу до вашого облікового запису. + \ No newline at end of file diff --git a/feature/account/server/certificate/src/main/res/values-enm/strings.xml b/feature/account/server/certificate/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/certificate/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/certificate/src/main/res/values-hr/strings.xml b/feature/account/server/certificate/src/main/res/values-hr/strings.xml index a6b3daec935..9ef1a1fb5a0 100644 --- a/feature/account/server/certificate/src/main/res/values-hr/strings.xml +++ b/feature/account/server/certificate/src/main/res/values-hr/strings.xml @@ -1,2 +1,13 @@ - \ No newline at end of file + + Upozorenje + Greška certifikata + Aplikacija je otkrila potencijalnu sigurnosnu prijetnju i nije nastavila s povezivanjem na %s.\nAko nastavite, napadači bi mogli ukrasti vaše osobne podatke poput lozinke ili e-mailove. + Vrati se (preporučeno) + Potvrdi rizik i nastavi + Certifikat servera + Nije valjano prije + Nije valjano nakon + Napredno + Izdavatelj + \ No newline at end of file diff --git a/feature/account/server/certificate/src/main/res/values-kab/strings.xml b/feature/account/server/certificate/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/certificate/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/certificate/src/main/res/values-kk/strings.xml b/feature/account/server/certificate/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/certificate/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/certificate/src/main/res/values-pl/strings.xml b/feature/account/server/certificate/src/main/res/values-pl/strings.xml index c32bba3a6b3..cb3869014e0 100644 --- a/feature/account/server/certificate/src/main/res/values-pl/strings.xml +++ b/feature/account/server/certificate/src/main/res/values-pl/strings.xml @@ -2,7 +2,7 @@ Wróć (zalecane) Zaawansowane - Zaakceptuj ryzyko i kontynuuj + Zaakceptuj ryzyko i kontynuuj Certyfikat serwera Alternatywne nazwy podmiotu Nieważny przed @@ -12,6 +12,5 @@ Ostrzeżenie Błąd certyfikatu Podmiot - Aplikacja wykryła potencjalne zagrożenie bezpieczeństwa i nie nawiązała dalszego połączenia z %s. -\nJeśli będziesz kontynuować, osoby atakujące mogą spróbować ukraść informacje, takie jak Twoje hasło lub adresy e-mail. + Aplikacja wykryła potencjalne zagrożenie bezpieczeństwa i nie nawiązała dalszego połączenia z %s. \nJeśli będziesz kontynuować, osoby atakujące mogą spróbować ukraść informacje, takie jak Twoje hasło lub adresy e-mail. \ No newline at end of file diff --git a/feature/account/server/certificate/src/main/res/values-pt/strings.xml b/feature/account/server/certificate/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/certificate/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/certificate/src/main/res/values-uk/strings.xml b/feature/account/server/certificate/src/main/res/values-uk/strings.xml index a6b3daec935..011afe3467c 100644 --- a/feature/account/server/certificate/src/main/res/values-uk/strings.xml +++ b/feature/account/server/certificate/src/main/res/values-uk/strings.xml @@ -1,2 +1,16 @@ - \ No newline at end of file + + Попередження + Помилка сертифіката + Додатково + Погодитися на ризик і продовжити + Альтернативні імена суб\'єктів + Недійсний до + Недійсний після + Суб\'єкт + Цифрові відбитки + Застосунок виявив потенційну загрозу безпеці та припинив з\'єднання з %s.\nЯкщо ви продовжите, зловмисники можуть спробувати викрасти вашу інформацію, наприклад, пароль або електронну пошту. + Повернутися (рекомендовано) + Сертифікат сервера + Видавець + \ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-bg/strings.xml b/feature/account/server/settings/src/main/res/values-bg/strings.xml index a5e011e2fe0..36587a10dfb 100644 --- a/feature/account/server/settings/src/main/res/values-bg/strings.xml +++ b/feature/account/server/settings/src/main/res/values-bg/strings.xml @@ -6,7 +6,7 @@ Паролата е задължителна. OAuth 2.0 Никаква - Криптирана парола + Шифрована парола Автоматично намиране на IMAP пространство Настройки на входящ сървър Обикновена парола @@ -30,4 +30,6 @@ Сигурност Потвърдете самоличността си За да видите паролата си тук, включете заключването на екрана на това устройство. + Изпращане на информация до клиента + Невалиден IP адрес или име на хост \ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-enm/strings.xml b/feature/account/server/settings/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/settings/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-kab/strings.xml b/feature/account/server/settings/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/settings/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-kk/strings.xml b/feature/account/server/settings/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/settings/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-nn/strings.xml b/feature/account/server/settings/src/main/res/values-nn/strings.xml index f6cf08c25db..9d1de924d49 100644 --- a/feature/account/server/settings/src/main/res/values-nn/strings.xml +++ b/feature/account/server/settings/src/main/res/values-nn/strings.xml @@ -28,4 +28,8 @@ Ugyldig IP eller vertsnamn Brukarnamn påkravd. For å sjå passordet ditt her, aktiver skjermlås på denne eininga. + Verifiser din identitet + IMAP prefiks kan ikkje vere tom. + Autentisering + IMAP-sti prefiks \ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-pl/strings.xml b/feature/account/server/settings/src/main/res/values-pl/strings.xml index 4466afd8521..03f1af15462 100644 --- a/feature/account/server/settings/src/main/res/values-pl/strings.xml +++ b/feature/account/server/settings/src/main/res/values-pl/strings.xml @@ -31,5 +31,5 @@ Odblokuj, aby zobaczyć swoje hasło Aby zobaczyć tutaj swoje hasło, ustaw blokadę ekranu na tym urządzeniu. Nieprawidłowy adres IP lub nazwa hosta - Wyślij informacje o kliencie + Wyślij informacje o kliencie \ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-pt/strings.xml b/feature/account/server/settings/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/settings/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-sv/strings.xml b/feature/account/server/settings/src/main/res/values-sv/strings.xml index fcc7c9b0fca..2e22c0f7f12 100644 --- a/feature/account/server/settings/src/main/res/values-sv/strings.xml +++ b/feature/account/server/settings/src/main/res/values-sv/strings.xml @@ -13,15 +13,15 @@ Verifiera din identitet Använd kompression Port krävs. - Klient certifikat - IMAP sökväg prefix + Klientcertifikat + IMAP-sökvägsprefix SSL/TLS Protokoll Lås upp för att visa ditt lösenord Port är ogiltig (måste vara 1-65535). StartTLS - Klient certifikat - IMAP prefix får inte vara tomt. + Klientcertifikat + IMAP-prefixet får inte vara tomt. Ingen För att se ditt lösenord här, aktivera skärmlås på den här enheten. Server @@ -31,5 +31,5 @@ Port Användarnamn Ogiltig IP eller värdnamn - Skicka klient information + Skicka klientinformation
\ No newline at end of file diff --git a/feature/account/server/settings/src/main/res/values-uk/strings.xml b/feature/account/server/settings/src/main/res/values-uk/strings.xml index 4409e9ea142..cbae6d0d74b 100644 --- a/feature/account/server/settings/src/main/res/values-uk/strings.xml +++ b/feature/account/server/settings/src/main/res/values-uk/strings.xml @@ -5,18 +5,31 @@ Сервер Безпека Порт - Аутентифікація - Ім’я користувача - Жодна - Жодна + Автентифікація + Ім\'я користувача + Немає + Немає Звичайний пароль Зашифрований пароль Сертифікат клієнта - Жоден + Немає Сертифікат клієнта Налаштування вхідного сервера Автовизначення області назв IMAP Префікс шляху IMAP - Стиснення + Використовувати стиснення Налаштування вихідного сервера + Недійсний IP або ім\'я хосту + StartTLS + SSL/TLS + OAuth 2.0 + Порт недійсний (має бути 1-65535). + Ім\'я користувача обов\'язкове. + Ім\'я сервера обов\'язкове. + Порт обов\'язковий. + Пароль обов\'язковий. + Префікс IMAP не може бути порожнім. + Щоб переглянути тут свій пароль, увімкніть блокування екрана на цьому пристрої. + Підтвердьте свою особистість + Розблокуйте, щоб переглянути пароль \ No newline at end of file diff --git a/feature/account/server/validation/src/main/res/values-enm/strings.xml b/feature/account/server/validation/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/validation/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/validation/src/main/res/values-kab/strings.xml b/feature/account/server/validation/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/validation/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/validation/src/main/res/values-kk/strings.xml b/feature/account/server/validation/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/validation/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/validation/src/main/res/values-nn/strings.xml b/feature/account/server/validation/src/main/res/values-nn/strings.xml index a65aa8e5705..8f9e35211bf 100644 --- a/feature/account/server/validation/src/main/res/values-nn/strings.xml +++ b/feature/account/server/validation/src/main/res/values-nn/strings.xml @@ -9,4 +9,11 @@ Nettverksfeil Tenarfeil Detaljar:\n%s + Autentiseringsfeil + Sjekker innkommande tenar-innstillingar… + Sjekking av innkommande tenar-innstillingar feila + Sjekking av utgåande tenar-innstillingar feila + Utgåande tenar-innstillingar verifisert + Innkommande tenar-innstillingar verifisert + Sjekkar utgåande tenar-innstillingar… \ No newline at end of file diff --git a/feature/account/server/validation/src/main/res/values-pt/strings.xml b/feature/account/server/validation/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/server/validation/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/server/validation/src/main/res/values-sv/strings.xml b/feature/account/server/validation/src/main/res/values-sv/strings.xml index 21a0d829e9e..4216ee6b2dd 100644 --- a/feature/account/server/validation/src/main/res/values-sv/strings.xml +++ b/feature/account/server/validation/src/main/res/values-sv/strings.xml @@ -11,10 +11,9 @@ Var god logga in Misslyckades att kontrollera inställningarna för utgående server Inkommande serverinställningar verifierade - Saknar serverkapabilitet + Serverkapacitet saknas Klientcertifikatet kunde inte nås - Servern saknar denna kapabilitet: -\n%s + Servern saknar denna kapacitet:\n%s Klientcertifikatet är inte längre giltigt Detaljer: \n%s diff --git a/feature/account/server/validation/src/main/res/values-uk/strings.xml b/feature/account/server/validation/src/main/res/values-uk/strings.xml index a6b3daec935..9b3ff78a196 100644 --- a/feature/account/server/validation/src/main/res/values-uk/strings.xml +++ b/feature/account/server/validation/src/main/res/values-uk/strings.xml @@ -1,2 +1,19 @@ - \ No newline at end of file + + Сертифікат клієнта більше недійсний + Подробиці:\n%s + Перевірка налаштувань вхідного сервера… + Не вдалося перевірити вхідні налаштування сервера + Налаштування вхідного сервера підтверджено + Перевірка налаштувань вихідного сервера… + Налаштування вихідного сервера підтверджено + Будь ласка, увійдіть + Не вдалося перевірити налаштування вихідного сервера + Помилка автентифікації + Помилка мережі + Помилка сервера + Невідома помилка + Відсутня можливість сервера + Не вдалося отримати доступ до сертифіката клієнта + На сервері відсутня ця можливість:\n%s + \ No newline at end of file diff --git a/feature/account/setup/src/main/res/values-bg/strings.xml b/feature/account/setup/src/main/res/values-bg/strings.xml index 1982ae29ce2..05254f0775b 100644 --- a/feature/account/setup/src/main/res/values-bg/strings.xml +++ b/feature/account/setup/src/main/res/values-bg/strings.xml @@ -14,7 +14,7 @@ Имейл адресът е задължителен. Неуспешно зареждане на имейл настройки Одобрявам тези настройки - Мрежа + Мрежова грешка. Моля проверете връзката си и опитайте отново. Имейл адресът не беше разпознат като валиден. Намиране на данни за имейла Името на акаунта не може да бъде празно. @@ -27,7 +27,7 @@ Този имейл адрес не се поддържа. Създаване на акаунт… Име на акаунта - Име, което да се показва + Вашето име Името за визуализация е задължително. Възникна грешка при създаването на акаунта Никога diff --git a/feature/account/setup/src/main/res/values-enm/strings.xml b/feature/account/setup/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/setup/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/setup/src/main/res/values-kab/strings.xml b/feature/account/setup/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/setup/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/setup/src/main/res/values-kk/strings.xml b/feature/account/setup/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/setup/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/setup/src/main/res/values-nb-rNO/strings.xml b/feature/account/setup/src/main/res/values-nb-rNO/strings.xml index 12795721cda..83415ac5fc3 100644 --- a/feature/account/setup/src/main/res/values-nb-rNO/strings.xml +++ b/feature/account/setup/src/main/res/values-nb-rNO/strings.xml @@ -22,7 +22,7 @@ Klarte ikke å laste inn e-postoppsett Jeg stoler på dette oppsettet Navnet ditt kreves. - Nettverk + Nettverksfeil. Vennligst sjekk tilkoblingen din og prøv på nytt. Dette er ikke gjenkjent som en gyldig e-postadresse. Aldri Finner oppsett … diff --git a/feature/account/setup/src/main/res/values-nn/strings.xml b/feature/account/setup/src/main/res/values-nn/strings.xml index c0aacf6a5ea..a37892c3998 100644 --- a/feature/account/setup/src/main/res/values-nn/strings.xml +++ b/feature/account/setup/src/main/res/values-nn/strings.xml @@ -51,4 +51,12 @@ 1 melding %d meldingar + Nettverksfeil. Ver vennleg og sjekk nettverkstatus, og prøv igjen. + Spesifiser spesialmapper for kontoen din. + Hentar liste over mapper… + Kunne ikkje hente liste over mapper frå tenaren + Alle spesialmapper har vorte konfigurert automatisk av tenaren. + Sjekk frekvens + \"Automatisk\"-oppføringa vil følgje endringar frå tenaren automatisk. Den gjeldande tenar-verdien er vist i parantes. + Me mottok konfigurasjonen for e-post-tenaren din over ein tilkopling som ikkje var så sikker som med hadde likt. Det betyr at det er ein liten sjanse nokon kan ha tukla med den. Kan du dobbelsjekke at den mottekne konfigurasjonen er rett? \ No newline at end of file diff --git a/feature/account/setup/src/main/res/values-pl/strings.xml b/feature/account/setup/src/main/res/values-pl/strings.xml index fefb2fe0840..5b4461cb0b0 100644 --- a/feature/account/setup/src/main/res/values-pl/strings.xml +++ b/feature/account/setup/src/main/res/values-pl/strings.xml @@ -18,11 +18,11 @@ Nazwa konta Znaleziono konfigurację Adres e-mail jest wymagany. - Twoje imię i nazwisko + Twoje imię i nazwisko Nie udało się wczytać konfiguracji poczty e-mail Ufam tej konfiguracji - Twoje imię i nazwisko jest wymagane. - Błąd sieci. Sprawdź stan połączenia i spróbuj ponownie. + Twoje imię i nazwisko jest wymagane. + Błąd sieci. Sprawdź stan połączenia i spróbuj ponownie. Nie jest rozpoznawany jako prawidłowy adres e-mail. Nigdy Sprawdzanie konfiguracji… @@ -37,7 +37,7 @@ Wszystkie foldery specjalne zostały skonfigurowane automatycznie przez serwer. Automatyczny (%s) Folder wersji roboczych - Nie udało się pobrać listy folderów z serwera + Nie udało się pobrać listy folderów z serwera Pobieranie listy folderów… Określ foldery specjalne dla swojego konta. Folder wysłanych @@ -45,7 +45,7 @@ Folder kosza Folder archiwum Folder spamu - Pozycja „Automatyczny” będzie podążać automatycznie za zmianami wprowadzonymi przez serwer. Bieżąca wartość serwera jest wyświetlana w nawiasach. + Pozycja „Automatyczny” będzie podążać automatycznie za zmianami wprowadzonymi przez serwer. Bieżąca wartość serwera jest wyświetlana w nawiasach. Hasło jest wymagane. Co minutę diff --git a/feature/account/setup/src/main/res/values-pt/strings.xml b/feature/account/setup/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/account/setup/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/account/setup/src/main/res/values-sv/strings.xml b/feature/account/setup/src/main/res/values-sv/strings.xml index 11a3669df52..57efa1acf8a 100644 --- a/feature/account/setup/src/main/res/values-sv/strings.xml +++ b/feature/account/setup/src/main/res/values-sv/strings.xml @@ -1,7 +1,7 @@ Kontonamn kan inte vara tomt. - Kolla efter ny e-post frekvens + Frekvenskontroll Konfigurera automatiskt Denna konfiguration är inte pålitlig E-postsignatur @@ -19,7 +19,7 @@ Misslyckades att ladda e-postkonfiguration Jag litar på denna konfiguration Ditt namn krävs. - Nätverksfel. Vänligen kontrollera din anslutningsstatus och försök igen. + Nätverksfel. Vänligen se över din uppkoppling och försök igen. Aldrig Söker upp konfiguration… Synkroniseringsinställningar @@ -45,7 +45,7 @@ Papperskorgen mapp Arkiv mapp Spam mapp - Den \"Automatiska\" Inmatningen följer automatiskt ändringar som görs av servern. Det aktuella servervärdet visas inom parentes. + Inmatningen \"Automatisk\" följer automatiskt ändringar som görs av servern. Det aktuella servervärdet visas inom parentes. Lösenord krävs. 1 meddelande @@ -53,10 +53,10 @@ Varje minut - Var %d minuter + Var %d minut Varje timme - Var %d timmar + Var %d timme \ No newline at end of file diff --git a/feature/account/setup/src/main/res/values-uk/strings.xml b/feature/account/setup/src/main/res/values-uk/strings.xml index a6b3daec935..3160e3a50a6 100644 --- a/feature/account/setup/src/main/res/values-uk/strings.xml +++ b/feature/account/setup/src/main/res/values-uk/strings.xml @@ -1,2 +1,68 @@ - \ No newline at end of file + + SSL/TLS + StartTLS + Не вдалося отримати список тек із сервера + Вкажіть спеціальні теки для вашого облікового запису. + Запис «Автоматично» буде автоматично слідувати за змінами, зробленими сервером. Поточне значення сервера показано в круглих дужках. + Отримання списку тек… + Усі спеціальні теки налаштовані сервером автоматично. + Тека «Архів» + Тека «Чернетки» + Тека «Надіслані» + Тека «Кошик» + Тека «Спам» + Автоматично (%s) + Ніколи + Кількість показуваних повідомлень + Показувати сповіщення + Виникла помилка під час спроби створити обліковий запис + Обліковий запис створено + Пароль обов\'язковий. + Це не довірена конфігурація + Ми отримали конфігурацію вашого поштового сервера через з\'єднання, яке недостатньо захищене. Це означає, що існує незначна ймовірність, що хтось міг його видозмінити. Чи могли б ви ще раз перевірити надану конфігурацію, щоб переконатися, що вона правильна? + Налаштувати вручну + Опції показу + Ім\'я облікового запису + Підпис е-пошти + Створення облікового запису… + Ім\'я облікового запису не може бути порожнім. + Ваше ім\'я + Потрібно вказати ім\'я. + Помилка в мережі. Перевірте стан вашого з\'єднання та повторіть спробу. + Невідома помилка + Адреса е-пошти обов\'язкова. + Конфігурація знайдена + Налаштувати автоматично + Ця адреса е-пошти не підтримується. + Конфігурація не знайдена + Я довіряю цій конфігурації + Ця адреса е-пошти не дозволена. + Ця адреса е-пошти не розпізнана дійсною. + Пошук конфігурації… + Не вдалося завантажити конфігурацію е-пошти + Змінити конфігурацію + Підтвердження конфігурації обовʼязкове. + Немає + Підпис е-пошти не може бути порожнім. + + Щохвилини + Що %d хвилини + Що %d хвилин + Що %d хвилин + + Параметри синхронізації + Частота перевірки + + Щогодини + Що %d години + Що %d годин + Що %d годин + + + 1 повідомлення + %d повідомлення + %d повідомлень + %d повідомлень + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ar/strings.xml b/feature/funding/googleplay/src/main/res/values-ar/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ar/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-az/strings.xml b/feature/funding/googleplay/src/main/res/values-az/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-az/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-be/strings.xml b/feature/funding/googleplay/src/main/res/values-be/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-be/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-bg/strings.xml b/feature/funding/googleplay/src/main/res/values-bg/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-bg/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-br/strings.xml b/feature/funding/googleplay/src/main/res/values-br/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-br/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-bs/strings.xml b/feature/funding/googleplay/src/main/res/values-bs/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-bs/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ca/strings.xml b/feature/funding/googleplay/src/main/res/values-ca/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ca/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-co/strings.xml b/feature/funding/googleplay/src/main/res/values-co/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-co/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-cs/strings.xml b/feature/funding/googleplay/src/main/res/values-cs/strings.xml new file mode 100644 index 00000000000..f5b331cd013 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-cs/strings.xml @@ -0,0 +1,10 @@ + + + Bezpečné přispění + Jednou + Pokračovat k platbě + Nikdy nezobrazujeme reklamy ani neprodáváme vaše údaje. Jsme plně financováni z finančních příspěvků našich uživatelů. Pokud se vám Thunderbird líbí, pomozte jej podpořit. Bez vás to nedokážeme! + Příspěvky nelze odečíst z daní jako charitativní dary. + Měsíčně + Podpořte Thunderbird + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-cy/strings.xml b/feature/funding/googleplay/src/main/res/values-cy/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-cy/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-da/strings.xml b/feature/funding/googleplay/src/main/res/values-da/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-da/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-de/strings.xml b/feature/funding/googleplay/src/main/res/values-de/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-de/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-el/strings.xml b/feature/funding/googleplay/src/main/res/values-el/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-el/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-en-rGB/strings.xml b/feature/funding/googleplay/src/main/res/values-en-rGB/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-en-rGB/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-enm/strings.xml b/feature/funding/googleplay/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-eo/strings.xml b/feature/funding/googleplay/src/main/res/values-eo/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-eo/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-es/strings.xml b/feature/funding/googleplay/src/main/res/values-es/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-es/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-et/strings.xml b/feature/funding/googleplay/src/main/res/values-et/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-et/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-eu/strings.xml b/feature/funding/googleplay/src/main/res/values-eu/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-eu/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-fa/strings.xml b/feature/funding/googleplay/src/main/res/values-fa/strings.xml new file mode 100644 index 00000000000..868e1aee314 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-fa/strings.xml @@ -0,0 +1,10 @@ + + + پرداخت یک باره + حمایت از تاندربرد + مشارکت امن + ماهانه + مشارکت‌ها به عنوان اعانه‌های خیریه شامل مالیات نمی‌شوند. + ادامه به پرداخت + ما هرگز تبلیغات نشان نداده یا داده‌هایتان را نمی‌فروشیم و کاملاً به دست مشارکت‌های مالی کاربرانمان تأمین می‌شویم. اگر از تاندربرد لذت می برید، لطفاُ در حمایت از آن کمک کنید. ما نمی توانیم این کار را بدون شما انجام دهیم! + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-fi/strings.xml b/feature/funding/googleplay/src/main/res/values-fi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-fi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-fr/strings.xml b/feature/funding/googleplay/src/main/res/values-fr/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-fr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-fy/strings.xml b/feature/funding/googleplay/src/main/res/values-fy/strings.xml new file mode 100644 index 00000000000..06121fe696f --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-fy/strings.xml @@ -0,0 +1,13 @@ + + + Trochgean nei ôfrekkenjen + Moanliks + Bydragen binne net ôflûkber as donaasjes foar goede doelen. + Moanlikse betelling oanpasse + Ynstellingen + Stypje Thunderbird + Wy toane jo nea advertinsjes en ferkeapje nea jo gegevens. Wy wurde folslein finansiere troch finansjele bydragen fan ús brûkers. As jo genietsje fan Thunderbird, stypje it dan. Wy kinne dit net sûnder jo! + Feilige bydrage + Donearje ien kear + Neat beskikber + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-gd/strings.xml b/feature/funding/googleplay/src/main/res/values-gd/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-gd/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-gl/strings.xml b/feature/funding/googleplay/src/main/res/values-gl/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-gl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-hi/strings.xml b/feature/funding/googleplay/src/main/res/values-hi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-hi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-hr/strings.xml b/feature/funding/googleplay/src/main/res/values-hr/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-hr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-hu/strings.xml b/feature/funding/googleplay/src/main/res/values-hu/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-hu/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-hy/strings.xml b/feature/funding/googleplay/src/main/res/values-hy/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-hy/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-in/strings.xml b/feature/funding/googleplay/src/main/res/values-in/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-in/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-is/strings.xml b/feature/funding/googleplay/src/main/res/values-is/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-is/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-it/strings.xml b/feature/funding/googleplay/src/main/res/values-it/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-it/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-iw/strings.xml b/feature/funding/googleplay/src/main/res/values-iw/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-iw/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ja/strings.xml b/feature/funding/googleplay/src/main/res/values-ja/strings.xml new file mode 100644 index 00000000000..ecd9d64fcbe --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ja/strings.xml @@ -0,0 +1,13 @@ + + + Thunderbird を支援する + 一度だけ + 毎月 + 寄付する + 慈善活動への寄付として税控除の対象にはなりません。 + お支払いへ進む + 私たちは広告を表示したりあなたのデータを販売したりしません。資金はすべてユーザーから寄付されています。もし Thunderbird に満足していただけたら、支援にご協力ください。あなたの支援が必要です! + 毎月のお支払いを変更 + 設定 + 利用できません + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ka/strings.xml b/feature/funding/googleplay/src/main/res/values-ka/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ka/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-kab/strings.xml b/feature/funding/googleplay/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-kk/strings.xml b/feature/funding/googleplay/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ko/strings.xml b/feature/funding/googleplay/src/main/res/values-ko/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ko/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-lt/strings.xml b/feature/funding/googleplay/src/main/res/values-lt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-lt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-lv/strings.xml b/feature/funding/googleplay/src/main/res/values-lv/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-lv/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ml/strings.xml b/feature/funding/googleplay/src/main/res/values-ml/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ml/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-nb-rNO/strings.xml b/feature/funding/googleplay/src/main/res/values-nb-rNO/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-nb-rNO/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-nl/strings.xml b/feature/funding/googleplay/src/main/res/values-nl/strings.xml new file mode 100644 index 00000000000..54a498c10ea --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-nl/strings.xml @@ -0,0 +1,13 @@ + + + Steun Thunderbird + Veilige bijdrage + Doneer eenmalig + Maandelijks + Bijdragen zijn niet aftrekbaar als charitatieve donaties. + We tonen u nooit advertenties en verkopen nooit uw gegevens. We worden volledig gefinancierd door financiële bijdragen van onze gebruikers. Als u geniet van Thunderbird, ondersteun het dan. We kunnen dit niet zonder u! + Doorgaan naar afrekenen + Instellingen + Niets beschikbaar + Maandelijkse betaling aanpassen + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-nn/strings.xml b/feature/funding/googleplay/src/main/res/values-nn/strings.xml new file mode 100644 index 00000000000..341b8b7297c --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-nn/strings.xml @@ -0,0 +1,13 @@ + + + Støtt Thunderbird + Me viser aldri reklamar eller sel dataen din. Me er fullstendig finansiert av økonomiske bidrag frå brukarane våre. Om du likar Thunderbird, ver vennleg og støtt det. Me kan ikkje gjere dette utan deg! + Gå vidare til betaling + Bidrag er ikkje skattefrie som velgjerdsdonasjonar. + Sikkert bidrag + Gje ein gong + Månadleg + Ingen tilgjengelege + Endre månadleg betaling + Innstillingar + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-pl/strings.xml b/feature/funding/googleplay/src/main/res/values-pl/strings.xml new file mode 100644 index 00000000000..39b3ce00dff --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-pl/strings.xml @@ -0,0 +1,13 @@ + + + Bezpieczny wkład + Datki nie podlegają odliczeniu od podatku jako darowizny na cele charytatywne. + Przekaż raz + Miesięcznie + Przejdź do płatności + Wspieraj Thunderbirda + Nigdy nie pokazujemy reklam ani nie sprzedajemy Twoich danych. Jesteśmy w pełni finansowani ze składek finansowych od naszych użytkowników. Jeśli podoba Ci się Thunderbird, pomóż nam go wesprzeć. Nie możemy tego zrobić bez Ciebie! + Zmodyfikuj płatność miesięczną + Ustawienia + Brak dostępnych + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-pt-rBR/strings.xml b/feature/funding/googleplay/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-pt-rPT/strings.xml b/feature/funding/googleplay/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-pt/strings.xml b/feature/funding/googleplay/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ro/strings.xml b/feature/funding/googleplay/src/main/res/values-ro/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ro/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ru/strings.xml b/feature/funding/googleplay/src/main/res/values-ru/strings.xml new file mode 100644 index 00000000000..7a9438e6c8f --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ru/strings.xml @@ -0,0 +1,13 @@ + + + Поддержка Thunderbird + Один раз + Настройки + Мы никогда не показываем рекламу и не продаём ваши данные. Мы полностью финансируемся за счёт пожертвований наших пользователей. Если вам нравится Thunderbird, поддержите его. Мы не можем обойтись без вас! + Ежемесячно + Перейти к платежу + Безопасное пожертвование + Недоступно + Пожертвования не подлежат налогообложению как благотворительность. + Изменить ежемесячный платёж + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-sk/strings.xml b/feature/funding/googleplay/src/main/res/values-sk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-sk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-sl/strings.xml b/feature/funding/googleplay/src/main/res/values-sl/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-sl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-sq/strings.xml b/feature/funding/googleplay/src/main/res/values-sq/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-sq/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-sr/strings.xml b/feature/funding/googleplay/src/main/res/values-sr/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-sr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-sv/strings.xml b/feature/funding/googleplay/src/main/res/values-sv/strings.xml new file mode 100644 index 00000000000..8c0e3c140cc --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-sv/strings.xml @@ -0,0 +1,13 @@ + + + Stöd Thunderbird + Månadsvis + Bidrag är inte avdragsgilla som donationer till välgörande ändamål. + Fortsätt till betalning + Vi visar aldrig annonser eller säljer din data. Vi är helt finansierade av ekonomiska bidrag från våra användare. Om du gillar Thunderbird, vänligen hjälp till att stödja det. Vi kan inte göra detta utan dig! + Säkert bidrag + Donera en gång + Inställningar + Ändra den månatliga betalningen + Inga tillgängliga + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-ta/strings.xml b/feature/funding/googleplay/src/main/res/values-ta/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-ta/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-tr/strings.xml b/feature/funding/googleplay/src/main/res/values-tr/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-tr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-uk/strings.xml b/feature/funding/googleplay/src/main/res/values-uk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-uk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-vi/strings.xml b/feature/funding/googleplay/src/main/res/values-vi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-vi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-zh-rCN/strings.xml b/feature/funding/googleplay/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 00000000000..9c44afd82b3 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,13 @@ + + + 捐赠一次 + 捐款不能作为慈善捐款免税。 + 继续付款 + 支持 Thunderbird + 我们永远不会显示广告或出售您的数据。我们的资金完全来自用户的捐款。如果您喜欢 Thunderbird,请考虑支持它。我们需要您的支持! + 立即捐款 + 每月 + 设置 + 修改每月付款 + 无可用 + \ No newline at end of file diff --git a/feature/funding/googleplay/src/main/res/values-zh-rTW/strings.xml b/feature/funding/googleplay/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/funding/googleplay/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ar/strings.xml b/feature/migration/qrcode/src/main/res/values-ar/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ar/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-az/strings.xml b/feature/migration/qrcode/src/main/res/values-az/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-az/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-be/strings.xml b/feature/migration/qrcode/src/main/res/values-be/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-be/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-bg/strings.xml b/feature/migration/qrcode/src/main/res/values-bg/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-bg/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-br/strings.xml b/feature/migration/qrcode/src/main/res/values-br/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-br/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-bs/strings.xml b/feature/migration/qrcode/src/main/res/values-bs/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-bs/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ca/strings.xml b/feature/migration/qrcode/src/main/res/values-ca/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ca/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-co/strings.xml b/feature/migration/qrcode/src/main/res/values-co/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-co/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-cs/strings.xml b/feature/migration/qrcode/src/main/res/values-cs/strings.xml new file mode 100644 index 00000000000..fd9c631a041 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-cs/strings.xml @@ -0,0 +1,8 @@ + + + Vyžadován přístup k fotoaparátu + Přejděte do nastavení systému Android, otevřete oprávnění a povolte přístup k fotoaparátu. + Přejít do nastavení + Naskenováno %1$s z %2$s + Hotovo + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-cy/strings.xml b/feature/migration/qrcode/src/main/res/values-cy/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-cy/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-da/strings.xml b/feature/migration/qrcode/src/main/res/values-da/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-da/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-de/strings.xml b/feature/migration/qrcode/src/main/res/values-de/strings.xml new file mode 100644 index 00000000000..867e3e6d1f8 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-de/strings.xml @@ -0,0 +1,8 @@ + + + Kamerazugriff erforderlich + Gehe zu den Android-Einstellungen, tippe auf Berechtigungen und erlaube den Zugriff auf die Kamera. + Zu den Einstellungen gehen + %1$s von %2$s gescannt + Erledigt + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-el/strings.xml b/feature/migration/qrcode/src/main/res/values-el/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-el/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-en-rGB/strings.xml b/feature/migration/qrcode/src/main/res/values-en-rGB/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-en-rGB/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-enm/strings.xml b/feature/migration/qrcode/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-eo/strings.xml b/feature/migration/qrcode/src/main/res/values-eo/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-eo/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-es/strings.xml b/feature/migration/qrcode/src/main/res/values-es/strings.xml new file mode 100644 index 00000000000..14efc298c11 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-es/strings.xml @@ -0,0 +1,8 @@ + + + Se necesita acceso a la cámara + Ve a los ajustes de Android, toca permisos y permite el acceso a la cámara. + Ir a la configuración + Escaneado %1$s de %2$s + Realizado + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-et/strings.xml b/feature/migration/qrcode/src/main/res/values-et/strings.xml new file mode 100644 index 00000000000..bec2407c5dd --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-et/strings.xml @@ -0,0 +1,8 @@ + + + Vajalik on ligipääs kaamerale + Ava Androidi seadistused, klõpsi õiguste seadistamisel ja luba ligipääs kaamerale. + Ava seadistused + Skaneeritud %1$s/%2$s + Valmis + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-eu/strings.xml b/feature/migration/qrcode/src/main/res/values-eu/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-eu/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-fa/strings.xml b/feature/migration/qrcode/src/main/res/values-fa/strings.xml new file mode 100644 index 00000000000..d672d42f733 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-fa/strings.xml @@ -0,0 +1,8 @@ + + + نیازمند دسترسی دوربین + رفتن به تنظیمات اندروید، زدن روی اجازه‌ها و اجازه به دسترسی به دوربین. + رفتن به تنظیمات + %1$s از %2$s پوییده + انجام شد + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-fi/strings.xml b/feature/migration/qrcode/src/main/res/values-fi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-fi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-fr/strings.xml b/feature/migration/qrcode/src/main/res/values-fr/strings.xml new file mode 100644 index 00000000000..b78d7a9556b --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-fr/strings.xml @@ -0,0 +1,8 @@ + + + L’accès à l’appareil photo est nécessaire + Accédez aux paramètres d’Android, touchez les autorisations et accordez l’accès à l’appareil photo. + Accéder aux paramètres + %1$s codes sur %2$s a été lus + Terminé + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-fy/strings.xml b/feature/migration/qrcode/src/main/res/values-fy/strings.xml new file mode 100644 index 00000000000..a76c3d9e6ca --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-fy/strings.xml @@ -0,0 +1,8 @@ + + + Kamera hat tagong nedich + Gean nei Android-ynstellingen, tik op ‘toestemmingen’, en stean tagong ta de kamera ta. + Gea nei ynstellingen + Scand %1$s fan %2$s + Dien + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-gd/strings.xml b/feature/migration/qrcode/src/main/res/values-gd/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-gd/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-gl/strings.xml b/feature/migration/qrcode/src/main/res/values-gl/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-gl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-hi/strings.xml b/feature/migration/qrcode/src/main/res/values-hi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-hi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-hr/strings.xml b/feature/migration/qrcode/src/main/res/values-hr/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-hr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-hu/strings.xml b/feature/migration/qrcode/src/main/res/values-hu/strings.xml new file mode 100644 index 00000000000..a99fce08340 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-hu/strings.xml @@ -0,0 +1,8 @@ + + + Kamerához való hozzáférés szükséges + Kész + Menjen az Android beállításaihoz, koppintson az engedélyekre, és engedélyezze a kamerához való hozzáférést. + Menjen a beállításokhoz + %1$s %2$s beolvasása + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-hy/strings.xml b/feature/migration/qrcode/src/main/res/values-hy/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-hy/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-in/strings.xml b/feature/migration/qrcode/src/main/res/values-in/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-in/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-is/strings.xml b/feature/migration/qrcode/src/main/res/values-is/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-is/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-it/strings.xml b/feature/migration/qrcode/src/main/res/values-it/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-it/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-iw/strings.xml b/feature/migration/qrcode/src/main/res/values-iw/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-iw/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ja/strings.xml b/feature/migration/qrcode/src/main/res/values-ja/strings.xml new file mode 100644 index 00000000000..fac075441ca --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ja/strings.xml @@ -0,0 +1,8 @@ + + + 設定へ移動 + 完了 + カメラへのアクセス権が必要です + Android の設定で許可をタップして、カメラへのアクセスを許可してください。 + %2$s / %1$s 個をスキャンしました + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ka/strings.xml b/feature/migration/qrcode/src/main/res/values-ka/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ka/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-kab/strings.xml b/feature/migration/qrcode/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-kk/strings.xml b/feature/migration/qrcode/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ko/strings.xml b/feature/migration/qrcode/src/main/res/values-ko/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ko/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-lt/strings.xml b/feature/migration/qrcode/src/main/res/values-lt/strings.xml new file mode 100644 index 00000000000..6f958fd4a2f --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-lt/strings.xml @@ -0,0 +1,8 @@ + + + Būtina fotoaparato prieiga + Eikite į „Android“ nustatymus, palieskite leidimus ir suteikite prieigą prie fotoaparato. + Eiti į nustatymus + Nuskenuota %1$s iš %2$s + Atlikta + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-lv/strings.xml b/feature/migration/qrcode/src/main/res/values-lv/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-lv/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ml/strings.xml b/feature/migration/qrcode/src/main/res/values-ml/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ml/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-nb-rNO/strings.xml b/feature/migration/qrcode/src/main/res/values-nb-rNO/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-nb-rNO/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-nl/strings.xml b/feature/migration/qrcode/src/main/res/values-nl/strings.xml new file mode 100644 index 00000000000..e1883aa6065 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-nl/strings.xml @@ -0,0 +1,8 @@ + + + Camera heeft toegang nodig + Ga naar Android-instellingen, tik op toestemmingen, en sta toegang tot de camera toe. + Ga naar instellingen + Gescand %1$s van %2$s + Gereed + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-nn/strings.xml b/feature/migration/qrcode/src/main/res/values-nn/strings.xml new file mode 100644 index 00000000000..f774105869b --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-nn/strings.xml @@ -0,0 +1,8 @@ + + + Kamera-tilgjenge er påkravd + Gå til Android-innstillingar, trykk på løyve, og tillat tilgjenge til kameraet. + Gå til innstillingar + Skanna %1$s av %2$s + Ferdig + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-pl/strings.xml b/feature/migration/qrcode/src/main/res/values-pl/strings.xml new file mode 100644 index 00000000000..5c5e5b6b298 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-pl/strings.xml @@ -0,0 +1,8 @@ + + + Przejdź do ustawień + Przeskanowano %1$s z %2$s + Gotowe + Wymagany dostęp do aparatu + Przejdź do ustawień systemu Android, stuknij uprawnienia i zezwól na dostęp do aparatu. + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-pt-rBR/strings.xml b/feature/migration/qrcode/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-pt-rPT/strings.xml b/feature/migration/qrcode/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-pt/strings.xml b/feature/migration/qrcode/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ro/strings.xml b/feature/migration/qrcode/src/main/res/values-ro/strings.xml new file mode 100644 index 00000000000..b044720f8fe --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ro/strings.xml @@ -0,0 +1,8 @@ + + + Accesul la cameră este necesar + Accesați «Setări» + Mergeți la «Setări» Android, selectați «Permisiuni» și permiteți accesul la cameră. + Scanat %1$s din %2$s + Gata + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ru/strings.xml b/feature/migration/qrcode/src/main/res/values-ru/strings.xml new file mode 100644 index 00000000000..7215b2b5266 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ru/strings.xml @@ -0,0 +1,8 @@ + + + Перейти в настройки + Готово + Необходим доступ к камере + Перейдите в настройки Android, выберите \"Разрешения\" и предоставьте приложению доступ к камере. + Считано %1$s из %2$s + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-sk/strings.xml b/feature/migration/qrcode/src/main/res/values-sk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-sk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-sl/strings.xml b/feature/migration/qrcode/src/main/res/values-sl/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-sl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-sq/strings.xml b/feature/migration/qrcode/src/main/res/values-sq/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-sq/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-sr/strings.xml b/feature/migration/qrcode/src/main/res/values-sr/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-sr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-sv/strings.xml b/feature/migration/qrcode/src/main/res/values-sv/strings.xml new file mode 100644 index 00000000000..d9aeb8d8023 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-sv/strings.xml @@ -0,0 +1,8 @@ + + + Gå till inställningar + Skannade %1$s av %2$s + Klar + Kameraåtkomst behövs + Gå till Android-inställningar, tryck på behörigheter och tillåt åtkomst till kameran. + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-ta/strings.xml b/feature/migration/qrcode/src/main/res/values-ta/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-ta/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-tr/strings.xml b/feature/migration/qrcode/src/main/res/values-tr/strings.xml new file mode 100644 index 00000000000..9484fcb91de --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-tr/strings.xml @@ -0,0 +1,8 @@ + + + Kamera erişimi gerekli + Android ayarlarına gidin, izinlere dokunun ve kamera erişimine izin verin. + Ayarlara git + %1$s / %2$s tarandı + Tamam + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-uk/strings.xml b/feature/migration/qrcode/src/main/res/values-uk/strings.xml new file mode 100644 index 00000000000..1c3fa89ba0f --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-uk/strings.xml @@ -0,0 +1,8 @@ + + + Перейти до Налаштувань + Скановано %1$s з %2$s + Готово + Потрібен доступ до камери + Перейдіть до налаштувань Android, торкніться Дозволи та дозвольте доступ до камери. + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-vi/strings.xml b/feature/migration/qrcode/src/main/res/values-vi/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-vi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-zh-rCN/strings.xml b/feature/migration/qrcode/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 00000000000..55b96e066e1 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,8 @@ + + + 转到 Android 设置,点击权限,然后允许访问相机。 + 转到设置 + 完成 + 需要访问相机 + 扫描了 %2$s 个中的 %1$s 个 + \ No newline at end of file diff --git a/feature/migration/qrcode/src/main/res/values-zh-rTW/strings.xml b/feature/migration/qrcode/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/migration/qrcode/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-az/strings.xml b/feature/navigation/drawer/src/main/res/values-az/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/navigation/drawer/src/main/res/values-az/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-cs/strings.xml b/feature/navigation/drawer/src/main/res/values-cs/strings.xml index 6d45b70608b..6eba6e546cc 100644 --- a/feature/navigation/drawer/src/main/res/values-cs/strings.xml +++ b/feature/navigation/drawer/src/main/res/values-cs/strings.xml @@ -2,7 +2,7 @@ Nastavení Správa složek - Integrovaná doručená pošta + Jednotná schránka 99+ 1 tis.+ Zobrazit účty diff --git a/feature/navigation/drawer/src/main/res/values-enm/strings.xml b/feature/navigation/drawer/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/navigation/drawer/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-hr/strings.xml b/feature/navigation/drawer/src/main/res/values-hr/strings.xml index 0f5ab7e5ba3..619c0a31ae5 100644 --- a/feature/navigation/drawer/src/main/res/values-hr/strings.xml +++ b/feature/navigation/drawer/src/main/res/values-hr/strings.xml @@ -1,6 +1,11 @@ - + Podešenja Upravljanje mapama - Objedinjena Dolazna Pošta - + Objedinjena dolazna pošta + Sinkroniziraj sve račune + Prikaži račune + Sakrij račune + 1k+ + 99+ + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-kab/strings.xml b/feature/navigation/drawer/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/navigation/drawer/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-kk/strings.xml b/feature/navigation/drawer/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/navigation/drawer/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-nn/strings.xml b/feature/navigation/drawer/src/main/res/values-nn/strings.xml index 581bfb6ec33..d954cc979ee 100644 --- a/feature/navigation/drawer/src/main/res/values-nn/strings.xml +++ b/feature/navigation/drawer/src/main/res/values-nn/strings.xml @@ -1,4 +1,11 @@ - + Innstillingar - + Handsam mapper + Synkroniser alle kontoar + Vis kontoar + Skjul kontoar + 99+ + Samla innboks + 1k+ + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-pt/strings.xml b/feature/navigation/drawer/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/navigation/drawer/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-ro/strings.xml b/feature/navigation/drawer/src/main/res/values-ro/strings.xml index 9bfe5d70df5..09ee9f959d3 100644 --- a/feature/navigation/drawer/src/main/res/values-ro/strings.xml +++ b/feature/navigation/drawer/src/main/res/values-ro/strings.xml @@ -1,6 +1,11 @@ - + Opțiuni Gestionează dosarele Căsuță poștală unificată - + Sincronizează toate conturile + Arată conturile + Ascunde conturile + 99+ + 1k+ + \ No newline at end of file diff --git a/feature/navigation/drawer/src/main/res/values-uk/strings.xml b/feature/navigation/drawer/src/main/res/values-uk/strings.xml index afbbaefdbdb..2ebaa30f1aa 100644 --- a/feature/navigation/drawer/src/main/res/values-uk/strings.xml +++ b/feature/navigation/drawer/src/main/res/values-uk/strings.xml @@ -1,6 +1,11 @@ - + Налаштування - Керування теками + Керувати теками Об\'єднані Вхідні - + Синхронізувати всі облікові записи + Показати облікові записи + 1 тис.+ + 99+ + Сховати облікові записи + \ No newline at end of file diff --git a/feature/onboarding/permissions/src/main/res/values-enm/strings.xml b/feature/onboarding/permissions/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/onboarding/permissions/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/onboarding/permissions/src/main/res/values-hr/strings.xml b/feature/onboarding/permissions/src/main/res/values-hr/strings.xml index a6b3daec935..dd6f3fc0680 100644 --- a/feature/onboarding/permissions/src/main/res/values-hr/strings.xml +++ b/feature/onboarding/permissions/src/main/res/values-hr/strings.xml @@ -1,2 +1,10 @@ - \ No newline at end of file + + Poboljšajte iskustvo + Kontakti + Obavijesti + Omogućite pristup kako biste mogli dobivati prijedloge kontakata i prikazivati imena i fotografije kontakata. + Uključite obavijesti kako ne biste propustili nijednu email poruku. + Dopusti + Preskoči + \ No newline at end of file diff --git a/feature/onboarding/permissions/src/main/res/values-kab/strings.xml b/feature/onboarding/permissions/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/onboarding/permissions/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/onboarding/permissions/src/main/res/values-kk/strings.xml b/feature/onboarding/permissions/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/onboarding/permissions/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/onboarding/permissions/src/main/res/values-nn/strings.xml b/feature/onboarding/permissions/src/main/res/values-nn/strings.xml index e0741f015db..64b9ccfd41f 100644 --- a/feature/onboarding/permissions/src/main/res/values-nn/strings.xml +++ b/feature/onboarding/permissions/src/main/res/values-nn/strings.xml @@ -4,4 +4,7 @@ Kontaktar Tillat Hopp over + Tillat tilgjenge for å vere i stand til å føreslå kontaktar og for å vise kontaktnamn og bilete. + Notifikasjonar + Skru på notifikasjonar så du ikkje går glipp av nokon e-postar. \ No newline at end of file diff --git a/feature/onboarding/permissions/src/main/res/values-pl/strings.xml b/feature/onboarding/permissions/src/main/res/values-pl/strings.xml index abb25ccccda..0eb925655d8 100644 --- a/feature/onboarding/permissions/src/main/res/values-pl/strings.xml +++ b/feature/onboarding/permissions/src/main/res/values-pl/strings.xml @@ -1,6 +1,6 @@ - Zezwól na dostęp, aby móc sugerować kontakty oraz wyświetlać ich imiona, nazwiska i zdjęcia. + Zezwól na dostęp, aby móc sugerować kontakty oraz wyświetlać ich imiona, nazwiska i zdjęcia. Włącz powiadomienia, aby nie przegapić żadnych e-maili. Powiadomienia Popraw doświadczenie diff --git a/feature/onboarding/permissions/src/main/res/values-pt/strings.xml b/feature/onboarding/permissions/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/onboarding/permissions/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/onboarding/permissions/src/main/res/values-uk/strings.xml b/feature/onboarding/permissions/src/main/res/values-uk/strings.xml index a6b3daec935..6b3b35c9188 100644 --- a/feature/onboarding/permissions/src/main/res/values-uk/strings.xml +++ b/feature/onboarding/permissions/src/main/res/values-uk/strings.xml @@ -1,2 +1,10 @@ - \ No newline at end of file + + Зробіть користування зручнішим + Контакти + Дозвольте доступ, щоб з\'явилася можливість пропонувати контакти та показувати імена та світлини контактів. + Сповіщення + Увімкніть сповіщення, щоб не пропустити жодного листа. + Дозволити + Пропустити + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-az/strings.xml b/feature/onboarding/welcome/src/main/res/values-az/strings.xml index 7c67847aaf0..efc9124cacf 100644 --- a/feature/onboarding/welcome/src/main/res/values-az/strings.xml +++ b/feature/onboarding/welcome/src/main/res/values-az/strings.xml @@ -1,5 +1,6 @@ - + Başlat Tənzimləmələri idxal et - + %s -ə Xoş Gəlmisiniz, yüksəldilmiş təhlükəsizlik, asan fərdiləşdirmə və bütün e-poçt hesablarınızın qüsursuz idarə edilməsi üçün hazırlanmış Android e-poçt müştərisi. + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-enm/strings.xml b/feature/onboarding/welcome/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/onboarding/welcome/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-hr/strings.xml b/feature/onboarding/welcome/src/main/res/values-hr/strings.xml index a6b3daec935..aea222c809e 100644 --- a/feature/onboarding/welcome/src/main/res/values-hr/strings.xml +++ b/feature/onboarding/welcome/src/main/res/values-hr/strings.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + Započni + Uvoz postavki + Dobrodošli u %s, Android email klijent dizajniran za poboljšanu sigurnost, jednostavnu prilagodbu i besprijekorno upravljanje svim vašim računima e-pošte. + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-kab/strings.xml b/feature/onboarding/welcome/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..07b7a3167a2 --- /dev/null +++ b/feature/onboarding/welcome/src/main/res/values-kab/strings.xml @@ -0,0 +1,5 @@ + + + Bdu + Taǧǧawt n iɣewwaṛen + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-kk/strings.xml b/feature/onboarding/welcome/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/onboarding/welcome/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-nb-rNO/strings.xml b/feature/onboarding/welcome/src/main/res/values-nb-rNO/strings.xml index 4e3aab78884..2c345c1800a 100644 --- a/feature/onboarding/welcome/src/main/res/values-nb-rNO/strings.xml +++ b/feature/onboarding/welcome/src/main/res/values-nb-rNO/strings.xml @@ -1,5 +1,6 @@ - + Start Importer innstillinger - + Velkommen til %s, e-postklienten for Android designet for ekstra sikkerhet, enkel tilpasning, og sømløs administrasjon av alle e-postkontoene dine. + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-nn/strings.xml b/feature/onboarding/welcome/src/main/res/values-nn/strings.xml index 69ec85070cd..af41eed660f 100644 --- a/feature/onboarding/welcome/src/main/res/values-nn/strings.xml +++ b/feature/onboarding/welcome/src/main/res/values-nn/strings.xml @@ -1,5 +1,6 @@ - + Start Importer innstillingar + Velkommen til %s, Android e-post-klienten som er designa for forbetra sikkerheit, enkel tilpassing, og saumlaus handtering av alle dine e-post-kontoar. \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-pl/strings.xml b/feature/onboarding/welcome/src/main/res/values-pl/strings.xml index 68318e3b1fc..92b7972b0c2 100644 --- a/feature/onboarding/welcome/src/main/res/values-pl/strings.xml +++ b/feature/onboarding/welcome/src/main/res/values-pl/strings.xml @@ -2,5 +2,5 @@ Rozpocznij Importuj ustawienia - Witamy w %s, kliencie poczty e-mail dla systemu Android zaprojektowanym z myślą o większym bezpieczeństwie, łatwym dostosowywaniu i bezproblemowym zarządzaniu wszystkimi kontami e-mail. - + Witamy w %s, kliencie poczty e-mail dla systemu Android, zaprojektowanym z myślą o zwiększonym bezpieczeństwie, łatwej personalizacji i bezproblemowym zarządzaniu wszystkimi kontami e-mail. + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-pt/strings.xml b/feature/onboarding/welcome/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/onboarding/welcome/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-sl/strings.xml b/feature/onboarding/welcome/src/main/res/values-sl/strings.xml index a6b3daec935..74f81da3857 100644 --- a/feature/onboarding/welcome/src/main/res/values-sl/strings.xml +++ b/feature/onboarding/welcome/src/main/res/values-sl/strings.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + Uvozi nastavitve + Začni + Dobrodošli v %s, e-poštnem odjemalcu za Android, ki je zasnovan za večjo varnost, enostavno prilagajanje in nemoteno upravljanje vseh e-poštnih računov. + \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-sv/strings.xml b/feature/onboarding/welcome/src/main/res/values-sv/strings.xml index e68dd63759a..305a6671bb8 100644 --- a/feature/onboarding/welcome/src/main/res/values-sv/strings.xml +++ b/feature/onboarding/welcome/src/main/res/values-sv/strings.xml @@ -2,5 +2,5 @@ Starta Importera inställningar - Välkommen till %s, Android-e-postklienten designad för förbättrad säkerhet, enkel anpassning och sömlös hantering av alla dina e-postkonton. + Välkommen till %s, e-postklienten för Android som är utformad för förbättrad säkerhet, enkel anpassning och smidig hantering av alla dina e-postkonton. \ No newline at end of file diff --git a/feature/onboarding/welcome/src/main/res/values-uk/strings.xml b/feature/onboarding/welcome/src/main/res/values-uk/strings.xml index a6b3daec935..1ad7bc9c3f2 100644 --- a/feature/onboarding/welcome/src/main/res/values-uk/strings.xml +++ b/feature/onboarding/welcome/src/main/res/values-uk/strings.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + Розпочати + Вітаємо в %s, поштовому клієнті для Android, створеному для посилення безпеки, легкого налаштування та безперешкодного керування всіма вашими поштовими обліковими записами. + Імпорт налаштувань + \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-br/strings.xml b/feature/settings/import/src/main/res/values-br/strings.xml index 6a48694620a..4afe655faf9 100644 --- a/feature/settings/import/src/main/res/values-br/strings.xml +++ b/feature/settings/import/src/main/res/values-br/strings.xml @@ -5,4 +5,12 @@ Oc’h enporzhiañ an arventennoù… Arventennoù hollek - + Dibab ur fichennaoueg + C\'hwitet eo enporzhiañ an arventennoù + Enporzhiañ diwar an arload + Enporzhiañ diwar an arload + Enporzhiet eo bet an arventennoù gant berzh + Lakait gerioù-tremen mar plij + Kevreit mar plij + Mar plij, kevreit ha lakait ho gerioù-tremen + \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-cs/strings.xml b/feature/settings/import/src/main/res/values-cs/strings.xml index 52f535acf74..e23e68243e4 100644 --- a/feature/settings/import/src/main/res/values-cs/strings.xml +++ b/feature/settings/import/src/main/res/values-cs/strings.xml @@ -41,4 +41,6 @@ Hlavní nastavení Importovat z aplikace Importovat z aplikace + Naskenovat QR kód + Verze aplikace není podporována. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-de/strings.xml b/feature/settings/import/src/main/res/values-de/strings.xml index 5d97674bcb7..0efa05a4b2f 100644 --- a/feature/settings/import/src/main/res/values-de/strings.xml +++ b/feature/settings/import/src/main/res/values-de/strings.xml @@ -39,4 +39,6 @@ Allgemeine Einstellungen Aus App importieren Aus App importieren + QR-Code scannen + App-Version nicht unterstützt. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-enm/strings.xml b/feature/settings/import/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/settings/import/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-es/strings.xml b/feature/settings/import/src/main/res/values-es/strings.xml index f78dc5a7b91..36857450d74 100644 --- a/feature/settings/import/src/main/res/values-es/strings.xml +++ b/feature/settings/import/src/main/res/values-es/strings.xml @@ -40,4 +40,6 @@ Ajustes generales Importar desde la aplicación Importar desde la aplicación + Escanear el código QR + Versión de la aplicación no compatible. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-et/strings.xml b/feature/settings/import/src/main/res/values-et/strings.xml index 28fefb0b870..196b18c94bc 100644 --- a/feature/settings/import/src/main/res/values-et/strings.xml +++ b/feature/settings/import/src/main/res/values-et/strings.xml @@ -39,4 +39,6 @@ Üldised sätted Impordi rakendusest Impordi rakendusest + Skaneeri QR-koodi + Sellest rakenduse versioonist pole importimine toetatud. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-fa/strings.xml b/feature/settings/import/src/main/res/values-fa/strings.xml index dec43c04708..7ea7d4d9823 100644 --- a/feature/settings/import/src/main/res/values-fa/strings.xml +++ b/feature/settings/import/src/main/res/values-fa/strings.xml @@ -39,4 +39,6 @@ تنظیمات کلی درون‌ریزی از کاره درون‌ریزی از کاره + نگارش کاره پشتیبانی نمی‌شود. + پویش کد پاس \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-fr/strings.xml b/feature/settings/import/src/main/res/values-fr/strings.xml index ef1a168e3cd..480794817fc 100644 --- a/feature/settings/import/src/main/res/values-fr/strings.xml +++ b/feature/settings/import/src/main/res/values-fr/strings.xml @@ -40,4 +40,6 @@ Paramètres généraux Importer de l’appli Importer de l’appli + Lire un code QR + La version de l’appli n’est pas prise en charge. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-fy/strings.xml b/feature/settings/import/src/main/res/values-fy/strings.xml index 5afc10db844..cff59de92bf 100644 --- a/feature/settings/import/src/main/res/values-fy/strings.xml +++ b/feature/settings/import/src/main/res/values-fy/strings.xml @@ -39,4 +39,6 @@ Algemiene ynstellingen Ymportearje fan app út Ymportearje fan app út + QR-koade scanne + App-ferzje net stipe. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-hr/strings.xml b/feature/settings/import/src/main/res/values-hr/strings.xml index d99404b5163..382ea0dbae1 100644 --- a/feature/settings/import/src/main/res/values-hr/strings.xml +++ b/feature/settings/import/src/main/res/values-hr/strings.xml @@ -2,7 +2,7 @@ Uvoz postavki Odaberi datoteku - Uvoz + Uvezi Postavke su uspješno uvezene Molimo unesite lozinke @@ -17,15 +17,28 @@ Nije uvezeno Uvoz nije uspio Kasnije - Uvozim postavke… + Uvoz postavki… - Da bi bili u mogućnosti da koristite račun \"%s\" potrebno je da unesete lozinku za server. - Da bi bili u mogućnosti da koristite račun \"%s\" potrebno je da unesete lozinke za server. - Da bi bili u mogućnosti da koristite račun \"%s\" potrebno je da unesete lozinke za server. + Da biste mogli koristiti račun \"%s\" trebate unijeti lozinku za poslužitelj. + Da biste mogli koristiti račun\"%s\" trebate unijeti lozinke za poslužitelj. + Da biste mogli koristiti račun \"%s\" trebate unijeti lozinke za poslužitelj. Lozinka dolaznog poslužitelja Lozinka odlaznog poslužitelja - Koristi istu loziku za odlazni poslužitelj + Koristi istu lozinku za odlazni poslužitelj Naziv servera: %s - Opća podešavanja - + Opće postavke + Prijavite se + Uvezi iz aplikacije + Prijava je obavezna + Autorizacija nije uspjela sa sljedećom pogreškom: %s + Molimo Vas prijavite se + Uvezi iz aplikacije + Za korištenje ovog računa e-pošte trebate se prijaviti i omogućiti aplikaciji pristup vašim emailovima. + Prijavite se s Googleom + Autorizacija poništena + OAuth 2.0 trenutačno nije podržan kod ovog pružatelja usluga e-pošte. + Aplikacija nije mogla pronaći preglednik za davanje pristupa vašem računu. + Skeniraj QR kod + Molimo Vas prijavite se i unesite lozinke + \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-hu/strings.xml b/feature/settings/import/src/main/res/values-hu/strings.xml index ab69433ce73..678e235fbae 100644 --- a/feature/settings/import/src/main/res/values-hu/strings.xml +++ b/feature/settings/import/src/main/res/values-hu/strings.xml @@ -39,4 +39,6 @@ Általános beállítások Importálás alkalmazásból Importálás alkalmazásból + QR-kód beolvasása + Nem támogatott alkalmazásverzió. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-ja/strings.xml b/feature/settings/import/src/main/res/values-ja/strings.xml index 014316bc6ac..10087f356d7 100644 --- a/feature/settings/import/src/main/res/values-ja/strings.xml +++ b/feature/settings/import/src/main/res/values-ja/strings.xml @@ -38,4 +38,6 @@ 一般設定 アプリからインポート アプリからインポート + QR コードをスキャン + 対応していないバージョンのアプリです。 \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-kab/strings.xml b/feature/settings/import/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/settings/import/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-kk/strings.xml b/feature/settings/import/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/settings/import/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-nl/strings.xml b/feature/settings/import/src/main/res/values-nl/strings.xml index ce0ba0489c3..60874ad0239 100644 --- a/feature/settings/import/src/main/res/values-nl/strings.xml +++ b/feature/settings/import/src/main/res/values-nl/strings.xml @@ -39,4 +39,6 @@ Algemene instellingen Importeren vanuit app Importeren vanuit app + QR-code scannen + App-versie niet ondersteund. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-nn/strings.xml b/feature/settings/import/src/main/res/values-nn/strings.xml index 9d2565dd670..16f4a85895c 100644 --- a/feature/settings/import/src/main/res/values-nn/strings.xml +++ b/feature/settings/import/src/main/res/values-nn/strings.xml @@ -5,4 +5,37 @@ Importerer innstillingar … Generelle innstilingar - + Vel fil + Skann QR-kode + Bruk same passord for utgåande tenar + Utgåande tenar-passord + Autorisering mislukka med følgjande feil: %s + Vellykka import av innstillingar + Importer frå app + Importer frå app + Ver vennleg og logg inn + Logg inn, og fyll inn passord + Vellukka import + Seinare + Servernamn: %s + Logg inn + Logg inn med Google + Autorisering kansellert + Appen kunne ikkje finne ein nettlesar for å gje tilgjenge til kontoen din. + OAuth 2.0 er ikkje støtta med denne tilbydaren enno. + Ver vennleg og skriv inn passord + Importering av innstillingar feila + Kunne ikkje lese innstillingsfil + Kunne ikkje importere nokre innstillingar + Passord påkravd + Innlogging påkravd + Ikkje importert + Feil under import + Innkommande tenar-passord + + For å vere i stand til å bruke kontoen \"%s\" må du angje tenar-passordet. + For å vere i stand til å bruke kontoen \"%s\" må du angje tenar-passorda. + + For å bruke denne e-postkontoen, må du logge inn, og gje tilgjenge til e-postane dine. + App-versjon er ikkje støtta. + \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-pl/strings.xml b/feature/settings/import/src/main/res/values-pl/strings.xml index a3f5bf6a3f5..2feff616054 100644 --- a/feature/settings/import/src/main/res/values-pl/strings.xml +++ b/feature/settings/import/src/main/res/values-pl/strings.xml @@ -9,11 +9,11 @@ Zaloguj się - Zaloguj się i podaj hasła + Zaloguj się i podaj hasła Import ustawień się nie powiódł Odczyt pliku ustawień się nie powiódł Import niektórych ustawień się nie powiódł - Zaimportowano z powodzeniem + Zaimportowano z powodzeniem Hasło wymagane Wymagane jest zalogowanie się @@ -31,14 +31,16 @@ Hasło serwera poczty wychodzącej Użyj tego samego hasła dla serwera poczty wychodzącej Nazwa serwera: %s - Aby używać tego konta e-mail, musisz się zalogować i przyznać aplikacji dostęp do swoich e-maili. + Aby używać tego konta e-mail, musisz się zalogować i przyznać aplikacji dostęp do swoich e-maili. Zaloguj się Zaloguj się przez Google Autoryzacja anulowana - Autoryzacja nie powiodła się z następującym błędem: %s + Autoryzacja nie powiodła się z następującym błędem: %s Ten dostawca nie obsługuje obecnie protokołu OAuth 2.0. Aplikacja nie mogła znaleźć przeglądarki, za pomocą której można uzyskać dostęp do Twojego konta. Ustawienia ogólne - Importuj z aplikacji - Importuj z aplikacji + Importuj z aplikacji + Importuj z aplikacji + Zeskanuj kod QR + Wersja aplikacji nie jest obsługiwana. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-pt-rBR/strings.xml b/feature/settings/import/src/main/res/values-pt-rBR/strings.xml index 716d4ea677a..8bc06ce24f9 100644 --- a/feature/settings/import/src/main/res/values-pt-rBR/strings.xml +++ b/feature/settings/import/src/main/res/values-pt-rBR/strings.xml @@ -40,4 +40,5 @@ Configurações gerais Importar de app Importar do app + Ler código QR \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-pt/strings.xml b/feature/settings/import/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/settings/import/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-ro/strings.xml b/feature/settings/import/src/main/res/values-ro/strings.xml index 25573778ffb..30e53c22eb2 100644 --- a/feature/settings/import/src/main/res/values-ro/strings.xml +++ b/feature/settings/import/src/main/res/values-ro/strings.xml @@ -40,4 +40,6 @@ Preferințe generale Import din aplicație Import din aplicație + Scanează codul QR + Versiunea aplicației nu este compatibilă. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-ru/strings.xml b/feature/settings/import/src/main/res/values-ru/strings.xml index e0ac00c4908..6cfdc45596f 100644 --- a/feature/settings/import/src/main/res/values-ru/strings.xml +++ b/feature/settings/import/src/main/res/values-ru/strings.xml @@ -41,4 +41,6 @@ Основные Импорт из приложения Импорт из приложения + Сканировать QR-код + Версия приложения не поддерживается. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-sl/strings.xml b/feature/settings/import/src/main/res/values-sl/strings.xml index 20b4c4b027b..82e0e32e768 100644 --- a/feature/settings/import/src/main/res/values-sl/strings.xml +++ b/feature/settings/import/src/main/res/values-sl/strings.xml @@ -39,4 +39,6 @@ S tem ponudnikom šifriranje OAuth 2.0 podprto. Brskalnik nima dostopa do brskalnika za odobritev prijavnih podatkov računa. Splošne nastavitve + Uvoz iz aplikacije + Uvoz iz aplikacije \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-sq/strings.xml b/feature/settings/import/src/main/res/values-sq/strings.xml index 94780a4fb77..61c7f2a57e0 100644 --- a/feature/settings/import/src/main/res/values-sq/strings.xml +++ b/feature/settings/import/src/main/res/values-sq/strings.xml @@ -37,4 +37,7 @@ OAuth 2.0 aktualisht nuk mbulohet me këtë furnizues shërbimi. Aplikacioni sgjeti dot një shfletues për ta përdorur për ti akorduar hyrje te llogaria juaj. Rregullime të përgjithshme + Importo prej aplikacioni + Importo prej aplikacioni + Skanoni kodin QR \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-sv/strings.xml b/feature/settings/import/src/main/res/values-sv/strings.xml index 8f8114b95fc..6cdaab8ce8b 100644 --- a/feature/settings/import/src/main/res/values-sv/strings.xml +++ b/feature/settings/import/src/main/res/values-sv/strings.xml @@ -39,4 +39,6 @@ Allmänna inställningar Importera från app Importera från app + Skanna QR-kod + Appversionen stöds inte. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-tr/strings.xml b/feature/settings/import/src/main/res/values-tr/strings.xml index 06f1374dca5..c6a7d7ef51f 100644 --- a/feature/settings/import/src/main/res/values-tr/strings.xml +++ b/feature/settings/import/src/main/res/values-tr/strings.xml @@ -40,4 +40,6 @@ Genel ayarlar Uygulamadan içe aktar Uygulamadan içe aktar + QR kodu okut + Uygulama sürümü desteklenmiyor. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-uk/strings.xml b/feature/settings/import/src/main/res/values-uk/strings.xml index 06fca933145..b8e9d3eb553 100644 --- a/feature/settings/import/src/main/res/values-uk/strings.xml +++ b/feature/settings/import/src/main/res/values-uk/strings.xml @@ -1,42 +1,46 @@ - Імпортувати налаштування + Імпорт налаштувань Вибрати файл Імпорт - Налаштування успішно імпортовано + Налаштування імпортовано Введіть паролі - Увійдіть, будь ласка + Будь ласка, увійдіть - Будь ласка, увійдіть та наберіть паролі + Будь ласка, увійдіть та введіть паролі Не вдалося імпортувати налаштування Не вдалося прочитати файл з налаштуваннями Не вдалося імпортувати деякі налаштування - Успішно імпортовано + Імпортовано Потрібен пароль - Потрібно увійти + Потрібно ввійти Не імпортовано - Збій імпортування + Збій імпорту Пізніше - Імпортуються налаштування… + Налаштування імпортуються… - Щоб користуватися обліковим записом %s, потрібно надати пароль сервера. - Щоб користуватися обліковим записом %s, потрібно надати паролі сервера. - Щоб користуватися обліковим записом %s, потрібно надати паролі сервера. - Щоб користуватися обліковим записом %s, потрібно надати паролі сервера. + Щоб користуватися обліковим записом %s, потрібно вказати пароль сервера. + Щоб користуватися обліковим записом %s, потрібно вказати паролі сервера. + Щоб користуватися обліковим записом %s, потрібно вказати паролі сервера. + Щоб користуватися обліковим записом %s, потрібно вказати паролі сервера. Пароль сервера вхідної пошти Пароль сервера вихідної пошти Використовувати той же пароль для сервера вихідної пошти Ім\'я сервера: %s - Для використання цього поштового облікового запису у K-9 Mail Вам потрібно увійти в обліковий запис та надати доступ до ел.листів. + Для користування цим обліковим записом е-пошти потрібно ввійти та надати застосунку доступ до е-пошти. Увійти - Увійти з Google + Увійти за допомогою Google Авторизація скасована - Авторизація на вдалася з таких причин: %s - OAuth 2.0 наразі цим провайдером не підтримується. - Програма не може знайти браузер для надання доступу до Вашого облікового запису. + Не вдалося авторизувати через цю помилку: %s + Цей постачальник наразі не підтримує OAuth 2.0. + Застосунок не може знайти браузер для надання доступу до вашого облікового запису. Загальні налаштування + Імпорт із застосунку + Імпорт із застосунку + Сканувати QR-код + Версія застосунку не підтримується. \ No newline at end of file diff --git a/feature/settings/import/src/main/res/values-zh-rCN/strings.xml b/feature/settings/import/src/main/res/values-zh-rCN/strings.xml index 69f290c0a85..72acf87acfb 100644 --- a/feature/settings/import/src/main/res/values-zh-rCN/strings.xml +++ b/feature/settings/import/src/main/res/values-zh-rCN/strings.xml @@ -19,7 +19,7 @@ 需要登录 没有导入 导入失败 - 之后 + 稍后 正在导入设置… 您需要提供服务器密码才能使用此账号 \"%s\"。 @@ -38,4 +38,6 @@ 常规设置 从应用导入 从应用导入 + 扫描二维码 + 应用版本不支持。 \ No newline at end of file diff --git a/feature/widget/message-list/src/main/res/values-az/strings.xml b/feature/widget/message-list/src/main/res/values-az/strings.xml index 2a7c61ced80..606a2c51b04 100644 --- a/feature/widget/message-list/src/main/res/values-az/strings.xml +++ b/feature/widget/message-list/src/main/res/values-az/strings.xml @@ -1,4 +1,8 @@ - + Tərtib et - + Mesaj siyahısı + Yüklənir… + Yüklənir… + Ümumi Gələnlər Qutusu + \ No newline at end of file diff --git a/feature/widget/message-list/src/main/res/values-enm/strings.xml b/feature/widget/message-list/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/message-list/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/message-list/src/main/res/values-hr/strings.xml b/feature/widget/message-list/src/main/res/values-hr/strings.xml index cdc736460c4..bdd4b30f3b4 100644 --- a/feature/widget/message-list/src/main/res/values-hr/strings.xml +++ b/feature/widget/message-list/src/main/res/values-hr/strings.xml @@ -1,7 +1,8 @@ - + - Sastavi - Učitavam… - Učitavam… - Objedinjena Dolazna Pošta - + Nova poruka + Učitavanje… + Učitavanje… + Objedinjena dolazna pošta + Popis poruka + \ No newline at end of file diff --git a/feature/widget/message-list/src/main/res/values-kab/strings.xml b/feature/widget/message-list/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/message-list/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/message-list/src/main/res/values-kk/strings.xml b/feature/widget/message-list/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/message-list/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/message-list/src/main/res/values-nn/strings.xml b/feature/widget/message-list/src/main/res/values-nn/strings.xml index 1dd116ac081..e09dd077d03 100644 --- a/feature/widget/message-list/src/main/res/values-nn/strings.xml +++ b/feature/widget/message-list/src/main/res/values-nn/strings.xml @@ -1,6 +1,8 @@ - + Skriv Lastar … Lastar … - + Meldingsliste + Samla innboks + \ No newline at end of file diff --git a/feature/widget/message-list/src/main/res/values-pt/strings.xml b/feature/widget/message-list/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/message-list/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/message-list/src/main/res/values-uk/strings.xml b/feature/widget/message-list/src/main/res/values-uk/strings.xml index fdbf0bc00e8..f8dac59fd5f 100644 --- a/feature/widget/message-list/src/main/res/values-uk/strings.xml +++ b/feature/widget/message-list/src/main/res/values-uk/strings.xml @@ -1,7 +1,8 @@ - + - Написати новий лист + Написати Завантаження… Завантаження… Об\'єднані Вхідні - + Список повідомлень + \ No newline at end of file diff --git a/feature/widget/shortcut/src/main/res/values-enm/strings.xml b/feature/widget/shortcut/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/shortcut/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/shortcut/src/main/res/values-hr/strings.xml b/feature/widget/shortcut/src/main/res/values-hr/strings.xml index a6b3daec935..86352ce5e6f 100644 --- a/feature/widget/shortcut/src/main/res/values-hr/strings.xml +++ b/feature/widget/shortcut/src/main/res/values-hr/strings.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + Računi + \ No newline at end of file diff --git a/feature/widget/shortcut/src/main/res/values-kab/strings.xml b/feature/widget/shortcut/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/shortcut/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/shortcut/src/main/res/values-kk/strings.xml b/feature/widget/shortcut/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/shortcut/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/shortcut/src/main/res/values-lt/strings.xml b/feature/widget/shortcut/src/main/res/values-lt/strings.xml index a6b3daec935..b4fd560b3ed 100644 --- a/feature/widget/shortcut/src/main/res/values-lt/strings.xml +++ b/feature/widget/shortcut/src/main/res/values-lt/strings.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + Paskyros + \ No newline at end of file diff --git a/feature/widget/shortcut/src/main/res/values-nb-rNO/strings.xml b/feature/widget/shortcut/src/main/res/values-nb-rNO/strings.xml index a6b3daec935..cd2a5b31af2 100644 --- a/feature/widget/shortcut/src/main/res/values-nb-rNO/strings.xml +++ b/feature/widget/shortcut/src/main/res/values-nb-rNO/strings.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + Kontoer + \ No newline at end of file diff --git a/feature/widget/shortcut/src/main/res/values-pt/strings.xml b/feature/widget/shortcut/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/shortcut/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/shortcut/src/main/res/values-uk/strings.xml b/feature/widget/shortcut/src/main/res/values-uk/strings.xml index a6b3daec935..2fa1803c8a0 100644 --- a/feature/widget/shortcut/src/main/res/values-uk/strings.xml +++ b/feature/widget/shortcut/src/main/res/values-uk/strings.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + Облікові записи + \ No newline at end of file diff --git a/feature/widget/unread/src/main/res/values-enm/strings.xml b/feature/widget/unread/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/unread/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/unread/src/main/res/values-et/strings.xml b/feature/widget/unread/src/main/res/values-et/strings.xml index 064959f4518..27d2539814b 100644 --- a/feature/widget/unread/src/main/res/values-et/strings.xml +++ b/feature/widget/unread/src/main/res/values-et/strings.xml @@ -8,7 +8,7 @@ Näita lugemata kirjade üldarvu vaid üksiku kausta kohta Kaust Kaust, mille lugemata kirjade üldarvu peaks näitama - Tehtud + Valmis %1$s - %2$s Konto on valimata Kaust on valimata diff --git a/feature/widget/unread/src/main/res/values-fy/strings.xml b/feature/widget/unread/src/main/res/values-fy/strings.xml index 34f35a00ce3..21a9e68aa45 100644 --- a/feature/widget/unread/src/main/res/values-fy/strings.xml +++ b/feature/widget/unread/src/main/res/values-fy/strings.xml @@ -1,11 +1,11 @@ - Tal net-lêzen werjaan foar… + Tal net-lêzen toane foar… Account De account wêrfoar it tal net-lêzen berjochten toand wurde moat Kombinearre Postfek YN Mapoantal - It tal net-lêzen berjochten fan in inkelde map toane + Tal net-lêzen berjochten fan in inkelde map toane Map De map wêrfoar it tal net-lêzen berjochten toand wurde moat Dien diff --git a/feature/widget/unread/src/main/res/values-hr/strings.xml b/feature/widget/unread/src/main/res/values-hr/strings.xml index 336ad8f4712..51c34ed11e4 100644 --- a/feature/widget/unread/src/main/res/values-hr/strings.xml +++ b/feature/widget/unread/src/main/res/values-hr/strings.xml @@ -1,15 +1,17 @@ - + - Prikaži brojač nepročitanih za… + Prikaži broj nepročitanih poruka za… Račun - Račun za koji će broj nepročitanih biti prikazivan - Objedinjena Dolazna Pošta + Račun za koji treba prikazati broj nepročitanih poruka + Objedinjena dolazna pošta Broj mapa Mapa - Mapa za koju će broj nepročitanih biti prikazivan + Mapa za koju treba prikazati broj nepročitanih poruka Gotovo %1$s - %2$s Nijedan račun nije odabran Nijedna mapa nije odabrana Odaberite račun - + Broj nepročitanih poruka + Prikaži broj nepročitanih poruka samo za jednu mapu e-pošte + \ No newline at end of file diff --git a/feature/widget/unread/src/main/res/values-kab/strings.xml b/feature/widget/unread/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/unread/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/unread/src/main/res/values-kk/strings.xml b/feature/widget/unread/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/unread/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/unread/src/main/res/values-nl/strings.xml b/feature/widget/unread/src/main/res/values-nl/strings.xml index 052cc43ee12..987a2b712a7 100644 --- a/feature/widget/unread/src/main/res/values-nl/strings.xml +++ b/feature/widget/unread/src/main/res/values-nl/strings.xml @@ -5,7 +5,7 @@ De account waarvoor het aantal ongelezen berichten getoond moet worden Samengevoegd Postvak IN Mapaantal - Het aantal ongelezen berichten van een enkele map tonen + Aantal ongelezen berichten van een enkele map tonen Map De map waarvoor het aantal ongelezen berichten getoond moet worden Gereed diff --git a/feature/widget/unread/src/main/res/values-nn/strings.xml b/feature/widget/unread/src/main/res/values-nn/strings.xml index 0ed49663b02..3f582e1840a 100644 --- a/feature/widget/unread/src/main/res/values-nn/strings.xml +++ b/feature/widget/unread/src/main/res/values-nn/strings.xml @@ -4,4 +4,14 @@ Vel konto Antal ulesne Konto + Kontoen der talet på ulesne meldingar skal visast + Mappeantal + Samla innboks + Vis antal ulesne frå kun ei mappe + Mappe + Mappa der antal ulesne skal visast + Ferdig + %1$s - %2$s + Ingen konto valt + Ingen mappe valt \ No newline at end of file diff --git a/feature/widget/unread/src/main/res/values-pl/strings.xml b/feature/widget/unread/src/main/res/values-pl/strings.xml index cb9aa2db31b..c042da5699d 100644 --- a/feature/widget/unread/src/main/res/values-pl/strings.xml +++ b/feature/widget/unread/src/main/res/values-pl/strings.xml @@ -8,7 +8,7 @@ Wyświetl licznik nieprzeczytanych wiadomości tylko dla pojedynczego folderu Folder Folder, dla którego liczba nieprzeczytanych wiadomości powinna być wyświetlana - Wykonano + Gotowe %1$s - %2$s Nie wybrano konta Nie wybrano folderu diff --git a/feature/widget/unread/src/main/res/values-pt/strings.xml b/feature/widget/unread/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/feature/widget/unread/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/feature/widget/unread/src/main/res/values-sv/strings.xml b/feature/widget/unread/src/main/res/values-sv/strings.xml index 2cc7f58555b..e5612bdd13d 100644 --- a/feature/widget/unread/src/main/res/values-sv/strings.xml +++ b/feature/widget/unread/src/main/res/values-sv/strings.xml @@ -1,4 +1,4 @@ - + Visa antalet olästa för… Konto @@ -13,4 +13,5 @@ Inget konto valt Ingen mapp vald Välj konto - + Antal olästa + \ No newline at end of file diff --git a/feature/widget/unread/src/main/res/values-uk/strings.xml b/feature/widget/unread/src/main/res/values-uk/strings.xml index 1353d7c41d0..f394d842e73 100644 --- a/feature/widget/unread/src/main/res/values-uk/strings.xml +++ b/feature/widget/unread/src/main/res/values-uk/strings.xml @@ -1,16 +1,17 @@ - + Показати кількість непрочитаних для… Обліковий запис - Обліковий запис, для якого має відображатися кількість непрочитаних листів + Обліковий запис, для якого має показуватись кількість непрочитаних Об\'єднані Вхідні Кількість тек - Показати кількість непрочитаних листів тільки однієї теки + Показати кількість непрочитаних лише однієї теки Тека - Тека, для якої має відображатися кількість непрочитаних листів + Тека, для якої має показуватись кількість непрочитаних Готово %1$s - %2$s - Не вибрано жодного облікового запису - Не вибрано жодної теки + Обліковий запис не вибрано + Теку не вибрано Вибрати обліковий запис - + Кількість непрочитаних + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-az/strings.xml b/legacy/ui/base/src/main/res/values-az/strings.xml index 8154125ecb8..6fe07e497ec 100644 --- a/legacy/ui/base/src/main/res/values-az/strings.xml +++ b/legacy/ui/base/src/main/res/values-az/strings.xml @@ -3,4 +3,5 @@ Oldu Ləğv et - + Ulduz + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-bg/strings.xml b/legacy/ui/base/src/main/res/values-bg/strings.xml index 629b923615a..4c6547850a8 100644 --- a/legacy/ui/base/src/main/res/values-bg/strings.xml +++ b/legacy/ui/base/src/main/res/values-bg/strings.xml @@ -2,5 +2,6 @@ ОК - Откажи - + Отказ + Звезда + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-cs/strings.xml b/legacy/ui/base/src/main/res/values-cs/strings.xml index ec4ce60a1b9..409013fed27 100644 --- a/legacy/ui/base/src/main/res/values-cs/strings.xml +++ b/legacy/ui/base/src/main/res/values-cs/strings.xml @@ -3,4 +3,5 @@ OK Zrušit - + Hvězdička + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-de/strings.xml b/legacy/ui/base/src/main/res/values-de/strings.xml index 67ee1857cd0..74c9b444a41 100644 --- a/legacy/ui/base/src/main/res/values-de/strings.xml +++ b/legacy/ui/base/src/main/res/values-de/strings.xml @@ -3,4 +3,5 @@ OK Abbrechen + Wichtigkeit \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-enm/strings.xml b/legacy/ui/base/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/base/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-es/strings.xml b/legacy/ui/base/src/main/res/values-es/strings.xml index 82a86497588..27250ee5935 100644 --- a/legacy/ui/base/src/main/res/values-es/strings.xml +++ b/legacy/ui/base/src/main/res/values-es/strings.xml @@ -3,4 +3,5 @@ Aceptar Cancelar - + Destacar + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-et/strings.xml b/legacy/ui/base/src/main/res/values-et/strings.xml index a1e1983dcb2..54841a9c4d2 100644 --- a/legacy/ui/base/src/main/res/values-et/strings.xml +++ b/legacy/ui/base/src/main/res/values-et/strings.xml @@ -3,4 +3,5 @@ Ok Tühista - + Märgi tähega + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-fa/strings.xml b/legacy/ui/base/src/main/res/values-fa/strings.xml index 955d4d10218..68e5a793d82 100644 --- a/legacy/ui/base/src/main/res/values-fa/strings.xml +++ b/legacy/ui/base/src/main/res/values-fa/strings.xml @@ -3,4 +3,5 @@ خب لغو - + ستاره + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-fr/strings.xml b/legacy/ui/base/src/main/res/values-fr/strings.xml index 36f2aab7f35..14e71de5b26 100644 --- a/legacy/ui/base/src/main/res/values-fr/strings.xml +++ b/legacy/ui/base/src/main/res/values-fr/strings.xml @@ -3,4 +3,5 @@ D’accord Annuler + Ajouter une étoile \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-fy/strings.xml b/legacy/ui/base/src/main/res/values-fy/strings.xml index af9cf96aacc..871cb51ed94 100644 --- a/legacy/ui/base/src/main/res/values-fy/strings.xml +++ b/legacy/ui/base/src/main/res/values-fy/strings.xml @@ -3,4 +3,5 @@ OK Annulearje + Stjer \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-hr/strings.xml b/legacy/ui/base/src/main/res/values-hr/strings.xml index 8b4fe3c34f7..5ad393dc52e 100644 --- a/legacy/ui/base/src/main/res/values-hr/strings.xml +++ b/legacy/ui/base/src/main/res/values-hr/strings.xml @@ -1,6 +1,7 @@ - U REDU + U redu Otkaži - + Označi zvjezdicom + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-hu/strings.xml b/legacy/ui/base/src/main/res/values-hu/strings.xml index 0fd7144c72b..a2a75a1c63e 100644 --- a/legacy/ui/base/src/main/res/values-hu/strings.xml +++ b/legacy/ui/base/src/main/res/values-hu/strings.xml @@ -3,4 +3,5 @@ OK Mégse - + Csillag + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-ja/strings.xml b/legacy/ui/base/src/main/res/values-ja/strings.xml index 679fbf985ee..b300b47ac80 100644 --- a/legacy/ui/base/src/main/res/values-ja/strings.xml +++ b/legacy/ui/base/src/main/res/values-ja/strings.xml @@ -3,4 +3,5 @@ OK キャンセル - + スターを付ける + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-kab/strings.xml b/legacy/ui/base/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..25c7836a3ad --- /dev/null +++ b/legacy/ui/base/src/main/res/values-kab/strings.xml @@ -0,0 +1,5 @@ + + + Sefsex + Rnu itri + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-kk/strings.xml b/legacy/ui/base/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/base/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-nl/strings.xml b/legacy/ui/base/src/main/res/values-nl/strings.xml index f84de8d8ade..9bf72f9187a 100644 --- a/legacy/ui/base/src/main/res/values-nl/strings.xml +++ b/legacy/ui/base/src/main/res/values-nl/strings.xml @@ -3,4 +3,5 @@ OK Annuleren + Ster \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-nn/strings.xml b/legacy/ui/base/src/main/res/values-nn/strings.xml index ac1c91839e3..998f1b7264e 100644 --- a/legacy/ui/base/src/main/res/values-nn/strings.xml +++ b/legacy/ui/base/src/main/res/values-nn/strings.xml @@ -3,4 +3,5 @@ Greitt Avbryt - + Stjerne + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-pl/strings.xml b/legacy/ui/base/src/main/res/values-pl/strings.xml index 5e0ce00a843..3961e2091bb 100644 --- a/legacy/ui/base/src/main/res/values-pl/strings.xml +++ b/legacy/ui/base/src/main/res/values-pl/strings.xml @@ -3,4 +3,5 @@ OK Anuluj - + Gwiazdka + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-pt-rBR/strings.xml b/legacy/ui/base/src/main/res/values-pt-rBR/strings.xml index d5e565edb60..537ef306d4f 100644 --- a/legacy/ui/base/src/main/res/values-pt-rBR/strings.xml +++ b/legacy/ui/base/src/main/res/values-pt-rBR/strings.xml @@ -3,4 +3,5 @@ OK Cancelar - + Estrela + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-pt/strings.xml b/legacy/ui/base/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/base/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-ro/strings.xml b/legacy/ui/base/src/main/res/values-ro/strings.xml index cbce4caea86..517e789fc57 100644 --- a/legacy/ui/base/src/main/res/values-ro/strings.xml +++ b/legacy/ui/base/src/main/res/values-ro/strings.xml @@ -3,4 +3,5 @@ OK Renunță - + Stea + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-ru/strings.xml b/legacy/ui/base/src/main/res/values-ru/strings.xml index cbaaa5c5690..26d5c2ac659 100644 --- a/legacy/ui/base/src/main/res/values-ru/strings.xml +++ b/legacy/ui/base/src/main/res/values-ru/strings.xml @@ -3,4 +3,5 @@ ОК Отмена - + Избранное + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-sq/strings.xml b/legacy/ui/base/src/main/res/values-sq/strings.xml index 45c1ffdd66c..75040d44eaa 100644 --- a/legacy/ui/base/src/main/res/values-sq/strings.xml +++ b/legacy/ui/base/src/main/res/values-sq/strings.xml @@ -3,4 +3,5 @@ OK Anuloje + Yll \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-sv/strings.xml b/legacy/ui/base/src/main/res/values-sv/strings.xml index 0eff58572dc..ee4f15462f3 100644 --- a/legacy/ui/base/src/main/res/values-sv/strings.xml +++ b/legacy/ui/base/src/main/res/values-sv/strings.xml @@ -3,4 +3,5 @@ OK Avbryt - + Stjärna + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-tr/strings.xml b/legacy/ui/base/src/main/res/values-tr/strings.xml index 1a295b00bda..acf0c62b245 100644 --- a/legacy/ui/base/src/main/res/values-tr/strings.xml +++ b/legacy/ui/base/src/main/res/values-tr/strings.xml @@ -3,4 +3,5 @@ Tamam İptal + Yıldız \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-uk/strings.xml b/legacy/ui/base/src/main/res/values-uk/strings.xml index 913456032a5..547f8676b20 100644 --- a/legacy/ui/base/src/main/res/values-uk/strings.xml +++ b/legacy/ui/base/src/main/res/values-uk/strings.xml @@ -3,4 +3,5 @@ Гаразд Скасувати - + Позначити зірочкою + \ No newline at end of file diff --git a/legacy/ui/base/src/main/res/values-zh-rCN/strings.xml b/legacy/ui/base/src/main/res/values-zh-rCN/strings.xml index 1cd15b172f4..d79cfdef447 100644 --- a/legacy/ui/base/src/main/res/values-zh-rCN/strings.xml +++ b/legacy/ui/base/src/main/res/values-zh-rCN/strings.xml @@ -3,4 +3,5 @@ 确定 取消 - + 星标 + \ No newline at end of file diff --git a/legacy/ui/folder/src/main/res/values-az/strings.xml b/legacy/ui/folder/src/main/res/values-az/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/folder/src/main/res/values-az/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/folder/src/main/res/values-enm/strings.xml b/legacy/ui/folder/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/folder/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/folder/src/main/res/values-kab/strings.xml b/legacy/ui/folder/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/folder/src/main/res/values-kab/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/folder/src/main/res/values-kk/strings.xml b/legacy/ui/folder/src/main/res/values-kk/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/folder/src/main/res/values-kk/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/folder/src/main/res/values-pt/strings.xml b/legacy/ui/folder/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/folder/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-ar/strings.xml b/legacy/ui/legacy/src/main/res/values-ar/strings.xml index e02aa38ecb6..5f87370e4ed 100644 --- a/legacy/ui/legacy/src/main/res/values-ar/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ar/strings.xml @@ -313,12 +313,6 @@ متقدمة إعدادات الحساب إشعارات البريد الجديد - مجلد الإخطارات - الكل - المجلدات من الفئة الأولى فقط - المجلدات من الفئة الأولى و الثانية - الكل عدا مجلدات الفئة الثانية - بدون إخطارات المزامنة بريدك الإليكتروني إظهار إشعارات على شريط الحالة عند تلقي بريد جديد @@ -407,27 +401,12 @@ خلال الأشهر الـ 3 الماضية خلال الأشهر الـ 6 الماضية خلال العام الماضي - المجلدات التي تود إظهارها - الكل - المجلدات من الفئة الأولى فقط - المجلدات من الفئة الأولى و الثانية - الكل عدا مجلدات الفئة الثانية - مجلدات الإستجواب - الكل - المجلدات من الفئة الأولى فقط - المجلدات من الفئة الأولى و الثانية - الكل عدا مجلدات الفئة الثانية - بدون مزامنة عمليات حذف الخادم احذف الرسائل عند حذفها على الخادم تطبيق OpenPGP مفقود - هل تم إلغاء تثبيته؟ إعدادات المجلد العرض في قمة المجموعة اعرض بالقرب من أعلى قائمة المجلدات - فئة عرض المجلد - دون تصنيف - الفئة الأولى - الفئة الثانية امحوا الرسائل المحلية خادم الوارد إعداد خادم البريد الوارد diff --git a/legacy/ui/legacy/src/main/res/values-az/strings.xml b/legacy/ui/legacy/src/main/res/values-az/strings.xml index 7871f0e2323..ed014a52b17 100644 --- a/legacy/ui/legacy/src/main/res/values-az/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-az/strings.xml @@ -10,7 +10,7 @@ Açıq Mənbə Layihəsi Veb sayt Kömək al - İstifadəçi forumu + İstifadəçi mərkəzi Kitabxanalar Lisenziya Dəyişiklik jurnalı @@ -19,7 +19,7 @@ Nə yenidir Tətbiq yeniləndisə son dəyişiklikləri göstər - Bu buraxılışda nə yenidir oxu + Bu buraxılışda nə yenidir bil @@ -30,13 +30,13 @@ Cavab ver Hamısın cavabla Göndər - Birləşmə kimi göndər + Əlavə kimi göndər Qovluq seç Bura Köçür… Bura Yapışdır… %d seçildi Göndər - Mövzu boşdur, necəsə göndərmək üçün təkrar kliklə + Mövzu boşdur, yenə də göndərmək üçün təkrar kliklə Cavab ver Hamısına cavab ver Sil @@ -126,42 +126,42 @@ Paylaş Göndəricini seç Ulduz əlavə et - Thunderbird Mobile komandası - Yerini dəyiş + Thunderbird Mobile Komandası + Köçür Qaralamalara köçür Qovluq siyahısını yenilə Hesab əlavə et Qovluğu tap - Mövzu mətni kopyalandı - Qaralama olaraq yadda saxla + Mövzu mətni buferə köçürüldü + Qaralama olaraq saxla İmtina Qovluqları idarə et - Hesab parametrləri - Kopyala + Hesab tənzimləmələri + Köçür Ulduzu sil Abunəlikdən çıx - Oxunma bildirişi tələb et + Oxunma bildirişi alınacaq Oxunmamış olaraq işarələ Oxunma bildirişləri Fayl əlavə et - Oxunma bildirişi tələb etmə + Oxunma bildirişi alınmayacaq Zibil qutusunu boşalt - Sil + Təmizlə - Ünvan kopyalandı - Ünvanlar kopyalandı + Ünvan buferə köçürüldü + Ünvanlar buferə köçürüldü (Mövzu yoxdur) Mesajlar yüklənir… Göndərən yoxdur Bağlantı xətası - Yeni mesaj olaraq redaktə et + Yeni mesaj ikən düzəliş et Başlıqları göstər Mesaj yükləmə xətası %s haqqında Axtar \"%s\" hesabı %s-dan silinəcək. - Oldu - E-poçtu yoxla - Mesaj göndər + Bitir + Poçtu yoxla + Mesajları göndər \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-be/strings.xml b/legacy/ui/legacy/src/main/res/values-be/strings.xml index 9165c883b40..db10de87ced 100644 --- a/legacy/ui/legacy/src/main/res/values-be/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-be/strings.xml @@ -308,12 +308,6 @@ Дадаткова Налады акаўнта Апавяшчэнне пра новую пошту - Апавяшчэнні каталогаў - Усе - 1 клас - 1 і 2 класы - Апроч 1 і 2 класаў - Няма Апавяшчэнне пра сінхранізацыю Ваш адрас электроннай пошты Паказваць на панэлі стану апавяшчэнні пра новую пошту @@ -402,27 +396,12 @@ 3 апошнія месяцы 6 апошніх месяцаў апошні год - Бачнасць каталогаў - Усе - 1 клас - 1 і 2 класы - Апроч 1 і 2 класаў - Апытанне каталогаў - Усе - 1 клас - 1 і 2 класы - Апроч 1 і 2 класаў - Няма Сінхроннае выдаленне Выдаляць лісты пры выдаленні з сервера Праграма OpenPGP адсутнічае. Яна была выдаленая? Налады каталога Паказваць у пачатку Паказваць бліжэй да спіса каталогаў - Бачнасць каталогаў - Без класа - 1 клас - 2 клас Выдаліць лакальныя лісты Сервер уваходных лістоў Наладжванне сервера ўваходнай пошты diff --git a/legacy/ui/legacy/src/main/res/values-bg/strings.xml b/legacy/ui/legacy/src/main/res/values-bg/strings.xml index 4dda879224a..5222a321f78 100644 --- a/legacy/ui/legacy/src/main/res/values-bg/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-bg/strings.xml @@ -280,12 +280,6 @@ Разширени Настройки на профила Ново известие за поща - Папка с известия - Всички - Само 1-ви Клас папки - 1-ви и 2-ри Клас папки - Всички освен 2-ри Клас папки - Никой Известия за синхронизация Вашият пощенски адрес Уведомявай в статус бара при ново съобщение @@ -360,27 +354,12 @@ последните 3 месеца последните 6 месеца последната година - Папки за показване - Всички - Само 1-ви Клас папки - 1-ви и 2-ри Клас папки - Всички освен 2-ри Клас папки - Проверка на папките - Всички - Само 1-ви Клас папки - 1-ви и 2-ри Клас папки - Всички освен 2-ри Клас папки - Никой Синхронизирай изтриванията от сървъра Премахни съобщенията, когато се изтрият от сървъра Липсва OpenPGP приложение - да не сте го деинсталирали? Настройки на папка Показвай в основната група Показвай в началото на списъка с папки - Клас на папки за показване - Без клас - 1-ви Клас - 2-ри Клас Изчисти локалните съобщения Сървър за входяща поща Конфигуриране на сървър за входяща поща @@ -628,7 +607,7 @@ Запазване в чернови Изтегляне на прикачен файл… - *Крипитиран* + *Шифрован* Добавяне в контакти Cc Bcc diff --git a/legacy/ui/legacy/src/main/res/values-br/strings.xml b/legacy/ui/legacy/src/main/res/values-br/strings.xml index 76bd7f9e4f0..a28f6735af5 100644 --- a/legacy/ui/legacy/src/main/res/values-br/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-br/strings.xml @@ -262,12 +262,6 @@ Kemplezhoc’h Arventennoù ar gont Rebuzadurioù posteloù nevez - Teuliadoù rebuzadurioù - Pep tra - Teuliadoù ar rummad 1añ hepken - Teuliadoù ar rummad 1añ hag an eil - An holl estreget teuliadoù an eil rummad - Netra Rebuzadurioù goubredañ Ho chomlec’h postel Rebuziñ en ho parrenn-statud pa erru ur postel @@ -335,27 +329,12 @@ an 3 miz tremenet ar 6 miz tremenet ar bloaz tremenet - Teuliadoù da ziskouez - An holl - Teuliadoù ar rummad 1añ hepken - Teuliadoù ar rummad 1añ hag an eil - An holl estreget teuliadoù an eil rummad - Kerc’hat an teuliadoù - Pep tra - Teuliadoù ar rummad 1añ hepken - Teuliadoù ar rummad 1añ hag an eil - An holl estreget teuliadoù an eil rummad - Netra Goubredañ dilamadurioù an dafariad Dilemel ar c’hemennadennoù pa ’z int dilamet war an dafariad Diouer a arload OpenPGP - ha staliet eo bet? Arventennoù an teuliad Diskouez er strollad uhelañ Diskouez e-kichen krec’h roll an teuliadoù - Rummad skrammañ an teuliad - Rummad ebet - 1añ rummad - Eil rummad Skarzhañ ar c’hemennadennoù lec’hel Dafariad degemer Kefluniañ an dafariad postel degemer diff --git a/legacy/ui/legacy/src/main/res/values-ca/strings.xml b/legacy/ui/legacy/src/main/res/values-ca/strings.xml index 987a041bebf..21fe7aab28e 100644 --- a/legacy/ui/legacy/src/main/res/values-ca/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ca/strings.xml @@ -21,7 +21,7 @@ Esbrineu les novetats d’aquesta versió - Vista + Mostra @@ -307,12 +307,6 @@ Avançat Configuració del compte Notificacions noves de correu - Carpetes de notificacions - Tot - Només carpetes de 1a Classe - Carpetes de 1a i 2a Classe - Totes les carpetes excepte de 2a Classe - Cap Notificacions de sincronització La vostra adreça de correu Notifica-ho a la barra d\'estat quan arribi correu @@ -401,27 +395,12 @@ dels darrers 3 mesos dels darrers 6 mesos del darrer any - Carpetes a mostrar - Tot - Només carpetes de 1a Classe - Carpetes de 1a i 2a Classe - Tot excepte carpetes de 2a classe - Comprova les carpetes - Tot - Només carpetes de 1a Classe - Carpetes de 1a i 2a Classe - Tot excepte carpetes de 2a Classe - Cap Sincronitza els elements suprimits al servidor Elimina els missatges quan se suprimeixin al servidor Falta una aplicació d\'OpenPGP. S\'ha desinstal·lat\? Configuració de les carpetes Mostra al grup superior Mostra a prop del capdamunt de la llista de carpetes - Classe de vista de carpetes - Sense Classe - 1a Classe - 2a Classe Neteja els missatges locals Servidor d\'entrada Configura el servidor d\'entrada @@ -907,8 +886,8 @@ Toca per a concedir permís. Equip de Thunderbird per al mòbil L\'aplicació OpenKeychain és necessària per habilitar el suport per a l\'encriptació d\'extrem a extrem. - Quant a %s - El compte \"%s\" s\'eliminarà de %s. + Quant al %s + El compte \"%s\" s\'eliminarà del %s. Quan s\'utilitza Push, %1$s manté una connexió amb el servidor de correu. Android requereix que es mostri una notificació en curs mentre l\'aplicació està activa en segon pla. %2$s Notificacions Recollida de dades @@ -917,4 +896,6 @@ Mostra les carpetes ocultes Comparteix dades de rendiment, ús, maquinari i personalització d\'aquesta aplicació amb Mozilla per ajudar-nos a millorar el Thunderbird Dades tècniques i d\'ús + Mostra la carpeta + Doneu suport al %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-co/strings.xml b/legacy/ui/legacy/src/main/res/values-co/strings.xml index 3853af2faae..84a5629e026 100644 --- a/legacy/ui/legacy/src/main/res/values-co/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-co/strings.xml @@ -284,12 +284,6 @@ tutti i messaghji Ùn si pò micca cupià o dispiazzà un messaghju chì ùn hè micca sincrunizatu cù u servitore Espertu - Cartulari di e nutificazioni - Tutti - Solu i cartulari di 1a classa - Cartulari di 1a è 2a classa - Tutti i cartulari fora di a 2a classa - Nisunu Nutificazioni di sincrunizazione U vostru indirizzu elettronicu Nutificazione in a barra di statu à ricezzione d’un messaghju novu @@ -358,19 +352,7 @@ i 3 ultimi mesi i 6 ultimi mesi l’ultimu annu - Cartulari à affissà - Tutti - Solu i cartulari di 1a classa - Cartulari di 1a è 2a classa - Tutti i cartulari fora di a 2a classa - Cartulari à sullicità - Tutti - Tutti i cartulari fora di a 2a classa - Nisunu Affissà in a parte superiore di a lista di i cartulari - Classa d’affissera di u cartulare - Nisuna classa - 2a classa Squassà i messaghji lucale Cunfigurà u servitore d’esciuta (SMTP) di i messaghji Vibrazione @@ -408,8 +390,6 @@ 10 Mio i 2 ultimi ghjorni e 3 ultime settimane - Solu i cartulari di 1a classa - Cartulari di 1a è 2a classa Sincrunizà e squassature di u servitore Caccià i messaghji quand’elli sò squassati nant’à u servitore L’appiecazione OpenPGP hè assente ; seria desinstallata ? @@ -421,7 +401,6 @@ Mudellu 4 Mudellu 2 Mudellu 5 - 1a classa Servitore d’entrata Cunfigurà u servitore d’entrata di i messaghji Servitore d’esciuta diff --git a/legacy/ui/legacy/src/main/res/values-cs/strings.xml b/legacy/ui/legacy/src/main/res/values-cs/strings.xml index b442f8662c7..7a9a857e040 100644 --- a/legacy/ui/legacy/src/main/res/values-cs/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-cs/strings.xml @@ -308,12 +308,6 @@ Rozšířené Nastavení účtu Oznamování nové pošty - Složky oznámení - Všechny - Jen složky 1. třídy - Složky 1. a 2. třídy - Všechny vyjma složek 2. třídy - Žádné Synchronizovat oznámení Vaše e-mailová adresa Oznamovat došlou poštu ve stavovém řádku @@ -402,27 +396,12 @@ za poslední 3 měsíce za posledních 6 měsíců za poslední rok - Zobrazované složky - Všechny - Jen složky 1. třídy - Složky 1. a 2. třídy - Všechny vyjma složek 2. třídy - Složky řízené dotazováním - Všechny - Jen složky 1. třídy - Složky 1. a 2. třídy - Všechny vyjma složek 2. třídy - Žádné Synchronizace mazání serveru Odstranit zprávy, když je smaže server Chybí OpenPGP aplikace – byla odinstalována? Nastavení složky Zobrazit v nejvyšší skupině Zobrazit blízko špičky seznamu složek - Třída zobrazování složky - Žádná třída - 1. třída - 2. třída Vyčistit místní zprávy Server příchozí pošty Nastavení serveru příchozí pošty @@ -553,7 +532,7 @@ Navigace v zobrazení mailů pomocí tlačítek hlasitosti Ukázat sjednocený pohled na doručenou poštu Zobrazit počet označených hvězdičkou - Integrovaná doručená pošta + Jednotná schránka Všechny zprávy v integrovaných složkách Integrovat Všechny zprávy jsou zobrazeny v Integrované doručené poště @@ -925,4 +904,6 @@ Tuto zprávu si můžete ponechat a použít jí jako zálohu svého tajného kl Povolit oznámení Zapnout synchronizaci Zobrazit skryté složky + Zobrazit složku + Podpora %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-cy/strings.xml b/legacy/ui/legacy/src/main/res/values-cy/strings.xml index 7dd5308699e..91696f35050 100644 --- a/legacy/ui/legacy/src/main/res/values-cy/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-cy/strings.xml @@ -294,12 +294,6 @@ Uwch Gosodiadau cyfrif Hysbysiadau negeseuon newydd - Ffolderi i hysbysu amdanynt - Pob un - Dim ond ffolderi rhenc 1af - Ffolderi rhenc 1af ac 2ail - Pob ffolder ond 2ail renc - Dim Hysbysiadau cydweddu Dy gyfeiriad ebost Dangos yn bar statws pan fo neges newydd @@ -388,27 +382,12 @@ y 3 mis diwethaf y 6 mis diwethaf y flwyddyn ddiwethaf - Ffolderi i\'w dangos - Pob un - Ffolderi rhenc 1af yn unig - Ffolderi rhenc 1af ac 2ail - Pob ffolder ond 2ail renc - Ffolderi i\'w gwirio - Pob un - Ffolderi rhenc 1af yn unig - Ffolderi rhenc 1af ac 2ail - Pob ffolder ond 2ail renc - Dim Cydweddu dileu ar y gweinydd Dileu negeseuon pan maen nhw\'n cael eu dileu ar y gweinydd. Map OpenPGP ar goll. A chafodd ei osod? Gosodiadau ffolder Dangos yn y grŵp uchaf Dangos yn agos at frig y rhestr ffolderi - Rhenc dangos y ffolder - Dim Rhenc - Rhenc 1af - 2ail renc Clirio negeseuon lleol Gweinydd Ffurfweddu\'r gweinydd derbyn diff --git a/legacy/ui/legacy/src/main/res/values-da/strings.xml b/legacy/ui/legacy/src/main/res/values-da/strings.xml index 16629a4e2cb..b1b5302e8b1 100644 --- a/legacy/ui/legacy/src/main/res/values-da/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-da/strings.xml @@ -302,12 +302,6 @@ Avanceret Konto opsætning Vis besked når ny mail er modtaget - Påmindelses mapper - Alle - Kun primære mapper - Primære og sekundære mapper - Alle undtaget sekundære mapper - Ingen Besked om synkronisering Din mailaddresse Vis besked i statusbar når mail ankommer @@ -395,27 +389,12 @@ de seneste 3 måneder de seneste 6 måneder det seneste år - Mapper som ønskes vist - Alle - Kun primære mapper - Primære og sekundære mapper - Alle undtaget sekundære mapper - Hent/send mail fra mapper (Sync) - Alle - Kun primære mapper - Primære og sekundære mapper - Alle undtaget sekundære mapper - Ingen Synkroniser fjern-sletning Fjern mails når de slettes på server Mangler OpenPGP program - er det afinstalleret? Mappe opsætning Vis i topgruppen Vis nær toppen af mappelisten - Mappeklasse for visning - Ingen - Primær - Sekundær Fjern lokalt lagrede mails Indgående server Konfigurer indgående mail server diff --git a/legacy/ui/legacy/src/main/res/values-de/strings.xml b/legacy/ui/legacy/src/main/res/values-de/strings.xml index caaa086c58a..c98a15d9970 100644 --- a/legacy/ui/legacy/src/main/res/values-de/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-de/strings.xml @@ -302,12 +302,6 @@ Erweitert Kontoeinstellungen Bei neuen Nachrichten - Benachrichtigungsordner - Alle - Nur Hauptordner - Haupt- und Nebenordner - Alle außer Nebenordner - Kein Benachrichtigung bei Synchronisation Deine E-Mail-Adresse Benachrichtigung in der Statuszeile anzeigen, wenn eine neue Nachricht empfangen wird @@ -396,27 +390,12 @@ der letzten 3 Monate der letzten 6 Monate des letzten Jahres - Angezeigte Ordner - Alle - Nur Hauptordner - Haupt- und Nebenordner - Alle außer Nebenordner - Abzufragende Ordner - Alle - Nur Hauptordner - Haupt- und Nebenordner - Alle außer Nebenordner - Keine Löschungen vom Server übernehmen Nachrichten löschen, wenn sie vom Server gelöscht wurden Fehlende OpenPGP-App – wurde sie deinstalliert? Ordnereinstellungen Oben anzeigen Ordner am Anfang der Ordnerliste anzeigen - Anzeigeklasse - Keine Klasse - Hauptordner - Nebenordner Lokale Nachrichten löschen Posteingangsserver Einstellungen des Posteingangsservers bearbeiten @@ -911,4 +890,6 @@ Du kannst diese Nachricht aufheben und sie als Backup für deinen geheimen Schl Push aktivieren Synchronisation aktivieren Ausgeblendete Ordner anzeigen + Ordner anzeigen + Support %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-el/strings.xml b/legacy/ui/legacy/src/main/res/values-el/strings.xml index e3637b3851e..defb59480dc 100644 --- a/legacy/ui/legacy/src/main/res/values-el/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-el/strings.xml @@ -304,12 +304,6 @@ Προχωρημένα Ρυθμίσεις λογαριασμού Ειδοποιήσεις νέων μηνυμάτων - Φάκελοι ειδοποιήσεων - Όλοι - Μόνο φάκελοι 1ου επιπέδου - Φάκελοι 1ου και 2ου επιπέδου - Όλοι εκτός από του 2ου επιπέδου - Κανένας Συγχρονισμός ειδοποιήσεων Η ηλεκτρονική σου διεύθυνση Ειδοποίηση στη γραμμή κατάστασης όταν φτάνει νέο μήνυμα @@ -398,27 +392,12 @@ τους τελευταίους 3 μήνες τους τελευταίους 6 μήνες το τελευταίο έτος - Φάκελοι που προβάλλονται - Όλοι - Μόνο φάκελοι 1ου επιπέδου - Φάκελοι 1ου και 2ου επιπέδου - Όλοι εκτός από του 2ου επιπέδου - Φάκελοι που ενημερώνονται - Όλοι - Μόνο φάκελοι 1ου επιπέδου - Φάκελοι 1ου και 2ου επιπέδου - Όλοι εκτός από του 2ου επιπέδου - Κανένας Συγχρονισμός διαγραφών εξυπηρετητή Αφαίρεση των μηνυμάτων που διαγράφονται στον εξυπηρετητή. Λείπει η εφαρμογή OpenPGP - απεγκαταστήθηκε; Ρυθμίσεις φακέλων Προβολή στην ομάδα κορυφής Προβολή κοντά στην κορυφή της λίστας των φακέλων - Επίπεδο προβολής φακέλου - Χωρίς Επίπεδο - Πρώτο επίπεδο - Δεύτερο επίπεδο Καθαρισμός τοπικών μηνυμάτων Ρυθμίσεις εισερχομένων Ρύθμιση εξυπηρετητή εισερχόμενης αλληλογραφίας diff --git a/legacy/ui/legacy/src/main/res/values-en-rGB/strings.xml b/legacy/ui/legacy/src/main/res/values-en-rGB/strings.xml index 9ced8b713dc..6a3076052c2 100644 --- a/legacy/ui/legacy/src/main/res/values-en-rGB/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-en-rGB/strings.xml @@ -204,7 +204,6 @@ White Message discarded Identity description - Only 1st Class folders Vibration pattern Every hour Show in top group @@ -221,11 +220,9 @@ Yes Notify in status bar while mail is checked Use gaudy visual effects - 1st and 2nd Class folders Settings successfully exported Max folders to check with push + %1$d more on %2$s - All except 2nd Class folders Light After marking a message as unread Manually @@ -244,7 +241,6 @@ the last 3 days Spam Time and date - 1st and 2nd Class folders This will remove all local messages from the folder. No messages will be deleted from the server. the last 3 months Subject @@ -282,7 +278,6 @@ Encrypt drafts only if encryption is enabled Prefix (like Gmail) today - 2nd Class Signature Notification light Unable to find viewer for %s. @@ -311,7 +306,6 @@ Mark All Read Preview No email address could be found for this contact. - Notifications folders Starred messages first Do you really want to delete this message? @@ -334,7 +328,6 @@ No all messages Fetch messages up to - Only 1st Class folders Store all drafts encrypted Pattern 4 Export successful. Logs might contain sensitive information. Be careful who you send them to. @@ -354,7 +347,6 @@ HTML (keep images and formatting) Disable notifications Message text - None -------- Original Message -------- (Optional) Sending mail: %s @@ -406,7 +398,6 @@ Subject reverse alphabetical Arrival Send as - All except 2nd Class folders 25 folders 500 folders Show Unified Inbox @@ -418,7 +409,6 @@ Some attachments cannot be forwarded because they have not been downloaded. Always show Cc/Bcc Do you want to empty the trash folder? - All Signature position Configure the outgoing mail (SMTP) server Delete @@ -446,7 +436,6 @@ %.1f MB Outgoing server Refresh IDLE connection - Poll folders Quoted text prefix Don\'t show notifications for messages belonging to an email chat Set up a new account @@ -459,7 +448,6 @@ Authentication failed Notifications related to messages Sending mail - Only 1st Class folders Confirm move to spam folder Message composition options Include outgoing mail @@ -483,7 +471,6 @@ Mark as read when deleted Confirm actions No suitable application for this action found. - All Messages 100 messages Every 36 minutes @@ -519,7 +506,6 @@ %d B Animation the last week - All except 2nd Class folders Always show images Set up alternate \'From\' addresses and signatures Enable debug logging @@ -533,13 +519,11 @@ Cc: Show contact names Mark Read - Folders to display 25 messages Folder poll frequency Delete (from notification) : Send failed: %s - 1st Class Compact Remove quoted text Folders @@ -569,7 +553,6 @@ Automatic Ignore chat messages Bcc all messages to - Folder display class Strip signatures on reply To: Interaction @@ -577,16 +560,12 @@ the last 3 weeks Header (like Outlook) 2 KiB - 1st and 2nd Class folders - No Class 32 KiB Do you really want to move this message to the spam folder? Do you really want to move %1$d messages to the spam folder? Save or Discard changes? - None - All Use recipient names from Contacts when available Log sensitive information No settings found diff --git a/legacy/ui/legacy/src/main/res/values-enm/strings.xml b/legacy/ui/legacy/src/main/res/values-enm/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/legacy/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-eo/strings.xml b/legacy/ui/legacy/src/main/res/values-eo/strings.xml index 9adad17d686..3ee372fb45b 100644 --- a/legacy/ui/legacy/src/main/res/values-eo/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-eo/strings.xml @@ -279,12 +279,6 @@ Spertaj Agordoj de konto Sciigoj pri novaj mesaĝoj - Sciigoj el mesaĝujoj - El ĉiuj - Nur el mesaĝujoj de klaso 1 - El mesaĝujoj de klaso 1 kaj 2 - El ĉiuj escepte de klaso 2 - El neniuj Sciigoj pri samtempigo Via retpoŝtadreso Sciigas en stata breto kiam retletero alvenas @@ -373,27 +367,12 @@ antaŭaj 3 monatoj antaŭaj 6 monatoj antaŭa jaro - Mesaĝujoj por montri - Ĉiuj - Nur mesaĝujoj de klaso 1 - Mesaĝujoj de klasoj 1 kaj 2 - Ĉiuj escepte de klaso 2 - Kontroli mesaĝujojn - Ĉiuj - Nur mesaĝujoj de klaso 1 - Mesaĝujoj de klasoj 1 kaj 2 - Ĉiuj escepte de klaso 2 - Neniuj Samtempigo de forigadoj kun servilo Forigi mesaĝojn kiam forigitaj el servilo Mankas OpenPGP-aplikaĵo - eble malinstalita? Agordoj de mesaĝujo Montri supre Montras ĉe supro de mesaĝuj-listo - Montr-klaso de mesaĝujo - Neniu klaso - Klaso 1 - Klaso 2 Forviŝi lokajn mesaĝojn Enira servilo Agordoj de enira retpoŝta servilo diff --git a/legacy/ui/legacy/src/main/res/values-es/strings.xml b/legacy/ui/legacy/src/main/res/values-es/strings.xml index 8414535e2ad..06a7377c31e 100644 --- a/legacy/ui/legacy/src/main/res/values-es/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-es/strings.xml @@ -305,12 +305,6 @@ Avanzado Ajustes de la cuenta Notificar sobre correos entrantes - Carpetas de notificaciones - Todas - Sólo carpetas de 1ª clase - Carpetas de 1ª y 2ª clase - Todas excepto las carpetas de 2ª clase - Ninguna Notificar sincronización Tu dirección de correo Avisar cuando llegue correo nuevo @@ -399,27 +393,12 @@ los últimos 3 meses los últimos 6 meses el último año - Carpetas a mostrar - Todas - Sólo 1ª clase - 1ª y 2ª clase - Todas excepto las de 2ª clase - Comprobación de carpetas - Todas - Sólo 1ª clase - 1ª y 2ª clase - Todas excepto las de 2ª clase - Ninguna Sincronizar con el borrado remoto Eliminar los correos cuando se borren del servidor Falta la aplicación OpenPGP, ¿se ha desinstalado? Ajustes de carpetas Mostrar al principio Mostrar cerca del principio de la lista - Tipos de carpeta mostrados - Sin clase - 1ª clase - 2ª clase Borrar correos locales Servidor de entrada Configurar servidor de entrada @@ -904,9 +883,9 @@ Puedes guardar este mensaje y usarlo como copia de seguridad de tu clave secreta Seguir en el correo actual Tras marcar un correo como no leído Volver al listado de correos - Falta permiso para programar alarmas - Pulse para conceder el permiso. - Equipo de Thunderbird Mobile + Falta el permiso para programar alarmas + Toca aquí para conceder el permiso. + El equipo de Thunderbird Mobile Acerca de %s La aplicación OpenKeychain es necesaria para permitir el cifrado de extremo a extremo. Cuando se utiliza Push, %1$s mantiene una conexión con el servidor de correo. Android requiere mostrar una notificación continua mientras la aplicación está activa en segundo plano. %2$s @@ -915,5 +894,9 @@ Puedes guardar este mensaje y usarlo como copia de seguridad de tu clave secreta Datos técnicos y de uso Recopilación de datos Comparte datos de rendimiento, uso, hardware y personalización sobre esta aplicación con Mozilla para ayudarnos a mejorar Thunderbird - Activar push + Activar sincronización rápida («push») + Activar sincronización + Mostrar carpeta + Ver las carpetas ocultas + Apoya a %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-et/strings.xml b/legacy/ui/legacy/src/main/res/values-et/strings.xml index 5ba0752f124..3d335aad8ae 100644 --- a/legacy/ui/legacy/src/main/res/values-et/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-et/strings.xml @@ -49,7 +49,7 @@ Teisalda Teisalda mustanditesse Paiguta ümber… - Tehtud + Valmis Loobu Salvesta mustandina Kontrolli e-kirju @@ -304,12 +304,6 @@ Täpsemalt Konto sätted Uue sõnumi teated - Teadete kaust - Kõik - Ainult 1. klassi kaustad - 1. ja 2. klassi kaustad - Kõik, v.a 2. klassi kaustad - Mitte ükski Sünkroniseerimise teated Sinu e-posti aadress Teata uue sõnumi saabumisest olekuribal @@ -398,27 +392,12 @@ viimased 3 kuud viimased 6 kuud viimane aasta - Kuvatavad kaustad - Kõik - Ainult 1. klassi kaustad - 1. ja 2. klassi kaustad - Kõik, v.a 2. klassi kaustad - Kontrolli kaustu - Kõik - Ainult 1. klassi kaustad - 1. ja 2. klassi kaustad - Kõik, v.a 2. klassi kaustad - Mitte ükski Süngi serveris kustutamised Eemalda kirjad kui need serveris kustutatud OpenPGP rakendus puudub - kas see on eemaldatud? Kausta sätted Näita tipp grupis Näita kaustade loendi tippu lähedal - Kausta kuvamise klass - Klassita - 1. klass - 2. klass Puhasta kohalikud kirjad Sissetuleva meili server Konfigureeri sisse tuleva meili server @@ -913,4 +892,6 @@ Palun jäta see kiri alles ning kasuta seda muu hulgas oma krüptovõtme varunda Kasuta tõuketeenuseid Kasuta sünkroniseerimist Näita peidetud kaustu + Näita kausta + Toeta %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-eu/strings.xml b/legacy/ui/legacy/src/main/res/values-eu/strings.xml index f04a9baefc7..a8c0d391d78 100644 --- a/legacy/ui/legacy/src/main/res/values-eu/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-eu/strings.xml @@ -303,12 +303,6 @@ Aurreratua Kontu ezarpenak Posta berrien jakinarazpenak - Jakinarazpenen karpeta - Guztiak - 1. klaseko karpetak bakarrik - 1. eta 2. klaseko karpetak - Guztiak 2. klaseko karpetak izan ezik - Bat ere ez Sinkronizazio jakinarazpenak Zure posta helbidea Jakinarazi egoera barran posta iristean @@ -397,27 +391,12 @@ azken 3 hilabeteak azken 6 hilabeteak azken urtea - Bistaratuko diren karpetak - Guztiak - 1. klaseko karpetak bakarrik - 1. eta 2. klaseko karpetak - Guztiak 2. klaseko karpetak izan ezik - Atzitu karpetak - Guztiak - 1. klaseko karpetak bakarrik - 1. eta 2. klaseko karpetak - Guztiak 2. klaseko karpetak izan ezik - Bat ere ez sinkronizatu zerbitzariko ezabatzeak Kendu mezuak zerbitzarian ezabatzean OpenPGP aplikazioa falta da, desinstalatu da? Karpeta ezarpenak Erakutsi goiko taldean Erakutsi karpeta zerrendaren goialdetik hurbil - Bistaratzeko karpeta klaseak - Klaserik ez - 1. klasea - 2. klasea Garbitu mezu lokalak Sarrerako zerbitzaria Konfiguratu sarrerako posta zerbitzaria diff --git a/legacy/ui/legacy/src/main/res/values-fa/strings.xml b/legacy/ui/legacy/src/main/res/values-fa/strings.xml index 0369ccbfdfe..323497b99a6 100644 --- a/legacy/ui/legacy/src/main/res/values-fa/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-fa/strings.xml @@ -305,12 +305,6 @@ پیشرفته تنظیمات حساب آگاهی‌های نامهٔ جدید - پوشه‌های دارای آگاهی - همه - فقط پوشه‌های سطح ۱ - پوشه‌های سطح ۱ و ۲ - همه به‌جز پوشه‌های سطح ۲ - هیچ‌کدام آگاهی‌های همگام‌سازی نشانی رایانامه‌تان آگاهی در نپار وضعیت هنگام رسیدن نامه @@ -399,27 +393,12 @@ ۳ ماه پیش ۶ ماه پیش سال قبل - پوشه‌های نمایان - همه - فقط پوشه‌های سطح ۱ - پوشه‌های سطح ۱ و ۲ - همه به‌جز پوشه‌های سطح ۲ - پوشه‌ها برای سرکشی - همه - فقط پوشه‌های سطح ۱ - پوشه‌های سطح ۱ و ۲ - همه به‌جز پوشه‌های سطح ۲ - هیچ‌کدام همگام‌سازی حذفیات کارساز وقتی پیام‌ها در کارساز پاک شدند از اینجا هم حذف شود برنامهٔ OpenPGP نیست - حذف شده؟ تنظیمات پوشه نمایش در بالا نمایش در بالای سیاههٔ پوشه‌ها - سطح نمایش پوشه - بدون سطح - سطح ۱ - سطح ۲ پاک‌کردن پیام‌ها از روی دستگاه کارساز ورودی کارساز ورودی رایانامه را پیکربندی کنید @@ -914,4 +893,6 @@ جمع‌آوری داده فعال‌سازی همگام‌سازی نمایش پوشه‌های مخفی + نمایش پوشه + پشتیبانی از %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-fi/strings.xml b/legacy/ui/legacy/src/main/res/values-fi/strings.xml index f9218f47ee3..2f05acb7220 100644 --- a/legacy/ui/legacy/src/main/res/values-fi/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-fi/strings.xml @@ -303,12 +303,6 @@ Lisäasetukset Yleiset Saapuneiden viestien ilmoitukset - Ilmoitukset kansioista - Kaikki - Vain 1. luokan kansiot - 1. ja 2. luokan kansiot - Kaikki paitsi 2. luokan kansiot - Ei mitään Synkronointi-ilmoitukset Sähköpostiosoite Näytä tilapalkissa ilmoitus uusista viesteistä @@ -397,27 +391,12 @@ viimeiset 3 kuukautta viimeiset 6 kuukautta viime vuosi - Näytä kansiot - Kaikki - Vain 1. luokan kansiot - 1. ja 2. luokan kansiot - Kaikki paitsi 2. luokan kansiot - Tarkistettavat kansiot - Kaikki - Vain 1. luokan kansiot - 1. ja 2. luokan kansiot - Kaikki paitsi 2. luokan kansiot - Ei mitään Synkronoi etäpoistot Poista viestit, kun ne poistetaan palvelimelta OpenPGP-sovellus puuttuu - poistettiinko se? Kansioiden asetukset Näytä yläryhmässä Näytä yläosassa lähellä kansiolistaa - Näytettävän kansion luokka - Ei luokkaa - 1. luokka - 2. luokka Poista paikalliset viestit Saapuvan postin palvelin Määritä saapuvan postin palvelin diff --git a/legacy/ui/legacy/src/main/res/values-fr/strings.xml b/legacy/ui/legacy/src/main/res/values-fr/strings.xml index fbde4737cff..46ee6378e74 100644 --- a/legacy/ui/legacy/src/main/res/values-fr/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-fr/strings.xml @@ -306,12 +306,6 @@ Avancé Paramètres du compte Notifications de nouveaux courriels - Dossiers des notifications - Tous - Seulement les dossiers de 1re classe - Dossiers de 1re et 2e classes - Tous sauf les dossiers de 2e classe - Aucun Notifications de synchronisation Votre adresse courriel Notification dans la barre d’état dès réception d’un courriel @@ -400,27 +394,12 @@ des 3 dernières mois des 6 dernières mois de la dernière année - Dossiers à afficher - Tous - Seulement les dossiers de 1re classe - Dossiers de 1re et 2e classes - Tous sauf les dossiers de 2e classe - Dossiers à scruter - Tous - Seulement les dossiers de 1re classe - Les dossiers de 1re et 2e classes - Tous sauf les dossiers de 2e classe - Aucun Synchroniser les suppressions sur le serveur Supprimer les courriels quand ils sont supprimés sur le serveur L’appli OpenPGP est absente — A-t-elle été installée ? Paramètres du dossier Afficher dans le groupe principal Afficher dans le haut de la liste des dossiers - Classe d’affichage du dossier - Aucune classe - 1re classe - 2e classe Effacer les courriels locaux Serveur entrant Configurer le serveur de courriel entrant @@ -914,4 +893,6 @@ Activer le pousser Afficher les dossiers cachés Activer la synchronisation + Afficher le dossier + Soutenir %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-fy/strings.xml b/legacy/ui/legacy/src/main/res/values-fy/strings.xml index a22e4202bc6..eee9e66f96c 100644 --- a/legacy/ui/legacy/src/main/res/values-fy/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-fy/strings.xml @@ -198,7 +198,7 @@ Nammen yn jo kontaktelist ynkleurje Kleur foar nammen fan kontakten Fêste breedte lettertypen - Brûk in lettertype mei fêste breedte by it werjaan fan platte-tekstberjochten + Brûk in lettertype mei fêste breedte by it toanen fan platte-tekstberjochten Berjochten auto-passe Berjochten passend meitsje op it skerm Aksjes befêstigje @@ -305,20 +305,14 @@ Avansearre Accountynstellingen Nije e-mailmelding - Meldingsmappen - Alle - Allinnich 1e-klassemappen - 1e- en 2e-klassemappen - Alle útsein 2e-klassemappen - Gjin Syngronisaasjemeldingen Jo e-mailadres Melding yn steatbalke by in nij e-mailberjocht - Melding yn steatbalke werjaan wannear’t op nije e-mailberjochten kontrolearre wurdt + Melding yn steatbalke toane wannear’t op nije e-mailberjochten kontrolearre wurdt Melding foar e-mailberjocht hokker ik ferstjoer Melding ek foar e-mailberjocht ferstjoerd fan in identiteit ôf Allinnich kontakten - Meldingen allinnich werjaan foar bekende kontakten + Meldingen allinnich toane foar bekende kontakten Petearberjochten negearje Gjin meldingen toane foar berjochten dy’t ûnderdiel binne fan in e-mailpetear As lêzen markearje nei iepenjen @@ -399,27 +393,12 @@ ôfrûne 3 moannen ôfrûne 6 moannen ôfrûne jier - Mappen om te toanen - Alle - Allinnich 1e-klassemappen - 1e- en 2e-klassemappen - Alle útsein 2e-klassemappen - Peiling mappen - Alle - Allinnich 1e-klassemappen - 1e- en 2e-klassemappen - Alle útsein 2e-klassemappen - Gjin Ferwideringen op server syngronisearje Berjochten fuortsmite as fuortsmiten fan server OpenPGP-app net oanwêzich – is de app fuortsmiten? Mapynstellingen Yn topgroep toane By top fan de maplist toane - Mapwerjefteklasse - Gjin klasse - 1e klasse - 2e klasse Lokale berjochten wiskje Ynkommende server Ynkommende mailserver ynstelle @@ -549,7 +528,7 @@ Fisuele effekten brûke Folumetoetsnavigaasje yn berjochtbyld Kombinearre Postfek YN toane - It tal berjochten mei in stjer werjaan + Tal berjochten mei in stjer toane Kombinearre Postfek YN Alle berjochten yn kombinearre mappen Kombinearje @@ -727,7 +706,7 @@ Yn dizze modus wurdt dyn PGP-kaai brûkt foar in kryptografyske hantekening of in net-kodearre e-mailberjocht. Dit fersiferet net it e-mailberjocht, mar kontrolearret oft it ferstjoerd is mei jo kaai. Hantekeningen kinne by ferstjoeren nei ferstjoerlist skansearre reitsje. - Hantekeningen kinne by guon programma’s as ‘signature.asc’-bylage werjûn wurde. + Hantekeningen kinne by guon programma’s as ‘signature.asc’-bylage toand wurde. Fersifere berjochten befetsje altyd in hantekening. Platte tekst ein-ta-einhantekening befettet in flater @@ -770,8 +749,8 @@ Spesjale lêstekens wurde noch net stipe! Flater by ferwurkjen fan adres! Net-fersifere hantekeningen ferstopje - Allinnich fersifere hantekeningen wurde werjûn - Alle hantekeningen wurde werjûn + Allinnich fersifere hantekeningen wurde toand + Alle hantekeningen wurde toand Fersifering net mooglik yn sign-only-modus! net ûndertekene tekst Dit e-mailberjocht is fersifere @@ -812,7 +791,7 @@ Ynstelberjocht oan it generearjen… Berjocht stjoere nei: Om te foltôgjen, iepenje it berjocht op jo oare apparaat en fier de ynstelkoade yn. - Ynstelkoade werjaan + Ynstelkoade toane Autocrypt-ynstelberjocht Dit berjocht befettet alle ynformaasje om jo Autocrypt-ynstellingen mei geheime kaai befeilige oer te bringen fan jo oarspronklike apparaat ôf. Folgje de ynstruksjes op jo nije apparaat om dêrop Autocrypt yn te stellen. Jo kinne dit berjocht bewarje as reservekopy foar jo geheime kaai. As jo dit dwaan wolle, skriuw dan it wachtwurd op en bewarje it op in feilich plak. Der is in flater bard wylst it ferstjoeren fan it berjocht. Kontrolearje de netwurkferbining en útgeande-serverkonfiguraasje. @@ -828,7 +807,7 @@ Android makket it echter ek mooglik om meldingen te ferstopjen. Mear ynfo Melding ynstelle - As jo it net nedich fine om daliks meldingen te ûntfangen fan nije berjochten, dan kinne jo better push útskeakelje en yn stee dêrfan kieze foar peilen. Mei peilen wurdt der om de sa folle tiid kontrolearre oft der nije e-mailberjochten ynkommen binne. Dêrfoar is it werjaan fan in melding net kontinu nedich. + As jo it net nedich fine om daliks meldingen te ûntfangen fan nije berjochten, dan kinne jo better push útskeakelje en yn stee dêrfan kieze foar peilen. Mei peilen wurdt der om de sa folle tiid kontrolearre oft der nije e-mailberjochten ynkommen binne. Dêrfoar is it toanen fan in melding net kontinu nedich. Push útskeakelje Selektearje @@ -900,7 +879,7 @@ Tastimming om alarms te plannen ûntbrekt Tik om tastimming te jaan. De account \"%s\" sil út %s fuortsmiten wurde. - By gebrûk fan Push ûnderhâldt %1$s in ferbining mei de mailserver. Android fereasket it trochrinnend werjaan fan in melding as de app aktyf is op de eftergrûn. %2$s + By gebrûk fan Push ûnderhâldt %1$s in ferbining mei de mailserver. Android fereasket it trochrinnend toanen fan in melding as de app aktyf is op de eftergrûn. %2$s De app OpenKeychain is fereaske om stipe foar end-to-end-fersifering mooglik te meitsjen. Oer %s Thunderbird Mobile-team @@ -911,4 +890,6 @@ Push aktivearje Ferstoppe mappen toane Syngronisaasje ynskeakelje + Map toane + %s stypje \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-gd/strings.xml b/legacy/ui/legacy/src/main/res/values-gd/strings.xml index 573259be2ea..8b8d681e0fa 100644 --- a/legacy/ui/legacy/src/main/res/values-gd/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-gd/strings.xml @@ -274,12 +274,6 @@ Adhartach Roghainnean a’ chunntais Brathan mu phost ùr - Pasganan a chuireas brath - Na h-uile - Pasganan na 1ᵈ ìre a-mhàin - Pasganan na 1ᵈ is na 2ⁿᵃ ìre - Gach aon ach pasganan na 2ⁿᵃ ìre - Chan eil gin Brathan sioncronachaidh An seòladh puist-d agad Thoir brath dhomh air bàr na staide nuair a ruigeas post @@ -352,26 +346,11 @@ o na 3 mìosan seo chaidh on na 6 mìosan seo chaidh on uiridh - Na pasganan a thèid a shealltainn - Na h-uile - Pasganan na 1ᵈ ìre a-mhàin - Pasganan na 1ᵈ is na 2ⁿᵃ ìre - Gach aon ach pasganan na 2ⁿᵃ ìre - Na pasganan a thèid a cheasnachadh - Na h-uile - Pasganan na 1ᵈ ìre a-mhàin - Pasganan na 1ᵈ is na 2ⁿᵃ ìre - Gach aon ach pasganan na 2ⁿᵃ ìre - Chan eil gin Sioncronaich sguabadh às air an fhrithealaiche Thoir air falbh teachdaireachdan a chaidh a sguabadh às an fhrithealaiche Roghainnean a’ phasgain Seall aig a’ bhàrr sa bhuidheann Seall faisg air bàrr liosta nam pasganan - Ìre taisbeanadh a’ phasgain - Gun ìre - 1ᵈ ìre - 2ⁿᵃ ìre Falamhaich na teachdaireachdan ionadail Am frithealaiche a-steach Rèitich frithealaiche a’ phuist a-steach diff --git a/legacy/ui/legacy/src/main/res/values-gl/strings.xml b/legacy/ui/legacy/src/main/res/values-gl/strings.xml index a8af0885b7f..34d3d0491df 100644 --- a/legacy/ui/legacy/src/main/res/values-gl/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-gl/strings.xml @@ -283,12 +283,6 @@ Avanzado Configuración de conta Notificar correo novo - Cartafoles de notificacións - Todas - Só 1a clase - 1a e 2a Clase - Todas agás 1a e 2a clase - ningunha Notificar sincronización O teu entderezo de correo Avisarme no estatus cando chegue correo novo @@ -377,27 +371,12 @@ os últimos 3 meses os últimos 6 meses o último ano - Carpetas a amosar - Todas - Só 1a clase - 1a y 2a Clase - Todas agás as de 2a clase - Comprobación de carpetas - Todas - Só 1a clase - 1a e 2a Clase - Todas agás 1a e 2a clase - ningunha Sincronizar eliminacións Eliminar as mensaxes cando se borren d servidor Falta o aplicativo OpenPGP - foi desinstalado? Configuración de carpeta Amosar ao principio Amosar cerca do principio da lista - Clase de carpeta - Sen Clase - 1a Clase - 2a Clase Borrar mensaxes locais Servidor de entrada Configurar servidor de entrada diff --git a/legacy/ui/legacy/src/main/res/values-hr/strings.xml b/legacy/ui/legacy/src/main/res/values-hr/strings.xml index 25bd3816dff..9b759e45875 100644 --- a/legacy/ui/legacy/src/main/res/values-hr/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-hr/strings.xml @@ -264,12 +264,6 @@ Napredno Postavke računa Nova obavijest pošte - Mapa obavijesti - Svi - Samo mape 1. Razreda - Mape 1. i 2. Razreda - Sve osim mapa 2. Razreda - Ništa Obavijesti sinhronitzacije Vaša adresa e-pošte Obavijesti me u traci stanja o pristigloj pošti @@ -353,27 +347,12 @@ posljednja 3 mjeseca posljednjih 6 mjeseci posljednjih godinu dana - Mape za prikaz - Sve - Samo mape 1. Razreda - Mape 1. i 2. Razreda - Sve osim mapa 2. Razreda - Provjera mapa - Sve - Samo mape 1. Razreda - Mape 1. i 2. Razreda - Sve osim mapa 2. Razreda - Nijedna Sinhronizacija brisanja poslužitelja Makni poruke prilikom brisanja sa poslužitelja OpenPGP aplikacija nedostaje - da li je deinstalirana? Postavke mape Prikaži na vrhu grupe Prikaži blizu vrha na popisu mapa - Razred prikaza mape - Bez razreda - 1. Razreda - 2. Razreda Očistiti lokalne poruke Dolazni poslužitelj Postavite dolazni poslužitelj e-pošte @@ -770,4 +749,55 @@ +Pretraži svugdje + Nove poruke + Sinkroniziraj (Slanje) + Izvezi zapise + Izvoz nije uspio. + Boja imena kontakata + Vrati se na popis poruka + Premjesti u skice + Odjavite se + Tekst predmeta kopiran u međuspremnik + za %s + Nakon brisanja ili premještanja poruke + Prikaži sljedeću poruku + Thunderbird mobilni tim + Kopiraj u… + Greška certifikata + Greška u obavijesti + Prikaži slike s udaljenog poslužitelja + + + mene + Prikaži prethodnu poruku + Nakon označavanja poruke kao nepročitane + Akcije povlačenja + Označi kao pročitano/nepročitano + Vrati se na popis poruka + Ostani na trenutnoj poruci + Povlačenje udesno + Povlačenje ulijevo + Dodaj/ukloni zvjezdicu + Gustoća + Kompaktno + Opušteno + Broj novih poruka + Pregledaj + Saznajte što je novo u ovom izdanju + Verzija %s + O aplikaciji %s + Što je novo + Prikaži nedavne promjene kada je aplikacija ažurirana + Račun \"%s\" biti će uklonjen iz %s. + Premjesti u… + Došlo je do greške prilikom pokušaja stvaranja sistemske obavijesti za novu poruku. Razlog je najvjerojatnije nedostatak zvuka obavijesti.\n\nDodirnite za otvaranje postavki obavijesti. + Prikazano dok čekate nove poruke + Izvoz uspješan. Zapisi mogu sadržavati osjetljive informacije. Budite oprezni kome ih šaljete. + Zapis izmjena + Nije moguće učitati zapis izmjena. + Izvorni kod + Projekt otvorenog koda + Web stranica + Zatraži pomoć + Korisnički forum \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-hu/strings.xml b/legacy/ui/legacy/src/main/res/values-hu/strings.xml index ab988054d58..d97d321f671 100644 --- a/legacy/ui/legacy/src/main/res/values-hu/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-hu/strings.xml @@ -303,12 +303,6 @@ Bővített Fiók beállításai Új levél értesítések - Értesítések mappái - Összes - Csak 1. osztályú mappák - 1. és 2. osztályú mappák - Összes, kivéve a 2. osztályú mappákat - Nincs Szinkronizációs értesítések Saját e-mail-cím Értesítés az állapotsávon új levél érkezésekor @@ -397,27 +391,12 @@ az elmúlt 3 hónap az elmúlt 6 hónap az elmúlt év - Megjelenítendő mappák - Összes - Csak 1. osztályú mappák - 1. és 2. osztályú mappák - Összes, kivéve a 2. osztályú mappákat - Mappák lekérdezése - Összes - Csak 1. osztályú mappák - 1. és 2. osztályú mappák - Összes, kivéve a 2. osztályú mappákat - Nincs Kiszolgáló törléseinek szinkronizálása Üzenetek eltávolítása a kiszolgálóról törléskor Hiányzó OpenPGP alkalmazás – talán eltávolításra került\? Mappa beállításai Megjelenítés a felső csoportban Megjelenítés a mappalista teteje környékén - Mappa megjelenítésnek osztálya - Nincs osztály - 1. osztály - 2. osztály Helyi üzenetek törlése Bejövő kiszolgáló A bejövő levelek kiszolgálójának beállítása @@ -510,7 +489,7 @@ Alkalmazás témájának használata Sötét Világos - Rendszer alapértelmezettjének használata + Rendszer alapértelmezésének használata Megjelenés Globális Hibakeresés @@ -528,7 +507,7 @@ Rögzített üzenet téma Az üzenetmegtekintési téma kiválasztása, miközben megtekinti az üzenetet Rögzített üzenetmegtekintési téma használata - Rendszer alapértelmezettje + Rendszer alapértelmezése Háttér-szinkronizálás Soha Mindig @@ -896,14 +875,14 @@ Megtarthatja ezt az üzenetet, és felhasználhatja a titkos kulcs biztonsági m Következő üzenet megjelenítése Üzenet törlése vagy áthelyezése után A Thunderbird Mobile csapata - A „%s” fiók eltávolításra kerül a %s fiókból. + A(z) „%s” fiók eltávolításra kerül a %s alkalmazásból. Hiányzó engedély a riasztások ütemezéséhez Koppintson az engedély megadásához. Vissza az üzenetekhez Maradás a jelenlegi üzenetnél Adatgyűjtés Felhasználási és műszaki adatok - Üzenet olvashatatlannak jelölése után + Üzenet olvasatlannak jelölése után Leküldések engedélyezése Értesítések Megosztja az alkalmazás teljesítmény-, használati-, hardver- és testreszabási adatait a Mozillával, hogy segítsen nekünk a Thunderbird jobbá tételében @@ -912,4 +891,6 @@ Megtarthatja ezt az üzenetet, és felhasználhatja a titkos kulcs biztonsági m Lekérdezések használatakor a %1$s kapcsolatot tart fenn a levelezőkiszolgálóval. Az Android megköveteli a folyamatos értesítés megjelenítését, amíg az alkalmazás aktív a háttérben. %2$s Szinkronizálás engedélyezése Rejtett mappák megjelenítése + Mappa megjelenítése + A %s támogatása \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-hy/strings.xml b/legacy/ui/legacy/src/main/res/values-hy/strings.xml index 56292444267..ce17d191100 100644 --- a/legacy/ui/legacy/src/main/res/values-hy/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-hy/strings.xml @@ -229,12 +229,6 @@ Առաջադէմ Հաշուի կարգաւորումներ Նոր իմակների ծանուցումներ - Ծանուցումների պանակներ - Բոլորը - Միայն 1֊ին կարգի պանակներ - 1֊ին եւ 2֊րդ կարգի պանակներ - Բոլորը բացի 2֊րդ կարգի պանակներից - Ոչ մէկը Սինխրոնիզացիայի ծանուցումներ Ձեր էլ․ փոստի հասցէն Ծանուցել ստատուսի վահանակում, երբ իմակ է եկել @@ -290,23 +284,9 @@ վերջին 3 ամսուայ վերջին 6 ամսուայ վերջին տարուայ - ցուրադրուող պանակներ - Բոլորը - Միայն 1֊ին դասի պանակները - 1֊ին եւ 2֊րդ դասի պանակները - Բոլորը, բացի 2֊րդ դասի պանակներից - Պանակների թարմացում - Բոլորը - Միայն 1֊ին դասի պանակները - 1֊ին եւ 2֊րդ դասի պանակները - Բոլորը բացի 2֊րդ դասի պանակներից - Ոչ մէկը Սինխրոնացնել սերուերում հեռացածները Ջնջել նամակները, եթէ սերուերից ջնջուել են։ Պանակի կարգաւորումներ - Առանց Դասի - 1ին Դաս - 2րդ Դաս Մաքրել լոկալ հաղորդագրութիւնները Դուրս տանող բանավար Հաշվի անունը diff --git a/legacy/ui/legacy/src/main/res/values-in/strings.xml b/legacy/ui/legacy/src/main/res/values-in/strings.xml index 5cf50efb20c..e4a28e758c9 100644 --- a/legacy/ui/legacy/src/main/res/values-in/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-in/strings.xml @@ -270,12 +270,6 @@ Lanjutan Pengaturan akun Notifikasi surat baru - Folder notifikasi - Semua - Hanya folder Kelas 1 - Hanya folder Kelas 1 dan 2 - Semuanya kecuali folder Kelas 2 - Tidak ada Sinkronkan notifikasi Alamat surel Anda Beri tahu di bilah status saat ada surat masuk @@ -359,27 +353,12 @@ 3 bulan terakhir 6 bulan terakhir tahun lalu - Folder yang ditampilkan - Semua - Hanya folder Kelas 1 - Hanya folder Kelas 2 - Semuanya kecuali folder Kelas 2 - Folder polling - Semua - Hanya folder Kelas 1 - Hanya folder Kelas 2 - Semuanya kecuali folder Kelas 2 - Tidak ada Sinkronkan penghapusan server Hapus pesan saat dihapus di server Aplikasi OpenPGP tidak ada - apakah sudah dihapus? Pengaturan folder Perlihatkan di grup teratas Tunjukkan di dekat bagian atas daftar folder - Kelas tampilan folder - Tak ada kelas - Kelas 1 - Kelas 2 Bersihkan pesan lokal Server masuk Konfigurasikan server surat masuk diff --git a/legacy/ui/legacy/src/main/res/values-is/strings.xml b/legacy/ui/legacy/src/main/res/values-is/strings.xml index c8fcedc0a8a..bc840c564db 100644 --- a/legacy/ui/legacy/src/main/res/values-is/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-is/strings.xml @@ -304,12 +304,6 @@ Ítarlegt Aðgangsstillingar Tilkynningar um nýjan póst - Tilkynningamöppur - Allar - Einungis 1. flokks möppur - 1. og 2. flokks möppur - Allt nema 2. flokks möppur - Engin Tilkynningar vegna samstillingar Tölvupóstfangið þitt Gefa merki á stöðustiku þegar nýr póstur berst @@ -398,27 +392,12 @@ síðustu 3 mánuðum síðustu 6 mánuðum síðasta ári - Möppur sem á að birta - Allar - Einungis 1. flokks möppur - 1. og 2. flokks möppur - Allt nema 2. flokks möppur - Vakta möppur - Allar - Einungis 1. flokks möppur - 1. og 2. flokks möppur - Allt nema 2. flokks möppur - Engin Eyðing á samstilltum póstþjóni Fjarlægja skilaboð þegar þeim er eytt á póstþjóni OpenPGP-forrit vantar - var það fjarlægt? Stillingar möppu Birta í efsta hópi Sýna nálægt efri enda möppulista - Birtingarflokkur möppu - Enginn flokkur - 1. flokkur - 2. flokkur Hreinsa staðvær skilaboð Inn-póstþjónn Stilla móttöku-póstþjón diff --git a/legacy/ui/legacy/src/main/res/values-it/strings.xml b/legacy/ui/legacy/src/main/res/values-it/strings.xml index 1268f5736e4..2f630f756a5 100644 --- a/legacy/ui/legacy/src/main/res/values-it/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-it/strings.xml @@ -307,12 +307,6 @@ Avanzate Impostazioni account Notifiche nuovi messaggi - Cartelle notificate - Tutte - Solo cartelle di 1a classe - Cartelle di 1a e 2a classe - Tutte salvo cartelle di 2a classe - Nessuna Notifiche di sincronizzazione Il tuo indirizzo email Notifica nella barra di stato la ricezione di un nuovi messaggi @@ -401,27 +395,12 @@ ultimi 3 mesi ultimi 6 mesi ultimo anno - Cartelle da visualizzare - Tutte - Solo cartelle di 1a classe - Cartelle di 1a e 2a classe - Tutte tranne cartelle di 2a classe - Cartelle da sincronizzare - Tutte - Solo cartelle di 1a classe - Cartelle di 1a e 2a classe - Tutte tranne cartelle di 2a classe - Nessuna Sincronizza eliminazioni del server Rimuovi i messaggi eliminati dal server Applicazione OpenPGP non trovata, è stata disinstallata\? Impostazioni cartella Mostra in alto Mostra nella parte superiore dell\'elenco delle cartelle - Classe cartelle visualizzate - Nessuna classe - 1a classe - 2a classe Pulisci messaggi locali Server posta in arrivo Configura server della posta in arrivo diff --git a/legacy/ui/legacy/src/main/res/values-iw/strings.xml b/legacy/ui/legacy/src/main/res/values-iw/strings.xml index 7061a6a906a..0596abfda7d 100644 --- a/legacy/ui/legacy/src/main/res/values-iw/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-iw/strings.xml @@ -261,8 +261,6 @@ מתקדם הגדרות חשבון התראות על הודעה חדשה - הכל - כלום סינכרון התראות כתובת הדוא\"ל שלך נא הודע לי בשורת מצב כאשר מגיע דואר @@ -313,10 +311,6 @@ משלושת החודשים האחרונים מהחצי שנה האחרונה מהשנה האחרונה - תיקיות להצגה - הכל - הכל - כלום לסנכרן מחיקות שרת הסר הודעות כאשר נמחק בשרת הגדרות תיקייה @@ -660,8 +654,6 @@ כמות הודעות חדשות זהה למצב בו המסך אינו נעול כמות הודעות ושולחים - רק תיקיות מחלקה ראשונה (1st Class) - תיקיות מחלקה ראשונה ושנייה (1st and 2nd Class) הצג כמות הודעות מסומנות בכוכב שליחה נכשלה: %s למחוק הודעות מקומיות? @@ -705,8 +697,6 @@ אל %s + אני - התראות תיקיות - הכל חוץ מתיקיות מחלקה שנייה (2nd Class) שדות טקסט רוצה לרוקן את תיקיית פריטים שנמחקו? @@ -748,7 +738,6 @@ 32 ק\"ב 64 ק\"ב 128 ק\"ב - תיקיות הזמנה לשידור (poll) השתמש בברירת מחדל המערכת אינטראקציה תמת (theme) הצגת הודעות @@ -791,8 +780,6 @@ קטגוריות התראה לא הוגדר יישומון OpenPGP תדירות בדיקת תיקייה במצב הזמנה לשידור (poll) - רק תיקיות מחלקה ראשונה (1st Class) - תיקיות מחלקה ראשונה ושנייה (1st and 2nd Class) תבנית 1 תבנית 2 תבנית 3 @@ -819,11 +806,6 @@ 16 ק\"ב 5 מ\"ב 10 מ\"ב - הכל חוץ מתיקיות מחלקה שנייה (2nd Class) - הכל חוץ מתיקיות מחלקה שנייה (2nd Class) - ללא מחלקה - סוג מחלקת הצגת תיקיה (Folder display class) - מחלקה ראשונה תבנית 4 זמן הגעה חובה להוריד הודעה בשלמותה עבור פענוח @@ -841,11 +823,8 @@ טוען… הצפנת הודעות מוודאת שהן יוכלו להיקרא ע\"י הנמען, ולא ע\"י אף אחד אחר. שגיאה בחיבור אל %s! - מחלקה שנייה 1 מ\"ב 2 מ\"ב - רק תיקיות מחלקה ראשונה (1st Class) - תיקיות מחלקה ראשונה ושנייה (1st and 2nd Class) החלק הזה לא הוצפן, ויכול להיות לא בטוח. חובה להוריד הודעה מוצפנת עבור פענוח. פענוח בוטל. diff --git a/legacy/ui/legacy/src/main/res/values-ja/strings.xml b/legacy/ui/legacy/src/main/res/values-ja/strings.xml index 6154b32104e..ed53284037e 100644 --- a/legacy/ui/legacy/src/main/res/values-ja/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ja/strings.xml @@ -303,12 +303,6 @@ プッシュ接続の拡張設定 アカウント設定 新着メール通知 - 通知するフォルダー - すべて - 1st クラスフォルダーのみ - 1st および 2nd クラスフォルダー - 2nd クラスフォルダーを除くすべて - なし 同期通知 メールアドレス メールの受信時はステータスバーに通知します @@ -397,27 +391,12 @@ 3 か月前 6 か月前 1 年前 - 表示するフォルダー - すべて - 1st クラスフォルダーのみ - 1st および 2nd クラスフォルダー - 2nd クラスフォルダーを除くすべて - 同期するフォルダー - すべて - 1st クラスフォルダーのみ - 1st および 2nd クラスフォルダー - 2nd クラスフォルダーを除くすべて - なし サーバーのメッセージ削除を同期する サーバーでメッセージが削除されたときにローカルのメッセージも削除します OpenPGP アプリが見つかりません - アンインストールしましたか? フォルダー設定 一覧の先頭グループに表示する フォルダー一覧の先頭に表示します - フォルダー表示クラス - クラスなし - 1st クラス - 2nd クラス ローカルのメッセージをクリア 受信メールサーバー設定 受信メールサーバーを設定します @@ -904,4 +883,6 @@ プッシュを有効にする 隠しフォルダーを表示 同期を有効にする + フォルダーを表示する + %s を支援する \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-ka/strings.xml b/legacy/ui/legacy/src/main/res/values-ka/strings.xml index 1449a16bb04..2a60ee16b44 100644 --- a/legacy/ui/legacy/src/main/res/values-ka/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ka/strings.xml @@ -227,12 +227,6 @@ გაფართოებული ანგარიშის პარამეტრები შეტყობინება ახალ წერილზე - შეტყობინებების საკეცები - ყველა - მხოლოდ 1-ლი კლასის საკეცები - 1-ლი და მე-2 კლასის საკეცები - ყველა, გარდა მე-2 კლასის საკეცებისა - არც ერთი შეტყობინებების სინქრონიზაცია თქვენი ფოსტის მისამართი მხოლოდ კონტაქტები @@ -289,21 +283,8 @@ ბოლო 3 თვე ბოლო 6 თვე ბოლო წელი - ყველა - მხოლოდ 1-ლი კლასის საკეცები - 1-ლი და მე-2 კლასის საკეცები - ყველა, გარდა მე-2 კლასის საკეცებისა - საკეცების გამოკითხვა - ყველა - მხოლოდ 1-ლი კლასის საკეცები - 1-ლი და მე-2 კლასის საკეცები - ყველა, გარდა მე-2 კლასის საკეცებისა - არც ერთი წაშლის სინქრონიზაცია სერვერთან მესიჯების წაშლა სერვერზე წაშლის შემთხვევაში - კლასის გარეშე - 1-ლი კლასი - მე-2 კლასი შემავალი სერვერი შემავალი საფოსტო სერვერის გამართვა გამავალი სერვერი diff --git a/legacy/ui/legacy/src/main/res/values-kab/strings.xml b/legacy/ui/legacy/src/main/res/values-kab/strings.xml new file mode 100644 index 00000000000..2da958ac1a2 --- /dev/null +++ b/legacy/ui/legacy/src/main/res/values-kab/strings.xml @@ -0,0 +1,66 @@ + + + Kkes + Azmul + Azmul + Azemz + Timsedlisin + Turagt + Sken + Seɣber + Nadi + Ffeɣ seg ujerred + Iɣewwaṛen + Tiririt + Seɣber + Ɣef + Kkes + Sekles + : + Asentel + + + I: + Anɣ. I: + Kkes + Anɣ. I: + Seɣber + Ikaramen + Kkes + Amezwer + Uhu + Tazeggaɣt + Tadalt + Tazegzawt + Tawraɣt + Ẓreg + Itri + Aɣmis n ibeddilen + Imeskaren + Imiḍanen + Tiririt + Azen + Tiririt + Kkes + Aspam + Smutti + Immed + Bḍu + Nɣel + Aspam + Iznan + Ayen nniḍen + Azmul + Asentel: + Sɣur: + I: + Anɣ. Uff. I: + nekki + Aspam + Aspam + S ufus + Awurman + ass-a + Ilɣa + Ilɣa + Amezwer + \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-ko/strings.xml b/legacy/ui/legacy/src/main/res/values-ko/strings.xml index 53f4399018e..3a9966f79ae 100644 --- a/legacy/ui/legacy/src/main/res/values-ko/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ko/strings.xml @@ -277,12 +277,6 @@ 고급 계정 설정 새 메일 알림 - 알림 폴더 - 모두 - 제 1종 폴더만 - 제 1종 및 2종 폴더 - 제 2종 폴더 외 모두 - 없음 동기화 알림 이메일 주소 메일이 도착하면 상태 표시줄에 알림 표시 @@ -341,25 +335,11 @@ 최근 3달 최근 6달 최근 1년 - 보일 폴더 - 모든 폴더 - 제 1종 폴더만 - 제 1종 및 2종 - 제 2종 폴더 외 모두 - 동기화할 폴더 - 모든 폴더 - 제 1종 폴더만 - 제 1종 및 2종 - 제 2종 폴더 외 모두 - 없음 서버 삭제 동기화 서버에서 삭제된 메시지를 앱에서도 삭제합니다 폴더 설정 첫번째 그룹에 보여짐 폴더 목록의 가장 위에 보여짐 - 폴더의 보이기 클래스 - 제 1종 - 제 2종 로컬 메시지 삭제 수신 서버 메일 수신 서버 수정 diff --git a/legacy/ui/legacy/src/main/res/values-lt/strings.xml b/legacy/ui/legacy/src/main/res/values-lt/strings.xml index 7620fdfb38b..d4cdddb35d0 100644 --- a/legacy/ui/legacy/src/main/res/values-lt/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-lt/strings.xml @@ -4,7 +4,7 @@ - K-9 šunų vedžiotojai + „K-9“ šunų vedžiotojai Šaltinio kodas Apache licencija, versija 2.0 Atvirojo kodo projektas @@ -15,11 +15,11 @@ Licencija Pakeitimų sąrašas Nepavyko įkelti pakeitimų žurnalo. - Versija %s + %s versija Kas naujo Rodyti naujausius pakeitimus, kai programa buvo atnaujinta - Sužinokite, kas naujo šioje versijoje + Sužinokite, kas naujo šioje laidoje @@ -36,35 +36,35 @@ Kopijuoti į… %d pasirinkta Siųsti - Tema yra tuščia, spustelėkite dar kartą, kad vis tiek išsiųstumėte + Tema yra tuščia. Spustelėkite dar kartą, kad vis tiek išsiųstumėte Atsakyti Atsakyti visiems - Šalinti + Ištrinti Archyvuoti Brukalas Persiųsti Persiųsti kaip priedą - Redaguoti kaip naują žinutę + Redaguoti kaip naują laišką Perkelti Perkelti į Juodraščius Pertvarkyti… Atlikta Atmesti Išsaugoti kaip juodraštį - Ieškoti naujų laiškų + Tikrinti paštą Siųsti laiškus Atnaujinti aplankų sąrašus - Ieškoti aplanko + Rasti aplanko Pridėti paskyrą Sukurti Ieškoti Ieškoti visur Paieškos rezultatai - Naujos žinutės + Naujas laiškas Tvarkyti aplankus Paskyros nustatymai Pašalinti paskyrą - Pažymėti kaip skaitytą + Žymėti kaip skaitytą Bendrinti Pasirinkti siuntėją Pridėti žvaigždutę @@ -73,32 +73,30 @@ Atsisakyti prenumeratos Rodyti antraštes - Adresas nukopijuotas į iškarpinę - Adresai nukopijuoti į iškarpinę - Adresai nukopijuoti į iškarpinę - Adresai nukopijuoti į iškarpinę + Nukopijuotas adresas į iškarpinę + Nukopijuoti adresai į iškarpinę + Nukopijuota adresų į iškarpinę - Temos tekstas nukopijuotas į iškarpinę - Persijungti į tamsią temą - Persijungti į šviesią temą - Pažymėti kaip neskaitytą - Skaitymo patvirtinimas - Prašys perskaitymo patvirtinimo - Neprašys perskaitymo patvirtinimo + Nukopijuotas temos tekstas į iškarpinę + Perjungti į tamsią temą + Perjungti į šviesią temą + Žymėti kaip neskaitytą + Skaitymo pranešimas + Prašys skaitymo pranešimą + Neprašys skaitymo pranešimo Pridėti priedą - Išvalyti šiukšliadėžę - Išvalyti + Valyti šiukšlinę + Valyti Apie Nustatymai (Nėra temos) Nėra siuntėjo Įkeliami laiškai\u2026 - Prisijungimo klaida - Laiškas nerastas - Laiško įkėlimo klaida - Įkelti dar -  iki %d laiškų + Ryšio klaida. + Laiškas nerastas. + Laiško įkėlimo klaida. + Įkelti  iki %d daugiau %.1f GB %.1f MB %.1f kB @@ -106,19 +104,18 @@ %d naujas laiškas %d nauji laiškai - %d nauji laiškai - %d nauji laiškai + %d naujų laiškų - + %1$d daugiau ant %2$s + + %1$d daugiau paskyroje %2$s Atsakyti - Pažymėti kaip skaitytą - Pažymėti viską kaip skaitytą - Šalinti - Šalinti Visus + Žymėti kaip skaitytą + Žymėti viską kaip skaitytą + Ištrinti + Ištrinti viską Archyvuoti Archyvuoti viską Brukalas - Sertifikato klaida + Sertifikato klaida. Sertifikato klaida %s Patikrinkite serverio nustatymus Autentifikavimas nepavyko @@ -299,12 +296,6 @@ Išplėstinis Aplanko nustatymai Pranešimai apie naujus laiškus - Pranešimų aplankai - Visi - Tik 1 klasės aplankai - 1 ir 2 klasės aplankai - Visus išskyrus 2 klasės aplankus - Jokios Sinchronizuoti pranešimus Jūsų el. pašto adresas Gavus laišką pranešti apie tai būsenos juostoje @@ -393,27 +384,12 @@ paskutinių 3 mėnesių paskutinių 6 mėnesių praėjusių metų - Rodomi aplankai - Visi - Tik 1 klasės aplankai - 1 ir 2 klasės aplankai - Visi išskyrus 2 klasės aplankus - Stebimi aplankai - Visi - Tik 1 klasės aplankai - 1 ir 2 klasės aplankai - Visi išskyrus 2 klasės aplankus - Jokie Sinchronizuoti serverio pašalinimus Pašalinti laiškus kai jie pašalinami serveryje Trūksta OpenPGP programos - ar ji buvo pašalinta? Aplanko nustatymai Rodyti viršutinėje grupėje Rodyti aplankų sąrašo viršuje - Rodomos aplankų klasės - Be klasės - 1 klasė - 2 klasė Išvalyti vietinius laiškus Laiškų gavimo serveris Konfigūruoti gaunamųjų laiškų serverį @@ -913,5 +889,9 @@ Norėdami nustatyti automatinį šifravimą naujajame prietaise, vadovaukitės i Rašyti laišką Šalinama paskyra… neskaityti, %s - Rodyti + Peržiūrėti + „Thunderbird Mobile“ komanda + Bendrina su „Mozilla“ šios programos veikimo, naudojimo, aparatinės įrangos ir tinkinimo duomenis, kad padėtų mums tobulinti „Thunderbird“ + Paskyra \"%s\" bus pašalinta iš „%s“. + Apie „%s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-lv/strings.xml b/legacy/ui/legacy/src/main/res/values-lv/strings.xml index 0b939a50a90..3dbdfe5e9e2 100644 --- a/legacy/ui/legacy/src/main/res/values-lv/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-lv/strings.xml @@ -308,12 +308,6 @@ pat %d vairāk
Papildus Konta iestatījumi Jauna pasta paziņojumi - Paziņojumu mapes - Visas - Tikai 1.kategorijas mapes - 1. un 2.kategorijas mapes - Visas, izņemot 2.kategorijas mapes - Nevienu Sinhronizācijas paziņojumi Jūsu e-pasta adrese Paziņot statusa joslā, kad saņemts jauns pasts @@ -402,27 +396,12 @@ pat %d vairāk
pēdējiem 3 mēnešiem pēdējiem 6 mēnešiem pēdējā gada - Parādāmās mapes - Visas - Tikai 1. kategorijas mapes - Tikai 1. un 2. kategorijas mapes - Visas, izņemot 2.kategorijas mapes - Pārbaudīt mapes - Visas - Tikai 1.kategorijas mapes - 1. un 2.kategorijas mapes - Visas, izņemot 2.kategorijas mapes - Nevienu Sinhronizēt dzēšanu ar serveri Dzēst ziņas, kad tās dzēstas serverī Trūkst OpenPGP lietotnes - vai tā noinstalēta\? Mapes iestatījumi Parādīt augšējā grupā Rādīt līdzās mapju saraksta augšgalam - Mapes attēlošanas kategorija - Nekategorizēta - 1.kategorija - 2.kategorija Dzēst ierīcē atrodošās ziņas Ienākošais serveris Iestatīt ienākošā pasta serveri diff --git a/legacy/ui/legacy/src/main/res/values-ml/strings.xml b/legacy/ui/legacy/src/main/res/values-ml/strings.xml index 74a464b5883..02ba4ab78a5 100644 --- a/legacy/ui/legacy/src/main/res/values-ml/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ml/strings.xml @@ -285,12 +285,6 @@ വിപുലമായത് അക്കൗണ്ട് സജ്ജീകരണങ്ങൾ പുതിയ മെയിൽ അറിയിപ്പുകൾ - അറിയിപ്പുകൾ ഫോൾഡറുകൾ - എല്ലാം - ഒന്നാം ക്ലാസ് ഫോൾഡറുകൾ മാത്രം - 1ഉം 2ഉം ക്ലാസ് ഫോൾഡറുകൾ - 2ആം ക്ലാസ് ഫോൾഡറുകൾ ഒഴികെ എല്ലാം - ഒന്നുമില്ല അറിയിപ്പുകൾ സമന്വയിപ്പിക്കുക നിങ്ങളുടെ ഇമെയിൽ വിലാസം മെയിൽ വരുമ്പോൾ സ്റ്റാറ്റസ് ബാറിൽ അറിയിക്കുക @@ -379,27 +373,12 @@ കഴിഞ്ഞ 3 മാസം കഴിഞ്ഞ 6 മാസം കഴിഞ്ഞ 6 മാസം - പ്രദർശിപ്പിക്കുന്നതിനുള്ള ഫോൾഡറുകൾ - എല്ലാം - ഒന്നാം ക്ലാസ് ഫോൾഡറുകൾ മാത്രം - 1ഉം 2ഉം ക്ലാസ് ഫോൾഡറുകൾ - 2 ആം ക്ലാസ് ഫോൾഡറുകൾ ഒഴികെ എല്ലാം - പോൾ ഫോൾഡറുകൾ - എല്ലാം - ഒന്നാം ക്ലാസ് ഫോൾഡറുകൾ മാത്രം - 1ഉം 2ഉം ക്ലാസ് ഫോൾഡറുകൾ - 2 ആം ക്ലാസ് ഫോൾഡറുകൾ ഒഴികെ എല്ലാം - ഒന്നുമില്ല സെർവർ ഇല്ലാതാക്കലുകൾ സമന്വയിപ്പിക്കുക സെർവറിൽ ഇല്ലാതാക്കുമ്പോൾ സന്ദേശങ്ങൾ നീക്കംചെയ്യുക OpenPGP അപ്ലിക്കേഷൻ കാണുന്നില്ല - ഇത് അൺ‌ഇൻ‌സ്റ്റാൾ‌ ചെയ്‌തോ? ഫോൾഡർ ക്രമീകരണങ്ങൾ മുകളിലെ ഗ്രൂപ്പിൽ കാണിക്കുക ഫോൾഡർ ലിസ്റ്റിന്റെ മുകളിൽ കാണിക്കുക - ഫോൾഡർ പ്രദർശന ക്ലാസ് - ക്ലാസ് ഇല്ല - 1 ആം ക്ലാസ് - 2 ആം ക്ലാസ്സ് പ്രാദേശിക സന്ദേശങ്ങൾ മായ്‌ക്കുക ഇൻകമിംഗ് സെർവർ ഇൻകമിംഗ് മെയിൽ സെർവർ ക്രമീകരിക്കുക diff --git a/legacy/ui/legacy/src/main/res/values-nb/strings.xml b/legacy/ui/legacy/src/main/res/values-nb/strings.xml index d4f3d753cf6..46781632419 100644 --- a/legacy/ui/legacy/src/main/res/values-nb/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-nb/strings.xml @@ -269,12 +269,6 @@ til %d flere
Avansert Kontoinnstillinger Varsel om ny e-post - Mapper med varslinger - Alle - Bare førsteklasses mapper - Første- og andre -klasses mapper - Alle utenom andreklasses mapper - Ingen Synkroniseringsvarsel Din e-postadresse Varsel i statuslinjen når ny e-post ankommer @@ -357,27 +351,12 @@ til %d flere
de siste 3 måneder det siste halve året det siste året - Mapper å vise - Alle - Kun førsteklassesmapper - Første- og andre -klassesmapper - Alle unntatt andreklassesmapper - Sjekke-mapper - Alle - Kun førsteklassesmapper - Første og andreklassesmapper - Alle unntatt andreklassesmapper - Ingen Synkroniser slettinger på tjener Fjern meldinger når slettet fra tjener Manglende OpenPGP-program - ble det avinstallert? Mappeinnstillinger Vis i toppgruppe Vis nær toppen av mappelisten - Visningsklasse for mappe - Ingen klasse - Førsteklasses - Andreklasses Fjern lokale meldinger Innkommende tjener Sett opp innkommende e-posttjener @@ -899,4 +878,5 @@ til %d flere
Etter markering av melding som ulest Mangler tillatelse til å planlegge alarmer Trykk for å gi tillatelse. + Thunderbird Mobil Teamet \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-nl/strings.xml b/legacy/ui/legacy/src/main/res/values-nl/strings.xml index b9eba01fab2..e13c8cb8cc5 100644 --- a/legacy/ui/legacy/src/main/res/values-nl/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-nl/strings.xml @@ -198,7 +198,7 @@ Namen in uw adreslijst inkleuren Kleur voor namen van contactpersonen Vaste breedte lettertypen - Gebruik een lettertype met vaste breedte bij het weergeven van platte-tekstberichten + Gebruik een lettertype met vaste breedte bij het tonen van platte-tekstberichten Berichten auto-passen Berichten passend maken op het scherm Acties bevestigen @@ -305,12 +305,6 @@ Geavanceerd Accountinstellingen Nieuwe e-mailmelding - Meldingsmappen - Alle - Alleen 1e-klassemappen - 1e- en 2e-klassemappen - Alle behalve 2e-klassemappen - Geen Synchronisatiemeldingen Uw e-mailadres Melding in statusbalk bij een nieuw e-mailbericht @@ -318,7 +312,7 @@ Melding voor e-mailbericht welke ik verstuur Melding ook voor e-mailbericht verzonden vanaf een identiteit Alleen contacten - Meldingen alleen weergeven voor bekende contacten + Meldingen alleen tonen voor bekende contacten Chatberichten negeren Geen meldingen tonen voor berichten die onderdeel zijn van een e-mail-chat Als gelezen markeren na openen @@ -399,27 +393,12 @@ afgelopen 3 maanden afgelopen 6 maanden afgelopen jaar - Mappen om te tonen - Alle - Alleen 1e-klassemappen - 1e- en 2e-klassemappen - Alle behalve 2e-klassemappen - Peiling mappen - Alle - Alleen 1e-klassemappen - 1e- en 2e-klassemappen - Alle behalve 2e-klassemappen - Geen Verwijderingen op server synchroniseren Berichten verwijderen wanneer verwijderd van server OpenPGP-app niet aanwezig – is de app verwijderd? Mapinstellingen In topgroep tonen Bij de top van de maplijst tonen - Mapweergaveklasse - Geen klasse - 1e klasse - 2e klasse Lokale berichten wissen Inkomende server Inkomende mailserver instellen @@ -549,7 +528,7 @@ Opvallende visuele effecten gebruiken Volumetoetsnavigatie in berichtbeeld Samengevoegd Postvak IN tonen - Het aantal berichten met een ster weergeven + Aantal berichten met een ster tonen Samengevoegd Postvak IN Alle berichten in gecombineerde mappen Combineer @@ -727,7 +706,7 @@ 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 het is verstuurd met uw sleutel. Handtekening kan bij versturing naar verzendlijst beschadigd raken. - Handtekening kan bij sommige programma’s als ‘signature.asc’-bijlage worden weergegeven. + Handtekening kan bij sommige programma’s als ‘signature.asc’-bijlage worden getoond. Versleutelde berichten bevatten altijd een handtekening. Platte tekst end-to-end-handtekening bevat een fout @@ -828,7 +807,7 @@ Android maakt het echter ook mogelijk om meldingen te verbergen. Meer info Melding instellen - Als u het niet nodig vindt om per direct meldingen van nieuwe berichten te ontvangen, dan kunt u 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. + Als u het niet nodig vindt om per direct meldingen van nieuwe berichten te ontvangen, dan kunt u 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 tonen van een melding niet continu nodig. Push uitschakelen Selecteren @@ -902,7 +881,7 @@ De app OpenKeychain is vereist om ondersteuning voor end-to-end-encryptie mogelijk te maken. De account \"%s\" zal uit %s worden verwijderd. Over %s - Bij gebruik van Push onderhoudt %1$s een verbinding met de mailserver. Android vereist het doorlopend weergeven van een melding als de app actief is op de achtergrond. %2$s + Bij gebruik van Push onderhoudt %1$s een verbinding met de mailserver. Android vereist het doorlopend tonen van een melding als de app actief is op de achtergrond. %2$s Thunderbird Mobile-team Meldingen Gebruik en technische gegevens @@ -911,4 +890,6 @@ Push activeren Synchronisatie inschakelen Verborgen mappen tonen + Map tonen + %s steunen \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-nn/strings.xml b/legacy/ui/legacy/src/main/res/values-nn/strings.xml index f0e8be032e6..e0473d4d8fa 100644 --- a/legacy/ui/legacy/src/main/res/values-nn/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-nn/strings.xml @@ -75,15 +75,15 @@ Slett alle Arkiver Arkiver alle - Sertifikatfeil for %s + Sertifikatfeil for %s Sjekk tenarinnstillingane dine Autentisering feila Autentisering feila for %s. Oppdater tenarinnstillingane dine. - Sjekkar e-post: %1$s:%2$s + Sjekkar e-post: %1$s:%2$s Sjekkar e-post - Sender e-post: %s + Sender e-post: %s Sender e-post : Meldingar @@ -186,8 +186,6 @@ Innfløkt Kontoinnstillingar Nye e-postvarsel - Alle - Ingen Synkroniser varsel E-postadressa di Alltid syn bilete @@ -220,10 +218,6 @@ dei siste tre månadene det siste halvåret det siste året - Mapper som skal synast: - Alle - Alle - Ingen Mappeinnstillingar Fjern lokale meldingar Kontonamn @@ -386,7 +380,7 @@ Søk Søk i meldingar på tenaren Ei nettverkstilkopling trengst for å søkja på tenaren. - Trådsyning + Trådvising Grupper meldingar i samtalar Oppgraderer databasar Oppgraderer databasar … @@ -586,4 +580,317 @@ Standard Skru av varslingar Avslappa + Tettleik + Slett stjernemerkede (i meldingsvising) + Hald deg til noverande melding + Returner til meldingsliste + Fjern brukaragent frå mail-header + Stilletid + Deaktiver ringing, vibrering og blinking på natta + Deaktiver notifikasjonar i stillemodus, fullstendig + Kompakt + Same som når skjermen er opplåst + Under polling + Vis dialog når du utfører selekterte handlingar + Bekreft handlingar + Søppelpost + Stillemodus startar + Søppelpost-mappe + Skjul tidssone + Bruk UTC i staden for lokal tidssone i mail-headere og svar-header + Antal nye meldingar + Antal meldingar og avsendarar + Stillemodus ender + Vis notifikasjonar kun frå meldingar frå kjende kontaktar + Synkroniser serversletting + Manglande OpenPGP app - var den avinstallert? + Vis i toppgruppe + Vi nær toppen av mappelista + Fjern signaturar under svar + Leser e-post + 64 KiB + Kan ikkje kopiera eller flytta melding som ikkje er synkronisert med tenaren + Svarsiteringsstil + Signaturar vil bli fjerna frå siterte meldingar + 1 KiB + 128 KiB + 1 MiB + 5 MiB + Last opp sende meldingar + 4 KiB + 10 MiB + Fjern meldingar etter sletting frå tenar + Kopla til %s + Krypter malar kun om kryptering er aktivert + 2 KiB + Pollefrekvens for mappe + Auto-utvid mapper + Inkluder utgåande e-post + Berre kontaktar + Marker som lesen etter opning + Marker ein melding som lesen etter den vert opna for visning + Marker melding som lesen etter den er sletta + Notifikasjons-kategoriar + Konfigurer feil- og statusnotifikasjonar + Siter melding under svaring + Inkluder original melding i svaret ditt. + Svar etter sitert tekst + Sitert tekst-prefiks + Ende-til-ende kryptering + Konfigurerer… + Lagre alle utkast enkryptert + Alle utkast vil bli lagra ukryptert + 8 KiB + 2 MiB + Innkommande tenar + Utgåande tenar + Notifikasjonar + Aktiver Push + Aksentfargen for denne kontoen er brukt i mappe- og kontolista + 512 KiB + Aktiver synkronisering + Konfigurer innkommande e-post tenar + Ignorer chat-meldingar + Ikkje vis notifikasjonar frå meldingar som høyrer til ein e-post chat + Varsle i statuslinja, medan mail er sjekka + Ingen OpenPGP app funne + 256 KiB + Hentar e-post + Vis kun abonnerte mapper + Varsle i statuslinja når e-post kjem + Vis notifikasjonar for meldingar eg har sendt + Marker som lesen etter sletting + Konfigurer notifikasjonar for nye meldingar + Den originale meldinga vil dukke opp over svaret ditt. + Header (som outlook) + Aktiver OpenPGP støtte + Lokal mappestørrelse + 16 KiB + Vis mappe + Prefiks (som Gmail) + Last opp meldingar til Sendt-mappe etter sending + 32 KiB + Gjenoppfrisk IDLE-forbindelse + Vel OpenGPG app + Konfigurer ende-til-ende nøkkel + Konfigurer utgåande mail (SMTP) tenar + Vibrasjon + Vibrer + Mønster 2 + Mønster 3 + Systemstandardfarge + Komposisjonstema + Tema for meldinsvising + Magenta + Vibreringsmønster + Blå + Flytt til topp / set standard + Innstillingar for meldingskomposisjon + Komposisjonsstandard + Stjernemerka meldingar fyrst + Global + Ingen innstillingar funne + Mønster 1 + Kvit + Raud + Grøn + Set standard Frå, Blindkopi og signatur + Mappenamn inneheld + Feilsøking + Mønster 4 + Notifikasjonsljos + Deaktivert + Gul + Cyan + Vis skjulte mapper + Mønster 5 + Repeter vibrasjon + Deaktivert + Ringetone for ny e-post + Vising + Personvern + Bruk systemstandard + Fast meldingstema + Usternemerka meldingar fyrst + Uleste meldingar fyrst + Maks antal mapper å sjekke med push + Bruk glorete visuelle effektar + Volumknappsnavigasjon i meldingsvising + Animasjon + Samla innboks + Alle meldingar i samla mapper + Vis antal stjernemerka + Vel meldinsvisingstema for vising av meldingar + Bruk fast tema for vising av meldingar + Vis samla innboks + Automatisk (%s) + Mottakarar + Fjern lokale meldingar? + Fjern meldingar + Alle meldingar er vist i samla innboks + Samle + Tekstinputfelt + Dette vil fjerne alle lokale meldingar frå mappa. Ingen meldingar vil bli sletta frå tenaren. + Lagre eller forkast endringar? + Bekreft tømming av papirkorg + Er du sikker på at du vil tømme papirkorga? + Bekreft flytting til søppelpost + + Hentar %d resultat + Hentar %d resultatar + + Eksporter innstillingar + Lenketekst + Kopier lenketekst til utklippstavle + + Er du sikker på du vil flytte denne meldinga til søppelpost? + Er du sikker på du vil flytte %1$d meldingar til søppelpost? + + Sikkerheitskopi + Ring nummer + Velykka eksportering av innstillingar + kundestønad %s + Byt farge etter lese + Ein annan bakgrunn vil vise at meldinga er lesen + Kryptert + <Ukjend mottakar> + Vis valde handlinger i meldingsvisingmenyen + + Hentar %1$d av %2$d resultat + Hentar %1$d av %2$d resultat + + Lås opp + <Ukjend avsendar> + Svar til + må laste ned heile meldinga for dektryptering + Kryptert + Kan ikkje kople til krypteringsleverandør, sjekk innstillingane dine eller klikk kryperingsikonet for å forsøke på ny! + Denne e-posten er sendt i PGP/INLINE format.\nDette skal kun brukast for kompatibilitet: + Signaturar kan øydeleggjast under levering + Dette krypterer ikkje e-posten, men verifiserer at den var sendt frå nøkkelen din. + ende-til-ende signaturen inneheld ein feil + Signert klartekst + frå verifisert underskrivar + frå ukjend ende-til-ende nøkkel + men det var ein dektrypteringsfeil + men ende-til-ende nøkkel er utgått + men ende-til-ende nøkkel er trekt tilbake + men ende-til-ende nøkkel er ikkje å sjå på som trygg + Ingen nøkkel er konfigurert for denne kontoen! Sjekk innstillingane dine. + Aktiver PGP/INLINE + Vedlegg er ikkje støtta + Kun PGP signeringsmodus + I denne modusen, vil PGP-nøkkelen din brukast til å opprette ein kryptografisk signatur av ein ukryptert e-post. + Signaturar kan øydeleggjast når dei er sende til e-post-lister. + Signaturar kan vere viste som \'signature.asc\' i nokre klientar. + Deaktiver PGP/INLINE + Deaktiver kun PGP signering + Krypteringsleverandøren din brukar inkompatibel versjon. Sjekk innstillingane dine! + PGP/INLINE modus støttar ikkje vedlegg! + Aktiver kun PGP signering + Krypterte meldingar inneheld alltid ein signatur. + men ende-til-ende nøkkel samsvarer ikkje med sendar + Ende-til-ende signert klartekst + PGP/INLINE Modus + Klartekst + må laste ned heile meldinga for å prosessere signatur + inneheld ende-til-ende signatur som ikkje er støtta + men ikkje ende-til-ende + Klarte ikkje initialisere ende-til-ende kryptering, sjekk innstillingane dine + Men ingen krypteringsapp er konfigurert + Ingen OpenPGP app installert + Sikker deling av ende-til-ende oppsett med andre einingar + Manglande løyve til å planleggje alarmar + Fjernar konto… + Skjul ukrypterte signaturar + Deaktiver Push + Denne dele var ikkje kryptert, og kan vere usikker. + Denne e-posten er kryptert + Dekrypteringa vart kansellert. + Kryptering er ikkje mogleg + Skru av/på krypering med å klikke på dette ikonet. + Krypter meldingsemne + Gjensidig autokrypteringsmodus + Kryptering av meldingar sikrar at dei kan bli lesne av mottakaren, og ingen andre. + OpenPGP kryptering + Mappa er ikkje funnen + Kryptering vil kun visast om det er støtta av alle mottakarar, og dei må ha sendt deg ein e-post tidlegare. + Tilbake + Deaktiver kryptering + Intern feil: Ugyldig konto! + Feil under tilkopling til %s! + For å fullføre, opne meldinga på di andre eining, og tast inn oppsett-koden. + Konfigurer notifikasjon + Ende-til-ende kryptert + frå verifisert avsendar + men ende-til-ende nøkkelen er tilbakekalt + men ende-til-ende dataen har feil + Den krypterte meldinga må lastast ned for dekryptering. + Feil under dekryptering av e-post + Prøv igjen + Kun krypterte signaturar vil bli viste + Alle signaturar vil bli viste + Kryptering er utilgjengeleg i kun-signer modus! + Denne e-posten har vorte kryptert med OpenPGP.\nFor å lese den, må du installere og konfigurere ein kompatibel OpenPGP App. + Gå til innstillingar + Skru på kryptering + Nokre av mottakarane støttar ikkje denne funksjonen! + Deaktiver kryptering + Meldingar vil normalt sett krypterast etter eige val, eller når ein svarer på krypterte meldingar. + Om både avsendar og mottakar aktiverer gjensidig modus, vil kryptering blir slådd på som standard. + Ein Autocrypt oppsett-melding deler ditt ende-til-ende oppsett med andre einingar på ein sikker måte. + Ein feil oppstod under sending av meldinga. Ver vennleg og sjekk nettverkstilkopling og utgåande tenar-konfigurasjon. + Under bruk av Push, held %1$s ei forbindelse med e-post-tenaren. Android påkrevjer visning av ein pågåande notifikasjon medan appen er aktiv i bakgrunnen. %2$s + Feil under lasting av meldingsdetaljar. + Eg forstår + Appen OpenKeychain er påkravd for å aktivere stønad for ende-til-ende kryptering. + Sender melding til: + Gjensidig autokrypteringsmodus + Manglande \'dato\'-header + Svar til + Skriv melding til + Autocrypt oppsett-melding + Feil under lasting av data + Initialiserer… + Søv til nettverket er tilgjengeleg + Trykk for å lære meir. + Men, Android tillet og at du kan skjule notifikasjonen. + Lær meir + Spesialkarakterar er ikkje støtta enno! + Feil under tolking av adressa! + Autocrypt oppsett-melding + Er kanskje ikkje støtta for nokon av mottakarane + Av + Marker som lesen + Meldingsdetaljar + Legg til i kontaktar + Deler yting, bruk, maskinvare og tiplassingsdata om denne appen til Mozilla for å hjelpe oss å gjere Thunderbird betre + Datainnsamling + Ubeskytta vedlegg + Send Autocrypt oppsett-melding + Installer + Du kan klikke her for å lære meir. + Bruk og teknisk data + Kopier namn og e-postadresse + ulesne, %s + Namn og e-postadresse + men ende-til-ende nøkkelen er ikkje å rekne som sikker + men krypteringa er ikkje å rekne som sikker + Push-informasjon + Send oppsett-melding + Genererer oppsett-melding… + + Kopier e-postadresse + Vis oppsett-kode + Ventar på nye e-postar + Søv til bakgrunns-synkronisering er tillaten + Usignert tekst + Kryptert + men ende-til-ende nøkkelen samsvarer ikkje med avsendaren + men ende-til-ende nøkkelen er utgått + Denne meldinga inneheld all informasjonenen som trengs for å overføre Autocrypt-innstillingane dine, saman med din hemmelege nøkkelen din frå din originale eining. For å setje opp Autocrypt på din nye eining, følg instruksjonane som vert presentert på einingane. Du kan behalde denne meldinga og bruke den som backup for din hemmelege nøkkel. Om du vil gjere dette bør du skrive ned passordet, og lagre det sikkert. + For å gje tillating. + Meldinga vil bli sendt til di adresse: + Om du ikkje treng umiddelbare notifikasjonar om nye meldingar, bør du skru av Push og bruke polling. Polling sjekkar for mail med regelmessige mellomrom og treng ikkje notifikasjonen. + Frå ukjend ende-til-ende nøkkel \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-pl/strings.xml b/legacy/ui/legacy/src/main/res/values-pl/strings.xml index 2806ca1a81b..492140acef0 100644 --- a/legacy/ui/legacy/src/main/res/values-pl/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-pl/strings.xml @@ -19,7 +19,7 @@ Co nowego Pokaż ostatnie zmiany po aktualizacji aplikacji - Dowiedz się, co nowego w tej wersji + Dowiedz się, co nowego w tej wersji Wyświetl @@ -51,7 +51,7 @@ Przenieś do wersji roboczych Operacje… Gotowe - Usuń + Odrzuć Zapisz jako wersję roboczą Sprawdź pocztę Wyślij wiadomości @@ -84,9 +84,9 @@ Przełącz na ciemny styl Przełącz na jasny styl Oznacz jako nieprzeczytane - Powiadomienie o przeczytaniu - Żadaj powiadomienia o przeczytaniu - Nie wymagaj powiadomienia o przeczytaniu + Powiadomienie o przeczytaniu + Żadaj powiadomienia o przeczytaniu + Nie wymagaj powiadomienia o przeczytaniu Dodaj załącznik Opróżnij kosz Wyczyść @@ -115,7 +115,7 @@ Oznacz jako przeczytane Oznacz wszystkie jako przeczytane Usuń - Skasuj wszystkie + Usuń wszystkie Archiwizuj Archiwizuj wszystkie Spam @@ -136,9 +136,9 @@ Synchronizuj (push) Wyświetlane podczas oczekiwania na nowe wiadomości Wiadomości - Powiadomienia związane z wiadomościami + Powiadomienia związane z wiadomościami Różne - Dodatkowe powiadomienia jak błędy itp. + Dodatkowe powiadomienia, takie jak błędy itp. Niektóre wiadomości nie zostały wysłane Wersja Włącz rejestrowanie debugowania @@ -186,28 +186,28 @@ Pobierz całą wiadomość przez %1$s Więcej od tego nadawcy - Wiadomość usunięta + Wiadomość odrzucona Wiadomość zapisana jako wersja robocza Oznaczaj gwiazdkami Gwiazdki wskazują oznakowane wiadomości Podgląd wierszy - Pokazuj imiona i nazwiska korespondentów - Pokazuj imiona i nazwiska korespondentów zamiast ich adresów e-mail + Pokazuj imiona i nazwiska korespondentów + Pokazuj imiona i nazwiska korespondentów, a nie ich adresy e-mail Korespondent powyżej tematu - Pokazuj imiona i nazwiska korespondentów powyżej, a nie poniżej tematu - Pokazuj imiona i nazwiska kontaktów - Użyj imion i nazwisk nadawców z kontaktów, jeżeli są dostępne + Pokazuj imiona i nazwiska korespondentów powyżej, a nie poniżej tematu + Pokazuj imiona i nazwiska kontaktów + Użyj imion i nazwisk nadawców z kontaktów, jeżeli są dostępne Koloruj kontakty - Koloruj imiona i nazwiska na liście kontaktów - Kolor imienia i nazwiska kontaktu - Czcionka o stałej szerokości - Użyj czcionki o stałej szerokości do wyświetlania wiadomości tekstowych + Koloruj imiona i nazwiska na liście kontaktów + Kolor imienia i nazwiska kontaktu + Czcionka o stałej szerokości + Użyj czcionki o stałej szerokości do wyświetlania wiadomości tekstowych Dopasuj wiadomość do rozmiaru ekranu Zmniejsza wiadomości, aby mieściły się na ekranie Potwierdź czynności Pokaż potwierdzające okno dialogowe, gdy wykonujesz wybrane czynności Usuń - Usuń oznacz. gwiazdką (tylko widok wiadomości) + Usuń oznaczoną gwiazdką (w widoku wiadomości) Spam Odrzuć wiadomość Oznacz wszystkie wiadomości jako przeczytane @@ -215,9 +215,9 @@ Czynności przesunięcia - Przesuń w prawo + Przesuń w prawo - Przesuń w lewo + Przesuń w lewo Brak @@ -242,27 +242,27 @@ Ukryj klienta poczty Usuń identyfikator programu z nagłówka wiadomości Ukryj strefę czasową - Używaj czasu UTC zamiast czasu lokalnego w nagłówkach wiadomości i odpowiedzi + Używaj czasu UTC zamiast czasu lokalnego w nagłówkach wiadomości i odpowiedzi Pokaż przycisk „Usuń” Nigdy - Dla powiadomień o pojedynczych wiadomościach + Dla powiadomień o pojedynczych wiadomościach Zawsze Powiadomienia na ekranie blokady Bez powiadomień na ekranie blokady Nazwa aplikacji Liczba nowych wiadomości - Nadawcy i liczba wiadomości + Nadawcy i liczba wiadomości Tak samo, jak przy odblokowanym ekranie Okres ciszy - Wyłącz dzwonienie, wibracje i mruganie w nocy + Wyłącz dzwonienie, wibracje i mruganie w nocy Wyłącz powiadomienia Całkowicie wyłącz powiadomienia podczas okresu ciszy Początek okresu ciszy Koniec okresu ciszy Dodaj konto - Gdy skasuję wiadomość - Nie usuwaj z serwera - Usuń ją z serwera + Kiedy usuwam wiadomość + Nie usuwaj z serwera + Usuń ją z serwera Oznacz jako przeczytane na serwerze Kasowanie usuniętych wiadomości na serwerze Od razu @@ -304,16 +304,10 @@ 5000 wiadomości 10000 wiadomości Wszystkie wiadomości - Nie można skopiować ani przenieść wiadomości, która nie jest zsynchronizowana z serwerem + Nie można skopiować ani przenieść wiadomości, która nie jest zsynchronizowana z serwerem Zaawansowane Ustawienia ogólne Nowe wiadomości - Powiadomienia z folderów - Wszystkie - Tylko foldery klasy 1 - Foldery klasy 1 oraz 2 - Wszystkie poza klasą 2 - Żadne Synchronizacja konta Twój adres e-mail Powiadomiaj na pasku stanu, gdy jest nowa wiadomość @@ -322,7 +316,7 @@ Pokaż powiadomienie dla wiadomości wysłanych przeze mnie Tylko kontakty Pokaż powiadomienia tylko dla wiadomości od znanych kontaktów - Ignoruj wiadomości z czatu + Ignoruj wiadomości z czatu Nie pokazuj powiadomień dla wiadomości należących do czatu e-mail Oznacz jako przeczytane Oznacz wiadomość jako przeczytaną przy otwieraniu @@ -330,7 +324,7 @@ Oznacz wiadomość jako przeczytaną przy usuwaniu Kategorie powiadomień Konfiguruj powiadomienia dla nowych wiadomości - Konfiguruj powiadomienia o błędach i stanie + Konfiguruj powiadomienia o błędach i stanie Zawsze pokazuj obrazy Nie Od kontaktów @@ -340,15 +334,15 @@ Dołącz oryginalną wiadomość do swojej odpowiedzi. Odpowiedź pod cytatem Oryginalna wiadomość pojawi się nad Twoją odpowiedzią. - Wycinaj podpis z tekstu + Wycinaj podpis z tekstu Gdy odpowiadasz na wiadomość, cytowany tekst nie bedzie zawierał podpisu Format wiadomości - Zwykły tekst (bez obrazów i formatowania) - HTML (z obrazami i formatowaniem) + Zwykły tekst (bez obrazów i formatowania) + HTML (z obrazami i formatowaniem) Automatycznie Zawsze wyświetlaj DW/UDW Potwierdzenie przeczytania - Zawsze wymagaj potwierdzenia o przeczytaniu + Zawsze wymagaj potwierdzenia o przeczytaniu Styl cytowania podczas odpowiedzi Prefiks (jak Gmail) Nagłówek (jak Microsoft Outlook) @@ -362,16 +356,16 @@ Szyfrowanie typu „end-to-end” Aktywuj wsparcie dla OpenPGP Wybierz aplikację OpenPGP - Skonfiguruj klucz szyfrowania typu „end-to-end” + Skonfiguruj klucz „end-to-end” Brak skonfigurowanej aplikacji OpenPGP - Połączono z %s + Połączono z %s Konfigurowanie… Szyfruj wszystkie przechowywane wersje robocze Wszystkie wersje robocze będą szyfrowane Szyfruj wersje robocze tylko wtedy, gdy szyfrowanie jest włączone Częstotliwość sprawdzania konta Kolor konta - Wybierz kolor, który będzie użyty przy wyświetlaniu folderów i listy kont + Wybierz kolor, który będzie użyty przy wyświetlaniu folderów i listy kont Liczba wiadomości Rozmiar pobieranych wiadomości 1 KiB @@ -402,34 +396,19 @@ ostatnie 3 miesiące ostatnie 6 miesięcy ostatni rok - Wyświetlaj foldery - Wszystkie - Tylko foldery klasy 1 - Foldery klasy 1 oraz 2 - Wszystkie poza klasą 2 - Sprawdź foldery - Wszystkie - Tylko foldery klasy 1 - Foldery klasy 1 oraz 2 - Wszystkie poza klasą 2 - Żadne Synchronizacja usunięć - Usuwaj wiadomości również z serwera poczty + Usuwaj wiadomości również z serwera poczty Brakuje aplikacji OpenPGP. Czy została odinstalowana\? Ustawienia folderu Umieść na początku Umieść na początku wyświetlanej listy folderów - Klasa wyświetlania - Bez klasy - Klasa 1 - Klasa 2 Wyczyść wiadomości lokalne Serwer poczty przychodzącej Ustawienia serwera poczty przychodzącej Serwer poczty wychodzącej Ustawienia serwera poczty wychodzącej (SMTP) Nazwa konta - Twoje imię i nazwisko + Twoje imię i nazwisko Powiadomienia Wibracja Wibruj @@ -466,13 +445,13 @@ Nowa tożsamość Adres UDW dla wysyłanych wiadomości (opcja) Edytuj - Przesuń w górę - Przesuń w dół + Przesuń w górę + Przesuń w dół Na początek (jako domyślna) Usuń Opis tożsamości (Opcjonalny) - Imię i nazwisko + Imię i nazwisko (Opcjonalne) Adres e-mail (Wymagany) @@ -489,15 +468,15 @@ Nie możesz użyć tożsamości bez podanego adresu e-mail Najstarsze wiadomości na początku Najnowsze wiadomości na początku - Alfabetycznie, po temacie (A->Z) - Alfabetycznie, po temacie (Z->A) + Alfabetycznie, według tematu (A->Z) + Alfabetycznie, według tematu (Z->A) Alfabetycznie, według nadawcy (A->Z) Alfabetycznie, według nadawcy (Z->A) - Wiadomości oznaczone gwiazką jako pierwsze + Wiadomości oznaczone gwiazdką jako pierwsze Wiadomości bez gwiazdki jako pierwsze Nieprzeczytane wiadomości jako pierwsze Przeczytane wiadomości jako pierwsze - Wiadomości z załącznikami jako pierwsze + Wiadomości z załącznikami jako pierwsze Wiadomości bez załączników jako pierwsze Sortuj wg… Data @@ -531,14 +510,14 @@ Język Nie znaleziono ustawień Stała kolorystyka widoku wiadomości - Wybierz kolorystykę z poziomu widoku wiadomości - Użyj kolorystyki wskazanej w konfiguracji + Wybierz kolorystykę z poziomu widoku wiadomości + Użyj kolorystyki wskazanej w konfiguracji Domyślny systemowy - Synchronizacja w tle + Synchronizacja w tle Nigdy Zawsze Gdy „Autosynchronizacja” jest włączona - Zaznacz wszystko + Wybierz wszystkie Sprawdzanie przez push Do 5 folderów Do 10 folderów @@ -550,13 +529,13 @@ Do 1000 folderów Animacje Używaj efektów wizualnych - Nawigacja klawiszem głośności w widoku wiadomości + Nawigacja klawiszem głośności w widoku wiadomości Pokaż zintegrowaną skrzynkę odbiorczą Pokaż liczbę oznaczonych gwiazdką Zintegrowana odbiorcza Nieprzeczytane wiadomości ze wszystkich kont Integruj - Pokazuj nieprzeczytane wiadomości w zintegrowanym widoku + Pokazuj nieprzeczytane wiadomości w zintegrowanym widoku Żaden Automatyczny (%s) Rozmiar czcionki @@ -572,7 +551,7 @@ Nadawca Odbiorcy Temat - Godzina i data + Godzina i data Treść wiadomości Kompozycja wiadomości Pole wprawadzania tekstu @@ -587,14 +566,14 @@ Nie znaleziono odpowiedniej aplikacji. Wysyłanie nieudane: %s Zapisać wersję roboczą wiadomości? - Zapisać czy porzucić wiadomość? + Zapisać czy odrzucić wiadomość? Zapisać czy odrzucić zmiany? - Usunąć wiadomość? - Czy na pewno chcesz usunąć tą wiadomość? + Odrzucić wiadomość? + Czy na pewno chcesz odrzucić tę wiadomość? Usunąć wiadomości lokalne? - Wszystkie wiadomości lokalne z folderu zostaną usunięte. Wiadomości nie zostaną usunięte z serwera. + Wszystkie wiadomości lokalne z folderu zostaną usunięte. Wiadomości nie zostaną usunięte z serwera. Wyczyść wiadomości - Potwiedź usunięcie + Potwierdź usunięcie Czy chcesz usunąć tę wiadomość\? Czy chcesz usunąć tę wiadomość? @@ -674,7 +653,7 @@ Wyszukiwanie na serwerze nie powiodło się Wyszukiwanie Wyszukuj wiadomości na serwerze - Połączenie sieciowe jest wymagane, aby korzystać z wyszukiwania na serwerze. + Połączenie sieciowe jest wymagane, aby korzystać z wyszukiwania na serwerze. Zmień kolor przeczytanych Inne tło wskazuje, że wiadomość została przeczytana Widok wątków @@ -685,22 +664,22 @@ Użyj widoku podzielonego ekranu Zawsze Nigdy - W trybie poziomym - Wybierz wiadomość z listy po lewej + W trybie poziomym + Wybierz wiadomość z listy po lewej Wyświetl zdjęcie kontaktu - Wyświetla zdjęcia konktaktów w widoku listy wiadomości + Wyświetla zdjęcia konktaktów w widoku listy wiadomości Oznacz wszystkie jako przeczytane Pokoloruj zdjęcia kontaktów Używa kolorów, gdy brakuje zdjęć kontaktów Widoczne czynności wiadomości - Pokaż wybrane czynności w menu widoku wiadomości + Pokaż wybrane czynności w menu widoku wiadomości Wczytywanie załącznika… Wysyłanie wiadomości Zapisywanie wersji roboczej Pobieranie załącznika… *Zaszyfrowane* - Dodaj z kontaktów + Dodaj z kontaktów DW UDW Do @@ -714,8 +693,8 @@ Mobilny Folderu wersji roboczych nie skonfigurowano dla tego konta! Nie skonfigurowanego klucza dla tego konta! Sprawdź ustawienia. - Aplikacja szyfrująca w niezgodnej wersji. Sprawdź ustawienia! - Nie można połączyć się z dostawcą kryptografii, sprawdź ustawienia lub kliknij ikonę kryptografii, aby spróbować ponownie! + Aplikacja szyfrująca w niezgodnej wersji. Sprawdź ustawienia! + Nie można połączyć się z dostawcą kryptografii, sprawdź ustawienia lub kliknij ikonę kryptografii, aby spróbować ponownie! Inicjalizacja szyfrowania typu „end-to-end” nie powiodła się. Sprawdź ustawienia. Tryb PGP/INLINE nie obsługuje załączników! Włącz PGP/INLINE @@ -723,27 +702,27 @@ Włącz PGP Sign-Only Wyłącz PGP Sign-Only Tryb PGP/INLINE - Ten e-mail został wysłany w formacie PGP/INLINE.\nPowinno to być użyte wyłącznie dla kompatybilności: + Ten e-mail został wysłany w formacie PGP/INLINE.\nPowinno to być użyte wyłącznie dla kompatybilności: Niektóre klienty obsługują tylko ten format Podpisy mogą ulec uszkodzeniu podczas przesyłania Załączniki nie są obsługiwane Rozumiem! Wyłącz - Utrzymuj włączone + Pozostaw włączone Rozumiem! Wyłącz Pozostaw włączone Tryb PGP sign-only - W tym trybie twój klucz PGP zostanie użyty do utworzenia podpisu kryptograficznego niezaszyfrowanej wiadomości e-mail. - Nie szyfruje to wiadomości e-mail, ale sprawdza, czy została wysłana z Twojego klucza. + W tym trybie Twój klucz PGP zostanie użyty do utworzenia podpisu kryptograficznego niezaszyfrowanej wiadomości e-mail. + Nie szyfruje to wiadomości e-mail, ale sprawdza, czy została wysłana z Twojego klucza. Podpisy mogą ulec uszkodzeniu przy wysyłaniu do list mailingowych. - W przypadku niektórych klientów, podpisy mogą być wyświetlane jako załączniki \'signature.asc\' . + W przypadku niektórych klientów, podpisy mogą być wyświetlane jako załączniki „signature.asc” . Zaszyfrowane wiadomości są zawsze opatrzone podpisem. Tekst jawny podpis „end-to-end” zawiera błąd - musisz w pełni pobrać wiadomość, aby przetworzyć podpis + musisz w pełni pobrać wiadomość, aby przetworzyć podpis zawiera niewspierany podpis „end-to-end” - Wiadomość jest zaszyfrowana, ale w niewspieranym formacie. + Wiadomość jest zaszyfrowana, ale w niewspieranym formacie. Wiadomość jest zaszyfrowana, ale deszyfrowanie zostało przerwane. podpisany „end-to-end” tekst jawny od zaufanego dostawcy @@ -754,8 +733,8 @@ ale klucz „end-to-end” nie jest uważany za bezpieczny od nieznanego klucza „end-to-end” Zaszyfrowana - ale jest tu błąd deszyfrowania - musisz w pełni pobrać wiadomość, aby odszyfrować + ale wystąpił błąd deszyfrowania + musisz w pełni pobrać wiadomość, aby odszyfrować ale żadna aplikacja kryptograficzna nie jest skonfigurowana Zaszyfrowana ale nie „end-to-end” @@ -770,7 +749,7 @@ ale dane „end-to-end” mają błędy ale szyfrowanie nie jest uważane za bezpieczne Odblokuj - Ta część nie została zaszyfrowana i może nie być zabezpieczona. + Ta część nie została zaszyfrowana i może nie być zabezpieczona. Niechroniony załącznik Wczytywanie… Anulowano odszyfrowywanie. @@ -785,25 +764,25 @@ Szyfrowanie nie jest dostępne w trybie sign-only! Niepodpisany tekst Ta wiadomość e-mail jest zaszyfrowana - Ta wiadomość e-mail została zaszyfrowana z użyciem OpenPGP.\n Aby ją odczytać, należy zainstalować i skonfigurować zgodną aplikację OpenPGP. + Ta wiadomość e-mail została zaszyfrowana z użyciem OpenPGP.\n Aby ją odczytać, należy zainstalować i skonfigurować zgodną aplikację OpenPGP. Przejdź do ustawień Szyfrowanie nie jest możliwe - Część z wybranych odbiorców nie obsługuje tej funkcjonalności! + Część z wybranych odbiorców nie obsługuje tej funkcjonalności! Włącz szyfrowanie Wyłącz szyfrowanie - Szyfrowanie wiadomości gwarantuje, że wiadomości mogą być odczytane tylko przez odbiorcę i nikogo innego. - Szyfrowanie pojawi się tylko wtedy, gdy wszyscy odbiorcy wiadomości je obsługują, a wcześniej wysłali Ci wiadomość. - Przełącz szyfrowanie klikając ten przycisk. + Szyfrowanie wiadomości gwarantuje, że wiadomości mogą być odczytane tylko przez odbiorcę i nikogo innego. + Szyfrowanie pojawi się tylko wtedy, gdy wszyscy odbiorcy wiadomości je obsługują, a wcześniej wysłali Ci wiadomość. + Przełącz szyfrowanie, klikając tę ikonę. Zrozumiano Cofnij Wyłącz szyfrowanie Szyfrowanie OpenPGP Tryb wzajemny Autocrypt Tryb wzajemny Autocrypt - Wiadomości normalnie będą szyfrowane z wyboru lub kiedy odpowiadasz na szyfrowaną wiadomość. - Jeśli nadawca i odbiorcy włączą tryb obustronnego automatycznego szyfrowania, szyfrowanie będzie włączone domyślnie. + Wiadomości normalnie będą szyfrowane z wyboru lub kiedy odpowiadasz na szyfrowaną wiadomość. + Jeśli nadawca i odbiorcy włączą tryb obustronnego automatycznego szyfrowania, szyfrowanie będzie włączone domyślnie. Możesz kliknąć tutaj, aby dowiedzieć się więcej. Ustawienia ogólne Brak aplikacji dla OpenPGP @@ -814,37 +793,32 @@ Błąd wewnętrzny: nieprawidłowe konto! Błąd połączenia z %s! Wyślij wiadomość konfiguracyjną Autocrypt - Bezpiecznie wymieniaj z innymi urządzeniami konfigurację szyfrowania typu „end-to-end” + Bezpiecznie wymieniaj z innymi urządzeniami konfigurację szyfrowania typu „end-to-end” Wiadomość konfiguracyjna Autocrypt Wiadomość konfiguracyjna Autocrypt bezpiecznie udostępnia Twoją konfigurację szyfrowania typu „end-to-end” innym urządzeniom. Wyślij wiadomość konfiguracyjną Wiadomość zostanie wysłana na adres: Generowanie wiadomości konfiguracyjnej… Wysyłanie wiadomości do: - Aby zakończyć, otwórz wiadomość na drugim urządzeniu i wpisz kod konfiguracyjny. + Aby zakończyć, otwórz wiadomość na drugim urządzeniu i wpisz kod konfiguracyjny. Pokaż kod konfiguracyjny Wiadomość konfiguracyjna Autocrypt - Ta wiadomość zawiera wszystkie informacje do bezpiecznego wyeksportowania wszystkich ustawień oraz klucza Autocrypt z oryginalnego urządzenia. - -Aby skonfigurować Autocrypt na nowym urządzeniu, należy podążać za wyświetlonymi na nim wskazówkami. - -Tą wiadomość można zachować i użyć w formie kopii zapasowej twojego klucza prywatnego, aby to uczynić należy zachować hasło i przechowywać je w bezpiecznym miejscu. - - Podczas wysyłania wiadomości wystąpił błąd. Sprawdź połączenie sieciowe i konfigurację serwera poczty wychodzącej. + Ta wiadomość zawiera wszystkie informacje do bezpiecznego wyeksportowania wszystkich ustawień oraz klucza Autocrypt z oryginalnego urządzenia. Aby skonfigurować Autocrypt na nowym urządzeniu, należy podążać za wyświetlonymi na nim wskazówkami. Możesz zachować tę wiadomość i użyć jej jako kopii zapasowej swojego klucza prywatnego. Jeśli chcesz to zrobić, zapisz hasło i przechowuj je bezpiecznie. + Podczas wysyłania wiadomości wystąpił błąd. Sprawdź połączenie sieciowe i konfigurację serwera poczty wychodzącej. Włącz Wyłącz Podczas wczytywania danych wystąpił błąd Inicjowanie… Oczekiwanie na nowe e-maile - Uśpione, dopóki synchronizacja w tle nie będzie dozwolona + Uśpione, dopóki synchronizacja w tle nie będzie dozwolona Uśpione, dopóki sieć nie będzie dostępna Stuknij, aby dowiedzieć się więcej. Informacje push - Podczas korzystania z funkcji push, %1$s utrzymuje połączenie z serwerem pocztowym. Android wymaga wyświetlania ciągłego, gdy aplikacja jest aktywna w tle. %2$s + Podczas korzystania z funkcji push, %1$s utrzymuje połączenie z serwerem pocztowym. Android wymaga wyświetlania ciągłego, gdy aplikacja jest aktywna w tle. %2$s Jednak Android pozwala również ukryć powiadomienie. Dowiedz się więcej Skonfiguruj powiadomienie - Jeśli nie potrzebujesz natychmiastowych powiadomień o nowych wiadomościach, wyłącz funkcję push i użyj regularnego sprawdzania. Sprawdzanie w regularnych odstępach czasu sprawdza nową pocztę i nie wymaga powiadomienia. + Jeśli nie potrzebujesz natychmiastowych powiadomień o nowych wiadomościach, wyłącz funkcję push i użyj regularnego sprawdzania. Sprawdzanie w regularnych odstępach czasu sprawdza nową pocztę i nie wymaga powiadomienia. Wyłącz funkcję push Zaznacz @@ -897,7 +871,7 @@ Tą wiadomość można zachować i użyć w formie kopii zapasowej twojego klucz Skopiuj adres e-mail - Skopiuj imię, nazwisko i adres e-mail + Skopiuj imię, nazwisko i adres e-mail Adres e-mail @@ -917,10 +891,12 @@ Tą wiadomość można zachować i użyć w formie kopii zapasowej twojego klucz Stuknij, aby udzielić uprawnienia. Zespół Thunderbird Mobile Powiadomienia - Dane techniczne i dotyczące użytkowania + Dane techniczne i dotyczące użytkowania Zbieranie danych - Udostępnia firmie Mozilla dane dotyczące wydajności, użytkowania, sprzętu i dostosowywania tej aplikacji, aby pomóc nam udoskonalić Thunderbirda + Udostępnia firmie Mozilla dane dotyczące wydajności, użytkowania, sprzętu i dostosowywania tej aplikacji, aby pomóc nam udoskonalić Thunderbirda Włącz funkcję push Włącz synchronizację Pokaż ukryte foldery + Pokaż folder + Wesprzyj %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-pt-rBR/strings.xml b/legacy/ui/legacy/src/main/res/values-pt-rBR/strings.xml index 9e244a4933b..e6a6da07f0a 100644 --- a/legacy/ui/legacy/src/main/res/values-pt-rBR/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-pt-rBR/strings.xml @@ -307,12 +307,6 @@ Avançado Configurações da conta Notificações de novas mensagens - Notificações de pastas - Todas - Apenas pastas de 1ª classe - Pastas de 1ª e 2ª classe - Todas, exceto as pastas de 2ª classe - Nenhuma Notificações de sincronização Seu endereço de e-mail Notifica, na barra de status, quando chegarem novas mensagens @@ -401,27 +395,12 @@ dos últimos 3 meses dos últimos 6 meses do último ano - Pastas a serem exibidas - Todas - Apenas pastas de 1ª classe - Pastas de 1ª e 2ª classe - Todas, exceto as pastas de 2ª classe - Verificar pastas - Todas - Apenas pastas de 1ª classe - Pastas de 1ª e 2ª classe - Todas, exceto as pastas de 2ª classe - Nenhuma Sincronizar exclusões no servidor Remove mensagens quando excluídas no servidor O aplicativo de OpenPGP não foi encontrado - ele foi desinstalado? Configurações da pasta Exibir no grupo superior Exibe perto do topo da lista de pastas - Classe de exibição da pasta - Nenhuma classe - 1ª classe - 2ª classe Limpar mensagens locais Servidor de recebimento Configure o servidor recebimento de mensagens @@ -917,7 +896,9 @@ Você pode guardar esta mensagem e usá-la como um backup da sua chave secreta. Coleta de dados Dados de uso e técnicos Compartilha dados sobre performance, uso, hardware, e customização deste app com a Mozilla para nos ajudar a fazer o Thunderbird melhor - Ativar Pusg + Ativar Push Ativar sincronização Mostrar pastas escondidas + Mostrar pasta + Apoie o %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-pt-rPT/strings.xml b/legacy/ui/legacy/src/main/res/values-pt-rPT/strings.xml index 1456e5724cc..f2a7c909949 100644 --- a/legacy/ui/legacy/src/main/res/values-pt-rPT/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-pt-rPT/strings.xml @@ -306,12 +306,6 @@ Avançado Configurações da conta Notificação de novos emails - Notificações de pastas - Todas - Apenas pastas de 1ª classe - Pastas de 1ª e 2ª classe - Todas excepto pastas de 2ª classe - Nenhuma Notificações de sincronização O seu endereço de email Notificar na barra de estado na chegada de novos emails @@ -400,27 +394,12 @@ os últimos 3 meses os últimos 6 meses o último ano - Pastas para exibição - Todas - Apenas pastas de 1ª classe - Pastas de 1ª e 2ª classe - Todas excepto pastas de 2ª classe - Verificar pastas - Todas - Apenas pastas de 1ª classe - Pastas de 1ª e 2ª classe - Todas excepto pastas de 2ª classe - Nenhuma Sincronizar as eliminações do servidor Remove as mensagens quando eliminadas no servidor Falta uma aplicação OpenPGP; foi desinstalada? Configurações da pasta Mostrar no grupo do topo Mostrar junto ao topo da lista de pastas - Classe de exibição da pasta - Sem Classe - 1ª classe - 2ª classe Apagar mensagens locais Servidor de entrada Configure o servidor de email de entrada diff --git a/legacy/ui/legacy/src/main/res/values-pt/strings.xml b/legacy/ui/legacy/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000000..a6b3daec935 --- /dev/null +++ b/legacy/ui/legacy/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-ro/strings.xml b/legacy/ui/legacy/src/main/res/values-ro/strings.xml index 4e75ea24b16..54d95501f71 100644 --- a/legacy/ui/legacy/src/main/res/values-ro/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ro/strings.xml @@ -306,12 +306,6 @@ cel mult încă %d
Avansat Setări cont Notificări mail noi - Dosare notificări - Toate - Doar dosare de Nivel 1 - Dosare de Nivel 1 și 2 - Toate mai puțin dosarele de Nivel 2 - Fără Sincronizare notificări Adresa ta de email Notifică în bara de stare când sosește mail @@ -400,27 +394,12 @@ cel mult încă %d
ultimele 3 luni ultimele 6 luni ultimul an - Dosare de afișat - Toate - Doar dosare de Nivel 1 - Dosare de Nivel 1 și 2 - Toate mai puțin dosarele de Nivel 2 - Dosare interogate - Toate - Doar dosare de Nivel 1 - Dosare de Nivel 1 și 2 - Toate mai puțin dosarele de Nivel 2 - Nimic Sincronizare mesaje șterse pe server Elimină mesajele șterse pe server Aplicație OpenPGP lipsă - a fost dezinstalată? Setări dosar Arată în grupul de sus Arată aproape de partea de sus a listei de dosare - Nivel de afișare dosar - Nici o clasă - Nivel 1 - Nivel 2 Curăță mesajele locale Server primire Configurare server primire @@ -919,4 +898,6 @@ Poți păstra acest mesaj și să îl folosești drept copie de siguranță a ch Activează sincronizarea Activează trimiterile „push” Afișează dosarele ascunse + Afișează dosarul + Suport %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-ru/strings.xml b/legacy/ui/legacy/src/main/res/values-ru/strings.xml index de83bf47849..07eacd868e5 100644 --- a/legacy/ui/legacy/src/main/res/values-ru/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ru/strings.xml @@ -309,12 +309,6 @@ Дополнительно Настройки учётной записи Уведомить о почте - Уведомления папок - Все - Папки только 1-го класса - Папки 1-го и 2-го классов - Все, кроме папок 2-го класса - Нет Уведомить о проверке Ваш адрес эл. почты Показать уведомление о новой почте @@ -403,27 +397,12 @@ 3 месяца 6 месяцев 1 год - Видимость папок - Все - Папки только 1-го класса - Папки 1-го и 2-го классов - Все, кроме папок 2-го класса - Проверка папок - Все - Папки только 1-го класса - Папки 1-го и 2-го классов - Все, кроме папок 2-го класса - Нет Синхронное удаление Удалять сообщения при удалении на сервере Отсутствует OpenPGP-приложение – было удалено? Настройки папки Начало списка Отображать ближе к началу списка папок - Видимость - Нет класса - 1-й класс - 2-й класс Стереть локальные Сервер входящих Настройки сервера входящей почты @@ -737,7 +716,7 @@ Не отключать Режим PGP \"Только подпись\" В этом режиме ваш PGP-ключ будет использоваться для создания криптографической подписи нешифрованного электронного письма. - Адресат сможет убедиться, что сообщение подлинное и подписано Вашим ключом + Адресат сможет убедиться, что сообщение подлинное и подписано вашим ключом Подписи могут повредиться при отправке нескольким адресатам Подписи могут отображаться как вложенные файлы \"signature.asc\" Всегда добавлять подпись к шифрованным сообщениям @@ -927,4 +906,6 @@ Включить push Показать скрытые папки Включить синхронизацию + Показать папку + Поддержка %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-sk/strings.xml b/legacy/ui/legacy/src/main/res/values-sk/strings.xml index bacee81d85f..2d629f950b0 100644 --- a/legacy/ui/legacy/src/main/res/values-sk/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-sk/strings.xml @@ -273,12 +273,6 @@ Pokročilé Nastavenia účtu Oznámenia o nových správach - Priečinky oznámení - Všetky - Len priečinky 1. triedy - Priečinky 1. a 2. triedy - Všetky okrem priečinkov 2. triedy - Žiadne Oznámenia o synchronizácii Vaša e-mailová adresa Oznamovať v stavovej lište, keď príde nová pošta @@ -362,27 +356,12 @@ Posledné 3 mesiace Posledných 6 mesiacov Posledný rok - Priečinky na zobrazenie - Všetky - Len priečinky 1. triedy - Priečinky 1. a 2. triedy - Všetky okrem priečinkov 2. triedy - Synchronizované priečinky - Všetky - Len priečinky 1. triedy - Priečinky 1. a 2. triedy - Všetky okrem priečinkov 2. triedy - Žiadne Synchronizácia mazaní na serveri Odstrániť správy, ktoré boli odstránené na serveri Aplikácia pre OpenPGP chýba - bola odinštalovaná? Nastavenia priečinku Zobraziť v najvyššej skupine Zobraziť v hornej časti zoznamu priečinkov - Trieda zobrazenia priečinka - Žiadna trieda - 1. trieda - 2. trieda Vymazať správy Server prichádzajúcej pošty Nastaviť server prichádzajúcej pošty diff --git a/legacy/ui/legacy/src/main/res/values-sl/strings.xml b/legacy/ui/legacy/src/main/res/values-sl/strings.xml index 56a583490ef..d09c3be68b3 100644 --- a/legacy/ui/legacy/src/main/res/values-sl/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-sl/strings.xml @@ -304,12 +304,6 @@ dodatnih %d sporočil
Napredne možnosti Nastavitve računa Obvestila za prejem nove pošte - Prikaz obvestil - Za vse ravni map - Za mape 1. ravni - Za mape 1. in 2. ravni - Za vse, razen map 2. ravni - Ne pokaži obvestil Obvestila usklajevanja Elektronski naslov Pokaže obvestilo v vrstici stanja ob prihodu novega sporočila @@ -398,27 +392,12 @@ dodatnih %d sporočil
Zadnjih 3 mesecev Zadnjih 6 mesecev Zadnjega leta - Prikaz map - Pokaži vse mape - Pokaži le mape 1. ravni - Pokaži mape 1. in 2. ravni - Pokaži vse, razen map 2. ravni - Izpraševanje map - Izprašaj vse mape - Izprašaj le mape 1. ravni - Izprašaj mape 1. in 2. ravni - Izprašaj vse, razen map 2. ravni - Ne izprašuj map Usklajevanje izbrisanih sporočil Odstrani sporočila, ki so bila izbrisana na strežniku Ni programa OpenPGP – ali je bila namestitev odstranjena? Nastavitve mape Pokaži mapo v zgornji skupini Razvrsti mapo v zgornjo skupino map na seznamu - Prikaz map - Brez ravni - Pokaži mape 1. ravni - Pokaži mape 2. ravni Počisti krajevna sporočila Dohodni strežnik Nastavitev strežnika dohodne pošte diff --git a/legacy/ui/legacy/src/main/res/values-sq/strings.xml b/legacy/ui/legacy/src/main/res/values-sq/strings.xml index 593c2c1e53b..e6bacd0981a 100644 --- a/legacy/ui/legacy/src/main/res/values-sq/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-sq/strings.xml @@ -304,12 +304,6 @@ Të mëtejshme Rregullime llogarie Njoftime email-i të ri - Dosje njoftimesh - Krejt - Vetëm dosje të Klasës I - Dosje të Klasës I dhe II - Krejt, hiq dosje të Klasës II - Asnjë Njoftime njëkohësimesh Adresa juaj email Njofto në shtyllë gjendjeje kur mbërrin postë @@ -398,27 +392,12 @@ 3 muajt e shkuar 6 muajt e shkuar vitin e shkuar - Dosje për tu shfaqur - Krejt - Vetëm dosje të Klasës I - Dosje të Klasës I dhe II - Krejt, hiq dosje të Klasës II - Vili dosjet - Krejt - Vetëm dosje të Klasës I - Dosje të Klasës I dhe II - Krejt, hiq dosje të Klasës II - Asnjë Njëkohëso fshirje në shërbyes Hiqi mesazhet kur janë fshirë në shërbyes Mungon aplikacioni OpenPGP - mos është çinstaluar? Rregullime dosjeje Shfaqe në grupin e epërm Shfaqe pranë kreut të listës së dosjeve - Klasë shfaqjeje dosjesh - Pa Klasë - Klasa I - Klasa II Pastro mesazhet vendore Shërbyes për marrje Formësoni shërbyesin për marrje @@ -904,4 +883,12 @@ Llogaria \"%s\" do të hiqet nga %s. Kur përdoret Push, %1$s mban një lidhje me shërbyesin e postës. Android-i lyp shfaqjen e vazhdueshme të një njoftimi, teksa aplikacioni është aktiv në prapaskenë. %2$s Ekipi i Thunderbird-it Për Celular + Grumbullim të dhënash + Të dhëna përdorimi dhe teknike + I jepen Mozilla-s të dhëna funksionimi, rreth hardware-it dhe përshtatjesh për këtë aplikacion, për të ndihmuar të bëhet më i mirë Thunderbird + Aktivizo njëkohësim + Njoftime + Shfaq dosjen + Përkrahni %s + Shfaq dosje të fshehura \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-sr/strings.xml b/legacy/ui/legacy/src/main/res/values-sr/strings.xml index 142fc37d6d7..f2b81f19b3d 100644 --- a/legacy/ui/legacy/src/main/res/values-sr/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-sr/strings.xml @@ -272,12 +272,6 @@ Напредно Поставке налога Обавештења о новој пошти - Обавештења за фасцикле - све - само фасцикле I класе - фасцикле I и II класе - све осим фасцикли II класе - ништа Обавештења о провери Ваша адреса е-поште Обавести у траци стања кад стигне пошта @@ -361,27 +355,12 @@ последња 3 месеца последњих 6 месеци последње године - Фасцикле за приказ - све - само фасцикле I класе - фасцикле I и II класе - све осим фасцикли II класе - Фасцикле за проверу - све - само фасцикле I класе - фасцикле I и II класе - све осим фасцикли II класе - ништа Синхронизуј серверска брисања Уклони поруке када су обрисане са сервера Нема ОпенПГП апликације. Да није деинсталирана? Поставке фасцикли Прикажи у групи на врху Прикажи при врху на листи фасцикли - Класа приказа фасцикле - без класе - I класа - II класа Очисти локалне поруке Долазни сервер Подешавања долазног сервера поште diff --git a/legacy/ui/legacy/src/main/res/values-sv/strings.xml b/legacy/ui/legacy/src/main/res/values-sv/strings.xml index 27c9e3b372b..b05e73b89bd 100644 --- a/legacy/ui/legacy/src/main/res/values-sv/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-sv/strings.xml @@ -50,7 +50,7 @@ Flytta till utkast Återarkivera… Klar - Kassera + Släng Spara som utkast Kontrollera e-post Skicka meddelanden @@ -156,7 +156,7 @@ Till: Kopia: %s skrev: - %2$s skrev: (%1$s) + Den %1$s, %2$s skrev: Du måste ange minst en mottagare. Mottagarfältet innehåller ofullständig inmatning! Hittar ingen e-postadress för denna kontakt. @@ -182,7 +182,7 @@ Hämta hela meddelandet via %1$s Mer från denna avsändare - Meddelandet kasserades + Meddelandet har slängts Meddelandet sparat som utkast Visa stjärnor Stjärnor indikerar flaggade meddelanden @@ -205,7 +205,7 @@ Ta bort Ta bort stjärnmarkerade (i meddelandevyn) Skräppost - Kassera meddelandet + Släng meddelande Markera alla meddelanden som lästa Ta bort (från avisering) @@ -304,12 +304,6 @@ Avancerat Kontoinställningar Aviseringar vid ny e-post - Aviseringsmappar - Alla - Endast första klassens mappar - Första och 2:a klassens mappar - Alla utom 2:a klassens mappar - Inga Avisering vid synkronisering Din e-postadress Visa avisering i statusraden vid ankomst av e-post @@ -398,27 +392,12 @@ senaste 3 månaderna senaste 6 månaderna senaste året - Mappar att visa - Alla - Endast 1:a klassens mappar - 1:a och 2:a klassens mappar - Alla utom 2:a klassens mappar - Mappar att kontrollera - Alla - Endast 1:a klassens mappar - 1:a och 2:a klassens mappar - Alla utom 2:a klassens mappar - Inga Synkronisera fjärrborttagning Ta bort meddelanden när de tas bort från servern Saknade OpenPGP-app - har den avinstallerats? Mappinställningar Visa i toppgruppen Visa nära toppen av mapplistan - Visningsklass för mapp - Ingen klassning - 1:a klass - 2:a klass Rensa lokalt lagrade meddelanden Inkommande server Konfigurera servern för inkommande e-post @@ -582,11 +561,11 @@ Störst Hittade ingen passande applikation för denna åtgärd. Det gick inte att skicka: %s - Spara utkast? - Spara eller kassera detta meddelande? - Spara eller kassera ändringar? - Kassera meddelandet? - Är du säker på att du vill kassera detta meddelande? + Spara meddelandeutkast? + Spara eller släng detta meddelande? + Spara eller släng ändringar? + Släng meddelande? + Är du säker på att du vill slänga detta meddelande? Rensa lokala meddelanden? Detta tar bort alla lokala meddelanden från mappen. Inga meddelanden tas bort från servern. Rensa meddelanden @@ -700,10 +679,10 @@ Arbete Annat Mobil - Ingen Utkast mapp konfigurerad för detta konto! + Ingen mapp för utkast inställd för detta konto! Ingen nyckel konfigurerad för detta konto! Kontrollera dina inställningar. Kryptoleverantören använder inkompatibel version. Kontrollera dina inställningar! - Kan inte ansluta till kryptoleverantör, granska dina inställningar eller klicka på kryptoikonen för nytt försök. + Kan inte ansluta till kryptoleverantör, kontrollera dina inställningar eller klicka på kryptoikonen för att försöka igen! Det gick inte att initiera ände-till-ände-kryptering, kontrollera dina inställningar PGP/INLINE läge stöder inte bilagor! Aktivera PGP/INLINE @@ -765,7 +744,7 @@ Försök igen Krypterat meddelande måste hämtas för dekryptering. Fel vid dekryptering av e-post - Symboler stöds för närvarande inte. + Specialtecken stöds för närvarande inte! Kan inte tolka adressen! Dölj okrypterade signaturer Endast krypterade signaturer visas @@ -827,10 +806,10 @@ Du kan behålla detta meddelande och använda det som en säkerhetskopia för di Sover tills nätverket är tillgängligt Tryck för att läsa mer. Push-info - Men Android låter dig också dölja aviseringen. + Däremot ger Android också möjligheten att dölja den aviseringen. Lär dig mer Anpassa avisering - Om du inte behöver omedelbara meddelanden om nya meddelanden bör du inaktivera Push och använda Polling. Polling kontrollerar regelbundet efter ny post och behöver inte meddelandet. + Om du inte behöver omedelbara aviseringar om nya meddelanden bör du inaktivera Push och använda Polling. Polling kontrollerar regelbundet efter nya mejl och behöver inte en ständig avisering. Inaktivera Push Välj @@ -912,4 +891,7 @@ Du kan behålla detta meddelande och använda det som en säkerhetskopia för di Datainsamling Användning och teknisk data Delar prestanda, användning, hårdvara och anpassningsdata om denna app med Mozilla för att hjälpa oss att göra Thunderbird bättre + Visa mapp + Stötta %s + När Push-notiser används har %1$s en kontinuerlig anslutning till mejlservern. Android kräver då att en ständig avisering visas medan appen är aktiv i bakgrunden. %2$s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-ta-rIN/strings.xml b/legacy/ui/legacy/src/main/res/values-ta-rIN/strings.xml index 39f67c4d032..6b1c8c4fb78 100644 --- a/legacy/ui/legacy/src/main/res/values-ta-rIN/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-ta-rIN/strings.xml @@ -134,12 +134,9 @@ ஒருபொழுதும் மேம்பட்ட கணக்கு அமைப்புகள் - அனைத்தும் அஞ்சல் அனுப்புதல் படித்த இரசீது கோப்புறைகள் - அனைத்தும் - அனைத்தும் கோப்புறை அமைப்பு தற்காலிக செய்திகள் நீக்கு சேமி diff --git a/legacy/ui/legacy/src/main/res/values-tr/strings.xml b/legacy/ui/legacy/src/main/res/values-tr/strings.xml index 7cb48c3f665..092235cc6cd 100644 --- a/legacy/ui/legacy/src/main/res/values-tr/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-tr/strings.xml @@ -179,11 +179,11 @@ İleti taslak olarak kaydedildi Yıldızları göster Yıldızlar işaretlenmiş iletileri gösterir - Önizleme hatları - İlgili isimleri göster - İlgili e-posta adresleri yerine isimlerini göster - Yukarıdaki konuya uyan - Yukarıda konu satırındaki uyan isimleri gösterir + Ön izleme satırları + Yazışanların isimlerini göster + Yazışanların e-posta adresleri yerine isimlerini göster + Yazışan konunun üzerinde + Yazışanların isimlerini konu satırının altında değil de üstünde göster Kişi isimlerini göster Mümkün olduğunda rehberdeki alıcı isimlerini kullan Kişileri renklendir @@ -192,8 +192,8 @@ Düz metin iletiler gösterilirken sabit genişlikli yazı tipi kullan İletileri otomatik sığdır İletileri ekrana sığacak şekilde küçült - Eylemleri onaylayın - Seçilmiş eylemleri yaptığınız zaman bir diyalog göster + İşlemleri onayla + Bu işlemleri yaptığım zaman bir iletişim kutusu göster Sil Yıldızlıları sil (ileti görünümünde) Spam @@ -238,28 +238,28 @@ Yeni ileti sayısı İleti sayısı ve gönderenler Ekran kilidi açıkken olduğu gibi - Sessiz Zaman + Sessiz zaman Zil sesi, titreşim ve flaşı devre dışı bırak Bildirimleri devre dışı bırak - Sessiz Saatte tüm uyarıları kapat - Sessiz Zaman başlangıcı - Sessiz Zaman bitişi - Bir yeni hesap kurun + Sessiz zamanda bildirimleri tamamen devre bırak + Sessiz zaman başlangıcı + Sessiz zaman bitişi + Yeni hesap kur Bir iletiyi sildiğimde Sunucudan silme Sunucudan sil Sunucuda okundu olarak işaretle Sunucudan silinen iletileri temizle Hemen - Bilgi çekme zamanı - Elle + Sorgulama sırasında + Manuel Taslaklar klasörü Gönderilmiş klasörü Çöp klasörü Arşiv klasörü Spam klasörü Yalnızca abone olduğum klasörleri göster - Otomatik genişleyen klasör + Otomatik genişleyecek klasör Hiçbir zaman 15 dakikada bir 30 dakikada bir @@ -293,25 +293,19 @@ Gelişmiş Hesap ayarları Yeni e-posta bildirimleri - Bildirimler klasörü - Tümü - Yalnızca 1. sınıf klasörler - 1. ve 2. sınıf klasörler - 2. sınıf klasörler dışında tümü - Hiçbiri Eşitleme bildirimleri E-posta adresiniz E-posta geldiğinde durum çubuğunda bildir E-posta denetlenirken durum çubuğunda bildir - Giden postayı içersin - Gönderdiğim iletiler için bir bildirim göster - Yalnızca kişiler + Giden e-postaları dahil et + Gönderdiğim iletiler için bildirim göster + Yalnızca rehberden Yalnızca bilinen kişilerden gelen iletiler için bildirim göster Sohbet iletilerini yok say - Açılan iletiyi okundu olarak işaretle - İleti okunmak üzere açıldığında okundu olarak işaretle + Açılan iletileri okundu olarak işaretle + İleti açılıp görüntülendiğinde okundu olarak işaretle Silindiğinde okundu olarak işaretle - Bir ileti silindiğinde okundu olarak işaretlemek + Bir ileti silindiğinde iletiyi okundu olarak işaretle Bildirim kategorileri Yeni ileti bildirimlerini ayarla Hata ve durum bildirimlerini ayarla @@ -319,45 +313,45 @@ Hayır Rehberimdeki kişilerden Herkesten - Posta gönderiliyor - Yanıtlarken orijinal iletiyi alıntıla - Yanıtınıza orijinal ileti de eklensin. - Alıntı metinden sonra yanıtla - Orijinal ileti yanıtınızın üzerinde görünsün. - Alıntılı yanıtta imzayı kaldır - İmzalar alıntılanan iletilerden kaldırılsın + Posta gönderme + Yanıtlarken asıl iletiyi alıntıla + Yanıtıma asıl iletiyi de dahil et. + Yanıt alıntılanan metnin altında + Asıl ileti, yanıtınızın üzerinde görünecektir. + Yanıtta imzaları kaldır + Alıntılanan iletilerdeki imzalar kaldırılacaktır İleti Biçimi - Düz Metin (resimler ve biçimler kaldırılacak) - HTML (resimler ve biçimler korunacak) + Düz metin (resimleri ve biçimlendirmeyi kaldır) + HTML (resimleri ve biçimlendirmeyi koru) Otomatik Cc/Bcc\'yi her zaman göster Okundu raporu Her zaman okundu raporu iste - Alıntı tarzında yanıtla + Yanıt alıntılama stili Ön ek (Gmail gibi) - Başlık (Outlook, Yahoo!, Hotmail gibi) + Üst bilgi (Outlook gibi) Gönderilmiş iletileri karşıya yükle İletileri gönderdikten sonra Gönderilmiş klasörüne yükle Genel ayarlar Posta okuma Posta alma Klasörler - Alıntılanmış metin öneki + Alıntılanan metin öneki Uçtan uca şifreleme OpenPGP desteğini etkinleştir OpenPGP uygulamasını seç Uçtan uca anahtarını yapılandır Yapılandırılmış OpenPGP uygulaması yok - %s\'e bağlı + Bağlandı: %s Yapılandırılıyor… Tüm taslakları şifreli olarak sakla Tüm taslaklar şifreli olarak saklanacak Taslakları yalnızca şifreleme etkinse şifrele - Klasör bilgi çekme sıklığı + Klasör sorgulama sıklığı Hesap rengi Klasör ve hesap listesinde bu hesap için kullanılacak renk Yerel klasör boyutu - Şu kadar ileti al + İndirilecek en büyük ileti boyutu 1 KiB 2 KiB 4 KiB @@ -372,9 +366,9 @@ 2 MiB 5 MiB 10 MiB - Her boyutta (sınır yok) - İletileri eşzamanlama sıklığı - Her zaman (sınır yok) + tüm boyutlar (sınır yok) + Eşitlenecek en eski ileti + tüm zamanlar (sınır yok) bugün son 2 gün son 3 gün @@ -386,31 +380,16 @@ son 3 ay son 6 ay son bir yıl - Görüntülenecek klasörler - Tümü - Yalnızca 1. Sınıf klasörler - 1. ve 2. Sınıf klasörler - 2. Sınıf klasörler dışında tümü - Bilgi çekilecek klasörler - Tümü - Yalnızca 1. Sınıf klasörler - 1. ve 2. Sınıf klasörler - 2. Sınıf klasörler dışında tümü - Hiçbiri - Eşzamanlama sunucusu silme işlemleri - Sunucudan silinen iletileri kaldır - OpenPGP uygulaması eksik - kaldırıldı mı? + Sunucudan silinenleri eşitle + Sunucu üzerinden silinen iletileri kaldır + OpenPGP uygulaması eksik. Kaldırılmış olabilir mi? Klasör ayarları Üst grupta göster Klasör listesinin üstüne yakın göster - Klasör Görüntüleme Sınıfı - Sınıflama yok - 1. Sınıf - 2. Sınıf Yerel iletileri temizle Gelen sunucusu Gelen posta sunucusunu yapılandır - Giden sunucu + Giden sunucusu Giden posta (SMTP) sunucusunu yapılandır Hesap adı Adınız @@ -435,18 +414,18 @@ Mavi Sarı Camgöbeği - Macenta + Fuşya İleti oluşturma seçenekleri - Bileşen öntanımlıları - Varsayılan Kimden, Bcc ve imzayı ayarlayın + Oluşturma varsayılanları + Varsayılan Kimden, Bcc ve imzayı ayarla Kimlikleri yönet - \\imden\' adreslerini ve imzaların alternatiflerini ayarlayın + Alternatif \'Kimden\' adreslerini ve imzaları ayarla Kimlikleri yönet - Kimlik yönetimi - Kimlik düzenle + Kimliği yönet + Kimliği düzenle Kaydet Yeni kimlik - Bütün iletiler için kullanılacak Gizli + Tüm iletilere Bcc ekle Düzenle Yukarı taşı Aşağı taşı @@ -458,7 +437,7 @@ (İsteğe bağlı) E-posta adresi (Gerekli) - Yanıt adresi + Yanıt (reply-to) adresi (İsteğe bağlı) İmza (İsteğe bağlı) @@ -466,15 +445,15 @@ İmza İlk kimlik Kimlik seç - Olarak gönderin - Son kimliğinizi kaldıramazsınız - Bir e-posta adressiz kimlik kullanamazsınız + Farklı gönderici + Tek kimliğinizi kaldıramazsınız + E-posta adresi olmadan kimlik kullanamazsınız Önce ilk gelen iletiler - Önce en son gelen iletiler - Konuyu alfabetik sırala - Konuyu ters alfabetik sırala + Önce son gelen iletiler + Konuya göre alfabetik + Konuya göre tersten alfabetik Gönderene göre alfabetik - Gönderene göre ters alfabetik + Gönderene göre tersten alfabetik Önce yıldızlı iletiler Önce yıldızsız iletiler Önce okunmamış iletiler @@ -483,7 +462,7 @@ Önce eksiz iletiler Sırala… Tarih - Varış + Geliş Konu Gönderen Yıldız @@ -492,14 +471,14 @@ Hesabı Kaldır Klasör adı içeriği İmza konumu - Saklanan metinden önce - Alınan iletiden sonra + Alıntılanan iletiden önce + Alıntılanan iletiden sonra Uygulama temasını kullan Koyu Açık - Sistem öntanımlısını kullan - Görüntü - Genel + Sistem varsayılanını kullan + Görünüm + Global Hata ayıklama Gizlilik @@ -509,17 +488,17 @@ İletiler Tema İleti görünümü teması - Besteci teması + Oluşturucu teması Dil Ayar bulunamadı Sabit ileti teması - İletiyi görüntülerken kullanılacak ileti görünüm temasını seçin - Sabit ileti görüntüleme teması kullan + İleti görüntülenirken kullanılacak ileti görünüm temasını seçin + Sabit bir ileti görünüm teması kullan Sistem varsayılanları - Arka plan eşzamanlaması + Arka planda eşitleme Hiçbir zaman Her zaman - \'Otomatik eşzamanlama\' işaretlendiğinde + \'Otomatik eşitle\' işaretlendiğinde Tümünü seç Anında ilet ile denetlenecek en fazla klasör sayısı 5 klasör @@ -532,12 +511,12 @@ 1000 klasör Animasyon Gösterişli görsel efektleri kullan - Birleşik Gelen Kutusunu Göster - Yıldızlanan sayısını göster + Birleşik gelen kutusunu göster + Yıldızlı sayısını göster Birleşik Gelen Kutusu - Bütün iletiler birleşik gelen kutusunda + Tüm iletiler birleşik klasörlerde Birleştir - Tüm iletiler Birleşik Gelen Kutusunda gösterilir + Tüm iletiler Birleşik Gelen Kutusu\'nda gösterilir Hiçbiri Otomatik (%s) Yazı tipi noyutu @@ -546,7 +525,7 @@ Konu Gönderen Tarih - Önizleme + Ön izleme İletiler Hesap adı @@ -564,11 +543,11 @@ Orta Büyük Daha büyük - Bu eylem için uygun program bulunamadı. + Bu eylem için uygun uygulama bulunamadı. Gönderilemedi: %s İleti taslağı kaydedilsin mi? - Bu ileti kaydedilsin veya silinsin mi\? - Değişikliklerden vazgeç veya kaydet? + Bu ileti kaydedilsin mi yoksa silinsin mi? + Değişiklikler kaydedilsin mi yoksa silinsin mi? İleti silinsin mi? Bu iletiyi silmek istediğinizden emin misiniz? Yerel iletiler temizlensin mi? @@ -577,21 +556,21 @@ Silmeyi onayla Bu iletiyi silmek istiyor musunuz? - Bu iletiyi silmek istiyor musunuz\? - %1$d iletiyi silmek istiyor musunuz\? + Bu iletiyi silmek istediğinizden emin misiniz? + %1$d iletiyi silmek istediğinizden emin misiniz? Evet Hayır Tüm iletileri okundu olarak işaretlemeyi onayla Tüm iletileri okundu olarak işaretlemek istiyor musunuz? - Çöpü boşaltmayı onayla - Çöp klasörünü boşaltmak istiyor musun? + Çöp kutusunu boşaltmayı onayla + Çöp kutusu klasörünü boşaltmak istediğinizden emin misiniz? Evet Hayır Spam klasörüne taşımayı onayla - Bu iletiyi gerçekten istenmeyen klasörüne taşımak istiyor musunuz\? - %1$d iletiyi gerçekten istenmeyen klasörüne taşımak istiyor musunuz\? + Bu iletiyi spam klasörüne taşımak istediğinizden emin misiniz? + %1$d iletiyi spam klasörüne taşımak istediğinizden emin misiniz? Evet Hayır @@ -623,7 +602,7 @@ Telefon numarası E-posta gönder Kişilere kaydet - E-posta adresini panoya kopyala + Adresi panoya kopyala E-posta adresi Tümü 10 @@ -634,7 +613,7 @@ 500 1000 Sunucu arama limiti - İstek sunucuya gönderiliyor + Sorgu sunucuya gönderiliyor %d sonuç getiriliyor %d sonuç getiriliyor @@ -643,114 +622,113 @@ %2$d sonuçtan %1$d tanesi alınıyor %2$d sonuçtan %1$d tanesi alınıyor - Başarısız uzaktan arama + Uzaktan arama başarısız Ara Sunucuda ileti ara Sunucuda arama için ağ bağlantısı gereklidir. Okunduğunda rengi değiştir - İleti okunduğunda farklı bir arkaplan gösterilecek - Konu görünümü - İletileri konuşmaya göre gruplandır - Veri tabanı güncelleniyor - Veri tabanı güncelleniyor… - \"%s\" hesabı veri tabanı güncelleniyor - Bölünmüş ekran göster + İleti okunduğunda farklı bir arka plan gösterilecektir + Dizi görünümü + İletileri yazışmaya göre gruplandır + Veritabanları yükseltiliyor + Veritabanları yükseltiliyor… + \"%s\" hesabının veritabanı yükseltiliyor + Bölünmüş ekranı göster Her zaman Hiçbir zaman Yatay çevrildiğinde - Sol taraftan bir ileti seçin + Lütfen sol taraftan bir ileti seçin Kişi resimlerini göster İleti listesinde kişi resimlerini göster - Tümünü okundu say + Tümünü okundu olarak işaretle Kişi resimlerini renklendir Eksik kişi resimlerini renklendir - İleti eylemlerini görünür yap - İleti görünüm menüsünde seçilen eylemleri göster - Ekler yükleniyor… + Görünecek ileti işlemleri + İletilerin görünüm menüsünde seçilen işlemleri göster + Ek yükleniyor… İleti gönderiliyor Taslak kaydediliyor - Ekler alınıyor… + Ek alınıyor… *Şifreli* - Kişilerden Ekle - Kopya - Gizli Kopya + Kişilerden ekle + Cc + Bcc Kime Kimden - Yanıtla + Yanıt adresi <Bilinmeyen Alıcı> <Bilinmeyen Gönderici> Ev İş Diğer Mobil - Bu hesap için Taslak klasörü ayarlanmamış! - Bu hesap için bir anahtar yapılandırılmadı! Ayarlarınızı gözden geçirin. - Şifreleme sağlayıcısı uyumsuz uyarlama kullanıyor.Lütfen ayarlarınızı gözden geçirin! - Şifreleme sağlayıcısına bağlanılamadı, ayarlarınızı gözden geçirin veya yeniden denemek için şifreleme simgesine tıklayın! - Uçtan uca şifreleme başlatılamadı, lütfen ayarlarınızı gözden geçirin - PGP/INLINE kipi eklentileri desteklemez! + Bu hesap için Taslaklar klasörü yapılandırılmamış! + Bu hesap için anahtar yapılandırılmamış! Ayarlarınızı gözden geçirin. + Kripto sağlayıcısı uyumsuz bir sürüm kullanıyor. Lütfen ayarlarınızı gözden geçirin! + Kripto sağlayıcısına bağlanılamadı. Ayarlarınızı gözden geçirin veya yeniden denemek için şifreleme simgesine tıklayın. + Uçtan uca şifreleme başlatılamadı. Lütfen ayarlarınızı gözden geçirin + PGP/INLINE kipi dosya eklerini desteklemez! PGP/INLINE\'ı etkinleştir PGP/INLINE\'ı devre dışı bırak PGP yalnızca imza etkin PGP yalnızca imza devre dışı PGP/INLINE kipi - E-posta PGP/INLINE biçiminde gönderilir. -\nBu yalnızca uyumluluk için kullanılmalıdır: + E-posta PGP/INLINE biçiminde gönderilir.\nBu yalnızca uyumluluk için kullanılmalıdır: Bazı istemciler yalnızca bu biçimi destekler - Geçiş sırasında imzalar bozulabilir - Eklentiler desteklenmiyor + Aktarım sırasında imzalar bozulabilir + Dosya ekleri desteklenmez Anladım! - Devre dışı - Koruma etkinleştirildi + Devre dışı bırak + Etkin halde tut Anladım! - Devre dışı - Koruma etkinleştirildi + Devre dışı bırak + Etkin halde tut PGP Yalnızca İmza Kipi - Bu modda, PGP anahtarınız, şifrelenmemiş bir e-postanın şifreleme imzasını oluşturmak için kullanılacaktır. - Bu, e-postayı şifreli yapmaz, fakat sizin anahtarınızdan gönderildiğini doğrular. - İmzalar posta listelerine gönderildiğinde kırılabilir. + Bu modda PGP anahtarınız, şifrelenmemiş bir e-postanın kriptografik imzasını oluşturmak için kullanılacaktır. + Bu işlem e-postayı şifrelemez, sadece sizin anahtarınızdan gönderildiğini doğrular. + E-posta listelerine gönderilen imzalar bozulabilir. İmzalar bazı istemcilerde \'signature.asc\' ekleri olarak görüntülenebilir. Şifrelenmiş iletiler her zaman bir imza içerir. Düz metin uçtan uca imza bir hata içeriyor - İmza işlemi için ileti tamamen indirilmelidir + imzayı işlemek için ileti tamamen indirilmelidir desteklenmeyen uçtan uca imza içeriyor İleti şifreli, fakat desteklenmeyen bir biçim içinde. İleti şifreli, fakat şifre çözme iptal edildi. Uçtan uca imzalanmış düz metin doğrulanmış imzalayandan - İmzalı metin - uçtan uca anahtar gönderenle eşleşmedi - uçtan uca anahtarın süresi doldu - uçtan uca anahtar geçersiz kılındı - uçtan uca anahtar güvenli sayılamaz + İmzalı düz metin + ama uçtan uca anahtar gönderenle eşleşmedi + ama uçtan uca anahtarın süresi doldu + ama uçtan uca anahtar iptal edildi + ama uçtan uca anahtar güvenli sayılmıyor bilinmeyen uçtan uca anahtardan Şifreli - bir şifre çözme hatası var - şifre çözümü için ileti tamamen indirilmelidir - yapılandırılmış bir şifre uygulaması yok - Şifreli - uçtan uca değil - Uçtan Uca şifreli + ama bir deşifre hatası oluştu + deşifre için ileti tamamen indirilmelidir + ama yapılandırılmış kripto uygulaması yok + Şifreli + ama uçtan uca değil + Uçtan uca şifreli doğrulanmış göndericiden Şifreli bilinmeyen uçtan uca anahtardan - uçtan uca anahtar gönderenle eşleşmedi - uçtan uca anahtarın süresi doldu - uçtan uca anahtar geçersiz kılındı - uçtan uca anahtar güvenli sayılamaz - uçtan uca veri hataları var - ancak şifreleme güvenli olarak değerlendirilmedi + ama uçtan uca anahtar gönderenle eşleşmedi + ama uçtan uca anahtarın süresi doldu + ama uçtan uca anahtar iptal edilmiş + ama uçtan uca anahtar güvenli sayılmıyor + ama uçtan uca veri hataları var + ama şifreleme güvenli olarak değerlendirilmedi Kilidi aç Bu bölüm şifreli değil, güvensiz olabilir. Korunmasız Eklenti Yükleniyor… Şifre çözme iptal edildi. - Tekrar dene + Yeniden dene Şifre çözümü için şifreli iletiler indirilmelidir. E-posta şifre çözme hatası - Var olan özgün karakterler desteklenmiyor! + Özel karakterler henüz desteklenmiyor! Adres çözümleme hatası! Şifrelenmemiş imzaları gizle Yalnızca şifreli imzalar görüntülenecek @@ -758,9 +736,8 @@ Yalnızca imza kipinde şifreleme kullanılamaz! İmzasız Metin Bu e-posta şifreli - Bu e-posta OpenPGP ile şifrelendi. -\nOkumak için uyumlu bir OpenPGP uygulaması kurup yapılandırmalısınız. - Ayarlara Git + Bu e-posta OpenPGP ile şifrelendi.\nOkumak için uyumlu bir OpenPGP uygulaması yükleyip yapılandırmalısınız. + Ayarlara git Şifreleme yapılamaz @@ -779,9 +756,9 @@ İletiler normalde seçilerek veya şifrelenmiş bir iletiyi yanıtlarken şifrelenecektir. Hem gönderen hem de alıcının karşılıklı kipi etkinse, şifreleme öntanımlı olarak etkinleştirilir. Daha fazlasını öğrenmek için buraya tıkla . - Genel Ayarlar - Kurulu OpenPGP uygulaması yok - Kur + Genel ayarlar + Yüklenmiş OpenPGP uygulaması yok + Yükle İleti konularını şifrele Bazı alıcılar tarafından desteklenmeyebilir İç hata: Geçersiz hesap! @@ -879,7 +856,7 @@ İttirme Bilgileri Geniş Göster - Bir e-posta sohbetine ait iletiler için bildirim gösterme + E-posta sohbetlerine ait iletiler için bildirim gösterme İleti ayrıntıları yüklenirken bir hata oluştu. Kişilere ekle Kompakt @@ -888,7 +865,7 @@ Bir iletiyi sildikten veya taşıdıktan sonra İttirmeyi Devre Dışı Bırak Hesap kaldırılıyor… - İleti görünümünde ses tuşu ile gezinti + İleti görünümünde ses seviyesi düğmesiyle gezinti Yeni iletiler hakkında anlık bildirimlere ihtiyacınız yoksa, ittirmeyi devre dışı bırakmalı ve bilgi çekmeyi kullanmalısınız. Bilgi çekme, düzenli aralıklarla yeni e-posta olup olmadığını denetler ve bildirime ihtiyaç duymaz. Uzak resimleri göster Geçerli iletide kal @@ -905,7 +882,9 @@ Kullanım verileri ve teknik veriler Veri toplama Thunderbird\'ü daha iyi hale getirebilmemiz için bu uygulama hakkındaki performans, kullanım, donanım ve özelleştirme verilerini Mozilla ile paylaşır - İttirmeyi etkinleştir - Eşzamanlamayı etkinleştir + Anlık bildirimleri etkinleştir + Eşitlemeyi etkinleştir Gizli klasörleri göster + Klasörü göster + %s\'ü destekleyin \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-uk/strings.xml b/legacy/ui/legacy/src/main/res/values-uk/strings.xml index 22014608b5c..bef44fd1167 100644 --- a/legacy/ui/legacy/src/main/res/values-uk/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-uk/strings.xml @@ -7,7 +7,7 @@ The K-9 Dog Walkers Програмний код Ліцензія Apache версії 2.0 - Проект з відкритим кодом + Проєкт з відкритим кодом Сайт Отримати допомогу Форум @@ -17,27 +17,27 @@ Не вдалося завантажити список змін. Версія %s Що нового - Показувати останні зміни при оновленні додатка + Показувати останні зміни після оновлення застосунку - Дізнатися, що нового у цьому релізі + Дізнайтеся, що нового у цьому випуску Показати - Розробники + Автори Облікові записи - Написати новий лист + Написати Відповісти Відповісти всім Переслати Переслати як вкладення Вибрати теку - Посунути до… + Перемістити до… Копіювати до… - %d вибрано + Вибрано %d Надіслати - Не зазначено тему; натисніть знову, щоб відправити лист без теми + Не вказано тему, натисніть знову, щоб надіслати без неї Відповісти Відповісти всім Видалити @@ -50,21 +50,21 @@ Перемістити в Чернетки Перемістити… Готово - Скасувати зміни + Відкинути Зберегти як чернетку Перевірити пошту Надіслати повідомлення Оновити список тек Знайти теку Додати обліковий запис - Написати новий лист + Написати Пошук Шукати всюди Результати пошуку Нові повідомлення - Керування теками + Керувати теками Налаштування облікового запису - Видалити обліковий запис + Вилучити обліковий запис Позначити прочитаним Поділитися Вибрати відправника @@ -74,10 +74,10 @@ Відписатися Показати заголовки - Адресу скопійовано до комірки обміну - Адресу скопійовано до комірки обміну - Адреси скопійовано до комірки обміну - Адреси скопійовано до комірки обміну + Адресу скопійовано до буфера обміну + Адреси скопійовано до буфера обміну + Адреси скопійовано до буфера обміну + Адреси скопійовано до буфера обміну Текст теми скопійовано в буфер обміну Перемкнути на темну тему @@ -89,24 +89,23 @@ Додати вкладення Очистити Кошик Остаточно видалити - Про додаток + Про застосунок Налаштування - (Немає теми) + (Без теми) Немає відправника Завантаження повідомлень\u2026 Помилка з’єднання Повідомлення не знайдено Помилка завантаження повідомлення - Завантажити - ще %d листів + Завантажити \u0020ще %d наступних %.1f ГБ %.1f МБ %.1f кБ %d Б %d нове повідомлення - %d нових повідомлень + %d нові повідомлення %d нових повідомлень %d нових повідомлень @@ -119,57 +118,57 @@ Архівувати Архівувати всі Спам - Помилка сертифікату - Помилка сертифікату для %s - Перевірте налаштування вашого серверу - Помилка автентифікації - Помилка автентифікації для %s. Змініть налаштування сервера. + Помилка сертифіката + Помилка сертифіката для %s + Перевірте налаштування вашого сервера + Не вдалося автентифікувати + Збій автентифікації для %s. Змініть налаштування сервера. - Збій сповіщення + Помилка сповіщення - Під час створення системного сповіщення щодо нового повідомлення виникла помилка. Найчастіше це стається через відсутність звуку для сповіщення.\n\nТоркніться для переходу до налаштування сповіщення. + Сталася помилка під час створення системного сповіщення про нове повідомлення. Найчастіше це стається через відсутність звуку сповіщення.\n\nТоркніться, щоб відкрити налаштування сповіщень. Перевірка пошти: %1$s:%2$s Перевірка пошти Надсилання пошти: %s Надсилання пошти : - Синхронізувати (пуш) - Відображається під час очікування нових повідомлень + Синхронізація (Push) + Показується під час очікування нових повідомлень Повідомлення Сповіщення, пов\'язані з повідомленнями Різне - Різні сповіщення (про помилки тощо) - Не вдалося надіслати деякі повідомлення + Різні сповіщення, наприклад, про помилки тощо. + Не вдалося надіслати повідомлення Версія Увімкнути ведення журналу налагодження Записувати додаткову діагностичну інформацію Записувати конфіденційну інформацію - Може відображати паролі в журналах. - Експортувати журнали - Експорт успішний. Журнали можуть містити чутливі дані. Обачно обирайте адресата. + Може показувати паролі в журналах. + Експорт журналів + Експортовано. Журнали можуть містити конфіденційні дані. Будьте обачними щодо тих, кому їх надсилаєте. Не вдалося експортувати. Завантажити більше повідомлень - До:%s + Кому:%s Тема Текст повідомлення Підпис - -------- Вихідне повідомлення -------- + -------- Початкове повідомлення -------- Тема: Надіслано: Від: Кому: Копія: - %s написав(-ла): - %1$s, %2$s написав(-ла): + %s пише: + %1$s, %2$s пише: Додайте принаймні одного адресата. Поле адресата містить неповні дані! - У цього контакту не знайдено жодної адреси електронної пошти. - Деякі вкладення не можуть бути переслані, бо вони не завантажилися. - Повідомлення не може бути переслане, тому що деякі вкладення не завантажені. + Не вдалося знайти адресу е-пошти для цього контакту. + Деякі вкладення не можуть бути переслані, оскільки їх не завантажено. + Повідомлення не може бути переслане, оскільки деякі вкладення не завантажені. Включити цитоване повідомлення - Видалити цитований текст + Вилучити цитований текст Редагувати цитований текст - Видалити вкладення + Вилучити вкладення Кому: Копія: Прихована копія: @@ -182,14 +181,14 @@ мені Показати зображення - Не знайдено додаток для перегляду %s. - Завантажити усе повідомлення + Не знайдено переглядача %s. + Завантажити все повідомлення за допомогою %1$s Більше від цього відправника - Повідомлення скасовано + Повідомлення відкинуто Повідомлення збережено як чернетку Показувати зірочки - Зірочки показують відмічені повідомлення + Зірочки позначають обрані повідомлення Рядки попереднього перегляду Показувати імена відправників Показувати імена відправників замість їх електронних адрес @@ -197,35 +196,35 @@ Показувати імена відправників над темою, а не під нею Показувати імена контактів Використовувати імена одержувачів із Контактів, якщо це можливо - Позначати контакти кольором - Позначати кольором імена з вашого списку контактів + Забарвлювати контакти + Забарвлювати імена з вашого списку контактів Колір імені контакту Моноширинні шрифти - Використовувати моноширинний шрифт для відображення звичайних текстових повідомлень - Припасовувати текст повідомлень до ширини екрану - Стискати повідомлення до ширини екрану + Використовувати моноширинний шрифт для показу звичайних текстових повідомлень + Допасовувати текст повідомлень до ширини екрана + Стискати текст повідомлень до ширини екрана Підтвердження дій - Показати діалогове вікно щоразу, коли ви виконуєте вибрані дії + Показувати діалогове вікно щоразу, коли виконується вибрана дія Видалити - Видалити позначене зірочкою (при перегляді повідомлення) + Видалити позначене зірочкою (під час перегляду повідомлення) Спам - Скасувати повідомлення - Позначити всі повідомлення як прочитані + Відкинути повідомлення + Позначити всі повідомлення прочитаними Видалити (зі сповіщення) - Змахи + Жести - Змах вправо + Посування вправо - Змах вліво + Посування вліво - Жодна + Нічого - Перемкнути вибір + Вибрати лист Позначити прочитаним/непрочитаним - Додати/вилучити зірку + Додати/прибрати зірочку Архівувати @@ -238,21 +237,21 @@ Щільність Компактна Типова - Розслаблена - Приховати поштовий клієнт - Прибрати K-9 User-Agent з поштових заголовків - Приховати часову зону - Використовувати UTC замість місцевого часу в заголовках листів та відповідей + Вільна + Сховати поштовий клієнт + Прибрати User-Agent з заголовків пошти + Сховати часовий пояс + Використовувати UTC замість місцевого часу в заголовках пошти та відповідей Показувати кнопку \"Видалити\" Ніколи У сповіщенні з одним повідомленням Завжди Сповіщення на заблокованому екрані Без сповіщень на заблокованому екрані - Ім\'я додатку + Назва застосунку Лічильник нових повідомлень Кількість повідомлень і відправники - Так само, як і при розблокованому екрані + Так само як на розблокованому екрані Тиха Година Вимкнути звук, вібрацію та блимання у нічний час Вимкнути сповіщення @@ -263,36 +262,36 @@ Коли я видаляю повідомлення Не видаляти на сервері Видаляти на сервері - Позначити як прочитане на сервері + Позначати прочитаним на сервері Стирати видалені повідомлення на сервері Негайно - При опитуванні сервера + Під час опитування сервером Вручну - Назва теки Чернеток - Назва теки Надісланих - Назва теки Кошику - Назва теки Архіву - Назва теки Спам - Показувати лише теки, на які здійснено підписку + Тека «Чернетки» + Тека «Надіслані» + Тека «Кошик» + Тека «Архів» + Тека «Спам» + Показувати лише теки, на які ви підписані Автоматично відкривати теку Ніколи - Кожні 15 хвилин - Кожні 30 хвилин - Кожної години - Кожні 2 години - Кожні 3 години - Кожні 6 годин - Кожні 12 годин - Кожні 24 години + Що 15 хвилин + Що 30 хвилин + Щогодини + Що 2 години + Що 3 години + Що 6 годин + Що 12 годин + Щодоби Оновлювати з’єднання IMAP IDLE - Кожні 2 хвилини - Кожні 3 хвилини - Кожні 6 хвилин - Кожні 12 хвилин - Кожні 24 хвилини - Кожні 36 хвилин - Кожні 48 хвилин - Кожні 60 хвилин + Що 2 хвилини + Що 3 хвилини + Що 6 хвилин + Що 12 хвилин + Що 24 хвилини + Що 36 хвилин + Що 48 хвилин + Що 60 хвилин 10 повідомлень 25 повідомлень 50 повідомлень @@ -306,69 +305,63 @@ усі повідомлення Не можна копіювати чи переміщувати повідомлення, не синхронізоване з сервером Додатково - Параметри облікового запису + Налаштування облікового запису Сповіщення про нову пошту - Теки, щодо яких показуються сповіщення - Усі - Лише теки 1-го класу - Теки 1-го та 2-го класів - Усі, крім тек 2-го класу - Жодної Сповіщення про синхронізацію - Адреса вашої електронної пошти + Адреса вашої е-пошти Сповіщати у рядку стану про нові листи Сповіщати у рядку стану про перевірку пошти Включити вихідні повідомлення Показати сповіщення про надіслані мною повідомлення Лише контактам Показувати сповіщення лише для повідомлень від вже відомих контактів - Нехтувати повідомленнями розмови - Не показувати сповіщень про повідомлення поштової розмови + Ігнорувати повідомлення бесіди + Не показувати сповіщень про повідомлення поштової бесіди Позначати повідомлення прочитаним після відкриття Позначати повідомлення прочитаним після відкриття для перегляду Позначити прочитаним після видалення Позначити повідомлення прочитаним після видалення Категорії сповіщень Налаштуйте сповіщення для нових повідомлень - Налаштуйте сповіщення про помилки та статуси + Налаштуйте сповіщення про помилки та стани Завжди показувати зображення Ні Від контактів Від усіх Надсилання повідомлення - Цитувати повідомлення при відповіді на нього + Цитувати повідомлення під час відповіді на нього Включати оригінальне повідомлення у відповідь. Текст відповіді після цитованого тексту - Оригінальне повідомлення відобразиться над вашою відповіддю. - Видаляти підписи з цитованого повідомлення при відповіді - Підписи цитованого повідомлення будуть видалені при відповіді + Оригінальне повідомлення покажеться над вашою відповіддю. + Видаляти підписи у відповіді + Підписи вилучатимуться з цитованих повідомлень Формат повідомлення - Звичайний текст (видалити зображення та форматування) + Звичайний текст (вилучити зображення та форматування) HTML (зберігати зображення та форматування) Автоматичний (звичайний текст, якщо тільки не створюється відповідь на повідомлення HTML-формату) Завжди показувати поля \"Копія\" / \"Прихована копія\" Звіт про прочитання Завжди запитувати звіт про прочитання - Стиль цитування при відповіді + Стиль цитування відповіді Префікс (наприклад, Gmail) Заголовок (наприклад, Outlook) Вивантажити надіслані повідомлення Вивантажити повідомлення в теку \"Надіслані\" після надсилання Загальні налаштування - Читання повідомлення + Читання пошти Отримання пошти Теки Префікс цитованого тексту Наскрізне шифрування Увімкнути підтримку OpenPGP - Обрати додаток OpenPGP + Обрати застосунок OpenPGP Налаштувати ключ наскрізного шифрування - Не налаштовано жодного OpenPGP-додатку - Підключено до %s + Не налаштовано OpenPGP-застосунку + Під\'єднано до %s Налаштування… - Зберігати усі чернетки зашифрованими - Усі чернетки будуть зберігатися зашифрованими - Шифрувати чернетки тільки якщо шифрування увімкнено + Зберігати всі чернетки зашифрованими + Усі чернетки зберігатимуться зашифрованими + Шифрувати чернетки лише якщо шифрування ввімкнено Частота опитування тек Колір облікового запису Виберіть колір облікового запису для тек та списку облікових записів @@ -402,34 +395,19 @@ останні 3 місяці останні 6 місяців останній рік - Теки для відображення - Усі - Тільки теки 1-го класу - Теки 1-го та 2-го класу - Усі, крім тек 2-го класу - Теки для опитування - Усі - Тільки теки 1-го класу - Теки 1-го та 2-го класу - Усі, крім тек 2-го класу - Нічого Синхронізація видалень на сервері - Видаляти повідомлення синхронно з видаленням на сервері - Немає OpenPGP-додатка - він був видалений? + Вилучати повідомлення, коли вони видаляються на сервері + Немає OpenPGP-застосунку — чи був він видалений? Налаштування тек Показувати у верхній групі Показувати у верхній частині списку тек - Клас відображення теки - Без класу - 1-ий клас - 2-ий клас - Видалити локальні повідомлення + Очистити локальні повідомлення Сервер вхідної пошти Налаштувати сервер вхідної пошти Сервер вихідної пошти Налаштувати сервер вихідної пошти (SMTP) Ім’я облікового запису - Ваше ім’я + Ваше ім\'я Сповіщення Вібрація Вібрація @@ -440,7 +418,7 @@ Ритм 3 Ритм 4 Ритм 5 - Повторити вібрацію + Повторення вібрації Вимкнено Звук сповіщення про новий лист Спалах сповіщення @@ -455,91 +433,91 @@ Бірюзовий Рожевий Параметри створення повідомлень - Типові налаштування написання листів + Типові налаштування написання Встановити типові значення полів \"Від\", \"Прихована копія\" і підпис - Управління особами - Встановити альтернативні адреси \"Від\" та підписи - Управління особами - Управління особою - Редагувати особу + Керування особистостями + Установити альтернативні адреси \"Від\" та підписи + Керування особистостями + Керування особистістю + Змінити особистість Зберегти - Нова особа - Прихована копія усіх повідомлень до + Нова особистість + Прихована копія всіх повідомлень до Редагувати Пересунути вище Пересунути нижче Пересунути на початок / зробити типовою - Видалити - Опис особи - (Необов’язково) - Ваше ім’я - (Необов’язково) - Адреса електронної пошти + Вилучити + Опис особистості + (Необов\'язково) + Ваше ім\'я + (Необов\'язково) + Адреса е-пошти (Обов’язково) Відповідати на адресу - (Необов’язково) + (Необов\'язково) Підпис - (Обов’язково) + (Необов\'язково) Використовувати підпис Підпис - Початкова особа - Вибрати особу + Початкова особистість + Вибрати особистість Надіслати як - Не можна видалити останню особу - Не можна використовувати особу без адреси електронної пошти - Спершу старі повідомлення - Спершу нові повідомлення - Тема за алфавітом - Тема за алфавітом у зворотньому порядку - Відправники за алфавітом - Відправники за алфавітом в зворотньому порядку - Спершу повідомлення із зірочками + Не можна видалити останню особистість + Не можна використовувати особистість без адреси е-пошти + Спершу давніші повідомлення + Спершу новіші повідомлення + Тема за абеткою + Тема за абеткою у зворотному порядку + Відправники за абеткою + Відправники за абеткою у зворотному порядку + Спершу повідомлення з зірочками Спершу повідомлення без зірочок Спершу непрочитані повідомлення Спершу прочитані повідомлення Спершу повідомлення з вкладеннями Спершу повідомлення без вкладень Упорядкувати за… - датою - часом отримання - темою - відправником - наявністю зірочки - статусом прочитання - наявністю вкладень - Видалити обліковий запис + Датою + Часом отримання + Темою + Відправником + Наявністю зірочки + Станом прочитання + Наявністю вкладень + Вилучити обліковий запис Назва теки містить Розташування підпису - перед цитованим повідомленням - після цитованого повідомлення - Використовувати тему додатку + Перед цитованим повідомленням + Після цитованого повідомлення + Використовувати тему застосунку Темна Світла Типова системна Екран Глобальні - Відлагодження - Конфіденційність + Налагодження + Приватність Мережа Взаємодія Список облікових записів Списки повідомлень Повідомлення Тема - Тема екрану перегляду повідомлення - Тема екрану створення повідомлення + Тема екрана перегляду повідомлень + Тема екрана створення повідомлень Мова Налаштування не знайдені Фіксована тема повідомлення - Виберіть тему екрану перегляду повідомлення під час перегляду повідомлення + Виберіть тему екрана перегляду повідомлення під час перегляду повідомлення Використовувати фіксовану тему перегляду повідомлення - Системна (System default) + Типова системна Фонова синхронізація Ніколи Завжди - Коли \"Автосинхронізація\" увімкнена - Вибрати усе - Найбільша кількість тек для перевірки при надсиланні + Коли ввімкнена \"Автосинхронізація\" + Вибрати все + Найбільша кількість тек push-перевірки 5 тек 10 тек 25 тек @@ -573,7 +551,7 @@ Отримувачі Тема Час і дата - Тіло повідомлення + Вміст повідомлення Створення повідомлення Поля для вводу тексту Типовий @@ -584,17 +562,17 @@ Середній Великий Більший - Для цієї дії не знайдено відповідного додатку. - Помилка відправки: %s + Для цієї дії не знайдено відповідного застосунку. + Не вдалося надіслати: %s Зберегти чернетку повідомлення? - Зберегти чи Скасувати це повідомлення? + Зберегти чи Відкинути це повідомлення? Зберегти чи Скасувати зміни? - Скасувати повідомлення? - Ви дійсно хочете скасувати це повідомлення? + Відкинути повідомлення? + Ви дійсно хочете відкинути це повідомлення? Очистити локальні повідомлення? - Це видалить всі локальні повідомлення з теки. Жодне повідомлення не буде видалене з сервера. + Це вилучить всі локальні повідомлення з теки. Жодне повідомлення не буде видалене з сервера. Очистити повідомлення - Підтвердіть видалення + Підтвердьте видалення Ви хочете видалити це повідомлення? Ви дійсно хочете видалити це повідомлення? @@ -604,18 +582,18 @@ Так Ні - Підтвердіть позначення усіх повідомлень прочитаними - Хочете позначити усі повідомлення прочитаними? - Підтвердіть очищення кошика + Підтвердьте позначення всіх повідомлень прочитаними + Хочете позначити всі повідомлення прочитаними? + Підтвердьте очищення кошика Ви хочете очистити теку \"Кошик\"? Так Ні - Підтвердіть переміщення в теку \"Спам\" + Підтвердьте переміщення в теку \"Спам\" Ви дійсно хочете перемістити це повідомлення в спам? - Ви дійсно хочете перемістити %1$d повідомлень у спам? + Ви дійсно хочете перемістити %1$d повідомлення у спам? Ви дійсно хочете перемістити %1$d повідомлень у спам? - Ви дійсно хочете перемістити %1$d повідомлень у теку \"Спам\"? + Ви дійсно хочете перемістити %1$d повідомлень у спам? Так Ні @@ -625,8 +603,8 @@ Експорт налаштувань Експорт Поділитися - Експортуються налаштування… - Налаштування успішно експортовані + Налаштування експортуються… + Налаштування експортовані Не вдалося експортувати налаштування Нема тексту Відкрити посилання @@ -641,15 +619,15 @@ Завантажити зображення Копіювати посилання на зображення до буфера обміну Посилання на зображення - Подзвонити за номером + Зателефонувати за номером Зберегти до Контактів - Копіювати телефонний номер до буфера обміну - Телефонний номер + Копіювати номер телефону до буфера обміну + Номер телефону Надіслати листа Зберегти до Контактів Копіювати електронну адресу до буфера обміну - Електронна адреса - Всі + Адреса е-пошти + Усі 10 25 50 @@ -671,27 +649,27 @@ Отримання %1$d з %2$d результатів Отримання %1$d з %2$d результатів - Віддалений пошук не вдався + Збій віддаленого пошуку Пошук Шукати повідомлення на сервері Для пошуку на сервері необхідне з\'єднання з мережею. - Змінювати колір при прочитанні - Інший колір фону буде означати, що повідомлення прочитане + Змінювати колір після прочитання + Інший колір тла означатиме, що повідомлення прочитане Групування повідомлень Групувати повідомлення у діалоги Оновлення баз даних Оновлення баз даних… - Оновлення баз даних облікового запису \"%s\" + Оновлення баз даних облікового запису \"%s\" Перегляд на розділеному екрані Завжди Ніколи Коли в альбомній орієнтації Будь ласка, виберіть повідомлення зліва Показувати зображення контактів - Показувати зображення контактів в списку повідомлень - Позначити усе прочитаним - Позначати кольором зображення контактів - Позначати кольором зображення відсутніх контактів + Показувати зображення контактів у списку повідомлень + Позначити все прочитаним + Забарвити зображення контактів + Забарвити зображення відсутніх контактів Видимі дії над повідомленням Показувати вибрані дії в меню перегляду повідомлень Завантаження вкладення… @@ -714,29 +692,29 @@ Мобільний Теку \"Чернетки\" не налаштовано для цього облікового запису! Ключ не налаштовано для цього облікового запису! Перевірте налаштування. - Криптопровайдер використовує несумісну версію. Перевірте свої налаштування. - Не можу з\'єднатися з провайдером шифрування; перевірте ваші налаштування або натисніть значок шифрування, щоб спробувати знову! - Не вдалося ініціалізувати наскрізне шифрування. Перевірте свої налаштування. + Криптопровайдер використовує несумісну версію. Перевірте свої налаштування! + Не можу з\'єднатися з криптопровайдером, перевірте ваші налаштування або натисніть на піктограму шифрування, щоб спробувати знову! + Не вдалося ініціалізувати наскрізне шифрування. Перевірте свої налаштування Режим PGP/INLINE не підтримує вкладення! Увімкнути PGP/INLINE Вимкнути PGP/INLINE Увімкнути PGP Sign-Only Вимкнути PGP Sign-Only Режим PGP/INLINE - Електронний лист буде відправлено в форматі PGP/INLINE.\nВикоритовуйте лише з метою забезпечення сумісності: + Електронний лист буде надіслано у форматі PGP/INLINE.\nВикористовуйте лише для сумісності: Деякі клієнти підтримують лише цей формат - Підписи можуть ламатися під час передачі + Підписи можуть ламатися під час передавання Вкладення не підтримуються Зрозуміло! Вимкнути - Залишити увімкненим + Залишити ввімкненим Зрозуміло! Вимкнути - Залишити увімкненим + Залишити ввімкненим Режим PGP Sign-Only - У цьому режимі ваш PGP-ключ буде використаний для створення криптографічного підпису незашифрованого електронного листа. + У цьому режимі ваш PGP-ключ буде використаний для створення криптографічного підпису незашифрованої е-пошти. Це не шифрує електронний лист, але засвідчує, що він був надісланий від вашого ключа. - Підписи можуть бути пошкоджені при надсиланні листа у списки розсилки. + Підписи можуть бути пошкоджені під час надсилання листа у списки розсилки. Деякі клієнти можуть відображати підписи як вкладення \'signature.asc\'. Зашифровані листи завжди містять підпис. Простий текст @@ -748,23 +726,23 @@ Звичайний текст, підписаний наскрізним шифруванням від перевіреного підписувача Підписаний звичайний текст - але ключ наскрізного шифрування не співпав з ключем відправника - але термін дійсності ключа наскрізного шифрування минув + але ключ наскрізного шифрування не збігається з ключем відправника + але ключ наскрізного шифрування не чинний але ключ наскрізного шифрування відкликано але ключ наскрізного шифрування не вважається безпечним від невідомого ключа наскрізного шифрування Зашифровано але виникла помилка розшифрування - необхідно повністю завантажити повідомлення для розшифровки - але не налаштовано жодного криптографічного додатку + необхідно повністю завантажити повідомлення для розшифрування + але не налаштовано жодного криптографічного застосунку Зашифровано - але не наскрізне + але не наскрізним шифруванням Зашифровано наскрізним шифруванням від перевіреного відправника Зашифровано від невідомого ключа наскрізного шифрування - але ключ наскрізного шифрування не співпав з ключем відправника - але термін дійсності ключа наскрізного шифрування минув + але ключ наскрізного шифрування не збігається з ключем відправника + але ключ наскрізного шифрування не чинний але ключ наскрізного шифрування відкликано але ключ наскрізного шифрування не вважається безпечним але зашифрована наскрізним шифруванням інформація містить помилки @@ -774,44 +752,44 @@ Незахищене вкладення Завантаження… Розшифровування скасовано. - Спробувати знову - Для розшифровування зашифроване повідомлення необхідно завантажити. - Помилка під час розшифровування електронного листа + Повторити спробу + Щоб розшифрувати, зашифроване повідомлення потрібно завантажити. + Помилка розшифрування е-пошти Спеціальні символи наразі не підтримуються! Помилка розбору адреси! - Приховати незашифровані підписи - Тільки зашифровані підписи будуть відображені - Усі підписи будуть відображені - Шифрування недоступне у режимі PGP Sign-Only + Сховати незашифровані підписи + Будуть показані лише зашифровані підписи + Будуть показані всі підписи + Шифрування недоступне у режимі Лише підпис! Непідписаний Текст Цей електронний лист зашифровано - Цей електронний лист було зашифровано за допомогою OpenPGP.\nЩоб його прочитати, необхідно встановити та налаштувати сумісний OpenPGP-додаток. + Цей електронний лист зашифровано за допомогою OpenPGP.\nЩоб його прочитати, необхідно встановити та налаштувати сумісний OpenPGP-застосунок. Перейти до Налаштувань Шифрування неможливе - Деякі з вибраних адресатів не підтримують цю функцію. + Деякі з вибраних адресатів не підтримують цю функцію! Увімкнути шифрування Вимкнути шифрування Шифрування повідомлень гарантує, що вони можуть бути прочитані адресатом, і ніким іншим. - Можливість шифрування відображатиметься лише в тому випадку, якщо його підтримують усі адресати і якщо вони раніше надсилали вам електронного листа. - Перемкніть шифрування цією піктограмою. + Можливість шифрування показуватиметься лише якщо його підтримують усі адресати, і якщо вони раніше надсилали вам е-пошту. + Перемкніть шифрування, натисканням на цю піктограму. Зрозуміло Назад Вимкнути шифрування Шифрування OpenPGP Автоматичне шифрування у режимі взаємності Автоматичне шифрування у режимі взаємності - Повідомлення будуть шифруватися за вашим вибором або при відповіді на шифроване повідомлення. + Повідомлення шифруватимуться за вашим вибором або під час відповіді на зашифроване повідомлення. Якщо і відправник, і адресат увімкнуть режим взаємності, шифрування типово буде увімкнене. Ви можете перейти сюди, щоб дізнатися більше. Загальні налаштування - Не встановлено додатка OpenPGP - Встановити + Не встановлено OpenPGP-застосунку + Установити Шифрувати теми повідомлень Може не підтримуватися деякими адресатами Внутрішня помилка: Недійсний обліковий запис! - Помилка підключення до %s! + Помилка під\'єднання до %s! Надіслати Повідомлення з Налаштуваннями Автоматичного Шифрування Безпечно поділитися налаштуваннями наскрізного шифрування з іншими пристроями Повідомлення з Налаштуваннями Автоматичного Шифрування @@ -829,21 +807,21 @@ Ви можете зберегти це повідомлення і використовувати його як резервну копію вашого секретного ключа. Якщо ви хочете це зробити, запишіть пароль і збережіть його у надійному місці.
- При надсиланні повідомлення сталася помилка. Перевірте підключення до мережі та налаштування вихідного сервера. + Сталася помилка під час надсилання повідомлення. Перевірте під\'єднання до мережі та налаштування вихідного сервера. Увімкнено Вимкнено - Сталася помилка при завантаженні даних + Сталася помилка під час завантаження даних Ініціалізація… Очікування нових листів Очікування дозволу на фонову синхронізацію - Очікування наявності мережі + Очікування доступності мережі Натисніть, щоб дізнатися більше. - Інформація про сповіщення - Тим не менш, Android також дозволяє приховати сповіщення. - Дізнатися більше + Інформація про Push + Однак Android також дозволяє сховати сповіщення. + Докладніше Налаштувати сповіщення - Якщо вам не потрібне миттєве сповіщення про нові повідомлення, вам варто вимкнути Push і використовувати Polling. Polling перевіряє пошту з регулярними інтервалами і не потребує сповіщення. - Вимкнути пуш-сповіщення + Якщо вам не потрібне миттєве сповіщення про нові повідомлення, вам варто вимкнути Push і використовувати Polling. Polling перевіряє пошту з регулярною частотою і не потребує сповіщення. + Вимкнути Push Вибрати @@ -865,19 +843,19 @@ Перемістити… - Показати плаваючу кнопку створення повідомлення + Показати пливучу кнопку створення повідомлення Помилка - Папка не знайдена + Теку не знайдено - Деталі повідомлення + Подробиці повідомлення Відсутній заголовок \'Дата\' Від - відправником + Відправник Відповісти до @@ -887,28 +865,44 @@ Прихована копія - Виникла помилка під час завантаження деталей повідомлення. + Виникла помилка під час завантаження подробиць повідомлення. Додати до контактів Написати лист - Скопіювати адресу ел. пошти + Скопіювати адресу е-пошти Скопіювати ім\'я та адресу ел. пошти - Електронна адреса + Адреса е-пошти - Ім\'я та адреса ел. пошти + Ім\'я та адреса е-пошти - Видалення облікового запису… + Вилучення облікового запису… - Непрочитані, %s + непрочитані, %s Залишатися на поточному повідомленні - Повернутися в список повідомлень - Після позначання повідомлення як непрочитане - Повернутися в список повідомлень + Повертатися до списку повідомлень + Після позначання повідомлення непрочитаним + Повертатися до списку повідомлень Показувати попереднє повідомлення Показувати наступне повідомлення Після видалення або переміщення повідомлення + Команда Thunderbird Mobile + Сповіщення + Увімкнути Push + Збір даних + Про %s + Увімкнути синхронізацію + Показати приховані теки + Показати теку + Підтримка %s + Обліковий запис\"%s\" буде вилучено з %s. + Застосунок OpenKeychain необхідний для підтримки наскрізного шифрування. + Відсутній дозвіл на планування оповіщень + Торкніться, щоб надати дозвіл. + Коли використовується Push, %1$s підтримує з\'єднання з поштовим сервером. Android вимагає показу поточного сповіщення під час фонової роботи застосунку. %2$s + Використання та технічні дані + Обмінюється з Mozilla даними про швидкодію, використання, апаратне забезпечення та налаштування цього застосунку, щоб допомогти нам зробити Thunderbird кращим \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-vi/strings.xml b/legacy/ui/legacy/src/main/res/values-vi/strings.xml index b3daee7feeb..7e40f4abf73 100644 --- a/legacy/ui/legacy/src/main/res/values-vi/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-vi/strings.xml @@ -261,11 +261,9 @@ Không bao giờ Nâng cao Thiết lập tài khoản thư - Không thiết đặt Gửi thư Xác nhận đã đọc Thư mục - Không thiết đặt Cấu hình thư mục Xóa sạch thư lưu cục bộ Mặc định @@ -394,14 +392,11 @@ Danh mục thông báo Bao gồm tin nhắn gốc trong thư trả lời của bạn. Thông báo trên thanh trạng thái khi thư được kiểm tra - Tất cả ngoại trừ thư mục hạng 2 Đánh dấu thư là đã đọc khi nó bị xóa Thông báo thư mới Địa chỉ email của bạn Đánh dấu tin nhắn là đã đọc khi nó được mở để xem - Thư mục thông báo Từ danh bạ - Chỉ các thư mục hạng 1 Từ bất cứ ai Trích dẫn tin nhắn khi trả lời đến %s @@ -411,13 +406,11 @@ Không hiển thị thông báo cho các tin nhắn thuộc cuộc trò chuyện qua email Bao gồm thư đi Đánh dấu là đã đọc khi xóa - Tất cả Thông báo trên thanh trạng thái khi có thư đến Không Luôn hiển thị hình ảnh Khi đang thăm dò Bỏ qua tin nhắn trò chuyện - Thư mục hạng 1 và hạng 2 Đồng bộ hóa thông báo Định cấu hình thông báo lỗi và trạng thái Chỉ các liên hệ @@ -426,15 +419,12 @@ 512 KiB năm ngoái 1 MiB - Chỉ các thư mục Hạng 1 Hiển thị ở nhóm trên cùng Tin nhắn gốc sẽ xuất hiện phía trên thư trả lời của bạn. Thiết lập tổng quan - Thư mục hạng 1 và hạng 2 Đã kết nối với %s 2 ngày qua 3 ngày qua - Thư mục hạng 1 và hạng 2 3 tháng qua Văn bản thuần túy (loại bỏ hình ảnh và định dạng) Đồng bộ tin nhắn từ @@ -456,41 +446,32 @@ Luôn yêu cầu biên nhận đã đọc 2 tuần qua mọi kích thước (không giới hạn) - Tất cả ngoại trừ thư mục Hạng 2 Luôn hiển thị Cc/Bcc - Tất cả Chọn ứng dụng OpenPGP Tải lên tin nhắn đã gửi Đang tìm nạp thư Không có ứng dụng OpenPGP nào được định cấu hình - Thư mục thăm dò Tiền tố văn bản được trích dẫn Đã xảy ra lỗi khi tải chi tiết tin nhắn. Thiếu ứng dụng OpenPGP - nó đã được gỡ cài đặt chưa? 6 tháng qua - Chỉ các thư mục Hạng 1 16 KiB 2 MiB Định dạng tin nhắn tuần trước Thêm vào danh bạ - Tất cả ngoại trừ thư mục Hạng 2 2 tháng qua - Thư mục để hiển thị Tần suất thăm dò thư mục 128 KiB 4 KiB Loại bỏ tin nhắn khi bị xóa trên máy chủ Mã hóa đầu cuối Tự động - Lớp hiển thị thư mục Bỏ chữ ký khi trả lời 3 tuần qua Tiêu đề (như Outlook) 2 KiB - Không có lớp 32 KiB - Tất cả tháng trước 5 MiB bất cứ lúc nào (không giới hạn) @@ -679,8 +660,6 @@ Đang ngủ cho đến khi đồng bộ nền được cho phép Đang ngủ đến khi có kết nối mạng Thông tin Đẩy - Hạng 1 - Hạng 2 Máy chủ thư đi Kiểu mẫu 1 Kiểu mẫu 4 diff --git a/legacy/ui/legacy/src/main/res/values-zh-rCN/strings.xml b/legacy/ui/legacy/src/main/res/values-zh-rCN/strings.xml index eef21c76d19..4500aabe63c 100644 --- a/legacy/ui/legacy/src/main/res/values-zh-rCN/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-zh-rCN/strings.xml @@ -303,12 +303,6 @@ 高级 账号设置 新邮件通知 - 通知文件夹 - 全部 - 仅 1 级文件夹 - 1 级和 2 级文件夹 - 除 2 级文件夹外的所有文件夹 - 同步通知 您的电子邮件地址 邮件到达时在状态栏中通知 @@ -397,27 +391,12 @@ 最近 3 个月 最近 6 个月 最近 1 年 - 要显示的文件夹 - 全部 - 仅 1 级文件夹 - 1 级与 2 级文件夹 - 除 2 级文件夹外的所有文件夹 - 轮询文件夹 - 全部 - 仅 1 级文件夹 - 1 级与 2 级文件夹 - 除 2 级文件夹外的所有文件夹 - 同步服务器的删除 在服务器上删除邮件时移除邮件 缺少 OpenPGP 应用 - 是否已卸载? 文件夹设置 显示在置顶的组中 显示在文件夹列表的顶部附近 - 文件夹显示级别 - 无级别 - 1 级 - 2 级 清空本地邮件 收件服务器 配置收件服务器 @@ -905,4 +884,6 @@ 启用推送 启用同步 显示隐藏的文件夹 + 显示文件夹 + 支持 %s \ No newline at end of file diff --git a/legacy/ui/legacy/src/main/res/values-zh-rTW/strings.xml b/legacy/ui/legacy/src/main/res/values-zh-rTW/strings.xml index a50d4f8b92b..5521cb0acbf 100644 --- a/legacy/ui/legacy/src/main/res/values-zh-rTW/strings.xml +++ b/legacy/ui/legacy/src/main/res/values-zh-rTW/strings.xml @@ -301,12 +301,6 @@ 進階 帳號設定 新郵件通知 - 通知信件匣 - 全部 - 僅第一類信件匣 - 第一類與第二類信件匣 - 不包括下層信件匣 - 同步通知 您的電子郵件地址 新郵件到達時在通知欄中顯示通知 @@ -395,27 +389,12 @@ 三個月內 六個月內 一年內 - 顯示的信件匣 - 全部 - 僅第一類信件匣 - 第一類與第二類信件匣 - 不包括下層文件匣 - 檢查信件匣 - 全部 - 僅第一類信件匣 - 第一類與第二類信件匣 - 不包括下層信件匣 - 同步伺服器上的刪除 刪除在伺服器上被刪除的郵件的本地複製 未發現 OpenPGP 應用程式 - 它已被解除安裝了嗎? 信件匣設定 顯示在置頂的組中 顯示在置頂的組之後 - 信件匣顯示層別 - 不分類 - 第一類 - 下層 清除本地郵件 內送伺服器 設定內送伺服器 From 7902a9c709fa34b8768c962db4d26988cfda81c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Tue, 15 Oct 2024 18:45:32 +0200 Subject: [PATCH 12/45] Change the drawer account selector to be shown by default --- .../app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt | 2 +- .../k9mail/feature/navigation/drawer/ui/DrawerStateTest.kt | 2 +- .../feature/navigation/drawer/ui/DrawerViewModelTest.kt | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt index 877d96c674e..ecceccb3a52 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt @@ -23,7 +23,7 @@ internal interface DrawerContract { val selectedAccountUuid: String? = null, val folders: ImmutableList = persistentListOf(), val selectedFolderId: String? = null, - val showAccountSelector: Boolean = false, + val showAccountSelector: Boolean = true, val isLoading: Boolean = false, ) diff --git a/feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerStateTest.kt b/feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerStateTest.kt index 243b6fc54b9..14421045ecf 100644 --- a/feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerStateTest.kt +++ b/feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerStateTest.kt @@ -23,7 +23,7 @@ internal class DrawerStateTest { selectedAccountUuid = null, folders = persistentListOf(), selectedFolderId = null, - showAccountSelector = false, + showAccountSelector = true, isLoading = false, ), ) diff --git a/feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerViewModelTest.kt b/feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerViewModelTest.kt index 493fb8c8c13..3e13ea534ee 100644 --- a/feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerViewModelTest.kt +++ b/feature/navigation/drawer/src/test/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerViewModelTest.kt @@ -368,11 +368,11 @@ internal class DrawerViewModelTest { testSubject.event(Event.OnAccountSelectorClick) - assertThat(turbines.awaitStateItem()).isEqualTo(State(showAccountSelector = true)) + assertThat(turbines.awaitStateItem()).isEqualTo(State(showAccountSelector = false)) testSubject.event(Event.OnAccountSelectorClick) - assertThat(turbines.awaitStateItem()).isEqualTo(State(showAccountSelector = false)) + assertThat(turbines.awaitStateItem()).isEqualTo(State(showAccountSelector = true)) } @Test From c99b29ff8ebe394bb3638b8b273223915088f53c Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 15 Oct 2024 19:30:08 +0200 Subject: [PATCH 13/45] Update release badging --- app-k9mail/badging/release-badging.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app-k9mail/badging/release-badging.txt b/app-k9mail/badging/release-badging.txt index ea7a9e5f7a0..e8c7c7dd9dc 100644 --- a/app-k9mail/badging/release-badging.txt +++ b/app-k9mail/badging/release-badging.txt @@ -68,8 +68,8 @@ application-label-sv:'K-9 Mail' application-label-tr:'K-9 Posta' application-label-uk:'K-9 Mail' application-label-vi:'Thư K-9' -application-label-zh:'K-9 邮件' -application-label-zh-CN:'K-9 邮件' +application-label-zh:'K-9 Mail' +application-label-zh-CN:'K-9 Mail' application-label-zh-TW:'K-9 Mail' application-icon-120:'res/drawable-v26/ic_launcher.xml' application-icon-160:'res/drawable-v26/ic_launcher.xml' From ec38adc8d05f2fe48fd4e60897ea9776f1f875b0 Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Tue, 15 Oct 2024 12:00:06 +0200 Subject: [PATCH 14/45] Make release automation script more useful --- .github/workflows/shippable_builds.yml | 4 + scripts/setup_release_automation | 187 +++++++++++-------------- 2 files changed, 83 insertions(+), 108 deletions(-) diff --git a/.github/workflows/shippable_builds.yml b/.github/workflows/shippable_builds.yml index 2e258565e1a..cbe8134fccb 100644 --- a/.github/workflows/shippable_builds.yml +++ b/.github/workflows/shippable_builds.yml @@ -61,6 +61,10 @@ jobs: let skipThunderbird = process.env.skipThunderbird == "true"; let skipK9Mail = process.env.skipK9Mail == "true"; + if (!matrix.every(item => !!item.appName && !!item.packageFormat)) { + core.setFailed("MATRIX_INCLUDE is missing appName or packageFormat"); + } + let matrixFull = matrix.filter(item => { return !((item.appName == "k9mail" && skipK9Mail) || (item.appName == "thunderbird" && skipThunderbird)); diff --git a/scripts/setup_release_automation b/scripts/setup_release_automation index 55adc6beba9..43bdff59e1d 100644 --- a/scripts/setup_release_automation +++ b/scripts/setup_release_automation @@ -1,6 +1,7 @@ #!/usr/bin/env python # See docs/CI/Release_Automation.md for more details +# Run this from the .signing directory with all the keys and properties files in it. # python -m venv venv; source venv/bin/activate; pip install requests, pynacl @@ -75,46 +76,38 @@ CHANNEL_ENVIRONMENTS = { SIGNING_ENVIRONMENTS = { - "k9mail_release_default": [ - "k9.release.signing.properties", - "k9-release-signing.jks", - "release", - ], - "k9mail_beta_default": [ - "k9.release.signing.properties", - "k9-release-signing.jks", - "beta", - ], - "thunderbird_daily_foss": [ - "tb.daily.signing.properties", - "tb-daily-signing.jks", - "daily", - ], - "thunderbird_daily_full": [ - "tb.daily.upload.properties", - "tb-daily-upload-01.jks", - "daily", - ], - "thunderbird_beta_foss": [ - "tb.beta.signing.properties", - "tb-beta-signing.jks", - "beta", - ], - "thunderbird_beta_full": [ - "tb.beta.upload.properties", - "tb-beta-upload-01.jks", - "beta", - ], - "thunderbird_release_foss": [ - "tb.release.signing.properties", - "tb-release-signing.jks", - "release", - ], - "thunderbird_release_full": [ - "tb.release.upload.properties", - "tb-release-upload-01.jks", - "release", - ], + "k9mail_release_default": { + "props": "k9.release.signing.properties", + "branch": "release", + }, + "k9mail_beta_default": { + "props": "k9.release.signing.properties", + "branch": "beta", + }, + "thunderbird_daily_foss": { + "props": "tb.daily.signing.properties", + "branch": "main", + }, + "thunderbird_daily_full": { + "props": "tb.daily.upload.properties", + "branch": "main", + }, + "thunderbird_beta_foss": { + "props": "tb.beta.signing.properties", + "branch": "beta", + }, + "thunderbird_beta_full": { + "props": "tb.beta.upload.properties", + "branch": "beta", + }, + "thunderbird_release_foss": { + "props": "tb.release.signing.properties", + "branch": "release", + }, + "thunderbird_release_full": { + "props": "tb.release.upload.properties", + "branch": "release", + }, } @@ -306,7 +299,7 @@ def create_approver_environment(repo, environment_name, approvers): ) -def create_signing_environment(repo, environment, branch, props_file, jks_file): +def create_signing_environment(repo, environment, branch, props_file): # Read the key.properties file key_props = read_key_properties(props_file) @@ -321,7 +314,7 @@ def create_signing_environment(repo, environment, branch, props_file, jks_file): return # Base64 encode the JKS file to create SIGNING_KEY - SIGNING_KEY = encode_jks_file(jks_file) + SIGNING_KEY = encode_jks_file(key_props.get("storeFile")) # Create the environment if it doesn't exist create_github_environment(repo, environment, branch=branch) @@ -356,17 +349,6 @@ def main(): parser = argparse.ArgumentParser( description="Set GitHub environment secrets for specific or all environments." ) - parser.add_argument( - "--props", - "-p", - help="Path to the key.properties file (for single environment).", - ) - parser.add_argument( - "--jks", "-j", help="Path to the .jks keystore file (for single environment)." - ) - parser.add_argument( - "--environment", "-e", help="GitHub environment name (for single environment)." - ) parser.add_argument( "--repo", "-r", @@ -374,14 +356,10 @@ def main(): help="GitHub repository in the format 'owner/repo'.", ) parser.add_argument( - "--all-environments", - "-a", - action="store_true", - help="Create all environments based on predefined paths and rules.", + "--skip", "-s", action="append", help="Skip this named environment" ) - parser.add_argument("--branch", "-b", help="Branch to limit the environment to") parser.add_argument( - "--skip", "-s", action="append", help="In all mode, skip this environment", default=[] + "--only", "-o", action="append", help="Only include this named environment" ) args = parser.parse_args() @@ -393,60 +371,53 @@ def main(): "GITHUB_TOKEN environment variable is not set. Please set it before running the script." ) - if args.all_environments: - skipset = set(args.skip) - # All environments creation mode - if "publish_hold" in skipset: - print("Skipping environment publish_hold") - else: - create_github_environment( - args.repo, "publish_hold", approvers=PUBLISH_APPROVERS - ) + if args.skip and args.only: + print("Error: Cannot supply both skip and only") + return - # Channel environments - for environment_name, data in CHANNEL_ENVIRONMENTS.items(): - if environment_name in skipset: - print(f"Skipping channel environment {environment_name}") - continue + includeset = set( + list(CHANNEL_ENVIRONMENTS.keys()) + + list(SIGNING_ENVIRONMENTS.keys()) + + list( + "publish_hold", + ) + ) + if args.skip: + for skip in args.skip: + includeset.remove(skip) - create_github_environment( - args.repo, environment_name, branch=data["branch"] - ) + if args.only: + includeset = set(args.only) - for name, value in data["variables"].items(): - if isinstance(value, dict) or isinstance(value, list): - value = json.dumps(value) - set_github_environment_variable( - args.repo, name, value, environment_name - ) - - # Signing environments - for environment_name, paths in SIGNING_ENVIRONMENTS.items(): - if environment_name in skipset: - print(f"Skipping signing environment {environment_name}") - continue - - props_file, jks_file, branch = paths - - if not os.path.exists(props_file) or not os.path.exists(jks_file): - print( - f"Skipping {environment_name}: Missing key.properties or .jks file." - ) - continue - - create_signing_environment( - args.repo, environment_name, branch, props_file, jks_file - ) - else: - # Single environment creation mode - if not all([args.props, args.jks, args.environment, args.branch]): - print( - "Error: You must provide --props, --jks, and --environment for single environment creation." - ) - return + # Publish hold environment + if "publish_hold" in includeset: + create_github_environment( + args.repo, "publish_hold", approvers=PUBLISH_APPROVERS + ) + + # Channel environments + for environment_name, data in CHANNEL_ENVIRONMENTS.items(): + if environment_name not in includeset: + continue + + create_github_environment(args.repo, environment_name, branch=data["branch"]) + + for name, value in data["variables"].items(): + if isinstance(value, dict) or isinstance(value, list): + value = json.dumps(value) + set_github_environment_variable(args.repo, name, value, environment_name) + + # Signing environments + for environment_name, data in SIGNING_ENVIRONMENTS.items(): + if environment_name not in includeset: + continue + + if not os.path.exists(data["props"]): + print(f"Skipping {environment_name}: Missing key .properties file") + continue create_signing_environment( - args.repo, args.environment, args.branch, args.props, args.jks + args.repo, environment_name, data["branch"], data["props"] ) From 3ab2c288cdbceeda65eab08ec269030d57e6d6ca Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Tue, 15 Oct 2024 12:00:14 +0200 Subject: [PATCH 15/45] Play Store Upload --- .github/workflows/shippable_builds.yml | 155 +++++++++++++++++-------- scripts/setup_release_automation | 70 ++++++++--- 2 files changed, 164 insertions(+), 61 deletions(-) diff --git a/.github/workflows/shippable_builds.yml b/.github/workflows/shippable_builds.yml index cbe8134fccb..6f2e434e57e 100644 --- a/.github/workflows/shippable_builds.yml +++ b/.github/workflows/shippable_builds.yml @@ -10,7 +10,12 @@ on: skipK9Mail: type: boolean description: Skip building K-9 Mail - + skipGooglePlay: + type: boolean + description: Skip Google Play Publish + draftGooglePlay: + type: boolean + description: Don't send changes for review (Google Play) jobs: get_environment: @@ -44,7 +49,6 @@ jobs: environment: ${{ needs.get_environment.outputs.releaseEnv }} outputs: matrixInclude: ${{ steps.dump.outputs.matrixInclude }} - matrixIncludeApk: ${{ steps.dump.outputs.matrixIncludeApk }} releaseType: ${{ vars.RELEASE_TYPE }} steps: - name: Show Environment @@ -75,12 +79,10 @@ jobs: return; } - const matrixApk = matrixFull.filter(item => item.packageFormat == "apk"); - core.setOutput("matrixIncludeApk", matrixApk); core.setOutput("matrixInclude", matrixFull); await core.summary - .addRaw(`Beginning a ${process.env.releaseType} build with the following configurations:`, true) + .addRaw(`Beginning a ${process.env.releaseType} build with the following configurations:`, true) .addTable([ [ { data: "App Name", header: true }, @@ -139,7 +141,7 @@ jobs: run: | if [[ "$APP_NAME" = "thunderbird" && "$PACKAGE_FORMAT" = "apk" ]]; then BUILD_COMMAND="assemble${PACKAGE_FLAVOR^}${RELEASE_TYPE^}" - elif [[ "$APP_NAME" = "thunderbird" && "${PACKAGE_FORMAT}" = "bundle" ]]; then + elif [[ "$APP_NAME" = "thunderbird" && "${PACKAGE_FORMAT}" = "aab" ]]; then BUILD_COMMAND="bundle${PACKAGE_FLAVOR^}${RELEASE_TYPE^}" elif [[ "$APP_NAME" = "k9mail" ]]; then BUILD_COMMAND="assembleRelease" @@ -158,18 +160,18 @@ jobs: RELEASE_TYPE: ${{ vars.RELEASE_TYPE }} UPLOAD_PATH: "uploads" run: | - OUT_BASE=app-${APP_NAME}/build/outputs/${PACKAGE_FORMAT} + OUT_BASE=app-${APP_NAME}/build/outputs/ if [[ "$APP_NAME" = "thunderbird" && "$PACKAGE_FORMAT" = "apk" ]]; then - OUT_PATH="${OUT_BASE}/${PACKAGE_FLAVOR}/${RELEASE_TYPE}" + OUT_PATH="${OUT_BASE}/apk/${PACKAGE_FLAVOR}/${RELEASE_TYPE}" OUT_FILE="app-${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}-unsigned.apk" UPLOAD_FILE="${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}.apk" - elif [[ "$APP_NAME" = "thunderbird" && "${PACKAGE_FORMAT}" = "bundle" ]]; then - OUT_PATH="${OUT_BASE}/${PACKAGE_FLAVOR}${RELEASE_TYPE^}" + elif [[ "$APP_NAME" = "thunderbird" && "${PACKAGE_FORMAT}" = "aab" ]]; then + OUT_PATH="${OUT_BASE}/bundle/${PACKAGE_FLAVOR}${RELEASE_TYPE^}" OUT_FILE="app-${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}.aab" UPLOAD_FILE="${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}.aab" elif [[ "$APP_NAME" = "k9mail" ]]; then - OUT_PATH="${OUT_BASE}/release" + OUT_PATH="${OUT_BASE}/apk/release" OUT_FILE="app-${APP_NAME}-release-unsigned.apk" UPLOAD_FILE="${APP_NAME}-default-${RELEASE_TYPE}.apk" else @@ -223,6 +225,15 @@ jobs: keyPassword: ${{ secrets.KEY_PASSWORD }} keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} + - name: Rename assets + if: ${{ matrix.packageFormat == 'apk' }} + env: + APP_NAME: ${{ matrix.appName }} + PACKAGE_FLAVOR: ${{ matrix.packageFlavor || 'default' }} + run: | + mv uploads/${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}-signed.apk uploads/${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}.apk + rm uploads/*-aligned.apk + - name: Remove JKS file shell: bash run: | @@ -234,7 +245,7 @@ jobs: name: signed-${{ matrix.appName }}-${{ matrix.packageFormat }}-${{ matrix.packageFlavor || 'default' }} if-no-files-found: error path: | - uploads/*-signed.apk + uploads/*.apk uploads/*.aab pre_publish: @@ -252,39 +263,63 @@ jobs: run: | true - github_release: - name: GitHub Release + publish_release: + name: Publish Release needs: [pre_publish, dump_config] - if: ${{ needs.dump_config.outputs.releaseType == 'beta' || needs.dump_config.outputs.releaseType == 'release' }} + if: ${{ !failure() && !cancelled() }} # Run if previous step is skipped runs-on: ubuntu-latest strategy: matrix: - include: "${{ fromJSON(needs.dump_config.outputs.matrixIncludeApk) }}" - environment: gh-releases + include: "${{ fromJSON(needs.dump_config.outputs.matrixInclude) }}" + environment: publish_release env: RELEASE_TYPE: ${{ needs.dump_config.outputs.releaseType }} APP_NAME: ${{ matrix.appName }} PACKAGE_FLAVOR: ${{ matrix.packageFlavor || 'default' }} + PACKAGE_FORMAT: ${{ matrix.packageFormat }} steps: - uses: actions/download-artifact@v4 with: name: signed-${{ matrix.appName }}-${{ matrix.packageFormat }}-${{ matrix.packageFlavor || 'default' }} path: "uploads/" - - name: Get APK Info - id: apkinfo + - name: Get Package Info + id: pkginfo shell: bash + env: + GH_TOKEN: ${{ github.token }} run: | - APK_FILE="uploads/${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}-signed.apk" - LATEST_BUILD_TOOLS=$(ls -d ${ANDROID_SDK_ROOT}/build-tools/* | sort -V | tail -n1) - AAPT=${LATEST_BUILD_TOOLS}/aapt - - NAME=$(${AAPT} dump badging $APK_FILE | sed -n "s/.*application-label:'\([^']*\)'.*/\1/p") - VERSION=$(${AAPT} dump badging $APK_FILE | sed -n "s/.*versionName='\([^']*\)'.*/\1/p") + PKG_FILE="uploads/${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}.${PACKAGE_FORMAT}" + if [[ "${PACKAGE_FORMAT}" == "apk" ]]; then + LATEST_BUILD_TOOLS=$(ls -d ${ANDROID_SDK_ROOT}/build-tools/* | sort -V | tail -n1) + AAPT=${LATEST_BUILD_TOOLS}/aapt + + NAME=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^application-label:'\([^']*\)'.*$/\1/p") + VERSION=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^package:.*versionName='\([^']*\)'.*$/\1/p") + PACKAGE_ID=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^package: name='\([^']*\)'.*$/\1/p") + elif [[ "${PACKAGE_FORMAT}" == "aab" ]]; then + if [ ! -f bundletool.jar ]; then + gh release download -R google/bundletool -p 'bundletool-all-*.jar' -O bundletool.jar + fi + BUNDLETOOL="java -jar bundletool.jar" + + VERSION=$(${BUNDLETOOL} dump manifest --bundle ${PKG_FILE} --xpath '/manifest/@android:versionName') + PACKAGE_ID=$(${BUNDLETOOL} dump manifest --bundle ${PKG_FILE} --xpath '/manifest/@package') + + # Unfortunately no application label in the bundle + case "$PACKAGE_ID" in + net.thunderbird.android) NAME="Thunderbird" ;; + net.thunderbird.android.beta) NAME="Thunderbird Beta" ;; + net.thunderbird.android.daily) NAME="Thunderbird Daily" ;; + wtf.says.test) NAME="Test" ;; + com.fsck.k9) NAME="K-9 Mail" ;; + esac + fi echo "TAG_NAME=${APP_NAME^^}_${VERSION//./_}" >> $GITHUB_OUTPUT echo "FULL_VERSION_NAME=${NAME} ${VERSION}" >> $GITHUB_OUTPUT echo "VERSION_NAME=${VERSION}" >> $GITHUB_OUTPUT + echo "PACKAGE_ID=${PACKAGE_ID}" >> $GITHUB_OUTPUT cat $GITHUB_OUTPUT @@ -292,49 +327,77 @@ jobs: id: rename shell: bash env: - VERSION_NAME: ${{ steps.apkinfo.outputs.VERSION_NAME }} + VERSION_NAME: ${{ steps.pkginfo.outputs.VERSION_NAME }} run: | - APK_FILE="${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}-signed.apk" - APK_FILE_PRETTY="${APP_NAME}-${VERSION_NAME}.apk" - mv uploads/${APK_FILE} uploads/${APK_FILE_PRETTY} + PKG_FILE="${APP_NAME}-${PACKAGE_FLAVOR}-${RELEASE_TYPE}.${PACKAGE_FORMAT}" + PKG_FILE_PRETTY="${APP_NAME}-${VERSION_NAME}.${PACKAGE_FORMAT}" + mv uploads/${PKG_FILE} uploads/${PKG_FILE_PRETTY} - echo "APK_FILE=${APK_FILE_PRETTY}" >> $GITHUB_OUTPUT - ls -l uploads/${APK_FILE_PRETTY} + echo "PKG_FILE=${PKG_FILE_PRETTY}" >> $GITHUB_OUTPUT + ls -l uploads/${PKG_FILE_PRETTY} - name: App Token Generate uses: actions/create-github-app-token@v1 + if: ${{ contains(matrix.releaseTarget, 'github') && vars.RELEASER_APP_CLIENT_ID }} id: app-token with: app-id: ${{ vars.RELEASER_APP_CLIENT_ID }} private-key: ${{ secrets.RELEASER_APP_PRIVATE_KEY }} - - name: Publish - id: publish + - name: Publish to GitHub Releases + id: publish_gh + if: ${{ contains(matrix.releaseTarget, 'github') }} uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 # v2.0.8 with: - token: ${{ steps.app-token.outputs.token }} + token: ${{ steps.app-token.outputs.token || github.token }} target_commitish: ${{ github.sha }} - tag_name: ${{ steps.apkinfo.outputs.TAG_NAME }} - name: ${{ steps.apkinfo.outputs.FULL_VERSION_NAME }} + tag_name: ${{ steps.pkginfo.outputs.TAG_NAME }} + name: ${{ steps.pkginfo.outputs.FULL_VERSION_NAME }} prerelease: ${{ env.RELEASE_TYPE != 'release' }} fail_on_unmatched_files: true files: | - uploads/${{ steps.rename.outputs.APK_FILE }} + uploads/${{ steps.rename.outputs.PKG_FILE }} + + - name: Publish to Google Play + id: publish_play + uses: r0adkll/upload-google-play@v1 + if: ${{ github.events.inputs.skipGooglePlay != 'true' && contains(matrix.releaseTarget, 'play') && matrix.playTargetTrack }} + with: + serviceAccountJsonPlainText: ${{ secrets.PLAY_STORE_ACCOUNT }} + packageName: ${{ steps.pkginfo.outputs.PACKAGE_ID }} + track: ${{ matrix.playTargetTrack }} + releaseName: ${{ steps.pkginfo.outputs.VERSION_NAME }} + status: completed + changesNotSentForReview: ${{ github.event.inputs.draftGooglePlay == 'true' }} + #whatsNewDirectory: TODO + releaseFiles: | + uploads/${{ steps.rename.outputs.PKG_FILE }} - name: Summary uses: actions/github-script@v7 env: - tagName: ${{ steps.apkinfo.outputs.TAG_NAME }} - fullVersionName: ${{ steps.apkinfo.outputs.FULL_VERSION_NAME }} - releaseUrl: ${{ steps.publish.outputs.url }} - assets: ${{ steps.publish.outputs.assets }} + tagName: ${{ steps.pkginfo.outputs.TAG_NAME }} + fullVersionName: ${{ steps.pkginfo.outputs.FULL_VERSION_NAME }} + ghReleaseUrl: ${{ steps.publish_gh.outputs.url }} + playTargetTrack: ${{ matrix.playTargetTrack }} + packageId: ${{ steps.pkginfo.outputs.PACKAGE_ID }} with: script: | - let assets = JSON.parse(process.env.assets); - await core.summary - .addRaw(`Release `) - .addLink(process.env.fullVersionName, process.env.releaseUrl) + .addHeading(`${process.env.fullVersionName} (${process.env.packageId})`) .addRaw(`Tag ${process.env.tagName} at `) - .addLink(context.sha, `${context.server_url}/${context.repository}/commit/${context.sha}`) + .addLink(context.sha, `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/commit/${context.sha}`) + .addEOL() .write(); + + if (process.env.ghReleaseUrl) { + await core.summary + .addRaw(`Released to Github at `) + .addLink(process.env.ghReleaseUrl, process.env.ghReleaseUrl) + .addEOL() + .write(); + } + + if (process.env.playTargetTrack) { + await core.summary.addRaw(`Released to the ${process.env.playTargetTrack} track on Google Play`, true).write(); + } diff --git a/scripts/setup_release_automation b/scripts/setup_release_automation index 43bdff59e1d..db5432e417c 100644 --- a/scripts/setup_release_automation +++ b/scripts/setup_release_automation @@ -23,15 +23,25 @@ CHANNEL_ENVIRONMENTS = { "MATRIX_INCLUDE": [ { "appName": "thunderbird", + "releaseTarget": "github", "packageFormat": "apk", "packageFlavor": "foss", }, { "appName": "thunderbird", - "packageFormat": "bundle", + "releaseTarget": "play", + "playTargetTrack": "internal", # TODO change this to alpha once ready, final promotion should happen in web ui + "packageFormat": "aab", "packageFlavor": "full", }, - {"appName": "k9mail", "packageFormat": "apk"}, + { + "appName": "k9mail", + "releaseTarget": "github|play", + # TODO enable this when ready to publish + #"packageId": "com.fsck.k9", + #"playTargetTrack": "production", + "packageFormat": "apk" + }, ], }, }, @@ -42,15 +52,24 @@ CHANNEL_ENVIRONMENTS = { "MATRIX_INCLUDE": [ { "appName": "thunderbird", + "releaseTarget": "github", "packageFormat": "apk", "packageFlavor": "foss", }, { "appName": "thunderbird", - "packageFormat": "bundle", + "releaseTarget": "play", + "playTargetTrack": "internal", # TODO change this to production once ready + "packageFormat": "aab", "packageFlavor": "full", }, - {"appName": "k9mail", "packageFormat": "apk"}, + { + "appName": "k9mail", + "releaseTarget": "github|play", + # TODO enable this when ready to publish + #"playTargetTrack": "beta", + "packageFormat": "apk" + }, ], }, }, @@ -66,7 +85,9 @@ CHANNEL_ENVIRONMENTS = { }, { "appName": "thunderbird", - "packageFormat": "bundle", + "releaseTarget": "play", + "packageFormat": "aab", + "playTargetTrack": "internal", "packageFlavor": "full", }, ], @@ -203,14 +224,14 @@ def set_github_environment_variable(repo, name, value, environment_name): # Function to create GitHub environment if it doesn't exist -def create_github_environment(repo, environment_name, branch=None, approvers=None): +def create_github_environment(repo, environment_name, branches=None, approvers=None): url = f"https://api.github.com/repos/{repo}/environments/{environment_name}" headers = { "Authorization": f"token {GITHUB_TOKEN}", "Accept": "application/vnd.github.v3+json", } data = {} - if branch: + if branches: data["deployment_branch_policy"] = { "custom_branch_policies": True, "protected_branches": False, @@ -236,22 +257,22 @@ def create_github_environment(repo, environment_name, branch=None, approvers=Non f"Failed to create environment {environment_name}. Response: {response.status_code}, {response.text}" ) - if branch: + for branch in (branches or []): url = f"https://api.github.com/repos/{repo}/environments/{environment_name}/deployment-branch-policies" data = {"name": branch, "type": "branch"} response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print( - f"\tEnvironment branch protection for {environment_name} created successfully." + f"\tBranch protection on {branch} for {environment_name} created successfully." ) elif response.status_code == 409: print( - f"\tEnvironment branch protection for {environment_name} already exists." + f"\tBranch protection on {branch} for {environment_name} already exists." ) else: raise Exception( - f"Failed to create environment {environment_name}. Response: {response.status_code}, {response.text}" + f"Failed to create branch protection for {branch} on {environment_name}. Response: {response.status_code}, {response.text}" ) @@ -317,7 +338,7 @@ def create_signing_environment(repo, environment, branch, props_file): SIGNING_KEY = encode_jks_file(key_props.get("storeFile")) # Create the environment if it doesn't exist - create_github_environment(repo, environment, branch=branch) + create_github_environment(repo, environment, branches=[branch]) # Fetch the public key from GitHub for the specific environment public_key_data = get_github_public_key(repo, environment) @@ -343,6 +364,21 @@ def create_signing_environment(repo, environment, branch, props_file): repo, secret_name, encrypted_value, key_id, environment ) +def create_release_environment(repo, branches): + environment = "publish_release" + + create_github_environment(repo, environment, branches=branches) + + public_key_data = get_github_public_key(repo, environment) + public_key = public_key_data["key"] + key_id = public_key_data["key_id"] + + with open("play-store-account.json") as fp: + encrypted_play_account = encrypt_secret(public_key, fp.read()) + + set_github_environment_secret( + repo, "PLAY_STORE_ACCOUNT", encrypted_play_account, key_id, environment + ) def main(): # Argument parsing for positional inputs and repo flag @@ -378,9 +414,10 @@ def main(): includeset = set( list(CHANNEL_ENVIRONMENTS.keys()) + list(SIGNING_ENVIRONMENTS.keys()) - + list( + + [ "publish_hold", - ) + "publish_release", + ] ) if args.skip: for skip in args.skip: @@ -400,7 +437,7 @@ def main(): if environment_name not in includeset: continue - create_github_environment(args.repo, environment_name, branch=data["branch"]) + create_github_environment(args.repo, environment_name, branches=[data["branch"]]) for name, value in data["variables"].items(): if isinstance(value, dict) or isinstance(value, list): @@ -420,6 +457,9 @@ def main(): args.repo, environment_name, data["branch"], data["props"] ) + # Publish environment + if "publish_release" in includeset: + create_release_environment(args.repo, ["main", "beta", "release"]) if __name__ == "__main__": main() From c3207edd3915db37402896d5289e6b8793ef3f2b Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Tue, 15 Oct 2024 12:00:16 +0200 Subject: [PATCH 16/45] Automated release notes and release commits --- .github/workflows/shippable_builds.yml | 274 ++++++++++++++++++++++--- app-k9mail/build.gradle.kts | 48 ++++- app-thunderbird/build.gradle.kts | 46 +++++ scripts/render-notes.py | 106 ++++++++++ scripts/setup_release_automation | 1 - scripts/templates/changelog.txt | 7 + scripts/templates/changelog_master.xml | 6 + 7 files changed, 460 insertions(+), 28 deletions(-) create mode 100644 scripts/render-notes.py create mode 100644 scripts/templates/changelog.txt create mode 100644 scripts/templates/changelog_master.xml diff --git a/.github/workflows/shippable_builds.yml b/.github/workflows/shippable_builds.yml index 6f2e434e57e..69c60aab2c6 100644 --- a/.github/workflows/shippable_builds.yml +++ b/.github/workflows/shippable_builds.yml @@ -10,12 +10,15 @@ on: skipK9Mail: type: boolean description: Skip building K-9 Mail + skipBetaBump: + type: boolean + description: Skip version bump (beta) skipGooglePlay: type: boolean - description: Skip Google Play Publish + description: Skip Google Play publish draftGooglePlay: type: boolean - description: Don't send changes for review (Google Play) + description: Leave Play Store version in draft state jobs: get_environment: @@ -88,11 +91,15 @@ jobs: { data: "App Name", header: true }, { data: "Flavor", header: true }, { data: "Format", header: true }, + { data: "Release Target", header: true }, + { data: "Play Store Track", header: true }, ], ...matrixFull.map(item => [ { data: item.appName }, { data: item.packageFlavor || "default" }, { data: item.packageFormat }, + { data: item.releaseTarget?.replace(/\|/g, ", ") || "artifact only" }, + { data: item.playTargetTrack || "none" }, ]) ]) .write(); @@ -105,17 +112,198 @@ jobs: await core.summary.addList(["K-9 Mail is being skipped in this build"]).write(); } + release_commit: + name: Release Bumps + runs-on: ubuntu-latest + needs: [dump_config, get_environment] + if: ${{ needs.dump_config.outputs.releaseType == 'beta' || needs.dump_config.outputs.releaseType == 'release' }} + environment: ${{ needs.get_environment.outputs.releaseEnv }} + strategy: + matrix: + include: "${{ fromJSON(needs.dump_config.outputs.matrixInclude) }}" + permissions: + contents: write + outputs: + k9mail_sha: ${{ steps.commit.outputs.k9mail_sha }} + thunderbird_sha: ${{ steps.commit.outputs.thunderbird_sha }} + steps: + - name: Checkout repository + if: ${{ contains(matrix.releaseTarget, 'github') }} + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Copy CI gradle.properties + if: ${{ contains(matrix.releaseTarget, 'github') }} + shell: bash + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties + + - uses: actions/setup-java@v4 + if: ${{ contains(matrix.releaseTarget, 'github') }} + with: + distribution: temurin + java-version: 17 + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + if: ${{ contains(matrix.releaseTarget, 'github') }} + with: + cache-disabled: ${{ needs.dump_config.outputs.releaseType == 'beta' || needs.dump_config.outputs.releaseType == 'release' }} + add-job-summary: never + + - name: Get application info + id: appinfo + shell: bash + if: ${{ contains(matrix.releaseTarget, 'github') }} + env: + RELEASE_TYPE: ${{ vars.RELEASE_TYPE }} + PACKAGE_FLAVOR: ${{ matrix.packageFlavor }} + APP_NAME: ${{ matrix.appName }} + run: | + if [[ "${APP_NAME}" == "k9mail" && "${RELEASE_TYPE}" == "beta" ]]; then + # k9mail uses release for betas as well. Later on we should align the structures and + # remove this hack + RELEASE_TYPE=release + fi + + ./gradlew :app-${APP_NAME}:printVersionInfo -PbuildType=${RELEASE_TYPE} -PflavorName=${PACKAGE_FLAVOR} + + - name: Bump version code + id: bump_version_code + if: ${{ contains(matrix.releaseTarget, 'github') }} + shell: bash + env: + APP_NAME: ${{ matrix.appName }} + OLD_VERSION_CODE: ${{ steps.appinfo.outputs.VERSION_CODE }} + run: | + NEW_VERSION_CODE=$(($OLD_VERSION_CODE + 1)) + sed "s/versionCode = $OLD_VERSION_CODE/versionCode = $NEW_VERSION_CODE/" app-${APP_NAME}/build.gradle.kts > tmp_gradle_kts + + ! diff -u app-${APP_NAME}/build.gradle.kts tmp_gradle_kts # flip return value to force error if no bump + mv tmp_gradle_kts app-${APP_NAME}/build.gradle.kts + + echo "CODE=${NEW_VERSION_CODE}" | tee $GITHUB_OUTPUT + + - name: Bump version suffix + id: bump_version_suffix + if: ${{ github.events.inputs.skipBetaBump != 'true' && contains(matrix.releaseTarget, 'github') && vars.RELEASE_TYPE == 'beta' }} + shell: bash + env: + APP_NAME: ${{ matrix.appName }} + OLD_VERSION_SUFFIX: ${{ steps.appinfo.outputs.VERSION_NAME_SUFFIX }} + run: | + NEW_VERSION_SUFFIX=b$((${OLD_VERSION_SUFFIX:1} + 1)) + sed "s/versionNameSuffix = \"$OLD_VERSION_SUFFIX\"/versionNameSuffix = \"$NEW_VERSION_SUFFIX\"/" app-${APP_NAME}/build.gradle.kts > tmp_gradle_kts + + ! diff -u app-${APP_NAME}/build.gradle.kts tmp_gradle_kts # flip return value to force error if no bump + mv tmp_gradle_kts app-${APP_NAME}/build.gradle.kts + + echo "SUFFIX=${NEW_VERSION_SUFFIX}" >> $GITHUB_OUTPUT + + cat $GITHUB_OUTPUT + + - name: Render Release Notes + if: ${{ contains(matrix.releaseTarget, 'github') }} + shell: bash + env: + APPLICATION_ID: ${{ steps.appinfo.outputs.APPLICATION_ID }} + APPLICATION_LABEL: ${{ steps.appinfo.outputs.APPLICATION_LABEL }} + VERSION_CODE: ${{ steps.bump_version_code.outputs.CODE }} + FULL_VERSION_NAME: ${{ steps.appinfo.outputs.VERSION_NAME }}${{ steps.bump_version_suffix.outputs.SUFFIX || steps.appinfo.outputs.VERSION_NAME_SUFFIX }} + run: | + echo "

${APPLICATION_LABEL} ${FULL_VERSION_NAME} Release Notes

" | tee -a $GITHUB_STEP_SUMMARY
+          mkdir -p ./app-metadata/${APPLICATION_ID}/en-US/changelogs
+          python ./scripts/render-notes.py ${APPLICATION_ID} ${FULL_VERSION_NAME} ${VERSION_CODE} | tee -a $GITHUB_STEP_SUMMARY
+          echo "
" | tee -a $GITHUB_STEP_SUMMARY + + - name: Validate Release Notes Length + if: ${{ contains(matrix.releaseTarget, 'github') }} + shell: bash + env: + APPLICATION_ID: ${{ steps.appinfo.outputs.APPLICATION_ID }} + VERSION_CODE: ${{ steps.bump_version_code.outputs.CODE }} + run: | + wc -c ./app-metadata/${APPLICATION_ID}/en-US/changelogs/${VERSION_CODE}.txt + RELNOTES_LENGTH=$(wc -c ./app-metadata/${APPLICATION_ID}/en-US/changelogs/${VERSION_CODE}.txt | awk '{print $1}') + + if [[ "${RELNOTES_LENGTH}" -gt 500 ]]; then + echo "Release Notes are too long. Found ${RELNOTES_LENGTH} characters, need a maximum of 500" + exit 1 + fi + + - name: Release Commits + if: ${{ contains(matrix.releaseTarget, 'github') }} + id: commit + shell: bash + env: + APPLICATION_LABEL: ${{ steps.appinfo.outputs.APPLICATION_LABEL }} + APPLICATION_ID: ${{ steps.appinfo.outputs.APPLICATION_ID }} + APP_NAME: ${{ matrix.appName }} + FULL_VERSION_NAME: ${{ steps.appinfo.outputs.VERSION_NAME }}${{ steps.bump_version_suffix.outputs.SUFFIX || steps.appinfo.outputs.VERSION_NAME_SUFFIX }} + run: | + git config --global user.name "GitHub Actions Bot" + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + + # We need the metadata to point to the right application for the release commit + rm metadata + ln -sf app-metadata/${APPLICATION_ID} metadata + + # Add changelogs, build version changes and metadata symlink + git add ./app-metadata/${APPLICATION_ID}/en-US/changelogs/* + git add ./app-${APP_NAME}/src/main/res/raw/changelog_master.xml + git add ./app-${APP_NAME}/build.gradle.kts + git add metadata + + # Ready to commit. Make sure to pull again to reduce likelihood of race conditions + git status + git pull + git commit -m "Release: ${APPLICATION_LABEL} ${FULL_VERSION_NAME}" + git log -n 5 + + set +e + git push + GIT_RESULT=$? + set -e + + if [ $GIT_RESULT -gt 0 ]; then + echo "Push rejected, trying again once in 5 seconds" + sleep 5 + git pull --rebase -X ours + git push + fi + + echo "${APP_NAME}_sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT + build_unsigned: name: Build Unsigned runs-on: ubuntu-latest timeout-minutes: 90 - needs: [dump_config, get_environment] + needs: [dump_config, get_environment, release_commit] strategy: matrix: include: "${{ fromJSON(needs.dump_config.outputs.matrixInclude) }}" environment: ${{ needs.get_environment.outputs.releaseEnv }} steps: - - uses: actions/checkout@v4 + - name: Get release sha + id: sha + shell: bash + env: + THUNDERBIRD_SHA: ${{ needs.release_commit.outputs.thunderbird_sha }} + K9MAIL_SHA: ${{ needs.release_commit.outputs.k9mail_sha }} + APP_NAME: ${{ matrix.appName }} + run: | + case "${APP_NAME}" in + thunderbird) APP_SHA=$THUNDERBIRD_SHA ;; + k9mail) APP_SHA=$K9MAIL_SHA ;; + esac + + echo "app_sha=$APP_SHA" >> $GITHUB_OUTPUT + cat $GITHUB_OUTPUT + + - name: Checkout repository + uses: actions/checkout@v4 + with: + ref: ${{ steps.sha.outputs.app_sha }} - name: Copy CI gradle.properties shell: bash @@ -130,6 +318,7 @@ jobs: uses: gradle/actions/setup-gradle@v4 with: cache-disabled: ${{ needs.dump_config.outputs.releaseType == 'beta' || needs.dump_config.outputs.releaseType == 'release' }} + add-job-summary: on-failure - name: Build It shell: bash @@ -265,7 +454,7 @@ jobs: publish_release: name: Publish Release - needs: [pre_publish, dump_config] + needs: [pre_publish, dump_config, release_commit] if: ${{ !failure() && !cancelled() }} # Run if previous step is skipped runs-on: ubuntu-latest strategy: @@ -294,32 +483,34 @@ jobs: LATEST_BUILD_TOOLS=$(ls -d ${ANDROID_SDK_ROOT}/build-tools/* | sort -V | tail -n1) AAPT=${LATEST_BUILD_TOOLS}/aapt - NAME=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^application-label:'\([^']*\)'.*$/\1/p") - VERSION=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^package:.*versionName='\([^']*\)'.*$/\1/p") - PACKAGE_ID=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^package: name='\([^']*\)'.*$/\1/p") + VERSION_NAME=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^package:.*versionName='\([^']*\)'.*$/\1/p") + VERSION_CODE=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^package:.*versionCode='\([^']*\)'.*$/\1/p") + APPLICATION_ID=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^package: name='\([^']*\)'.*$/\1/p") + APPLICATION_LABEL=$(${AAPT} dump badging $PKG_FILE | sed -n "s/^application-label:'\([^']*\)'.*$/\1/p") elif [[ "${PACKAGE_FORMAT}" == "aab" ]]; then if [ ! -f bundletool.jar ]; then gh release download -R google/bundletool -p 'bundletool-all-*.jar' -O bundletool.jar fi BUNDLETOOL="java -jar bundletool.jar" - VERSION=$(${BUNDLETOOL} dump manifest --bundle ${PKG_FILE} --xpath '/manifest/@android:versionName') - PACKAGE_ID=$(${BUNDLETOOL} dump manifest --bundle ${PKG_FILE} --xpath '/manifest/@package') + VERSION_NAME=$(${BUNDLETOOL} dump manifest --bundle ${PKG_FILE} --xpath '/manifest/@android:versionName') + VERSION_CODE=$(${BUNDLETOOL} dump manifest --bundle ${PKG_FILE} --xpath '/manifest/@android:versionCode') + APPLICATION_ID=$(${BUNDLETOOL} dump manifest --bundle ${PKG_FILE} --xpath '/manifest/@package') # Unfortunately no application label in the bundle - case "$PACKAGE_ID" in - net.thunderbird.android) NAME="Thunderbird" ;; - net.thunderbird.android.beta) NAME="Thunderbird Beta" ;; - net.thunderbird.android.daily) NAME="Thunderbird Daily" ;; - wtf.says.test) NAME="Test" ;; - com.fsck.k9) NAME="K-9 Mail" ;; + case "$APPLICATION_ID" in + net.thunderbird.android) APPLICATION_LABEL="Thunderbird" ;; + net.thunderbird.android.beta) APPLICATION_LABEL="Thunderbird Beta" ;; + net.thunderbird.android.daily) APPLICATION_LABEL="Thunderbird Daily" ;; + com.fsck.k9) APPLICATION_LABEL="K-9 Mail" ;; esac fi - echo "TAG_NAME=${APP_NAME^^}_${VERSION//./_}" >> $GITHUB_OUTPUT - echo "FULL_VERSION_NAME=${NAME} ${VERSION}" >> $GITHUB_OUTPUT - echo "VERSION_NAME=${VERSION}" >> $GITHUB_OUTPUT - echo "PACKAGE_ID=${PACKAGE_ID}" >> $GITHUB_OUTPUT + echo "TAG_NAME=${APP_NAME^^}_${VERSION_NAME//./_}" >> $GITHUB_OUTPUT + echo "FULL_VERSION_NAME=${APPLICATION_LABEL} ${VERSION_NAME}" >> $GITHUB_OUTPUT + echo "VERSION_NAME=${VERSION_NAME}" >> $GITHUB_OUTPUT + echo "VERSION_CODE=${VERSION_CODE}" >> $GITHUB_OUTPUT + echo "APPLICATION_ID=${APPLICATION_ID}" >> $GITHUB_OUTPUT cat $GITHUB_OUTPUT @@ -344,13 +535,29 @@ jobs: app-id: ${{ vars.RELEASER_APP_CLIENT_ID }} private-key: ${{ secrets.RELEASER_APP_PRIVATE_KEY }} + - name: Get release sha + id: sha + shell: bash + env: + THUNDERBIRD_SHA: ${{ needs.release_commit.outputs.thunderbird_sha }} + K9MAIL_SHA: ${{ needs.release_commit.outputs.k9mail_sha }} + APP_NAME: ${{ matrix.appName }} + run: | + case "${APP_NAME}" in + thunderbird) APP_SHA=$THUNDERBIRD_SHA ;; + k9mail) APP_SHA=$K9MAIL_SHA ;; + esac + + echo "app_sha=$APP_SHA" >> $GITHUB_OUTPUT + cat $GITHUB_OUTPUT + - name: Publish to GitHub Releases id: publish_gh if: ${{ contains(matrix.releaseTarget, 'github') }} uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 # v2.0.8 with: token: ${{ steps.app-token.outputs.token || github.token }} - target_commitish: ${{ github.sha }} + target_commitish: ${{ steps.sha.outputs.app_sha }} tag_name: ${{ steps.pkginfo.outputs.TAG_NAME }} name: ${{ steps.pkginfo.outputs.FULL_VERSION_NAME }} prerelease: ${{ env.RELEASE_TYPE != 'release' }} @@ -358,18 +565,32 @@ jobs: files: | uploads/${{ steps.rename.outputs.PKG_FILE }} + - name: Adjust release notes for play store upload + if: ${{ github.events.inputs.skipGooglePlay != 'true' && contains(matrix.releaseTarget, 'play') && matrix.playTargetTrack }} + shell: bash + env: + VERSION_CODE: ${{ steps.pkginfo.outputs.VERSION_CODE }} + APPLICATION_ID: ${{ steps.pkginfo.outputs.APPLICATION_ID }} + REPO: ${{ github.repository }} + APP_SHA: ${{ steps.sha.outputs.app_sha }} + run: | + # r0adkll/upload-google-play expects the release notes in a different structure + FILEPATH=app-metadata/${APPLICATION_ID}/en-US/changelogs/${VERSION_CODE}.txt + mkdir whatsnew + wget -O whatsnew/whatsnew-en-US.txt https://raw.githubusercontent.com/${REPO}/${APP_SHA}/${FILEPATH} + - name: Publish to Google Play id: publish_play uses: r0adkll/upload-google-play@v1 if: ${{ github.events.inputs.skipGooglePlay != 'true' && contains(matrix.releaseTarget, 'play') && matrix.playTargetTrack }} with: serviceAccountJsonPlainText: ${{ secrets.PLAY_STORE_ACCOUNT }} - packageName: ${{ steps.pkginfo.outputs.PACKAGE_ID }} + packageName: ${{ steps.pkginfo.outputs.APPLICATION_ID }} track: ${{ matrix.playTargetTrack }} releaseName: ${{ steps.pkginfo.outputs.VERSION_NAME }} status: completed changesNotSentForReview: ${{ github.event.inputs.draftGooglePlay == 'true' }} - #whatsNewDirectory: TODO + whatsNewDirectory: whatsnew releaseFiles: | uploads/${{ steps.rename.outputs.PKG_FILE }} @@ -380,13 +601,14 @@ jobs: fullVersionName: ${{ steps.pkginfo.outputs.FULL_VERSION_NAME }} ghReleaseUrl: ${{ steps.publish_gh.outputs.url }} playTargetTrack: ${{ matrix.playTargetTrack }} - packageId: ${{ steps.pkginfo.outputs.PACKAGE_ID }} + applicationId: ${{ steps.pkginfo.outputs.APPLICATION_ID }} + app_sha: ${{ steps.sha.outputs.app_sha }} with: script: | await core.summary - .addHeading(`${process.env.fullVersionName} (${process.env.packageId})`) + .addHeading(`${process.env.fullVersionName} (${process.env.applicationId})`, 2) .addRaw(`Tag ${process.env.tagName} at `) - .addLink(context.sha, `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/commit/${context.sha}`) + .addLink(process.env.app_sha, `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/commit/${process.env.app_sha}`) .addEOL() .write(); diff --git a/app-k9mail/build.gradle.kts b/app-k9mail/build.gradle.kts index 4fd685caed0..6c71bb7fa27 100644 --- a/app-k9mail/build.gradle.kts +++ b/app-k9mail/build.gradle.kts @@ -1,3 +1,7 @@ +import javax.xml.parsers.DocumentBuilderFactory +import javax.xml.xpath.XPathConstants +import javax.xml.xpath.XPathFactory + plugins { id(ThunderbirdPlugins.App.androidCompose) alias(libs.plugins.dependency.guard) @@ -48,7 +52,8 @@ android { testApplicationId = "com.fsck.k9.tests" versionCode = 39004 - versionName = "6.905-SNAPSHOT" + versionName = "9.0" + versionNameSuffix = "-SNAPSHOT" // Keep in sync with the resource string array "supported_languages" resourceConfigurations.addAll( @@ -153,3 +158,44 @@ android { dependencyGuard { configuration("releaseRuntimeClasspath") } + +tasks.create("printVersionInfo") { + val targetBuildType = project.findProperty("buildType") ?: "debug" + + doLast { + android.applicationVariants.all { variant -> + if (variant.buildType.name == targetBuildType) { + val flavor = variant.mergedFlavor + + var buildTypeSource = android.sourceSets.getByName(targetBuildType).res.srcDirs.first() + var stringsXmlFile = File(buildTypeSource, "values/strings.xml") + if (!stringsXmlFile.exists()) { + buildTypeSource = android.sourceSets.getByName("main").res.srcDirs.first() + stringsXmlFile = File(buildTypeSource, "values/strings.xml") + } + + val xmlDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(stringsXmlFile) + val xPath = XPathFactory.newInstance().newXPath() + val expression = "/resources/string[@name='app_name']/text()" + val appName = xPath.evaluate(expression, xmlDocument, XPathConstants.STRING) as String + + val output = """ + APPLICATION_ID=${variant.applicationId} + APPLICATION_LABEL=$appName + VERSION_CODE=${flavor.versionCode} + VERSION_NAME=${flavor.versionName} + VERSION_NAME_SUFFIX=${flavor.versionNameSuffix ?: ""} + FULL_VERSION_NAME=${flavor.versionName}${flavor.versionNameSuffix ?: ""} + """.trimIndent() + + println(output) + val githubOutput = System.getenv("GITHUB_OUTPUT") + if (githubOutput != null) { + val outputFile = File(githubOutput) + outputFile.writeText(output + "\n") + } + } + true + } + } +} diff --git a/app-thunderbird/build.gradle.kts b/app-thunderbird/build.gradle.kts index 34648fee59b..706f000ab6a 100644 --- a/app-thunderbird/build.gradle.kts +++ b/app-thunderbird/build.gradle.kts @@ -1,3 +1,7 @@ +import javax.xml.parsers.DocumentBuilderFactory +import javax.xml.xpath.XPathConstants +import javax.xml.xpath.XPathFactory + plugins { id(ThunderbirdPlugins.App.androidCompose) alias(libs.plugins.dependency.guard) @@ -254,3 +258,45 @@ tasks.create("printConfigurations") { } } } + +tasks.create("printVersionInfo") { + val targetBuildType = project.findProperty("buildType") ?: "debug" + val targetFlavorName = project.findProperty("flavorName") ?: "full" + + doLast { + android.applicationVariants.all { variant -> + if (variant.buildType.name == targetBuildType && variant.flavorName == targetFlavorName) { + val flavor = variant.mergedFlavor + + var buildTypeSource = android.sourceSets.getByName(targetBuildType).res.srcDirs.first() + var stringsXmlFile = File(buildTypeSource, "values/strings.xml") + if (!stringsXmlFile.exists()) { + buildTypeSource = android.sourceSets.getByName("main").res.srcDirs.first() + stringsXmlFile = File(buildTypeSource, "values/strings.xml") + } + + val xmlDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(stringsXmlFile) + val xPath = XPathFactory.newInstance().newXPath() + val expression = "/resources/string[@name='app_name']/text()" + val appName = xPath.evaluate(expression, xmlDocument, XPathConstants.STRING) as String + + val output = """ + APPLICATION_ID=${variant.applicationId} + APPLICATION_LABEL=$appName + VERSION_CODE=${flavor.versionCode} + VERSION_NAME=${flavor.versionName} + VERSION_NAME_SUFFIX=${variant.buildType.versionNameSuffix ?: ""} + FULL_VERSION_NAME=${flavor.versionName}${variant.buildType.versionNameSuffix ?: ""} + """.trimIndent() + + println(output) + val githubOutput = System.getenv("GITHUB_OUTPUT") + if (githubOutput != null) { + val outputFile = File(githubOutput) + outputFile.writeText(output + "\n") + } + } + true + } + } +} diff --git a/scripts/render-notes.py b/scripts/render-notes.py new file mode 100644 index 00000000000..0c59ede9c1c --- /dev/null +++ b/scripts/render-notes.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 + +import argparse +import os +import requests +import yaml + +from jinja2 import Template + + +def render_notes(version, versioncode, application, applicationid): + """Update changelog files based on release notes from thunderbird-notes.""" + tb_notes_filename = f"{version}.yml" + tb_notes_directory = "android_release" + if "0b" in version: + tb_notes_filename = f"{version[0:-1]}eta.yml" + tb_notes_directory = "android_beta" + tb_notes_url = os.path.join( + "https://raw.githubusercontent.com/thunderbird/thunderbird-notes/", + "refs/heads/master/", + tb_notes_directory, + tb_notes_filename, + ) + + response = requests.get(tb_notes_url) + response.raise_for_status() + yaml_content = yaml.safe_load(response.text) + + render_data = {"releases": {}} + for release in reversed(yaml_content["release"]["releases"]): + vers = release["version"] + render_data["releases"][vers] = {} + render_data["releases"][vers]["version"] = vers + render_data["releases"][vers]["versioncode"] = int(versioncode) + render_data["releases"][vers]["application"] = application + render_data["releases"][vers]["date"] = release["release_date"] + render_data["releases"][vers]["changes"] = [] + for note in yaml_content["notes"]: + if "0b" in version: + if note["group"] == int(vers[-1]): + render_data["releases"][vers]["changes"].append(note["note"]) + else: + render_data["releases"][vers]["changes"].append(note["note"]) + + render_files = { + "changelog_master": { + "template": "./scripts/templates/changelog_master.xml", + "outfile": f"./app-{application}/src/main/res/raw/changelog_master.xml", + "render_data": render_data["releases"][version], + }, + "changelog.txt": { + "template": "./scripts/templates/changelog.txt", + "outfile": f"./app-metadata/{applicationid}/en-US/changelogs/{versioncode}.txt", + "render_data": render_data["releases"][version], + }, + } + + for render_file in render_files: + with open(render_files[render_file]["template"], "r") as file: + template = file.read() + template = Template(template) + rendered = template.render(render_files[render_file]["render_data"]) + if render_file == "changelog_master": + with open(render_files[render_file]["outfile"], "r") as file: + lines = file.readlines() + for index, line in enumerate(lines): + if "" in line: + if version in lines[index + 1]: + break + lines.insert(index + 1, rendered) + break + with open(render_files[render_file]["outfile"], "w") as file: + file.writelines(lines) + elif render_file == "changelog.txt": + stripped = rendered.lstrip() + with open(render_files[render_file]["outfile"], "w") as file: + file.write(stripped) + print(stripped) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "applicationid", + type=str, + choices=[ + "net.thunderbird.android", + "net.thunderbird.android.beta", + "com.fsck.k9", + ], + help="thunderbird or k9mail", + ) + parser.add_argument("version", type=str, help="Version name for this release") + parser.add_argument("versioncode", type=str, help="Version code for this release") + args = parser.parse_args() + + if args.applicationid == "com.fsck.k9": + application = "k9mail" + else: + application = "thunderbird" + + render_notes(args.version, args.versioncode, application, args.applicationid) + + +if __name__ == "__main__": + main() diff --git a/scripts/setup_release_automation b/scripts/setup_release_automation index db5432e417c..18f21dd2b6a 100644 --- a/scripts/setup_release_automation +++ b/scripts/setup_release_automation @@ -38,7 +38,6 @@ CHANNEL_ENVIRONMENTS = { "appName": "k9mail", "releaseTarget": "github|play", # TODO enable this when ready to publish - #"packageId": "com.fsck.k9", #"playTargetTrack": "production", "packageFormat": "apk" }, diff --git a/scripts/templates/changelog.txt b/scripts/templates/changelog.txt new file mode 100644 index 00000000000..efa569e59ba --- /dev/null +++ b/scripts/templates/changelog.txt @@ -0,0 +1,7 @@ +{%- if application == 'thunderbird' -%} +Thunderbird for Android version {{ version }}, based on K-9 Mail. Changes include: +{%- endif -%} +{%- for note in changes %} +- {{ note }} +{%- endfor %} + diff --git a/scripts/templates/changelog_master.xml b/scripts/templates/changelog_master.xml new file mode 100644 index 00000000000..ce2034375d5 --- /dev/null +++ b/scripts/templates/changelog_master.xml @@ -0,0 +1,6 @@ + +{%- for note in changes %} + {{ note }} +{%- endfor %} + + From a89e79ec4cc1ad1bfcb237656e2a83194a070e05 Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Tue, 15 Oct 2024 12:52:26 +0200 Subject: [PATCH 17/45] Use logger statements instead of printing to console --- build-plugin/src/main/kotlin/SigningExtensions.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-plugin/src/main/kotlin/SigningExtensions.kt b/build-plugin/src/main/kotlin/SigningExtensions.kt index 98dda8297de..bb90c548730 100644 --- a/build-plugin/src/main/kotlin/SigningExtensions.kt +++ b/build-plugin/src/main/kotlin/SigningExtensions.kt @@ -44,7 +44,7 @@ fun NamedDomainObjectContainer.createSigningConfig( keyPassword = properties.getSigningProperty(signingType, PROPERTY_KEY_PASSWORD) } } else { - println("Signing config not created for ${signingType.type}") + project.logger.warn("Signing config not created for ${signingType.type}") } } @@ -69,7 +69,7 @@ private fun Project.readSigningProperties(signingType: SigningType, isUpload: Bo load(inputStream) } } else { - println("Signing properties file not found: $signingPropertiesFile") + logger.warn("Signing properties file not found: $signingPropertiesFile") } } From b6bea2f9f43abcc6e102c6404a70694f8776e5a0 Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Tue, 15 Oct 2024 22:29:58 +0200 Subject: [PATCH 18/45] Add releaser keys to automation setup and fix formatting --- scripts/setup_release_automation | 38 +++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/scripts/setup_release_automation b/scripts/setup_release_automation index 18f21dd2b6a..4fceda270ba 100644 --- a/scripts/setup_release_automation +++ b/scripts/setup_release_automation @@ -30,7 +30,7 @@ CHANNEL_ENVIRONMENTS = { { "appName": "thunderbird", "releaseTarget": "play", - "playTargetTrack": "internal", # TODO change this to alpha once ready, final promotion should happen in web ui + "playTargetTrack": "internal", # TODO change this to alpha once ready, final promotion should happen in web ui "packageFormat": "aab", "packageFlavor": "full", }, @@ -38,8 +38,8 @@ CHANNEL_ENVIRONMENTS = { "appName": "k9mail", "releaseTarget": "github|play", # TODO enable this when ready to publish - #"playTargetTrack": "production", - "packageFormat": "apk" + # "playTargetTrack": "production", + "packageFormat": "apk", }, ], }, @@ -58,7 +58,7 @@ CHANNEL_ENVIRONMENTS = { { "appName": "thunderbird", "releaseTarget": "play", - "playTargetTrack": "internal", # TODO change this to production once ready + "playTargetTrack": "internal", # TODO change this to production once ready "packageFormat": "aab", "packageFlavor": "full", }, @@ -66,8 +66,8 @@ CHANNEL_ENVIRONMENTS = { "appName": "k9mail", "releaseTarget": "github|play", # TODO enable this when ready to publish - #"playTargetTrack": "beta", - "packageFormat": "apk" + # "playTargetTrack": "beta", + "packageFormat": "apk", }, ], }, @@ -256,7 +256,7 @@ def create_github_environment(repo, environment_name, branches=None, approvers=N f"Failed to create environment {environment_name}. Response: {response.status_code}, {response.text}" ) - for branch in (branches or []): + for branch in branches or []: url = f"https://api.github.com/repos/{repo}/environments/{environment_name}/deployment-branch-policies" data = {"name": branch, "type": "branch"} response = requests.post(url, headers=headers, json=data) @@ -363,6 +363,7 @@ def create_signing_environment(repo, environment, branch, props_file): repo, secret_name, encrypted_value, key_id, environment ) + def create_release_environment(repo, branches): environment = "publish_release" @@ -373,12 +374,26 @@ def create_release_environment(repo, branches): key_id = public_key_data["key_id"] with open("play-store-account.json") as fp: - encrypted_play_account = encrypt_secret(public_key, fp.read()) + encrypted_play_account = encrypt_secret(public_key, fp.read()) + + set_github_environment_secret( + repo, "PLAY_STORE_ACCOUNT", encrypted_play_account, key_id, environment + ) + + with open("thunderbird-mobile-gh-releaser-bot.pem") as fp: + encrypted_releaser_key = encrypt_secret(public_key, fp.read()) + with open("thunderbird-mobile-gh-releaser-bot.clientid.txt") as fp: + releaser_client_id = fp.read().strip() set_github_environment_secret( - repo, "PLAY_STORE_ACCOUNT", encrypted_play_account, key_id, environment + repo, "RELEASER_APP_PRIVATE_KEY", encrypted_releaser_key, key_id, environment ) + set_github_environment_variable( + repo, "RELEASER_APP_CLIENT_ID", releaser_client_id, environment + ) + + def main(): # Argument parsing for positional inputs and repo flag parser = argparse.ArgumentParser( @@ -436,7 +451,9 @@ def main(): if environment_name not in includeset: continue - create_github_environment(args.repo, environment_name, branches=[data["branch"]]) + create_github_environment( + args.repo, environment_name, branches=[data["branch"]] + ) for name, value in data["variables"].items(): if isinstance(value, dict) or isinstance(value, list): @@ -460,5 +477,6 @@ def main(): if "publish_release" in includeset: create_release_environment(args.repo, ["main", "beta", "release"]) + if __name__ == "__main__": main() From b32a386abddd4d10fd541febf2ecca7d4352b9d7 Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Tue, 15 Oct 2024 22:42:52 +0200 Subject: [PATCH 19/45] Don't include txt in release notes upload --- .github/workflows/shippable_builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/shippable_builds.yml b/.github/workflows/shippable_builds.yml index 69c60aab2c6..44ec212a18b 100644 --- a/.github/workflows/shippable_builds.yml +++ b/.github/workflows/shippable_builds.yml @@ -577,7 +577,7 @@ jobs: # r0adkll/upload-google-play expects the release notes in a different structure FILEPATH=app-metadata/${APPLICATION_ID}/en-US/changelogs/${VERSION_CODE}.txt mkdir whatsnew - wget -O whatsnew/whatsnew-en-US.txt https://raw.githubusercontent.com/${REPO}/${APP_SHA}/${FILEPATH} + wget -O whatsnew/whatsnew-en-US https://raw.githubusercontent.com/${REPO}/${APP_SHA}/${FILEPATH} - name: Publish to Google Play id: publish_play From 729d8a717512ac8d1e097b98ddce0c20a826dc0e Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Wed, 16 Oct 2024 10:31:22 +0200 Subject: [PATCH 20/45] Make use of inputs context in automation --- .github/workflows/shippable_builds.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/shippable_builds.yml b/.github/workflows/shippable_builds.yml index 44ec212a18b..c87bbb4b978 100644 --- a/.github/workflows/shippable_builds.yml +++ b/.github/workflows/shippable_builds.yml @@ -60,8 +60,8 @@ jobs: env: matrixInclude: ${{ vars.MATRIX_INCLUDE }} releaseType: ${{ vars.RELEASE_TYPE }} - skipThunderbird: ${{ github.event.inputs.skipThunderbird }} - skipK9Mail: ${{ github.event.inputs.skipK9Mail }} + skipThunderbird: ${{ inputs.skipThunderbird }} + skipK9Mail: ${{ inputs.skipK9Mail }} with: script: | let matrix = JSON.parse(process.env.matrixInclude); @@ -186,7 +186,7 @@ jobs: - name: Bump version suffix id: bump_version_suffix - if: ${{ github.events.inputs.skipBetaBump != 'true' && contains(matrix.releaseTarget, 'github') && vars.RELEASE_TYPE == 'beta' }} + if: ${{ !inputs.skipBetaBump && contains(matrix.releaseTarget, 'github') && vars.RELEASE_TYPE == 'beta' }} shell: bash env: APP_NAME: ${{ matrix.appName }} @@ -566,7 +566,7 @@ jobs: uploads/${{ steps.rename.outputs.PKG_FILE }} - name: Adjust release notes for play store upload - if: ${{ github.events.inputs.skipGooglePlay != 'true' && contains(matrix.releaseTarget, 'play') && matrix.playTargetTrack }} + if: ${{ !inputs.skipGooglePlay && contains(matrix.releaseTarget, 'play') && matrix.playTargetTrack }} shell: bash env: VERSION_CODE: ${{ steps.pkginfo.outputs.VERSION_CODE }} @@ -582,14 +582,14 @@ jobs: - name: Publish to Google Play id: publish_play uses: r0adkll/upload-google-play@v1 - if: ${{ github.events.inputs.skipGooglePlay != 'true' && contains(matrix.releaseTarget, 'play') && matrix.playTargetTrack }} + if: ${{ !inputs.skipGooglePlay && contains(matrix.releaseTarget, 'play') && matrix.playTargetTrack }} with: serviceAccountJsonPlainText: ${{ secrets.PLAY_STORE_ACCOUNT }} packageName: ${{ steps.pkginfo.outputs.APPLICATION_ID }} track: ${{ matrix.playTargetTrack }} releaseName: ${{ steps.pkginfo.outputs.VERSION_NAME }} status: completed - changesNotSentForReview: ${{ github.event.inputs.draftGooglePlay == 'true' }} + changesNotSentForReview: ${{ inputs.draftGooglePlay }} whatsNewDirectory: whatsnew releaseFiles: | uploads/${{ steps.rename.outputs.PKG_FILE }} From 1657c91df9e4143255bb2cab83bcbfca6c493d70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Wed, 16 Oct 2024 10:53:50 +0200 Subject: [PATCH 21/45] Remove LegacyDrawer --- .../dependencies/releaseRuntimeClasspath.txt | 1 - .../featureflag/K9FeatureFlagFactory.kt | 5 +- app-k9mail/src/main/res/values/themes.xml | 6 - .../dependencies/fossBetaRuntimeClasspath.txt | 1 - .../fossDailyRuntimeClasspath.txt | 1 - .../fossReleaseRuntimeClasspath.txt | 1 - .../dependencies/fullBetaRuntimeClasspath.txt | 1 - .../fullDailyRuntimeClasspath.txt | 1 - .../fullReleaseRuntimeClasspath.txt | 1 - .../featureflag/TbFeatureFlagFactory.kt | 1 - .../src/main/res/values/themes.xml | 6 - .../ui/legacy/designsystem/atom/icon/Icons.kt | 1 - .../src/main/res/drawable/ic_all_inbox.xml | 13 - feature/navigation/drawer/build.gradle.kts | 14 +- .../feature/navigation/drawer/FolderDrawer.kt | 12 +- .../feature/navigation/drawer/LegacyDrawer.kt | 573 ------------------ .../drawer/NavigationDrawerModule.kt | 22 - .../drawer/legacy/AccountsViewModel.kt | 13 - .../drawer/legacy/DisplayUnifiedInbox.kt | 6 - .../navigation/drawer/legacy/FolderList.kt | 9 - .../drawer/legacy/FoldersViewModel.kt | 82 --- .../navigation_drawer_header_background.png | Bin 22712 -> 0 bytes .../navigation_drawer_header_background.png | Bin 12769 -> 0 bytes .../navigation_drawer_header_background.png | Bin 35726 -> 0 bytes .../navigation_drawer_header_background.png | Bin 65572 -> 0 bytes .../res/layout/navigation_drawer_content.xml | 30 +- ...igation_drawer_legacy_list_folder_item.xml | 100 --- .../drawer/src/main/res/values/ids.xml | 3 +- gradle/libs.versions.toml | 2 - .../src/main/res/values/arrays_drawer.xml | 27 - legacy/ui/legacy/build.gradle.kts | 1 - .../java/com/fsck/k9/activity/MessageList.kt | 34 +- .../com/fsck/k9/ui/settings/AboutFragment.kt | 1 - .../ui/legacy/src/main/res/values/styles.xml | 32 - .../test/java/com/fsck/k9/ui/K9DrawerTest.kt | 21 - 35 files changed, 18 insertions(+), 1003 deletions(-) delete mode 100644 core/ui/legacy/designsystem/src/main/res/drawable/ic_all_inbox.xml delete mode 100644 feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/LegacyDrawer.kt delete mode 100644 feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/legacy/AccountsViewModel.kt delete mode 100644 feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/legacy/DisplayUnifiedInbox.kt delete mode 100644 feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/legacy/FolderList.kt delete mode 100644 feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/legacy/FoldersViewModel.kt delete mode 100644 feature/navigation/drawer/src/main/res/drawable-hdpi/navigation_drawer_header_background.png delete mode 100644 feature/navigation/drawer/src/main/res/drawable-mdpi/navigation_drawer_header_background.png delete mode 100644 feature/navigation/drawer/src/main/res/drawable-xhdpi/navigation_drawer_header_background.png delete mode 100644 feature/navigation/drawer/src/main/res/drawable-xxhdpi/navigation_drawer_header_background.png delete mode 100644 feature/navigation/drawer/src/main/res/layout/navigation_drawer_legacy_list_folder_item.xml delete mode 100644 legacy/core/src/main/res/values/arrays_drawer.xml delete mode 100644 legacy/ui/legacy/src/test/java/com/fsck/k9/ui/K9DrawerTest.kt diff --git a/app-k9mail/dependencies/releaseRuntimeClasspath.txt b/app-k9mail/dependencies/releaseRuntimeClasspath.txt index c49f3b7192a..594ef3c4a0e 100644 --- a/app-k9mail/dependencies/releaseRuntimeClasspath.txt +++ b/app-k9mail/dependencies/releaseRuntimeClasspath.txt @@ -156,7 +156,6 @@ com.mikepenz:fastadapter-extensions-expandable:5.7.0 com.mikepenz:fastadapter-extensions-swipe:5.7.0 com.mikepenz:fastadapter-extensions-utils:5.7.0 com.mikepenz:fastadapter:5.7.0 -com.mikepenz:materialdrawer:9.0.2 com.squareup.moshi:moshi:1.15.1 com.squareup.okhttp3:okhttp:4.12.0 com.squareup.okio:okio-jvm:3.9.0 diff --git a/app-k9mail/src/main/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt b/app-k9mail/src/main/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt index 6ce0002e09b..bf3b6ad3eeb 100644 --- a/app-k9mail/src/main/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt +++ b/app-k9mail/src/main/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt @@ -2,12 +2,9 @@ package app.k9mail.featureflag import app.k9mail.core.featureflag.FeatureFlag import app.k9mail.core.featureflag.FeatureFlagFactory -import app.k9mail.core.featureflag.FeatureFlagKey class K9FeatureFlagFactory : FeatureFlagFactory { override fun createFeatureCatalog(): List { - return listOf( - FeatureFlag(FeatureFlagKey("material3_navigation_drawer"), false), - ) + return listOf() } } diff --git a/app-k9mail/src/main/res/values/themes.xml b/app-k9mail/src/main/res/values/themes.xml index 4ba92509fdf..dcb8bc77f85 100644 --- a/app-k9mail/src/main/res/values/themes.xml +++ b/app-k9mail/src/main/res/values/themes.xml @@ -46,9 +46,6 @@ #336699 #bbb #888 - - @style/Widget.MaterialDrawerStyle.K9.Light - @style/Widget.MaterialDrawerHeaderStyle.K9.Light - - - - - - - - - - - - diff --git a/legacy/ui/legacy/src/test/java/com/fsck/k9/ui/K9DrawerTest.kt b/legacy/ui/legacy/src/test/java/com/fsck/k9/ui/K9DrawerTest.kt deleted file mode 100644 index fa5a3fb2f8d..00000000000 --- a/legacy/ui/legacy/src/test/java/com/fsck/k9/ui/K9DrawerTest.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.fsck.k9.ui - -import app.k9mail.core.android.testing.RobolectricTest -import assertk.assertThat -import assertk.assertions.isEqualTo -import assertk.assertions.size -import com.fsck.k9.core.R -import org.junit.Test -import org.robolectric.RuntimeEnvironment - -class K9DrawerTest : RobolectricTest() { - @Test - fun testAccountColorLengthEqualsDrawerColorLength() { - val resources = RuntimeEnvironment.getApplication().resources - - val lightColors = resources.getIntArray(R.array.account_colors) - val darkColors = resources.getIntArray(R.array.drawer_account_accent_color_dark_theme) - - assertThat(darkColors).size().isEqualTo(lightColors.size) - } -} From f16e68023e271bb4b308d7faa6de575c343da867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Wed, 16 Oct 2024 12:37:40 +0200 Subject: [PATCH 22/45] Remove AccountImageLoader --- legacy/ui/account/build.gradle.kts | 7 ---- .../legacy/ui/account/AccountImageLoader.kt | 37 ------------------- .../java/com/fsck/k9/ui/account/KoinModule.kt | 2 - 3 files changed, 46 deletions(-) delete mode 100644 legacy/ui/account/src/main/java/app/k9mail/legacy/ui/account/AccountImageLoader.kt diff --git a/legacy/ui/account/build.gradle.kts b/legacy/ui/account/build.gradle.kts index 6258ad44d67..8f79a4ad046 100644 --- a/legacy/ui/account/build.gradle.kts +++ b/legacy/ui/account/build.gradle.kts @@ -7,14 +7,7 @@ android { } dependencies { - api(projects.legacy.account) - - implementation(projects.core.android.common) implementation(projects.core.ui.legacy.designsystem) - implementation(projects.legacy.mailstore) - implementation(projects.legacy.message) - - implementation(libs.androidx.lifecycle.livedata.ktx) implementation(libs.glide) } diff --git a/legacy/ui/account/src/main/java/app/k9mail/legacy/ui/account/AccountImageLoader.kt b/legacy/ui/account/src/main/java/app/k9mail/legacy/ui/account/AccountImageLoader.kt deleted file mode 100644 index 70dce6a3aaf..00000000000 --- a/legacy/ui/account/src/main/java/app/k9mail/legacy/ui/account/AccountImageLoader.kt +++ /dev/null @@ -1,37 +0,0 @@ -package app.k9mail.legacy.ui.account - -import android.content.Context -import android.widget.ImageView -import app.k9mail.core.android.common.activity.findActivity -import com.bumptech.glide.Glide -import com.bumptech.glide.load.engine.DiskCacheStrategy - -/** - * Load the account image into an [ImageView]. - */ -class AccountImageLoader(private val accountFallbackImageProvider: AccountFallbackImageProvider) { - fun setAccountImage(imageView: ImageView, email: String, color: Int) { - imageView.context.ifNotDestroyed { context -> - Glide.with(context) - .load(AccountImage(email, color)) - .placeholder(accountFallbackImageProvider.getDrawable(color)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .dontAnimate() - .into(imageView) - } - } - - fun cancel(imageView: ImageView) { - imageView.context.ifNotDestroyed { context -> - Glide.with(context).clear(imageView) - } - } - - private inline fun Context.ifNotDestroyed(block: (Context) -> Unit) { - if (findActivity()?.isDestroyed == true) { - // Do nothing because Glide would throw an exception - } else { - block(this) - } - } -} diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/account/KoinModule.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/account/KoinModule.kt index 8b9f6433b65..5e8bb83cd91 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/account/KoinModule.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/account/KoinModule.kt @@ -1,11 +1,9 @@ package com.fsck.k9.ui.account import app.k9mail.legacy.ui.account.AccountFallbackImageProvider -import app.k9mail.legacy.ui.account.AccountImageLoader import org.koin.dsl.module val accountUiModule = module { - factory { AccountImageLoader(accountFallbackImageProvider = get()) } factory { AccountFallbackImageProvider(context = get()) } factory { AccountImageModelLoaderFactory(contactPhotoLoader = get(), accountFallbackImageProvider = get()) } } From 4a6016aeb80879c0e3639c84f2aca62b31a9837c Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 15 Oct 2024 13:28:10 +0200 Subject: [PATCH 23/45] Introduce `BrandNameProvider` --- app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt | 4 +++- .../main/kotlin/app/k9mail/provider/K9AppNameProvider.kt | 7 ++++++- .../net/thunderbird/android/ThunderbirdKoinModule.kt | 4 +++- .../net/thunderbird/android/provider/TbAppNameProvider.kt | 7 ++++++- app-thunderbird/src/main/res/values/strings.xml | 1 + .../app/k9mail/core/common/provider/BrandNameProvider.kt | 8 ++++++++ 6 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 core/common/src/main/kotlin/app/k9mail/core/common/provider/BrandNameProvider.kt diff --git a/app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt b/app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt index 09dd01d4da0..8fbde70c231 100644 --- a/app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt +++ b/app-k9mail/src/main/kotlin/app/k9mail/K9KoinModule.kt @@ -3,6 +3,7 @@ package app.k9mail import app.k9mail.auth.K9OAuthConfigurationFactory import app.k9mail.core.common.oauth.OAuthConfigurationFactory import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.featureflag.FeatureFlagFactory import app.k9mail.core.ui.theme.api.FeatureThemeProvider import app.k9mail.core.ui.theme.api.ThemeProvider @@ -23,6 +24,7 @@ import com.fsck.k9.provider.UnreadWidgetProvider import com.fsck.k9.widget.list.MessageListWidgetProvider import org.koin.android.ext.koin.androidContext import org.koin.core.qualifier.named +import org.koin.dsl.binds import org.koin.dsl.module val appModule = module { @@ -35,7 +37,7 @@ val appModule = module { single(named("ClientInfoAppVersion")) { BuildConfig.VERSION_NAME } single { appConfig } single { K9OAuthConfigurationFactory() } - single { K9AppNameProvider(androidContext()) } + single { K9AppNameProvider(androidContext()) } binds arrayOf(AppNameProvider::class, BrandNameProvider::class) single { K9ThemeProvider() } single { K9FeatureThemeProvider() } single { K9FeatureFlagFactory() } diff --git a/app-k9mail/src/main/kotlin/app/k9mail/provider/K9AppNameProvider.kt b/app-k9mail/src/main/kotlin/app/k9mail/provider/K9AppNameProvider.kt index 7e4d095d979..ebbf468f3df 100644 --- a/app-k9mail/src/main/kotlin/app/k9mail/provider/K9AppNameProvider.kt +++ b/app-k9mail/src/main/kotlin/app/k9mail/provider/K9AppNameProvider.kt @@ -2,12 +2,17 @@ package app.k9mail.provider import android.content.Context import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import com.fsck.k9.R class K9AppNameProvider( context: Context, -) : AppNameProvider { +) : AppNameProvider, BrandNameProvider { override val appName: String by lazy { context.getString(R.string.app_name) } + + override val brandName: String by lazy { + context.getString(R.string.app_name) + } } diff --git a/app-thunderbird/src/main/kotlin/net/thunderbird/android/ThunderbirdKoinModule.kt b/app-thunderbird/src/main/kotlin/net/thunderbird/android/ThunderbirdKoinModule.kt index 7e289e989f4..59cb52abe6e 100644 --- a/app-thunderbird/src/main/kotlin/net/thunderbird/android/ThunderbirdKoinModule.kt +++ b/app-thunderbird/src/main/kotlin/net/thunderbird/android/ThunderbirdKoinModule.kt @@ -2,6 +2,7 @@ package net.thunderbird.android import app.k9mail.core.common.oauth.OAuthConfigurationFactory import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.featureflag.FeatureFlagFactory import app.k9mail.core.ui.theme.api.FeatureThemeProvider import app.k9mail.core.ui.theme.api.ThemeProvider @@ -22,6 +23,7 @@ import net.thunderbird.android.widget.provider.MessageListWidgetProvider import net.thunderbird.android.widget.provider.UnreadWidgetProvider import org.koin.android.ext.koin.androidContext import org.koin.core.qualifier.named +import org.koin.dsl.binds import org.koin.dsl.module val appModule = module { @@ -34,7 +36,7 @@ val appModule = module { single(named("ClientInfoAppVersion")) { BuildConfig.VERSION_NAME } single { appConfig } single { TbOAuthConfigurationFactory() } - single { TbAppNameProvider(androidContext()) } + single { TbAppNameProvider(androidContext()) } binds arrayOf(AppNameProvider::class, BrandNameProvider::class) single { TbThemeProvider() } single { TbFeatureThemeProvider() } single { TbFeatureFlagFactory() } diff --git a/app-thunderbird/src/main/kotlin/net/thunderbird/android/provider/TbAppNameProvider.kt b/app-thunderbird/src/main/kotlin/net/thunderbird/android/provider/TbAppNameProvider.kt index e2535ebb4df..73c770d719a 100644 --- a/app-thunderbird/src/main/kotlin/net/thunderbird/android/provider/TbAppNameProvider.kt +++ b/app-thunderbird/src/main/kotlin/net/thunderbird/android/provider/TbAppNameProvider.kt @@ -2,12 +2,17 @@ package net.thunderbird.android.provider import android.content.Context import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import net.thunderbird.android.R class TbAppNameProvider( context: Context, -) : AppNameProvider { +) : AppNameProvider, BrandNameProvider { override val appName: String by lazy { context.getString(R.string.app_name) } + + override val brandName: String by lazy { + context.getString(R.string.brand_name) + } } diff --git a/app-thunderbird/src/main/res/values/strings.xml b/app-thunderbird/src/main/res/values/strings.xml index 4a5355f4a75..12a17801581 100644 --- a/app-thunderbird/src/main/res/values/strings.xml +++ b/app-thunderbird/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ Thunderbird + Thunderbird diff --git a/core/common/src/main/kotlin/app/k9mail/core/common/provider/BrandNameProvider.kt b/core/common/src/main/kotlin/app/k9mail/core/common/provider/BrandNameProvider.kt new file mode 100644 index 00000000000..d1326cf83dd --- /dev/null +++ b/core/common/src/main/kotlin/app/k9mail/core/common/provider/BrandNameProvider.kt @@ -0,0 +1,8 @@ +package app.k9mail.core.common.provider + +/** + * Provides the brand name, e.g. Thunderbird. + */ +interface BrandNameProvider { + val brandName: String +} From 8b9dc1284ce8e5abae1ec6bdd80abba09f68cdcc Mon Sep 17 00:00:00 2001 From: cketti Date: Wed, 16 Oct 2024 12:13:33 +0200 Subject: [PATCH 24/45] Use brand name in `AppTitleTopHeader` --- .../settings/EditIncomingServerSettingsNavHost.kt | 2 +- .../settings/EditOutgoingServerSettingsNavHost.kt | 2 +- .../ui/ServerValidationMainScreenPreview.kt | 6 +++--- .../validation/ui/ServerValidationScreenPreview.kt | 6 +++--- .../validation/ui/fake/FakeAppNameProvider.kt | 7 ------- .../validation/ui/fake/FakeBrandNameProvider.kt | 7 +++++++ .../validation/ui/ServerValidationMainScreen.kt | 6 +++--- .../server/validation/ui/ServerValidationScreen.kt | 6 +++--- .../validation/ui/ServerValidationScreenKtTest.kt | 8 ++++---- .../AccountAutoDiscoveryContentPreview.kt | 12 ++++++------ .../AccountAutoDiscoveryScreenPreview.kt | 4 ++-- .../ui/createaccount/CreateAccountScreenPreview.kt | 4 ++-- .../account/setup/ui/fake/FakeAppNameProvider.kt | 7 ------- .../account/setup/ui/fake/FakeBrandNameProvider.kt | 7 +++++++ .../display/DisplayOptionsContentPreview.kt | 2 +- .../options/display/DisplayOptionsScreenPreview.kt | 4 ++-- .../ui/options/sync/SyncOptionsContentPreview.kt | 2 +- .../ui/options/sync/SyncOptionsScreenPreview.kt | 4 ++-- .../specialfolders/SpecialFoldersContentPreview.kt | 8 ++++---- .../specialfolders/SpecialFoldersScreenPreview.kt | 4 ++-- .../setup/navigation/AccountSetupNavHost.kt | 14 +++++++------- .../autodiscovery/AccountAutoDiscoveryContent.kt | 4 ++-- .../ui/autodiscovery/AccountAutoDiscoveryScreen.kt | 6 +++--- .../setup/ui/createaccount/CreateAccountScreen.kt | 6 +++--- .../ui/options/display/DisplayOptionsContent.kt | 4 ++-- .../ui/options/display/DisplayOptionsScreen.kt | 6 +++--- .../setup/ui/options/sync/SyncOptionsContent.kt | 4 ++-- .../setup/ui/options/sync/SyncOptionsScreen.kt | 6 +++--- .../ui/specialfolders/SpecialFoldersContent.kt | 4 ++-- .../ui/specialfolders/SpecialFoldersScreen.kt | 6 +++--- .../account/setup/AccountSetupModuleKtTest.kt | 6 +++--- .../account/setup/ui/FakeAppNameProvider.kt | 7 ------- .../account/setup/ui/FakeBrandNameProvider.kt | 7 +++++++ .../AccountAutoDiscoveryScreenKtTest.kt | 4 ++-- .../ui/createaccount/CreateAccountScreenTest.kt | 4 ++-- .../options/display/DisplayOptionsScreenKtTest.kt | 4 ++-- .../ui/options/sync/SyncOptionsScreenKtTest.kt | 4 ++-- .../specialfolders/SpecialFoldersScreenKtTest.kt | 4 ++-- .../TbOnboardingMigrationScreenPreview.kt | 6 +++--- .../thunderbird/TbOnboardingMigrationScreen.kt | 6 +++--- .../TbOnboardingMigrationScreenKtTest.kt | 10 +++++----- .../permissions/ui/PermissionContentPreview.kt | 2 +- .../permissions/ui/PermissionScreenPreview.kt | 6 +++--- .../permissions/ui/PermissionsContent.kt | 8 ++++---- .../onboarding/permissions/ui/PermissionsScreen.kt | 6 +++--- 45 files changed, 126 insertions(+), 126 deletions(-) delete mode 100644 feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/fake/FakeAppNameProvider.kt create mode 100644 feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/fake/FakeBrandNameProvider.kt delete mode 100644 feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/fake/FakeAppNameProvider.kt create mode 100644 feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/fake/FakeBrandNameProvider.kt delete mode 100644 feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/FakeAppNameProvider.kt create mode 100644 feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/FakeBrandNameProvider.kt diff --git a/feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/EditIncomingServerSettingsNavHost.kt b/feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/EditIncomingServerSettingsNavHost.kt index c0edc58810d..13cfa0323bc 100644 --- a/feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/EditIncomingServerSettingsNavHost.kt +++ b/feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/EditIncomingServerSettingsNavHost.kt @@ -58,7 +58,7 @@ fun EditIncomingServerSettingsNavHost( viewModel = koinViewModel { parametersOf(accountUuid) }, - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } composable(route = NESTED_NAVIGATION_ROUTE_SAVE) { diff --git a/feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/EditOutgoingServerSettingsNavHost.kt b/feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/EditOutgoingServerSettingsNavHost.kt index 6e14b2c76f5..5794cbb9b37 100644 --- a/feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/EditOutgoingServerSettingsNavHost.kt +++ b/feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/EditOutgoingServerSettingsNavHost.kt @@ -58,7 +58,7 @@ fun EditOutgoingServerSettingsNavHost( viewModel = koinViewModel { parametersOf(accountUuid) }, - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } composable(route = NESTED_NAVIGATION_ROUTE_SAVE) { diff --git a/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationMainScreenPreview.kt b/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationMainScreenPreview.kt index 15b290c1b8d..8ed54ccd32b 100644 --- a/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationMainScreenPreview.kt +++ b/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationMainScreenPreview.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable import app.k9mail.core.ui.compose.common.annotation.PreviewDevices import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.feature.account.server.validation.ui.fake.FakeAccountOAuthViewModel -import app.k9mail.feature.account.server.validation.ui.fake.FakeAppNameProvider +import app.k9mail.feature.account.server.validation.ui.fake.FakeBrandNameProvider import app.k9mail.feature.account.server.validation.ui.fake.FakeIncomingServerValidationViewModel import app.k9mail.feature.account.server.validation.ui.fake.FakeOutgoingServerValidationViewModel @@ -16,7 +16,7 @@ internal fun IncomingServerValidationMainScreenPreview() { viewModel = FakeIncomingServerValidationViewModel( oAuthViewModel = FakeAccountOAuthViewModel(), ), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } @@ -29,7 +29,7 @@ internal fun OutgoingServerValidationMainScreenPreview() { viewModel = FakeOutgoingServerValidationViewModel( oAuthViewModel = FakeAccountOAuthViewModel(), ), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } diff --git a/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreenPreview.kt b/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreenPreview.kt index 1c3c84bdada..2edc5a8f117 100644 --- a/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreenPreview.kt +++ b/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreenPreview.kt @@ -6,7 +6,7 @@ import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.feature.account.common.ui.fake.FakeAccountStateRepository import app.k9mail.feature.account.server.certificate.data.InMemoryServerCertificateErrorRepository import app.k9mail.feature.account.server.validation.ui.fake.FakeAccountOAuthViewModel -import app.k9mail.feature.account.server.validation.ui.fake.FakeAppNameProvider +import app.k9mail.feature.account.server.validation.ui.fake.FakeBrandNameProvider import com.fsck.k9.mail.server.ServerSettingsValidationResult @Composable @@ -23,7 +23,7 @@ internal fun IncomingServerValidationScreenPreview() { certificateErrorRepository = InMemoryServerCertificateErrorRepository(), oAuthViewModel = FakeAccountOAuthViewModel(), ), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } @@ -42,7 +42,7 @@ internal fun OutgoingServerValidationScreenPreview() { certificateErrorRepository = InMemoryServerCertificateErrorRepository(), oAuthViewModel = FakeAccountOAuthViewModel(), ), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } diff --git a/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/fake/FakeAppNameProvider.kt b/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/fake/FakeAppNameProvider.kt deleted file mode 100644 index f72de059591..00000000000 --- a/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/fake/FakeAppNameProvider.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.k9mail.feature.account.server.validation.ui.fake - -import app.k9mail.core.common.provider.AppNameProvider - -internal object FakeAppNameProvider : AppNameProvider { - override val appName: String = "Fake App Name" -} diff --git a/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/fake/FakeBrandNameProvider.kt b/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/fake/FakeBrandNameProvider.kt new file mode 100644 index 00000000000..7db47172f36 --- /dev/null +++ b/feature/account/server/validation/src/debug/kotlin/app/k9mail/feature/account/server/validation/ui/fake/FakeBrandNameProvider.kt @@ -0,0 +1,7 @@ +package app.k9mail.feature.account.server.validation.ui.fake + +import app.k9mail.core.common.provider.BrandNameProvider + +internal object FakeBrandNameProvider : BrandNameProvider { + override val brandName: String = "Fake Brand Name" +} diff --git a/feature/account/server/validation/src/main/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationMainScreen.kt b/feature/account/server/validation/src/main/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationMainScreen.kt index 6e5ac592bde..1af45820995 100644 --- a/feature/account/server/validation/src/main/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationMainScreen.kt +++ b/feature/account/server/validation/src/main/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationMainScreen.kt @@ -2,7 +2,7 @@ package app.k9mail.feature.account.server.validation.ui import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.mvi.observeWithoutEffect import app.k9mail.core.ui.compose.designsystem.template.Scaffold import app.k9mail.feature.account.common.ui.AppTitleTopHeader @@ -14,7 +14,7 @@ import app.k9mail.feature.account.server.validation.ui.ServerValidationContract. @Composable internal fun ServerValidationMainScreen( viewModel: ViewModel, - appNameProvider: AppNameProvider, + brandNameProvider: BrandNameProvider, modifier: Modifier = Modifier, ) { val (state, dispatch) = viewModel.observeWithoutEffect() @@ -22,7 +22,7 @@ internal fun ServerValidationMainScreen( Scaffold( topBar = { AppTitleTopHeader( - title = appNameProvider.appName, + title = brandNameProvider.brandName, ) }, bottomBar = { diff --git a/feature/account/server/validation/src/main/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreen.kt b/feature/account/server/validation/src/main/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreen.kt index 12fa4352a50..d413bef2528 100644 --- a/feature/account/server/validation/src/main/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreen.kt +++ b/feature/account/server/validation/src/main/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreen.kt @@ -4,7 +4,7 @@ import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.feature.account.server.certificate.ui.ServerCertificateErrorScreen import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect @@ -17,7 +17,7 @@ fun ServerValidationScreen( onNext: () -> Unit, onBack: () -> Unit, viewModel: ViewModel, - appNameProvider: AppNameProvider, + brandNameProvider: BrandNameProvider, modifier: Modifier = Modifier, title: String? = null, ) { @@ -52,7 +52,7 @@ fun ServerValidationScreen( } else { ServerValidationMainScreen( viewModel = viewModel, - appNameProvider = appNameProvider, + brandNameProvider = brandNameProvider, modifier = modifier, ) } diff --git a/feature/account/server/validation/src/test/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreenKtTest.kt b/feature/account/server/validation/src/test/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreenKtTest.kt index 5ace8d74f32..4c5e36e0d76 100644 --- a/feature/account/server/validation/src/test/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreenKtTest.kt +++ b/feature/account/server/validation/src/test/kotlin/app/k9mail/feature/account/server/validation/ui/ServerValidationScreenKtTest.kt @@ -1,6 +1,6 @@ package app.k9mail.feature.account.server.validation.ui -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.testing.ComposeTest import app.k9mail.core.ui.compose.testing.setContentWithTheme import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Effect @@ -24,7 +24,7 @@ class ServerValidationScreenKtTest : ComposeTest() { onNext = { onNextCounter++ }, onBack = { onBackCounter++ }, viewModel = viewModel, - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } @@ -42,7 +42,7 @@ class ServerValidationScreenKtTest : ComposeTest() { assertThat(onBackCounter).isEqualTo(1) } - private object FakeAppNameProvider : AppNameProvider { - override val appName: String = "K-9 Mail" + private object FakeBrandNameProvider : BrandNameProvider { + override val brandName: String = "K-9 Mail" } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContentPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContentPreview.kt index adce9822907..5983df11180 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContentPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContentPreview.kt @@ -15,7 +15,7 @@ internal fun AccountAutoDiscoveryContentPreview() { state = AccountAutoDiscoveryContract.State(), onEvent = {}, oAuthViewModel = FakeAccountOAuthViewModel(), - appName = "AppName", + brandName = "BrandName", ) } } @@ -30,7 +30,7 @@ internal fun AccountAutoDiscoveryContentEmailPreview() { ), onEvent = {}, oAuthViewModel = FakeAccountOAuthViewModel(), - appName = "AppName", + brandName = "BrandName", ) } } @@ -47,7 +47,7 @@ internal fun AccountAutoDiscoveryContentPasswordPreview() { ), onEvent = {}, oAuthViewModel = FakeAccountOAuthViewModel(), - appName = "AppName", + brandName = "BrandName", ) } } @@ -64,7 +64,7 @@ internal fun AccountAutoDiscoveryContentPasswordUntrustedSettingsPreview() { ), onEvent = {}, oAuthViewModel = FakeAccountOAuthViewModel(), - appName = "AppName", + brandName = "BrandName", ) } } @@ -80,7 +80,7 @@ internal fun AccountAutoDiscoveryContentPasswordNoSettingsPreview() { ), onEvent = {}, oAuthViewModel = FakeAccountOAuthViewModel(), - appName = "AppName", + brandName = "BrandName", ) } } @@ -97,7 +97,7 @@ internal fun AccountAutoDiscoveryContentOAuthPreview() { ), onEvent = {}, oAuthViewModel = FakeAccountOAuthViewModel(), - appName = "AppName", + brandName = "BrandName", ) } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreenPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreenPreview.kt index 475248a70aa..79512a42521 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreenPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreenPreview.kt @@ -6,7 +6,7 @@ import app.k9mail.core.ui.compose.common.annotation.PreviewDevicesWithBackground import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.feature.account.common.ui.fake.FakeAccountStateRepository import app.k9mail.feature.account.server.validation.ui.fake.FakeAccountOAuthViewModel -import app.k9mail.feature.account.setup.ui.fake.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.fake.FakeBrandNameProvider @Composable @PreviewDevicesWithBackground @@ -21,7 +21,7 @@ internal fun AccountAutoDiscoveryScreenPreview() { accountStateRepository = FakeAccountStateRepository(), oAuthViewModel = FakeAccountOAuthViewModel(), ), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreenPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreenPreview.kt index 8fc19716636..c3a3eaa3a9a 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreenPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreenPreview.kt @@ -5,7 +5,7 @@ import app.k9mail.core.ui.compose.common.annotation.PreviewDevices import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.feature.account.common.data.InMemoryAccountStateRepository import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator.AccountCreatorResult -import app.k9mail.feature.account.setup.ui.fake.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.fake.FakeBrandNameProvider @Composable @PreviewDevices @@ -18,7 +18,7 @@ internal fun AccountOptionsScreenK9Preview() { createAccount = { AccountCreatorResult.Success("irrelevant") }, accountStateRepository = InMemoryAccountStateRepository(), ), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/fake/FakeAppNameProvider.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/fake/FakeAppNameProvider.kt deleted file mode 100644 index 0e1e4274e7e..00000000000 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/fake/FakeAppNameProvider.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.k9mail.feature.account.setup.ui.fake - -import app.k9mail.core.common.provider.AppNameProvider - -internal object FakeAppNameProvider : AppNameProvider { - override val appName: String = "Fake App Name" -} diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/fake/FakeBrandNameProvider.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/fake/FakeBrandNameProvider.kt new file mode 100644 index 00000000000..68c6557ff84 --- /dev/null +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/fake/FakeBrandNameProvider.kt @@ -0,0 +1,7 @@ +package app.k9mail.feature.account.setup.ui.fake + +import app.k9mail.core.common.provider.BrandNameProvider + +internal object FakeBrandNameProvider : BrandNameProvider { + override val brandName: String = "Fake Brand Name" +} diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsContentPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsContentPreview.kt index ee41ec2a734..1f331e3a404 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsContentPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsContentPreview.kt @@ -13,7 +13,7 @@ internal fun DisplayOptionsContentPreview() { state = DisplayOptionsContract.State(), onEvent = {}, contentPadding = PaddingValues(), - appName = "AppName", + brandName = "BrandName", ) } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreenPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreenPreview.kt index d1889f927f4..0199c7d1d4a 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreenPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreenPreview.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.feature.account.common.ui.fake.FakeAccountStateRepository -import app.k9mail.feature.account.setup.ui.fake.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.fake.FakeBrandNameProvider @Composable @Preview(showBackground = true) @@ -18,7 +18,7 @@ internal fun DisplayOptionsScreenPreview() { accountStateRepository = FakeAccountStateRepository(), accountOwnerNameProvider = { null }, ), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsContentPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsContentPreview.kt index 049c76f6912..5d0df81f221 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsContentPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsContentPreview.kt @@ -13,7 +13,7 @@ internal fun SyncOptionsContentPreview() { state = SyncOptionsContract.State(), onEvent = {}, contentPadding = PaddingValues(), - appName = "AppName", + brandName = "BrandName", ) } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreenPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreenPreview.kt index 93b612afb4a..6e9b8225ef7 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreenPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreenPreview.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.feature.account.common.ui.fake.FakeAccountStateRepository -import app.k9mail.feature.account.setup.ui.fake.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.fake.FakeBrandNameProvider @Composable @Preview(showBackground = true) @@ -16,7 +16,7 @@ internal fun SyncOptionsScreenPreview() { viewModel = SyncOptionsViewModel( accountStateRepository = FakeAccountStateRepository(), ), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersContentPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersContentPreview.kt index cc98abd51e7..46722aea019 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersContentPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersContentPreview.kt @@ -15,7 +15,7 @@ internal fun SpecialFoldersContentLoadingPreview() { ), onEvent = {}, contentPadding = PaddingValues(), - appName = "AppName", + brandName = "BrandName", ) } } @@ -30,7 +30,7 @@ internal fun SpecialFoldersContentFormPreview() { ), onEvent = {}, contentPadding = PaddingValues(), - appName = "AppName", + brandName = "BrandName", ) } } @@ -46,7 +46,7 @@ internal fun SpecialFoldersContentSuccessPreview() { ), onEvent = {}, contentPadding = PaddingValues(), - appName = "AppName", + brandName = "BrandName", ) } } @@ -62,7 +62,7 @@ internal fun SpecialFoldersContentErrorPreview() { ), onEvent = {}, contentPadding = PaddingValues(), - appName = "AppName", + brandName = "BrandName", ) } } diff --git a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreenPreview.kt b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreenPreview.kt index cd599b241d7..2c490cb8044 100644 --- a/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreenPreview.kt +++ b/feature/account/setup/src/debug/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreenPreview.kt @@ -3,7 +3,7 @@ package app.k9mail.feature.account.setup.ui.specialfolders import androidx.compose.runtime.Composable import app.k9mail.core.ui.compose.common.annotation.PreviewDevices import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme -import app.k9mail.feature.account.setup.ui.fake.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.fake.FakeBrandNameProvider import app.k9mail.feature.account.setup.ui.specialfolders.fake.FakeSpecialFoldersViewModel @Composable @@ -14,7 +14,7 @@ internal fun SpecialFoldersScreenPreview() { onNext = {}, onBack = {}, viewModel = FakeSpecialFoldersViewModel(), - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } } diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/navigation/AccountSetupNavHost.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/navigation/AccountSetupNavHost.kt index cad2d5bd9f6..15de4b11f21 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/navigation/AccountSetupNavHost.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/navigation/AccountSetupNavHost.kt @@ -66,7 +66,7 @@ fun AccountSetupNavHost( }, onBack = onBack, viewModel = koinViewModel(), - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } @@ -96,7 +96,7 @@ fun AccountSetupNavHost( }, onBack = { navController.popBackStack() }, viewModel = koinViewModel(), - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } @@ -127,7 +127,7 @@ fun AccountSetupNavHost( }, onBack = { navController.popBackStack() }, viewModel = koinViewModel(), - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } @@ -148,7 +148,7 @@ fun AccountSetupNavHost( }, onBack = { navController.popBackStack() }, viewModel = koinViewModel(), - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } @@ -157,7 +157,7 @@ fun AccountSetupNavHost( onNext = { navController.navigate(NESTED_NAVIGATION_SYNC_OPTIONS) }, onBack = { navController.popBackStack() }, viewModel = koinViewModel(), - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } @@ -166,7 +166,7 @@ fun AccountSetupNavHost( onNext = { navController.navigate(NESTED_NAVIGATION_CREATE_ACCOUNT) }, onBack = { navController.popBackStack() }, viewModel = koinViewModel(), - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } @@ -175,7 +175,7 @@ fun AccountSetupNavHost( onNext = { accountUuid -> onFinish(accountUuid.value) }, onBack = { navController.popBackStack() }, viewModel = koinViewModel(), - appNameProvider = koinInject(), + brandNameProvider = koinInject(), ) } } diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContent.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContent.kt index 59263192591..5f09c95b978 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContent.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryContent.kt @@ -39,7 +39,7 @@ internal fun AccountAutoDiscoveryContent( state: State, onEvent: (Event) -> Unit, oAuthViewModel: AccountOAuthContract.ViewModel, - appName: String, + brandName: String, modifier: Modifier = Modifier, ) { val scrollState = rememberScrollState() @@ -60,7 +60,7 @@ internal fun AccountAutoDiscoveryContent( .imePadding(), ) { AppTitleTopHeader( - title = appName, + title = brandName, ) Spacer(modifier = Modifier.weight(1f)) AutoDiscoveryContent( diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreen.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreen.kt index 4ee2f0d579e..c897b694556 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreen.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreen.kt @@ -3,7 +3,7 @@ package app.k9mail.feature.account.setup.ui.autodiscovery import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryContract.AutoDiscoveryUiResult import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryContract.Effect @@ -15,7 +15,7 @@ internal fun AccountAutoDiscoveryScreen( onNext: (AutoDiscoveryUiResult) -> Unit, onBack: () -> Unit, viewModel: ViewModel, - appNameProvider: AppNameProvider, + brandNameProvider: BrandNameProvider, modifier: Modifier = Modifier, ) { val (state, dispatch) = viewModel.observe { effect -> @@ -33,7 +33,7 @@ internal fun AccountAutoDiscoveryScreen( state = state.value, onEvent = { dispatch(it) }, oAuthViewModel = viewModel.oAuthViewModel, - appName = appNameProvider.appName, + brandName = brandNameProvider.brandName, modifier = modifier, ) } diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreen.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreen.kt index 10e44644cf4..2d3ade24dc4 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreen.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreen.kt @@ -4,7 +4,7 @@ import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.designsystem.template.Scaffold import app.k9mail.feature.account.common.ui.AppTitleTopHeader @@ -20,7 +20,7 @@ internal fun CreateAccountScreen( onNext: (AccountUuid) -> Unit, onBack: () -> Unit, viewModel: ViewModel, - appNameProvider: AppNameProvider, + brandNameProvider: BrandNameProvider, modifier: Modifier = Modifier, ) { val (state, dispatch) = viewModel.observe { effect -> @@ -41,7 +41,7 @@ internal fun CreateAccountScreen( Scaffold( topBar = { AppTitleTopHeader( - title = appNameProvider.appName, + title = brandNameProvider.brandName, ) }, bottomBar = { diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsContent.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsContent.kt index fdb5d303415..0c6b1a18520 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsContent.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsContent.kt @@ -33,7 +33,7 @@ internal fun DisplayOptionsContent( state: State, onEvent: (Event) -> Unit, contentPadding: PaddingValues, - appName: String, + brandName: String, modifier: Modifier = Modifier, ) { val resources = LocalContext.current.resources @@ -54,7 +54,7 @@ internal fun DisplayOptionsContent( ) { item { AppTitleTopHeader( - title = appName, + title = brandName, ) } diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreen.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreen.kt index 3afc4db5623..e2c00bd506f 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreen.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreen.kt @@ -4,7 +4,7 @@ import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.designsystem.template.Scaffold import app.k9mail.feature.account.common.ui.WizardNavigationBar @@ -17,7 +17,7 @@ internal fun DisplayOptionsScreen( onNext: () -> Unit, onBack: () -> Unit, viewModel: ViewModel, - appNameProvider: AppNameProvider, + brandNameProvider: BrandNameProvider, modifier: Modifier = Modifier, ) { val (state, dispatch) = viewModel.observe { effect -> @@ -48,7 +48,7 @@ internal fun DisplayOptionsScreen( state = state.value, onEvent = { dispatch(it) }, contentPadding = innerPadding, - appName = appNameProvider.appName, + brandName = brandNameProvider.brandName, ) } } diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsContent.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsContent.kt index 211806164fe..c466797ab7b 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsContent.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsContent.kt @@ -36,7 +36,7 @@ internal fun SyncOptionsContent( state: State, onEvent: (Event) -> Unit, contentPadding: PaddingValues, - appName: String, + brandName: String, modifier: Modifier = Modifier, ) { val resources = LocalContext.current.resources @@ -57,7 +57,7 @@ internal fun SyncOptionsContent( ) { item { AppTitleTopHeader( - title = appName, + title = brandName, ) } diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreen.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreen.kt index a0855f9e13a..fd8e88a126c 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreen.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreen.kt @@ -4,7 +4,7 @@ import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.designsystem.template.Scaffold import app.k9mail.feature.account.common.ui.WizardNavigationBar @@ -17,7 +17,7 @@ internal fun SyncOptionsScreen( onNext: () -> Unit, onBack: () -> Unit, viewModel: ViewModel, - appNameProvider: AppNameProvider, + brandNameProvider: BrandNameProvider, modifier: Modifier = Modifier, ) { val (state, dispatch) = viewModel.observe { effect -> @@ -48,7 +48,7 @@ internal fun SyncOptionsScreen( state = state.value, onEvent = { dispatch(it) }, contentPadding = innerPadding, - appName = appNameProvider.appName, + brandName = brandNameProvider.brandName, ) } } diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersContent.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersContent.kt index 593fdcc080b..611806f6fc4 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersContent.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersContent.kt @@ -26,7 +26,7 @@ fun SpecialFoldersContent( state: State, onEvent: (Event) -> Unit, contentPadding: PaddingValues, - appName: String, + brandName: String, modifier: Modifier = Modifier, ) { ResponsiveWidthContainer( @@ -37,7 +37,7 @@ fun SpecialFoldersContent( ) { Column { AppTitleTopHeader( - title = appName, + title = brandName, ) ContentLoadingErrorView( diff --git a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreen.kt b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreen.kt index d4fa7a6edfc..40bdfd26719 100644 --- a/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreen.kt +++ b/feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreen.kt @@ -4,7 +4,7 @@ import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.designsystem.template.Scaffold import app.k9mail.feature.account.common.ui.WizardNavigationBar @@ -18,7 +18,7 @@ fun SpecialFoldersScreen( onNext: (isManualSetup: Boolean) -> Unit, onBack: () -> Unit, viewModel: ViewModel, - appNameProvider: AppNameProvider, + brandNameProvider: BrandNameProvider, modifier: Modifier = Modifier, ) { val (state, dispatch) = viewModel.observe { effect -> @@ -52,7 +52,7 @@ fun SpecialFoldersScreen( state = state.value, onEvent = { dispatch(it) }, contentPadding = innerPadding, - appName = appNameProvider.appName, + brandName = brandNameProvider.brandName, ) } } diff --git a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/AccountSetupModuleKtTest.kt b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/AccountSetupModuleKtTest.kt index d7cf766a8d1..b8c7799ec5f 100644 --- a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/AccountSetupModuleKtTest.kt +++ b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/AccountSetupModuleKtTest.kt @@ -3,7 +3,7 @@ package app.k9mail.feature.account.setup import android.content.Context import app.k9mail.autodiscovery.api.AutoDiscovery import app.k9mail.core.common.oauth.OAuthConfigurationFactory -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.feature.account.common.AccountCommonExternalContract import app.k9mail.feature.account.common.domain.entity.AccountState import app.k9mail.feature.account.common.domain.entity.InteractionMode @@ -14,7 +14,7 @@ import app.k9mail.feature.account.server.settings.ui.outgoing.OutgoingServerSett import app.k9mail.feature.account.server.validation.ui.ServerValidationContract import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator.AccountCreatorResult -import app.k9mail.feature.account.setup.ui.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.FakeBrandNameProvider import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryContract import app.k9mail.feature.account.setup.ui.createaccount.CreateAccountContract import app.k9mail.feature.account.setup.ui.options.display.DisplayOptionsContract @@ -66,7 +66,7 @@ class AccountSetupModuleKtTest : KoinTest { single { mock() } factory { mock() } single>(named("extraAutoDiscoveries")) { emptyList() } - single { FakeAppNameProvider } + single { FakeBrandNameProvider } } @Test diff --git a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/FakeAppNameProvider.kt b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/FakeAppNameProvider.kt deleted file mode 100644 index 7f1c7714626..00000000000 --- a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/FakeAppNameProvider.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.k9mail.feature.account.setup.ui - -import app.k9mail.core.common.provider.AppNameProvider - -internal object FakeAppNameProvider : AppNameProvider { - override val appName: String = "Fake App Name" -} diff --git a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/FakeBrandNameProvider.kt b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/FakeBrandNameProvider.kt new file mode 100644 index 00000000000..2795ff10cf5 --- /dev/null +++ b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/FakeBrandNameProvider.kt @@ -0,0 +1,7 @@ +package app.k9mail.feature.account.setup.ui + +import app.k9mail.core.common.provider.BrandNameProvider + +internal object FakeBrandNameProvider : BrandNameProvider { + override val brandName: String = "Fake Brand Name" +} diff --git a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreenKtTest.kt b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreenKtTest.kt index dec3ec550e3..e4a5bf2bd0a 100644 --- a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreenKtTest.kt +++ b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/autodiscovery/AccountAutoDiscoveryScreenKtTest.kt @@ -3,7 +3,7 @@ package app.k9mail.feature.account.setup.ui.autodiscovery import app.k9mail.core.ui.compose.testing.ComposeTest import app.k9mail.core.ui.compose.testing.setContentWithTheme import app.k9mail.feature.account.common.domain.entity.IncomingProtocolType -import app.k9mail.feature.account.setup.ui.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.FakeBrandNameProvider import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryContract.Effect import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryContract.State import assertk.assertThat @@ -25,7 +25,7 @@ class AccountAutoDiscoveryScreenKtTest : ComposeTest() { onNext = { onNextCounter++ }, onBack = { onBackCounter++ }, viewModel = viewModel, - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } diff --git a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreenTest.kt b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreenTest.kt index 6fa027fc42a..8bac1f6b9f4 100644 --- a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreenTest.kt +++ b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/createaccount/CreateAccountScreenTest.kt @@ -3,7 +3,7 @@ package app.k9mail.feature.account.setup.ui.createaccount import app.k9mail.core.ui.compose.testing.ComposeTest import app.k9mail.core.ui.compose.testing.setContentWithTheme import app.k9mail.feature.account.setup.domain.entity.AccountUuid -import app.k9mail.feature.account.setup.ui.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.FakeBrandNameProvider import app.k9mail.feature.account.setup.ui.createaccount.CreateAccountContract.Effect import app.k9mail.feature.account.setup.ui.createaccount.CreateAccountContract.State import assertk.assertThat @@ -31,7 +31,7 @@ class CreateAccountScreenTest : ComposeTest() { onNext = { accountUuid -> navigateNextArguments.add(accountUuid) }, onBack = { navigateBackCounter++ }, viewModel = viewModel, - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } diff --git a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreenKtTest.kt b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreenKtTest.kt index 33ba23f8ba1..aa514f1c40a 100644 --- a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreenKtTest.kt +++ b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/options/display/DisplayOptionsScreenKtTest.kt @@ -2,7 +2,7 @@ package app.k9mail.feature.account.setup.ui.options.display import app.k9mail.core.ui.compose.testing.ComposeTest import app.k9mail.core.ui.compose.testing.setContentWithTheme -import app.k9mail.feature.account.setup.ui.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.FakeBrandNameProvider import app.k9mail.feature.account.setup.ui.options.display.DisplayOptionsContract.Effect import app.k9mail.feature.account.setup.ui.options.display.DisplayOptionsContract.State import assertk.assertThat @@ -24,7 +24,7 @@ class DisplayOptionsScreenKtTest : ComposeTest() { onNext = { onNextCounter++ }, onBack = { onBackCounter++ }, viewModel = viewModel, - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } diff --git a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreenKtTest.kt b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreenKtTest.kt index 42510f2c568..ec277145aea 100644 --- a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreenKtTest.kt +++ b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/options/sync/SyncOptionsScreenKtTest.kt @@ -2,7 +2,7 @@ package app.k9mail.feature.account.setup.ui.options.sync import app.k9mail.core.ui.compose.testing.ComposeTest import app.k9mail.core.ui.compose.testing.setContentWithTheme -import app.k9mail.feature.account.setup.ui.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.FakeBrandNameProvider import app.k9mail.feature.account.setup.ui.options.sync.SyncOptionsContract.Effect import app.k9mail.feature.account.setup.ui.options.sync.SyncOptionsContract.State import assertk.assertThat @@ -24,7 +24,7 @@ class SyncOptionsScreenKtTest : ComposeTest() { onNext = { onNextCounter++ }, onBack = { onBackCounter++ }, viewModel = viewModel, - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } diff --git a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreenKtTest.kt b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreenKtTest.kt index fe87b83a3e5..d5d10961c8c 100644 --- a/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreenKtTest.kt +++ b/feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/specialfolders/SpecialFoldersScreenKtTest.kt @@ -2,7 +2,7 @@ package app.k9mail.feature.account.setup.ui.specialfolders import app.k9mail.core.ui.compose.testing.ComposeTest import app.k9mail.core.ui.compose.testing.setContentWithTheme -import app.k9mail.feature.account.setup.ui.FakeAppNameProvider +import app.k9mail.feature.account.setup.ui.FakeBrandNameProvider import app.k9mail.feature.account.setup.ui.specialfolders.SpecialFoldersContract.Effect import app.k9mail.feature.account.setup.ui.specialfolders.SpecialFoldersContract.State import app.k9mail.feature.account.setup.ui.specialfolders.fake.FakeSpecialFoldersViewModel @@ -25,7 +25,7 @@ class SpecialFoldersScreenKtTest : ComposeTest() { onNext = { onNextCounter++ }, onBack = { onBackCounter++ }, viewModel = viewModel, - appNameProvider = FakeAppNameProvider, + brandNameProvider = FakeBrandNameProvider, ) } diff --git a/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt b/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt index 61a7aeb8b7f..67874ef9de3 100644 --- a/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt +++ b/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt @@ -1,7 +1,7 @@ package app.k9mail.feature.onboarding.migration.thunderbird import androidx.compose.runtime.Composable -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.annotation.PreviewDevices import app.k9mail.core.ui.compose.designsystem.atom.Surface import app.k9mail.core.ui.compose.theme2.thunderbird.ThunderbirdTheme2 @@ -14,8 +14,8 @@ internal fun TbOnboardingMigrationScreenPreview() { TbOnboardingMigrationScreen( onQrCodeScanClick = {}, onAddAccountClick = {}, - appNameProvider = object : AppNameProvider { - override val appName: String = "Thunderbird" + brandNameProvider = object : BrandNameProvider { + override val brandName: String = "Thunderbird" }, ) } diff --git a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt index 177828cfb29..d2072184a62 100644 --- a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt +++ b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilled import app.k9mail.core.ui.compose.designsystem.atom.card.CardFilled import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium @@ -29,7 +29,7 @@ internal fun TbOnboardingMigrationScreen( onQrCodeScanClick: () -> Unit, onAddAccountClick: () -> Unit, modifier: Modifier = Modifier, - appNameProvider: AppNameProvider = koinInject(), + brandNameProvider: BrandNameProvider = koinInject(), ) { val scrollState = rememberScrollState() @@ -44,7 +44,7 @@ internal fun TbOnboardingMigrationScreen( .verticalScroll(scrollState), ) { AppTitleTopHeader( - title = appNameProvider.appName, + title = brandNameProvider.brandName, ) Spacer(modifier = Modifier.height(MainTheme.spacings.double)) diff --git a/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt b/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt index 7579aa999d2..2b0e8a22eef 100644 --- a/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt +++ b/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt @@ -3,7 +3,7 @@ package app.k9mail.feature.onboarding.migration.thunderbird import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performScrollTo -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.testing.ComposeTest import app.k9mail.core.ui.compose.testing.setContentWithTheme import assertk.assertThat @@ -19,7 +19,7 @@ class TbOnboardingMigrationScreenKtTest : ComposeTest() { TbOnboardingMigrationScreen( onQrCodeScanClick = { qrCodeScanClickCounter++ }, onAddAccountClick = { addAccountClickCounter++ }, - appNameProvider = FakeAppNameProvider(), + brandNameProvider = FakeBrandNameProvider, ) } @@ -39,7 +39,7 @@ class TbOnboardingMigrationScreenKtTest : ComposeTest() { TbOnboardingMigrationScreen( onQrCodeScanClick = { qrCodeScanClickCounter++ }, onAddAccountClick = { addAccountClickCounter++ }, - appNameProvider = FakeAppNameProvider(), + brandNameProvider = FakeBrandNameProvider, ) } @@ -52,6 +52,6 @@ class TbOnboardingMigrationScreenKtTest : ComposeTest() { } } -private class FakeAppNameProvider : AppNameProvider { - override val appName = "Thunderbird" +private object FakeBrandNameProvider : BrandNameProvider { + override val brandName = "Thunderbird" } diff --git a/feature/onboarding/permissions/src/debug/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionContentPreview.kt b/feature/onboarding/permissions/src/debug/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionContentPreview.kt index c5b3fa1d50c..55575ed1797 100644 --- a/feature/onboarding/permissions/src/debug/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionContentPreview.kt +++ b/feature/onboarding/permissions/src/debug/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionContentPreview.kt @@ -17,7 +17,7 @@ internal fun PermissionContentPreview() { isNextButtonVisible = false, ), onEvent = {}, - appName = "AppName", + brandName = "BrandName", ) } } diff --git a/feature/onboarding/permissions/src/debug/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionScreenPreview.kt b/feature/onboarding/permissions/src/debug/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionScreenPreview.kt index cfbaf7b25eb..6f26a995677 100644 --- a/feature/onboarding/permissions/src/debug/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionScreenPreview.kt +++ b/feature/onboarding/permissions/src/debug/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionScreenPreview.kt @@ -2,7 +2,7 @@ package app.k9mail.feature.onboarding.permissions.ui import androidx.compose.runtime.Composable import app.k9mail.core.android.permissions.PermissionState -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.annotation.PreviewDevices import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import kotlinx.coroutines.Dispatchers @@ -16,8 +16,8 @@ internal fun PermissionScreenPreview() { checkPermission = { PermissionState.Denied }, backgroundDispatcher = Dispatchers.Main.immediate, ), - appNameProvider = object : AppNameProvider { - override val appName: String = "AppName" + brandNameProvider = object : BrandNameProvider { + override val brandName: String = "BrandName" }, onNext = {}, ) diff --git a/feature/onboarding/permissions/src/main/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionsContent.kt b/feature/onboarding/permissions/src/main/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionsContent.kt index e626a11ffa0..2d4490ba0ec 100644 --- a/feature/onboarding/permissions/src/main/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionsContent.kt +++ b/feature/onboarding/permissions/src/main/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionsContent.kt @@ -39,7 +39,7 @@ import app.k9mail.feature.account.common.R as CommonR internal fun PermissionsContent( state: State, onEvent: (Event) -> Unit, - appName: String, + brandName: String, ) { val scrollState = rememberScrollState() @@ -60,7 +60,7 @@ internal fun PermissionsContent( .fillMaxHeight() .verticalScroll(state = scrollState), ) { - HeaderArea(appName = appName) + HeaderArea(brandName = brandName) ContentArea(state, onEvent) @@ -74,13 +74,13 @@ internal fun PermissionsContent( @Composable private fun HeaderArea( - appName: String, + brandName: String, ) { Column( horizontalAlignment = Alignment.CenterHorizontally, ) { AppTitleTopHeader( - title = appName, + title = brandName, ) TextHeadlineSmall( diff --git a/feature/onboarding/permissions/src/main/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionsScreen.kt b/feature/onboarding/permissions/src/main/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionsScreen.kt index 6a3ea1a2172..1d7a2e47934 100644 --- a/feature/onboarding/permissions/src/main/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionsScreen.kt +++ b/feature/onboarding/permissions/src/main/kotlin/app/k9mail/feature/onboarding/permissions/ui/PermissionsScreen.kt @@ -8,7 +8,7 @@ import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts.RequestPermission import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.Effect import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.Event @@ -18,7 +18,7 @@ import org.koin.compose.koinInject @Composable fun PermissionsScreen( viewModel: PermissionsContract.ViewModel = koinViewModel(), - appNameProvider: AppNameProvider = koinInject(), + brandNameProvider: BrandNameProvider = koinInject(), onNext: () -> Unit, ) { val contactsPermissionLauncher = rememberLauncherForActivityResult(RequestPermission()) { success -> @@ -48,7 +48,7 @@ fun PermissionsScreen( PermissionsContent( state = state.value, onEvent = dispatch, - appName = appNameProvider.appName, + brandName = brandNameProvider.brandName, ) } From 1b0edbadeaf0077dccf4807f3c55e4756ca3c3a3 Mon Sep 17 00:00:00 2001 From: cketti Date: Wed, 16 Oct 2024 13:55:21 +0200 Subject: [PATCH 25/45] Add support for Norsk Nynorsk (nn) --- app-k9mail/build.gradle.kts | 1 + app-thunderbird/build.gradle.kts | 1 + .../core/src/main/res/values/arrays_general_settings_values.xml | 2 ++ .../src/main/res/values/arrays_general_settings_strings.xml | 1 + 4 files changed, 5 insertions(+) diff --git a/app-k9mail/build.gradle.kts b/app-k9mail/build.gradle.kts index 6c71bb7fa27..63d3968993e 100644 --- a/app-k9mail/build.gradle.kts +++ b/app-k9mail/build.gradle.kts @@ -94,6 +94,7 @@ android { "ml", "nb", "nl", + "nn", "pl", "pt_BR", "pt_PT", diff --git a/app-thunderbird/build.gradle.kts b/app-thunderbird/build.gradle.kts index 706f000ab6a..8ab070758ee 100644 --- a/app-thunderbird/build.gradle.kts +++ b/app-thunderbird/build.gradle.kts @@ -62,6 +62,7 @@ android { "ml", "nb", "nl", + "nn", "pl", "pt_BR", "pt_PT", diff --git a/legacy/core/src/main/res/values/arrays_general_settings_values.xml b/legacy/core/src/main/res/values/arrays_general_settings_values.xml index f47089f79d1..1b2fefe35b3 100644 --- a/legacy/core/src/main/res/values/arrays_general_settings_values.xml +++ b/legacy/core/src/main/res/values/arrays_general_settings_values.xml @@ -39,6 +39,7 @@ ml nb nl + nn pl pt_BR pt_PT @@ -100,6 +101,7 @@ nl no nb + nn uz pl pt_PT diff --git a/legacy/ui/legacy/src/main/res/values/arrays_general_settings_strings.xml b/legacy/ui/legacy/src/main/res/values/arrays_general_settings_strings.xml index adb367239da..ec282660684 100644 --- a/legacy/ui/legacy/src/main/res/values/arrays_general_settings_strings.xml +++ b/legacy/ui/legacy/src/main/res/values/arrays_general_settings_strings.xml @@ -45,6 +45,7 @@ Nederlands Norsk Norsk Bokmål + Norsk Nynorsk O\'zbek Polski Português From c413650e4c3afe526a3448ce858e204434ea168c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Wed, 16 Oct 2024 16:19:08 +0200 Subject: [PATCH 26/45] Add drawer account unread count --- .../drawer/ui/account/AccountAvatarPreview.kt | 26 +++++++ .../drawer/ui/account/AccountAvatar.kt | 70 +++++++++++++++---- .../ui/account/CalculateAccountColor.kt | 24 +++++++ .../drawer/ui/common/LabelForCount.kt | 22 ++++++ .../drawer/ui/folder/FolderListItemBadge.kt | 21 +----- 5 files changed, 129 insertions(+), 34 deletions(-) create mode 100644 feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/common/LabelForCount.kt diff --git a/feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatarPreview.kt b/feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatarPreview.kt index 3f4d0533fbb..95c305d231c 100644 --- a/feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatarPreview.kt +++ b/feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatarPreview.kt @@ -15,3 +15,29 @@ internal fun AccountAvatarPreview() { ) } } + +@Composable +@Preview(showBackground = true) +internal fun AccountAvatarWithUnreadCountPreview() { + PreviewWithThemes { + AccountAvatar( + account = DISPLAY_ACCOUNT.copy( + unreadMessageCount = 12, + ), + onClick = {}, + ) + } +} + +@Composable +@Preview(showBackground = true) +internal fun AccountAvatarWithUnreadCountMaxedPreview() { + PreviewWithThemes { + AccountAvatar( + account = DISPLAY_ACCOUNT.copy( + unreadMessageCount = 100, + ), + onClick = {}, + ) + } +} diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt index 49e48afd7d1..67a572501b6 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt @@ -9,11 +9,14 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import app.k9mail.core.ui.compose.designsystem.atom.Surface +import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelSmall import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount +import app.k9mail.feature.navigation.drawer.ui.common.labelForCount @Composable internal fun AccountAvatar( @@ -22,26 +25,36 @@ internal fun AccountAvatar( modifier: Modifier = Modifier, ) { val accountColor = calculateAccountColor(account.account.chipColor) + val accountColorRoles = ColorRoles.from(accountColor) - Surface( - modifier = modifier - .size(MainTheme.sizes.iconAvatar) - .border(2.dp, accountColor, CircleShape) - .padding(2.dp), - color = accountColor.copy(alpha = 0.3f), - shape = CircleShape, + Box( + modifier = modifier, + contentAlignment = Alignment.BottomEnd, ) { - Box( - contentAlignment = Alignment.Center, + Surface( modifier = Modifier - .border(2.dp, MainTheme.colors.surfaceContainerLowest, CircleShape) + .size(MainTheme.sizes.iconAvatar) + .border(2.dp, accountColor, CircleShape) + .padding(2.dp) .clickable(onClick = { onClick(account) }), + color = accountColor.copy(alpha = 0.3f), + shape = CircleShape, ) { - Placeholder( - email = account.account.email, - ) - // TODO: Add image loading + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .border(2.dp, MainTheme.colors.surfaceContainerLowest, CircleShape), + ) { + Placeholder( + email = account.account.email, + ) + // TODO: Add image loading + } } + UnreadBadge( + unreadCount = account.unreadMessageCount, + accountColorRoles = accountColorRoles, + ) } } @@ -56,6 +69,35 @@ private fun Placeholder( ) } +@Composable +private fun UnreadBadge( + unreadCount: Int, + accountColorRoles: ColorRoles, + modifier: Modifier = Modifier, +) { + if (unreadCount > 0) { + val resources = LocalContext.current.resources + + Surface( + color = accountColorRoles.accent, + shape = CircleShape, + modifier = modifier, + ) { + TextLabelSmall( + text = labelForCount( + count = unreadCount, + resources = resources, + ), + color = accountColorRoles.onAccent, + modifier = Modifier.padding( + horizontal = 3.dp, + vertical = 2.dp, + ), + ) + } + } +} + private fun extractDomainInitials(email: String): String { return email.split("@")[1].take(2) } diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/CalculateAccountColor.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/CalculateAccountColor.kt index f273c82fc5d..83ecd886a0c 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/CalculateAccountColor.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/CalculateAccountColor.kt @@ -2,8 +2,11 @@ package app.k9mail.feature.navigation.drawer.ui.account import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.core.ui.compose.theme2.toHarmonizedColor +import com.google.android.material.color.MaterialColors @Composable internal fun calculateAccountColor(accountColor: Int): Color { @@ -13,3 +16,24 @@ internal fun calculateAccountColor(accountColor: Int): Color { Color(accountColor).toHarmonizedColor(MainTheme.colors.surface) } } + +data class ColorRoles( + val accent: Color, + val onAccent: Color, + val accentContainer: Color, + val onAccentContainer: Color, +) { + companion object { + @Composable + fun from(color: Color): ColorRoles { + val context = LocalContext.current + val colorRoles = MaterialColors.getColorRoles(context, color.toArgb()) + return ColorRoles( + accent = Color(colorRoles.accent), + onAccent = Color(colorRoles.onAccent), + accentContainer = Color(colorRoles.accentContainer), + onAccentContainer = Color(colorRoles.onAccentContainer), + ) + } + } +} diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/common/LabelForCount.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/common/LabelForCount.kt new file mode 100644 index 00000000000..02b5973cb31 --- /dev/null +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/common/LabelForCount.kt @@ -0,0 +1,22 @@ +package app.k9mail.feature.navigation.drawer.ui.common + +import android.content.res.Resources +import app.k9mail.feature.navigation.drawer.R + +@Suppress("MagicNumber") +internal fun labelForCount( + count: Int, + resources: Resources, +) = when { + count in 1..99 -> "$count" + + count in 100..1000 -> resources.getString( + R.string.navigation_drawer_folder_item_badge_count_greater_than_99, + ) + + count > 1000 -> resources.getString( + R.string.navigation_drawer_folder_item_badge_count_greater_than_1_000, + ) + + else -> "" +} diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/folder/FolderListItemBadge.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/folder/FolderListItemBadge.kt index 17f5ee320fb..49943fff00d 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/folder/FolderListItemBadge.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/folder/FolderListItemBadge.kt @@ -1,6 +1,5 @@ package app.k9mail.feature.navigation.drawer.ui.folder -import android.content.res.Resources import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.runtime.Composable @@ -10,7 +9,7 @@ import androidx.compose.ui.platform.LocalContext import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItemBadge import app.k9mail.core.ui.compose.theme2.MainTheme -import app.k9mail.feature.navigation.drawer.R +import app.k9mail.feature.navigation.drawer.ui.common.labelForCount @Composable internal fun FolderListItemBadge( @@ -87,21 +86,3 @@ private fun FolderCountAndStarredBadge( } } } - -@Suppress("MagicNumber") -private fun labelForCount( - count: Int, - resources: Resources, -) = when { - count in 1..99 -> "$count" - - count in 100..1000 -> resources.getString( - R.string.navigation_drawer_folder_item_badge_count_greater_than_99, - ) - - count > 1000 -> resources.getString( - R.string.navigation_drawer_folder_item_badge_count_greater_than_1_000, - ) - - else -> "" -} From 2647e4ffed930380a583fe37f9b6ebb2c16368b9 Mon Sep 17 00:00:00 2001 From: cketti Date: Wed, 16 Oct 2024 21:03:15 +0200 Subject: [PATCH 27/45] Fix saving 'Bcc all messages to' setting --- .../java/com/fsck/k9/activity/setup/AccountSetupComposition.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupComposition.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupComposition.kt index f80c1fd45f0..11228140e57 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupComposition.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/setup/AccountSetupComposition.kt @@ -126,7 +126,7 @@ class AccountSetupComposition : K9Activity() { private fun saveSettings() { account.email = accountEmail.text.toString().trim() - account.alwaysBcc = accountAlwaysBcc.text.toString().takeUnless { it.isNotBlank() } + account.alwaysBcc = accountAlwaysBcc.text.toString().takeUnless { it.isBlank() } account.senderName = accountSenderName.text.toString().takeUnless { it.isBlank() } account.signatureUse = accountSignatureUse.isChecked if (accountSignatureUse.isChecked) { From b823d770987b1663fe3039653c8430f777078f11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Thu, 17 Oct 2024 11:25:07 +0200 Subject: [PATCH 28/45] Fix color roles calculation --- .../compose/theme2/SelectThemeColorScheme.kt | 18 ++++++++++++++ .../drawer/ui/account/AccountAvatar.kt | 5 +++- .../ui/account/CalculateAccountColor.kt | 24 ------------------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SelectThemeColorScheme.kt b/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SelectThemeColorScheme.kt index d1f44da6d8a..08e460cbae8 100644 --- a/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SelectThemeColorScheme.kt +++ b/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SelectThemeColorScheme.kt @@ -1,5 +1,6 @@ package app.k9mail.core.ui.compose.theme2 +import android.content.Context import androidx.compose.material3.ColorScheme import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme @@ -113,4 +114,21 @@ private fun ColorScheme.toDynamicThemeColorScheme( ) } +data class ColorRoles( + val accent: Color, + val onAccent: Color, + val accentContainer: Color, + val onAccentContainer: Color, +) + fun Color.toHarmonizedColor(target: Color) = Color(MaterialColors.harmonize(toArgb(), target.toArgb())) + +fun Color.toColorRoles(context: Context): ColorRoles { + val colorRoles = MaterialColors.getColorRoles(context, this.toArgb()) + return ColorRoles( + accent = Color(colorRoles.accent), + onAccent = Color(colorRoles.onAccent), + accentContainer = Color(colorRoles.accentContainer), + onAccentContainer = Color(colorRoles.onAccentContainer), + ) +} diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt index 67a572501b6..229d727d002 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/AccountAvatar.kt @@ -14,7 +14,9 @@ import androidx.compose.ui.unit.dp import app.k9mail.core.ui.compose.designsystem.atom.Surface import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelSmall import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium +import app.k9mail.core.ui.compose.theme2.ColorRoles import app.k9mail.core.ui.compose.theme2.MainTheme +import app.k9mail.core.ui.compose.theme2.toColorRoles import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount import app.k9mail.feature.navigation.drawer.ui.common.labelForCount @@ -24,8 +26,9 @@ internal fun AccountAvatar( onClick: (DisplayAccount) -> Unit, modifier: Modifier = Modifier, ) { + val context = LocalContext.current val accountColor = calculateAccountColor(account.account.chipColor) - val accountColorRoles = ColorRoles.from(accountColor) + val accountColorRoles = accountColor.toColorRoles(context) Box( modifier = modifier, diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/CalculateAccountColor.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/CalculateAccountColor.kt index 83ecd886a0c..f273c82fc5d 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/CalculateAccountColor.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/account/CalculateAccountColor.kt @@ -2,11 +2,8 @@ package app.k9mail.feature.navigation.drawer.ui.account import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.core.ui.compose.theme2.toHarmonizedColor -import com.google.android.material.color.MaterialColors @Composable internal fun calculateAccountColor(accountColor: Int): Color { @@ -16,24 +13,3 @@ internal fun calculateAccountColor(accountColor: Int): Color { Color(accountColor).toHarmonizedColor(MainTheme.colors.surface) } } - -data class ColorRoles( - val accent: Color, - val onAccent: Color, - val accentContainer: Color, - val onAccentContainer: Color, -) { - companion object { - @Composable - fun from(color: Color): ColorRoles { - val context = LocalContext.current - val colorRoles = MaterialColors.getColorRoles(context, color.toArgb()) - return ColorRoles( - accent = Color(colorRoles.accent), - onAccent = Color(colorRoles.onAccent), - accentContainer = Color(colorRoles.accentContainer), - onAccentContainer = Color(colorRoles.onAccentContainer), - ) - } - } -} From a7ee990db6ac5981ea4715b2ba52b14bd14209de Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 17 Oct 2024 13:13:54 +0200 Subject: [PATCH 29/45] Remove unnecessary `WelcomeScreenPreview` --- .../welcome/ui/WelcomeScreenPreview.kt | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 feature/onboarding/welcome/src/debug/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeScreenPreview.kt diff --git a/feature/onboarding/welcome/src/debug/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeScreenPreview.kt b/feature/onboarding/welcome/src/debug/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeScreenPreview.kt deleted file mode 100644 index a72dc7a5e08..00000000000 --- a/feature/onboarding/welcome/src/debug/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeScreenPreview.kt +++ /dev/null @@ -1,20 +0,0 @@ -package app.k9mail.feature.onboarding.welcome.ui - -import androidx.compose.runtime.Composable -import app.k9mail.core.common.provider.AppNameProvider -import app.k9mail.core.ui.compose.common.annotation.PreviewDevices -import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme - -@Composable -@PreviewDevices -internal fun WelcomeScreenPreview() { - PreviewWithTheme { - WelcomeScreen( - onStartClick = {}, - onImportClick = {}, - appNameProvider = object : AppNameProvider { - override val appName: String = "AppName" - }, - ) - } -} From 10f36e15fad5e68d627b8f814f249ed112f09538 Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 17 Oct 2024 13:24:33 +0200 Subject: [PATCH 30/45] Hide 'import settings' button in welcome screen (Thunderbird) --- .../main/navigation/OnboardingNavHost.kt | 1 + feature/onboarding/welcome/build.gradle.kts | 1 + .../welcome/ui/WelcomeContentPreview.kt | 15 +++++++++------ .../onboarding/welcome/ui/WelcomeContent.kt | 17 +++++++++++------ .../onboarding/welcome/ui/WelcomeScreen.kt | 3 +++ 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt b/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt index 78e3dae0706..c06c7495534 100644 --- a/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt +++ b/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt @@ -82,6 +82,7 @@ fun OnboardingNavHost( }, onImportClick = { navController.navigateToSettingsImport() }, appNameProvider = koinInject(), + onboardingMigrationManager = koinInject(), ) } diff --git a/feature/onboarding/welcome/build.gradle.kts b/feature/onboarding/welcome/build.gradle.kts index 47e7ff9db7c..997e42b0c69 100644 --- a/feature/onboarding/welcome/build.gradle.kts +++ b/feature/onboarding/welcome/build.gradle.kts @@ -10,4 +10,5 @@ android { dependencies { implementation(projects.core.common) implementation(projects.core.ui.compose.designsystem) + implementation(projects.feature.onboarding.migration.api) } diff --git a/feature/onboarding/welcome/src/debug/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeContentPreview.kt b/feature/onboarding/welcome/src/debug/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeContentPreview.kt index d19aaca6d36..1dd6307e058 100644 --- a/feature/onboarding/welcome/src/debug/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeContentPreview.kt +++ b/feature/onboarding/welcome/src/debug/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeContentPreview.kt @@ -2,28 +2,31 @@ package app.k9mail.feature.onboarding.welcome.ui import androidx.compose.runtime.Composable import app.k9mail.core.ui.compose.common.annotation.PreviewDevices +import app.k9mail.core.ui.compose.designsystem.PreviewThemeType import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme @Composable @PreviewDevices -internal fun WelcomeContentPreview() { - PreviewWithTheme { +internal fun WelcomeContentThunderbirdPreview() { + PreviewWithTheme(themeType = PreviewThemeType.THUNDERBIRD) { WelcomeContent( onStartClick = {}, onImportClick = {}, - appName = "AppName", + appName = "Thunderbird Beta", + showImportButton = false, ) } } @Composable @PreviewDevices -internal fun WelcomeContentWithLongTitlePreview() { - PreviewWithTheme { +internal fun WelcomeContentK9MailPreview() { + PreviewWithTheme(themeType = PreviewThemeType.K9MAIL) { WelcomeContent( onStartClick = {}, onImportClick = {}, - appName = "Thunderbird Debug", + appName = "K-9 Mail", + showImportButton = true, ) } } diff --git a/feature/onboarding/welcome/src/main/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeContent.kt b/feature/onboarding/welcome/src/main/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeContent.kt index f5121892273..a07b29c66f2 100644 --- a/feature/onboarding/welcome/src/main/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeContent.kt +++ b/feature/onboarding/welcome/src/main/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeContent.kt @@ -39,6 +39,7 @@ internal fun WelcomeContent( onStartClick: () -> Unit, onImportClick: () -> Unit, appName: String, + showImportButton: Boolean, modifier: Modifier = Modifier, ) { Surface( @@ -49,11 +50,12 @@ internal fun WelcomeContent( modifier = Modifier.fillMaxSize(), footer = { WelcomeFooter( + showImportButton = showImportButton, + onStartClick = onStartClick, + onImportClick = onImportClick, modifier = Modifier .fillMaxWidth() .padding(top = MainTheme.spacings.quadruple), - onStartClick = onStartClick, - onImportClick = onImportClick, ) }, verticalArrangement = Arrangement.SpaceEvenly, @@ -142,6 +144,7 @@ private fun WelcomeMessage( @Composable private fun WelcomeFooter( + showImportButton: Boolean, onStartClick: () -> Unit, onImportClick: () -> Unit, modifier: Modifier = Modifier, @@ -155,10 +158,12 @@ private fun WelcomeFooter( text = stringResource(id = R.string.onboarding_welcome_start_button), onClick = onStartClick, ) - ButtonText( - text = stringResource(id = R.string.onboarding_welcome_import_button), - onClick = onImportClick, - ) + if (showImportButton) { + ButtonText( + text = stringResource(id = R.string.onboarding_welcome_import_button), + onClick = onImportClick, + ) + } } } diff --git a/feature/onboarding/welcome/src/main/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeScreen.kt b/feature/onboarding/welcome/src/main/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeScreen.kt index 77d1de4ae2b..f38ebbf538c 100644 --- a/feature/onboarding/welcome/src/main/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeScreen.kt +++ b/feature/onboarding/welcome/src/main/kotlin/app/k9mail/feature/onboarding/welcome/ui/WelcomeScreen.kt @@ -2,16 +2,19 @@ package app.k9mail.feature.onboarding.welcome.ui import androidx.compose.runtime.Composable import app.k9mail.core.common.provider.AppNameProvider +import app.k9mail.feature.onboarding.migration.api.OnboardingMigrationManager @Composable fun WelcomeScreen( onStartClick: () -> Unit, onImportClick: () -> Unit, appNameProvider: AppNameProvider, + onboardingMigrationManager: OnboardingMigrationManager, ) { WelcomeContent( onStartClick = onStartClick, onImportClick = onImportClick, appName = appNameProvider.appName, + showImportButton = !onboardingMigrationManager.isFeatureIncluded(), ) } From e7c166e3f8c2fd0a54f9afeff0ae84c2e75c8c56 Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 17 Oct 2024 17:16:53 +0200 Subject: [PATCH 31/45] Add "frame" for the camera preview in the QR code scanner screen --- .../feature/migration/qrcode/ui/CameraPreviewView.kt | 2 ++ .../feature/migration/qrcode/ui/QrCodeScannerView.kt | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/CameraPreviewView.kt b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/CameraPreviewView.kt index 50a84939ab0..70e40cb4da0 100644 --- a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/CameraPreviewView.kt +++ b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/CameraPreviewView.kt @@ -22,6 +22,7 @@ import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleLarge import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase.CameraUseCasesProvider import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine +import android.graphics.Color as AndroidColor /** * Displays a camera preview and includes the provided CameraX [UseCase]s. @@ -47,6 +48,7 @@ internal fun CameraPreviewView( val previewView = remember { PreviewView(context).apply { + setBackgroundColor(AndroidColor.TRANSPARENT) scaleType = PreviewView.ScaleType.FIT_CENTER } } diff --git a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerView.kt b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerView.kt index ff001988ea9..f355d010192 100644 --- a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerView.kt +++ b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerView.kt @@ -2,9 +2,11 @@ package app.k9mail.feature.migration.qrcode.ui import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag +import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase @Composable @@ -19,6 +21,11 @@ internal fun QrCodeScannerView( cameraUseCasesProvider = cameraUseCasesProvider, modifier = Modifier .fillMaxWidth() + .padding( + top = MainTheme.spacings.double, + start = MainTheme.spacings.double, + end = MainTheme.spacings.double, + ) .weight(1f), ) From e7b7f7a2d52060d1937d8d19971a3fb42898e1a3 Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 17 Oct 2024 18:18:38 +0200 Subject: [PATCH 32/45] Display instructions in QR code scanner screen --- .../qrcode/ui/QrCodeScannerViewPreview.kt | 7 +++--- .../qrcode/ui/QrCodeScannerBottomContent.kt | 24 +++++++------------ .../qrcode/ui/QrCodeScannerContent.kt | 3 +-- .../qrcode/ui/QrCodeScannerContract.kt | 8 +++++-- .../migration/qrcode/ui/QrCodeScannerView.kt | 24 +++++++++++++++---- .../qrcode/ui/QrCodeScannerViewModel.kt | 21 +++++++++------- .../qrcode/src/main/res/values/strings.xml | 1 + .../ui/QrCodeScannerBottomContentKtTest.kt | 22 +++-------------- .../qrcode/ui/QrCodeScannerViewModelTest.kt | 7 ++++-- 9 files changed, 60 insertions(+), 57 deletions(-) diff --git a/feature/migration/qrcode/src/debug/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewPreview.kt b/feature/migration/qrcode/src/debug/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewPreview.kt index 76bb923c7b0..5c2d5942be7 100644 --- a/feature/migration/qrcode/src/debug/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewPreview.kt +++ b/feature/migration/qrcode/src/debug/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewPreview.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.core.ui.compose.designsystem.atom.Surface +import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.DisplayText @Preview @Composable @@ -12,8 +13,7 @@ fun QrCodeScannerViewPreview_initial() { Surface { QrCodeScannerView( cameraUseCasesProvider = { emptyList() }, - scannedCount = 0, - totalCount = 0, + displayText = DisplayText.HelpText, onDoneClick = {}, ) } @@ -27,8 +27,7 @@ fun QrCodeScannerViewPreview_one_qr_code_scanned() { Surface { QrCodeScannerView( cameraUseCasesProvider = { emptyList() }, - scannedCount = 1, - totalCount = 2, + DisplayText.ProgressText(scannedCount = 1, totalCount = 2), onDoneClick = {}, ) } diff --git a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerBottomContent.kt b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerBottomContent.kt index 07c2c8d31bb..21c031daebe 100644 --- a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerBottomContent.kt +++ b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerBottomContent.kt @@ -1,7 +1,6 @@ package app.k9mail.feature.migration.qrcode.ui import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable @@ -16,26 +15,21 @@ import app.k9mail.feature.migration.qrcode.R @Composable internal fun QrCodeScannerBottomContent( - scannedCount: Int, - totalCount: Int, + text: String, onDoneClick: () -> Unit, ) { Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, ) { - if (totalCount > 0) { - TextBodyLarge( - text = stringResource(R.string.migration_qrcode_scanning_progress, scannedCount, totalCount), - modifier = Modifier - .testTag("ScannedStatus") - .padding(vertical = MainTheme.spacings.double) - .padding(start = MainTheme.spacings.double) - .weight(1f), - ) - } else { - Spacer(modifier = Modifier.weight(1f)) - } + TextBodyLarge( + text = text, + modifier = Modifier + .testTag("ScannedStatus") + .padding(vertical = MainTheme.spacings.double) + .padding(start = MainTheme.spacings.double) + .weight(1f), + ) ButtonOutlined( text = stringResource(R.string.migration_qrcode_done_button_text), diff --git a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerContent.kt b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerContent.kt index bba9dcc50c1..908c96c7f57 100644 --- a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerContent.kt +++ b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerContent.kt @@ -30,8 +30,7 @@ internal fun QrCodeScannerContent( UiPermissionState.Granted -> { QrCodeScannerView( cameraUseCasesProvider = cameraUseCasesProvider, - scannedCount = state.scannedCount, - totalCount = state.totalCount, + displayText = state.displayText, onDoneClick = { onEvent(Event.DoneClicked) }, ) } diff --git a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerContract.kt b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerContract.kt index 820793fde47..d61ce73f22c 100644 --- a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerContract.kt +++ b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerContract.kt @@ -11,8 +11,7 @@ internal interface QrCodeScannerContract { data class State( val cameraPermissionState: UiPermissionState = UiPermissionState.Unknown, - val scannedCount: Int = 0, - val totalCount: Int = 0, + val displayText: DisplayText = DisplayText.HelpText, ) sealed interface Event { @@ -36,4 +35,9 @@ internal interface QrCodeScannerContract { Denied, Waiting, } + + sealed interface DisplayText { + data object HelpText : DisplayText + data class ProgressText(val scannedCount: Int, val totalCount: Int) : DisplayText + } } diff --git a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerView.kt b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerView.kt index f355d010192..7049ba12827 100644 --- a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerView.kt +++ b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerView.kt @@ -4,16 +4,19 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.stringResource import app.k9mail.core.ui.compose.theme2.MainTheme +import app.k9mail.feature.migration.qrcode.R import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase +import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.DisplayText @Composable internal fun QrCodeScannerView( cameraUseCasesProvider: UseCase.CameraUseCasesProvider, - scannedCount: Int, - totalCount: Int, + displayText: DisplayText, onDoneClick: () -> Unit, ) { Column(modifier = Modifier.testTag("QrCodeScannerView")) { @@ -30,9 +33,22 @@ internal fun QrCodeScannerView( ) QrCodeScannerBottomContent( - scannedCount = scannedCount, - totalCount = totalCount, + text = buildString(displayText), onDoneClick = onDoneClick, ) } } + +@Composable +@ReadOnlyComposable +private fun buildString(text: DisplayText): String { + return when (text) { + DisplayText.HelpText -> { + stringResource(R.string.migration_qrcode_scanning_instructions) + } + + is DisplayText.ProgressText -> { + stringResource(R.string.migration_qrcode_scanning_progress, text.scannedCount, text.totalCount) + } + } +} diff --git a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewModel.kt b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewModel.kt index 567dcbbb810..9df3855bd01 100644 --- a/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewModel.kt +++ b/feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewModel.kt @@ -6,6 +6,7 @@ import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase import app.k9mail.feature.migration.qrcode.domain.entity.AccountData import app.k9mail.feature.migration.qrcode.domain.entity.AccountData.Account import app.k9mail.feature.migration.qrcode.domain.usecase.QrCodeImageAnalysisProvider +import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.DisplayText import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.Effect import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.Event import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.State @@ -33,6 +34,9 @@ internal class QrCodeScannerViewModel( private val unsupportedPayloadHashes = ArrayDeque() private val accountDataList = mutableListOf() + private var scannedCount = 0 + private var totalCount = 0 + override val cameraUseCasesProvider: UseCase.CameraUseCasesProvider = createCameraUseCaseProvider(::handleQrCodeScanned) @@ -103,13 +107,9 @@ internal class QrCodeScannerViewModel( } private fun handleSupportedPayload(accountData: AccountData) { - val currentState = state.value - if (accountData.sequenceEnd == currentState.totalCount) { + if (accountData.sequenceEnd == totalCount) { accountDataList.add(accountData) - - updateState { - it.copy(scannedCount = accountDataList.size) - } + scannedCount = accountDataList.size } else { // Total QR code count doesn't match previous value. The user has probably started over. @@ -117,9 +117,12 @@ internal class QrCodeScannerViewModel( accountDataList.clear() accountDataList.add(accountData) - updateState { - it.copy(scannedCount = 1, totalCount = accountData.sequenceEnd) - } + scannedCount = 1 + totalCount = accountData.sequenceEnd + } + + updateState { + it.copy(displayText = DisplayText.ProgressText(scannedCount, totalCount)) } if (accountDataList.size == accountData.sequenceEnd) { diff --git a/feature/migration/qrcode/src/main/res/values/strings.xml b/feature/migration/qrcode/src/main/res/values/strings.xml index 242ef8cb78a..7c77dc6f444 100644 --- a/feature/migration/qrcode/src/main/res/values/strings.xml +++ b/feature/migration/qrcode/src/main/res/values/strings.xml @@ -4,5 +4,6 @@ Go to Android settings, tap permissions, and allow access to the camera. Go to settings Scanned %1$s of %2$s + Align the QR code provided from Thunderbird Desktop Done diff --git a/feature/migration/qrcode/src/test/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerBottomContentKtTest.kt b/feature/migration/qrcode/src/test/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerBottomContentKtTest.kt index f7c640e248b..c0ec660ac21 100644 --- a/feature/migration/qrcode/src/test/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerBottomContentKtTest.kt +++ b/feature/migration/qrcode/src/test/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerBottomContentKtTest.kt @@ -15,25 +15,10 @@ import org.robolectric.annotation.Config class QrCodeScannerBottomContentKtTest : ComposeTest() { @Test - fun `not having a total count should not show ScannedStatus`() = runComposeTest { + fun `text should be displayed`() = runComposeTest { setContentWithTheme { QrCodeScannerBottomContent( - scannedCount = 0, - totalCount = 0, - onDoneClick = {}, - ) - } - - composeTestRule.onNodeWithTag("ScannedStatus").assertDoesNotExist() - composeTestRule.onNodeWithTag("DoneButton").assertExists() - } - - @Test - fun `having a total count should show ScannedStatus`() = runComposeTest { - setContentWithTheme { - QrCodeScannerBottomContent( - scannedCount = 1, - totalCount = 2, + text = "Scanned 1 of 2", onDoneClick = {}, ) } @@ -48,8 +33,7 @@ class QrCodeScannerBottomContentKtTest : ComposeTest() { setContentWithTheme { QrCodeScannerBottomContent( - scannedCount = 0, - totalCount = 0, + text = "irrelevant", onDoneClick = { doneClickCount++ }, ) } diff --git a/feature/migration/qrcode/src/test/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewModelTest.kt b/feature/migration/qrcode/src/test/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewModelTest.kt index bdb73183ee9..08879ad2d04 100644 --- a/feature/migration/qrcode/src/test/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewModelTest.kt +++ b/feature/migration/qrcode/src/test/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewModelTest.kt @@ -8,6 +8,7 @@ import app.k9mail.core.ui.compose.testing.mvi.runMviTest import app.k9mail.core.ui.compose.testing.mvi.turbinesWithInitialStateCheck import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase import app.k9mail.feature.migration.qrcode.domain.usecase.QrCodePayloadReader +import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.DisplayText import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.Effect import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.Event import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.State @@ -214,8 +215,10 @@ private class QrCodeScannerScreenRobot( assertThat(turbines.awaitStateItem()).isEqualTo( State( cameraPermissionState = UiPermissionState.Granted, - scannedCount = expectedScannedCount, - totalCount = expectedScannedTotal, + displayText = DisplayText.ProgressText( + scannedCount = expectedScannedCount, + totalCount = expectedScannedTotal, + ), ), ) } From e45c61cbf7b0c1546b58492cc5e9fbb7b58c3ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Thu, 17 Oct 2024 19:42:05 +0200 Subject: [PATCH 33/45] Fix badging (cherry picked from commit aa0ef5b2b1011fc8582238a0bfeda289cf670e30) --- app-k9mail/badging/release-badging.txt | 3 ++- app-thunderbird/badging/fossBeta-badging.txt | 3 ++- app-thunderbird/badging/fossDaily-badging.txt | 3 ++- app-thunderbird/badging/fossRelease-badging.txt | 3 ++- app-thunderbird/badging/fullBeta-badging.txt | 3 ++- app-thunderbird/badging/fullDaily-badging.txt | 3 ++- app-thunderbird/badging/fullRelease-badging.txt | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app-k9mail/badging/release-badging.txt b/app-k9mail/badging/release-badging.txt index e8c7c7dd9dc..425388ffd8e 100644 --- a/app-k9mail/badging/release-badging.txt +++ b/app-k9mail/badging/release-badging.txt @@ -54,6 +54,7 @@ application-label-lv:'K-9 pasts' application-label-ml:'K-9 Mail' application-label-nb:'K-9 e-post' application-label-nl:'K-9 Mail' +application-label-nn:'K-9 e-post' application-label-pl:'K-9 Mail' application-label-pt:'K-9 Mail' application-label-pt-BR:'K-9 Mail' @@ -93,6 +94,6 @@ other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' -locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' +locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64' diff --git a/app-thunderbird/badging/fossBeta-badging.txt b/app-thunderbird/badging/fossBeta-badging.txt index 35807354e10..7d4baed937f 100644 --- a/app-thunderbird/badging/fossBeta-badging.txt +++ b/app-thunderbird/badging/fossBeta-badging.txt @@ -54,6 +54,7 @@ application-label-lv:'Thunderbird Beta' application-label-ml:'Thunderbird Beta' application-label-nb:'Thunderbird Beta' application-label-nl:'Thunderbird Beta' +application-label-nn:'Thunderbird Beta' application-label-pl:'Thunderbird Beta' application-label-pt:'Thunderbird Beta' application-label-pt-BR:'Thunderbird Beta' @@ -93,6 +94,6 @@ other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' -locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' +locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64' diff --git a/app-thunderbird/badging/fossDaily-badging.txt b/app-thunderbird/badging/fossDaily-badging.txt index 40d8dbf5d1a..5c8a3d27ff2 100644 --- a/app-thunderbird/badging/fossDaily-badging.txt +++ b/app-thunderbird/badging/fossDaily-badging.txt @@ -54,6 +54,7 @@ application-label-lv:'Thunderbird Daily' application-label-ml:'Thunderbird Daily' application-label-nb:'Thunderbird Daily' application-label-nl:'Thunderbird Daily' +application-label-nn:'Thunderbird Daily' application-label-pl:'Thunderbird Daily' application-label-pt:'Thunderbird Daily' application-label-pt-BR:'Thunderbird Daily' @@ -93,6 +94,6 @@ other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' -locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' +locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64' diff --git a/app-thunderbird/badging/fossRelease-badging.txt b/app-thunderbird/badging/fossRelease-badging.txt index ee710bf4b21..53f7cb764ee 100644 --- a/app-thunderbird/badging/fossRelease-badging.txt +++ b/app-thunderbird/badging/fossRelease-badging.txt @@ -54,6 +54,7 @@ application-label-lv:'Thunderbird' application-label-ml:'Thunderbird' application-label-nb:'Thunderbird' application-label-nl:'Thunderbird' +application-label-nn:'Thunderbird' application-label-pl:'Thunderbird' application-label-pt:'Thunderbird' application-label-pt-BR:'Thunderbird' @@ -93,6 +94,6 @@ other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' -locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' +locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64' diff --git a/app-thunderbird/badging/fullBeta-badging.txt b/app-thunderbird/badging/fullBeta-badging.txt index 0f9fbc7737c..03b3766b05d 100644 --- a/app-thunderbird/badging/fullBeta-badging.txt +++ b/app-thunderbird/badging/fullBeta-badging.txt @@ -55,6 +55,7 @@ application-label-lv:'Thunderbird Beta' application-label-ml:'Thunderbird Beta' application-label-nb:'Thunderbird Beta' application-label-nl:'Thunderbird Beta' +application-label-nn:'Thunderbird Beta' application-label-pl:'Thunderbird Beta' application-label-pt:'Thunderbird Beta' application-label-pt-BR:'Thunderbird Beta' @@ -94,6 +95,6 @@ other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' -locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' +locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64' diff --git a/app-thunderbird/badging/fullDaily-badging.txt b/app-thunderbird/badging/fullDaily-badging.txt index 07e3fbaa0d1..081e4f79103 100644 --- a/app-thunderbird/badging/fullDaily-badging.txt +++ b/app-thunderbird/badging/fullDaily-badging.txt @@ -55,6 +55,7 @@ application-label-lv:'Thunderbird Daily' application-label-ml:'Thunderbird Daily' application-label-nb:'Thunderbird Daily' application-label-nl:'Thunderbird Daily' +application-label-nn:'Thunderbird Daily' application-label-pl:'Thunderbird Daily' application-label-pt:'Thunderbird Daily' application-label-pt-BR:'Thunderbird Daily' @@ -94,6 +95,6 @@ other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' -locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' +locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64' diff --git a/app-thunderbird/badging/fullRelease-badging.txt b/app-thunderbird/badging/fullRelease-badging.txt index c9d87543acc..1cd868127d3 100644 --- a/app-thunderbird/badging/fullRelease-badging.txt +++ b/app-thunderbird/badging/fullRelease-badging.txt @@ -55,6 +55,7 @@ application-label-lv:'Thunderbird' application-label-ml:'Thunderbird' application-label-nb:'Thunderbird' application-label-nl:'Thunderbird' +application-label-nn:'Thunderbird' application-label-pl:'Thunderbird' application-label-pt:'Thunderbird' application-label-pt-BR:'Thunderbird' @@ -94,6 +95,6 @@ other-receivers other-services supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' -locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' +locales: '--_--' 'ar' 'be' 'bg' 'br' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'gd' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'ml' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW' densities: '120' '160' '240' '320' '480' '640' '65534' native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64' From acd90a041cae8d1a89ee362d9ad102cc4c539385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Thu, 17 Oct 2024 18:37:02 +0200 Subject: [PATCH 34/45] Bump AndroidX dependencies - AndroidX Activity 1.9.2 -> 1.9.3 - AndroidX Annotation 1.8.2 -> 1.9.0 - AndroidX Camera 1.3.1 -> 1.3.4 - AndroidX Fragment 1.8.3 -> 1.8.4 - AndroidX Lifecycle 2.8.5 -> 2.8.6 - AndroidX Navigation 2.8.0 -> 2.8.3 --- .../dependencies/releaseRuntimeClasspath.txt | 140 +++++++++--------- .../dependencies/fossBetaRuntimeClasspath.txt | 140 +++++++++--------- .../fossDailyRuntimeClasspath.txt | 140 +++++++++--------- .../fossReleaseRuntimeClasspath.txt | 140 +++++++++--------- .../dependencies/fullBetaRuntimeClasspath.txt | 140 +++++++++--------- .../fullDailyRuntimeClasspath.txt | 140 +++++++++--------- .../fullReleaseRuntimeClasspath.txt | 140 +++++++++--------- gradle/libs.versions.toml | 12 +- 8 files changed, 496 insertions(+), 496 deletions(-) diff --git a/app-k9mail/dependencies/releaseRuntimeClasspath.txt b/app-k9mail/dependencies/releaseRuntimeClasspath.txt index 594ef3c4a0e..5e4612d3af2 100644 --- a/app-k9mail/dependencies/releaseRuntimeClasspath.txt +++ b/app-k9mail/dependencies/releaseRuntimeClasspath.txt @@ -1,9 +1,9 @@ -androidx.activity:activity-compose:1.9.2 -androidx.activity:activity-ktx:1.9.2 -androidx.activity:activity:1.9.2 +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 androidx.annotation:annotation-experimental:1.4.1 -androidx.annotation:annotation-jvm:1.8.2 -androidx.annotation:annotation:1.8.2 +androidx.annotation:annotation-jvm:1.9.0 +androidx.annotation:annotation:1.9.0 androidx.appcompat:appcompat-resources:1.7.0 androidx.appcompat:appcompat:1.7.0 androidx.arch.core:core-common:2.2.0 @@ -11,23 +11,23 @@ androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.biometric:biometric:1.1.0 androidx.browser:browser:1.3.0 -androidx.camera:camera-camera2:1.3.1 -androidx.camera:camera-core:1.3.1 -androidx.camera:camera-lifecycle:1.3.1 -androidx.camera:camera-video:1.3.1 -androidx.camera:camera-view:1.3.1 +androidx.camera:camera-camera2:1.3.4 +androidx.camera:camera-core:1.3.4 +androidx.camera:camera-lifecycle:1.3.4 +androidx.camera:camera-video:1.3.4 +androidx.camera:camera-view:1.3.4 androidx.cardview:cardview:1.0.0 -androidx.collection:collection-jvm:1.4.2 -androidx.collection:collection-ktx:1.4.2 -androidx.collection:collection:1.4.2 -androidx.compose.animation:animation-android:1.7.0 -androidx.compose.animation:animation-core-android:1.7.0 -androidx.compose.animation:animation-core:1.7.0 -androidx.compose.animation:animation:1.7.0 -androidx.compose.foundation:foundation-android:1.7.0 -androidx.compose.foundation:foundation-layout-android:1.7.0 -androidx.compose.foundation:foundation-layout:1.7.0 -androidx.compose.foundation:foundation:1.7.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.2 +androidx.compose.animation:animation-core-android:1.7.2 +androidx.compose.animation:animation-core:1.7.2 +androidx.compose.animation:animation:1.7.2 +androidx.compose.foundation:foundation-android:1.7.2 +androidx.compose.foundation:foundation-layout-android:1.7.2 +androidx.compose.foundation:foundation-layout:1.7.2 +androidx.compose.foundation:foundation:1.7.2 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 androidx.compose.material:material-icons-core-android:1.7.0 @@ -36,24 +36,24 @@ androidx.compose.material:material-icons-extended-android:1.7.0 androidx.compose.material:material-icons-extended:1.7.0 androidx.compose.material:material-ripple-android:1.7.0 androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.0 -androidx.compose.runtime:runtime-saveable-android:1.7.0 -androidx.compose.runtime:runtime-saveable:1.7.0 -androidx.compose.runtime:runtime:1.7.0 -androidx.compose.ui:ui-android:1.7.0 -androidx.compose.ui:ui-geometry-android:1.7.0 -androidx.compose.ui:ui-geometry:1.7.0 -androidx.compose.ui:ui-graphics-android:1.7.0 -androidx.compose.ui:ui-graphics:1.7.0 -androidx.compose.ui:ui-text-android:1.7.0 -androidx.compose.ui:ui-text:1.7.0 -androidx.compose.ui:ui-tooling-preview-android:1.7.0 -androidx.compose.ui:ui-tooling-preview:1.7.0 -androidx.compose.ui:ui-unit-android:1.7.0 -androidx.compose.ui:ui-unit:1.7.0 -androidx.compose.ui:ui-util-android:1.7.0 -androidx.compose.ui:ui-util:1.7.0 -androidx.compose.ui:ui:1.7.0 +androidx.compose.runtime:runtime-android:1.7.2 +androidx.compose.runtime:runtime-saveable-android:1.7.2 +androidx.compose.runtime:runtime-saveable:1.7.2 +androidx.compose.runtime:runtime:1.7.2 +androidx.compose.ui:ui-android:1.7.2 +androidx.compose.ui:ui-geometry-android:1.7.2 +androidx.compose.ui:ui-geometry:1.7.2 +androidx.compose.ui:ui-graphics-android:1.7.2 +androidx.compose.ui:ui-graphics:1.7.2 +androidx.compose.ui:ui-text-android:1.7.2 +androidx.compose.ui:ui-text:1.7.2 +androidx.compose.ui:ui-tooling-preview-android:1.7.2 +androidx.compose.ui:ui-tooling-preview:1.7.2 +androidx.compose.ui:ui-unit-android:1.7.2 +androidx.compose.ui:ui-unit:1.7.2 +androidx.compose.ui:ui-util-android:1.7.2 +androidx.compose.ui:ui-util:1.7.2 +androidx.compose.ui:ui:1.7.2 androidx.compose:compose-bom:2024.09.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 @@ -71,42 +71,42 @@ androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2-views-helper:1.3.0 androidx.emoji2:emoji2:1.3.0 androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment-compose:1.8.3 -androidx.fragment:fragment-ktx:1.8.3 -androidx.fragment:fragment:1.8.3 +androidx.fragment:fragment-compose:1.8.4 +androidx.fragment:fragment-ktx:1.8.4 +androidx.fragment:fragment:1.8.4 androidx.graphics:graphics-path:1.0.1 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.5 -androidx.lifecycle:lifecycle-common-jvm:2.8.5 -androidx.lifecycle:lifecycle-common:2.8.5 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata-core:2.8.5 -androidx.lifecycle:lifecycle-livedata-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata:2.8.5 -androidx.lifecycle:lifecycle-process:2.8.5 -androidx.lifecycle:lifecycle-runtime-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.5 -androidx.lifecycle:lifecycle-runtime:2.8.5 -androidx.lifecycle:lifecycle-service:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.5 -androidx.lifecycle:lifecycle-viewmodel:2.8.5 +androidx.lifecycle:lifecycle-common-java8:2.8.6 +androidx.lifecycle:lifecycle-common-jvm:2.8.6 +androidx.lifecycle:lifecycle-common:2.8.6 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata-core:2.8.6 +androidx.lifecycle:lifecycle-livedata-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata:2.8.6 +androidx.lifecycle:lifecycle-process:2.8.6 +androidx.lifecycle:lifecycle-runtime-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.6 +androidx.lifecycle:lifecycle-runtime:2.8.6 +androidx.lifecycle:lifecycle-service:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.6 +androidx.lifecycle:lifecycle-viewmodel:2.8.6 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.1.0 -androidx.navigation:navigation-common-ktx:2.8.0 -androidx.navigation:navigation-common:2.8.0 -androidx.navigation:navigation-compose:2.8.0 -androidx.navigation:navigation-fragment:2.8.0 -androidx.navigation:navigation-runtime-ktx:2.8.0 -androidx.navigation:navigation-runtime:2.8.0 -androidx.navigation:navigation-ui:2.8.0 +androidx.navigation:navigation-common-ktx:2.8.3 +androidx.navigation:navigation-common:2.8.3 +androidx.navigation:navigation-compose:2.8.3 +androidx.navigation:navigation-fragment:2.8.3 +androidx.navigation:navigation-runtime-ktx:2.8.3 +androidx.navigation:navigation-runtime:2.8.3 +androidx.navigation:navigation-ui:2.8.3 androidx.preference:preference:1.2.1 androidx.print:print:1.0.0 androidx.profileinstaller:profileinstaller:1.3.1 diff --git a/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt b/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt index 594ef3c4a0e..5e4612d3af2 100644 --- a/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt @@ -1,9 +1,9 @@ -androidx.activity:activity-compose:1.9.2 -androidx.activity:activity-ktx:1.9.2 -androidx.activity:activity:1.9.2 +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 androidx.annotation:annotation-experimental:1.4.1 -androidx.annotation:annotation-jvm:1.8.2 -androidx.annotation:annotation:1.8.2 +androidx.annotation:annotation-jvm:1.9.0 +androidx.annotation:annotation:1.9.0 androidx.appcompat:appcompat-resources:1.7.0 androidx.appcompat:appcompat:1.7.0 androidx.arch.core:core-common:2.2.0 @@ -11,23 +11,23 @@ androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.biometric:biometric:1.1.0 androidx.browser:browser:1.3.0 -androidx.camera:camera-camera2:1.3.1 -androidx.camera:camera-core:1.3.1 -androidx.camera:camera-lifecycle:1.3.1 -androidx.camera:camera-video:1.3.1 -androidx.camera:camera-view:1.3.1 +androidx.camera:camera-camera2:1.3.4 +androidx.camera:camera-core:1.3.4 +androidx.camera:camera-lifecycle:1.3.4 +androidx.camera:camera-video:1.3.4 +androidx.camera:camera-view:1.3.4 androidx.cardview:cardview:1.0.0 -androidx.collection:collection-jvm:1.4.2 -androidx.collection:collection-ktx:1.4.2 -androidx.collection:collection:1.4.2 -androidx.compose.animation:animation-android:1.7.0 -androidx.compose.animation:animation-core-android:1.7.0 -androidx.compose.animation:animation-core:1.7.0 -androidx.compose.animation:animation:1.7.0 -androidx.compose.foundation:foundation-android:1.7.0 -androidx.compose.foundation:foundation-layout-android:1.7.0 -androidx.compose.foundation:foundation-layout:1.7.0 -androidx.compose.foundation:foundation:1.7.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.2 +androidx.compose.animation:animation-core-android:1.7.2 +androidx.compose.animation:animation-core:1.7.2 +androidx.compose.animation:animation:1.7.2 +androidx.compose.foundation:foundation-android:1.7.2 +androidx.compose.foundation:foundation-layout-android:1.7.2 +androidx.compose.foundation:foundation-layout:1.7.2 +androidx.compose.foundation:foundation:1.7.2 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 androidx.compose.material:material-icons-core-android:1.7.0 @@ -36,24 +36,24 @@ androidx.compose.material:material-icons-extended-android:1.7.0 androidx.compose.material:material-icons-extended:1.7.0 androidx.compose.material:material-ripple-android:1.7.0 androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.0 -androidx.compose.runtime:runtime-saveable-android:1.7.0 -androidx.compose.runtime:runtime-saveable:1.7.0 -androidx.compose.runtime:runtime:1.7.0 -androidx.compose.ui:ui-android:1.7.0 -androidx.compose.ui:ui-geometry-android:1.7.0 -androidx.compose.ui:ui-geometry:1.7.0 -androidx.compose.ui:ui-graphics-android:1.7.0 -androidx.compose.ui:ui-graphics:1.7.0 -androidx.compose.ui:ui-text-android:1.7.0 -androidx.compose.ui:ui-text:1.7.0 -androidx.compose.ui:ui-tooling-preview-android:1.7.0 -androidx.compose.ui:ui-tooling-preview:1.7.0 -androidx.compose.ui:ui-unit-android:1.7.0 -androidx.compose.ui:ui-unit:1.7.0 -androidx.compose.ui:ui-util-android:1.7.0 -androidx.compose.ui:ui-util:1.7.0 -androidx.compose.ui:ui:1.7.0 +androidx.compose.runtime:runtime-android:1.7.2 +androidx.compose.runtime:runtime-saveable-android:1.7.2 +androidx.compose.runtime:runtime-saveable:1.7.2 +androidx.compose.runtime:runtime:1.7.2 +androidx.compose.ui:ui-android:1.7.2 +androidx.compose.ui:ui-geometry-android:1.7.2 +androidx.compose.ui:ui-geometry:1.7.2 +androidx.compose.ui:ui-graphics-android:1.7.2 +androidx.compose.ui:ui-graphics:1.7.2 +androidx.compose.ui:ui-text-android:1.7.2 +androidx.compose.ui:ui-text:1.7.2 +androidx.compose.ui:ui-tooling-preview-android:1.7.2 +androidx.compose.ui:ui-tooling-preview:1.7.2 +androidx.compose.ui:ui-unit-android:1.7.2 +androidx.compose.ui:ui-unit:1.7.2 +androidx.compose.ui:ui-util-android:1.7.2 +androidx.compose.ui:ui-util:1.7.2 +androidx.compose.ui:ui:1.7.2 androidx.compose:compose-bom:2024.09.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 @@ -71,42 +71,42 @@ androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2-views-helper:1.3.0 androidx.emoji2:emoji2:1.3.0 androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment-compose:1.8.3 -androidx.fragment:fragment-ktx:1.8.3 -androidx.fragment:fragment:1.8.3 +androidx.fragment:fragment-compose:1.8.4 +androidx.fragment:fragment-ktx:1.8.4 +androidx.fragment:fragment:1.8.4 androidx.graphics:graphics-path:1.0.1 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.5 -androidx.lifecycle:lifecycle-common-jvm:2.8.5 -androidx.lifecycle:lifecycle-common:2.8.5 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata-core:2.8.5 -androidx.lifecycle:lifecycle-livedata-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata:2.8.5 -androidx.lifecycle:lifecycle-process:2.8.5 -androidx.lifecycle:lifecycle-runtime-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.5 -androidx.lifecycle:lifecycle-runtime:2.8.5 -androidx.lifecycle:lifecycle-service:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.5 -androidx.lifecycle:lifecycle-viewmodel:2.8.5 +androidx.lifecycle:lifecycle-common-java8:2.8.6 +androidx.lifecycle:lifecycle-common-jvm:2.8.6 +androidx.lifecycle:lifecycle-common:2.8.6 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata-core:2.8.6 +androidx.lifecycle:lifecycle-livedata-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata:2.8.6 +androidx.lifecycle:lifecycle-process:2.8.6 +androidx.lifecycle:lifecycle-runtime-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.6 +androidx.lifecycle:lifecycle-runtime:2.8.6 +androidx.lifecycle:lifecycle-service:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.6 +androidx.lifecycle:lifecycle-viewmodel:2.8.6 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.1.0 -androidx.navigation:navigation-common-ktx:2.8.0 -androidx.navigation:navigation-common:2.8.0 -androidx.navigation:navigation-compose:2.8.0 -androidx.navigation:navigation-fragment:2.8.0 -androidx.navigation:navigation-runtime-ktx:2.8.0 -androidx.navigation:navigation-runtime:2.8.0 -androidx.navigation:navigation-ui:2.8.0 +androidx.navigation:navigation-common-ktx:2.8.3 +androidx.navigation:navigation-common:2.8.3 +androidx.navigation:navigation-compose:2.8.3 +androidx.navigation:navigation-fragment:2.8.3 +androidx.navigation:navigation-runtime-ktx:2.8.3 +androidx.navigation:navigation-runtime:2.8.3 +androidx.navigation:navigation-ui:2.8.3 androidx.preference:preference:1.2.1 androidx.print:print:1.0.0 androidx.profileinstaller:profileinstaller:1.3.1 diff --git a/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt b/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt index 594ef3c4a0e..5e4612d3af2 100644 --- a/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt @@ -1,9 +1,9 @@ -androidx.activity:activity-compose:1.9.2 -androidx.activity:activity-ktx:1.9.2 -androidx.activity:activity:1.9.2 +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 androidx.annotation:annotation-experimental:1.4.1 -androidx.annotation:annotation-jvm:1.8.2 -androidx.annotation:annotation:1.8.2 +androidx.annotation:annotation-jvm:1.9.0 +androidx.annotation:annotation:1.9.0 androidx.appcompat:appcompat-resources:1.7.0 androidx.appcompat:appcompat:1.7.0 androidx.arch.core:core-common:2.2.0 @@ -11,23 +11,23 @@ androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.biometric:biometric:1.1.0 androidx.browser:browser:1.3.0 -androidx.camera:camera-camera2:1.3.1 -androidx.camera:camera-core:1.3.1 -androidx.camera:camera-lifecycle:1.3.1 -androidx.camera:camera-video:1.3.1 -androidx.camera:camera-view:1.3.1 +androidx.camera:camera-camera2:1.3.4 +androidx.camera:camera-core:1.3.4 +androidx.camera:camera-lifecycle:1.3.4 +androidx.camera:camera-video:1.3.4 +androidx.camera:camera-view:1.3.4 androidx.cardview:cardview:1.0.0 -androidx.collection:collection-jvm:1.4.2 -androidx.collection:collection-ktx:1.4.2 -androidx.collection:collection:1.4.2 -androidx.compose.animation:animation-android:1.7.0 -androidx.compose.animation:animation-core-android:1.7.0 -androidx.compose.animation:animation-core:1.7.0 -androidx.compose.animation:animation:1.7.0 -androidx.compose.foundation:foundation-android:1.7.0 -androidx.compose.foundation:foundation-layout-android:1.7.0 -androidx.compose.foundation:foundation-layout:1.7.0 -androidx.compose.foundation:foundation:1.7.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.2 +androidx.compose.animation:animation-core-android:1.7.2 +androidx.compose.animation:animation-core:1.7.2 +androidx.compose.animation:animation:1.7.2 +androidx.compose.foundation:foundation-android:1.7.2 +androidx.compose.foundation:foundation-layout-android:1.7.2 +androidx.compose.foundation:foundation-layout:1.7.2 +androidx.compose.foundation:foundation:1.7.2 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 androidx.compose.material:material-icons-core-android:1.7.0 @@ -36,24 +36,24 @@ androidx.compose.material:material-icons-extended-android:1.7.0 androidx.compose.material:material-icons-extended:1.7.0 androidx.compose.material:material-ripple-android:1.7.0 androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.0 -androidx.compose.runtime:runtime-saveable-android:1.7.0 -androidx.compose.runtime:runtime-saveable:1.7.0 -androidx.compose.runtime:runtime:1.7.0 -androidx.compose.ui:ui-android:1.7.0 -androidx.compose.ui:ui-geometry-android:1.7.0 -androidx.compose.ui:ui-geometry:1.7.0 -androidx.compose.ui:ui-graphics-android:1.7.0 -androidx.compose.ui:ui-graphics:1.7.0 -androidx.compose.ui:ui-text-android:1.7.0 -androidx.compose.ui:ui-text:1.7.0 -androidx.compose.ui:ui-tooling-preview-android:1.7.0 -androidx.compose.ui:ui-tooling-preview:1.7.0 -androidx.compose.ui:ui-unit-android:1.7.0 -androidx.compose.ui:ui-unit:1.7.0 -androidx.compose.ui:ui-util-android:1.7.0 -androidx.compose.ui:ui-util:1.7.0 -androidx.compose.ui:ui:1.7.0 +androidx.compose.runtime:runtime-android:1.7.2 +androidx.compose.runtime:runtime-saveable-android:1.7.2 +androidx.compose.runtime:runtime-saveable:1.7.2 +androidx.compose.runtime:runtime:1.7.2 +androidx.compose.ui:ui-android:1.7.2 +androidx.compose.ui:ui-geometry-android:1.7.2 +androidx.compose.ui:ui-geometry:1.7.2 +androidx.compose.ui:ui-graphics-android:1.7.2 +androidx.compose.ui:ui-graphics:1.7.2 +androidx.compose.ui:ui-text-android:1.7.2 +androidx.compose.ui:ui-text:1.7.2 +androidx.compose.ui:ui-tooling-preview-android:1.7.2 +androidx.compose.ui:ui-tooling-preview:1.7.2 +androidx.compose.ui:ui-unit-android:1.7.2 +androidx.compose.ui:ui-unit:1.7.2 +androidx.compose.ui:ui-util-android:1.7.2 +androidx.compose.ui:ui-util:1.7.2 +androidx.compose.ui:ui:1.7.2 androidx.compose:compose-bom:2024.09.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 @@ -71,42 +71,42 @@ androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2-views-helper:1.3.0 androidx.emoji2:emoji2:1.3.0 androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment-compose:1.8.3 -androidx.fragment:fragment-ktx:1.8.3 -androidx.fragment:fragment:1.8.3 +androidx.fragment:fragment-compose:1.8.4 +androidx.fragment:fragment-ktx:1.8.4 +androidx.fragment:fragment:1.8.4 androidx.graphics:graphics-path:1.0.1 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.5 -androidx.lifecycle:lifecycle-common-jvm:2.8.5 -androidx.lifecycle:lifecycle-common:2.8.5 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata-core:2.8.5 -androidx.lifecycle:lifecycle-livedata-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata:2.8.5 -androidx.lifecycle:lifecycle-process:2.8.5 -androidx.lifecycle:lifecycle-runtime-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.5 -androidx.lifecycle:lifecycle-runtime:2.8.5 -androidx.lifecycle:lifecycle-service:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.5 -androidx.lifecycle:lifecycle-viewmodel:2.8.5 +androidx.lifecycle:lifecycle-common-java8:2.8.6 +androidx.lifecycle:lifecycle-common-jvm:2.8.6 +androidx.lifecycle:lifecycle-common:2.8.6 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata-core:2.8.6 +androidx.lifecycle:lifecycle-livedata-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata:2.8.6 +androidx.lifecycle:lifecycle-process:2.8.6 +androidx.lifecycle:lifecycle-runtime-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.6 +androidx.lifecycle:lifecycle-runtime:2.8.6 +androidx.lifecycle:lifecycle-service:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.6 +androidx.lifecycle:lifecycle-viewmodel:2.8.6 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.1.0 -androidx.navigation:navigation-common-ktx:2.8.0 -androidx.navigation:navigation-common:2.8.0 -androidx.navigation:navigation-compose:2.8.0 -androidx.navigation:navigation-fragment:2.8.0 -androidx.navigation:navigation-runtime-ktx:2.8.0 -androidx.navigation:navigation-runtime:2.8.0 -androidx.navigation:navigation-ui:2.8.0 +androidx.navigation:navigation-common-ktx:2.8.3 +androidx.navigation:navigation-common:2.8.3 +androidx.navigation:navigation-compose:2.8.3 +androidx.navigation:navigation-fragment:2.8.3 +androidx.navigation:navigation-runtime-ktx:2.8.3 +androidx.navigation:navigation-runtime:2.8.3 +androidx.navigation:navigation-ui:2.8.3 androidx.preference:preference:1.2.1 androidx.print:print:1.0.0 androidx.profileinstaller:profileinstaller:1.3.1 diff --git a/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt b/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt index 594ef3c4a0e..5e4612d3af2 100644 --- a/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt @@ -1,9 +1,9 @@ -androidx.activity:activity-compose:1.9.2 -androidx.activity:activity-ktx:1.9.2 -androidx.activity:activity:1.9.2 +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 androidx.annotation:annotation-experimental:1.4.1 -androidx.annotation:annotation-jvm:1.8.2 -androidx.annotation:annotation:1.8.2 +androidx.annotation:annotation-jvm:1.9.0 +androidx.annotation:annotation:1.9.0 androidx.appcompat:appcompat-resources:1.7.0 androidx.appcompat:appcompat:1.7.0 androidx.arch.core:core-common:2.2.0 @@ -11,23 +11,23 @@ androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.biometric:biometric:1.1.0 androidx.browser:browser:1.3.0 -androidx.camera:camera-camera2:1.3.1 -androidx.camera:camera-core:1.3.1 -androidx.camera:camera-lifecycle:1.3.1 -androidx.camera:camera-video:1.3.1 -androidx.camera:camera-view:1.3.1 +androidx.camera:camera-camera2:1.3.4 +androidx.camera:camera-core:1.3.4 +androidx.camera:camera-lifecycle:1.3.4 +androidx.camera:camera-video:1.3.4 +androidx.camera:camera-view:1.3.4 androidx.cardview:cardview:1.0.0 -androidx.collection:collection-jvm:1.4.2 -androidx.collection:collection-ktx:1.4.2 -androidx.collection:collection:1.4.2 -androidx.compose.animation:animation-android:1.7.0 -androidx.compose.animation:animation-core-android:1.7.0 -androidx.compose.animation:animation-core:1.7.0 -androidx.compose.animation:animation:1.7.0 -androidx.compose.foundation:foundation-android:1.7.0 -androidx.compose.foundation:foundation-layout-android:1.7.0 -androidx.compose.foundation:foundation-layout:1.7.0 -androidx.compose.foundation:foundation:1.7.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.2 +androidx.compose.animation:animation-core-android:1.7.2 +androidx.compose.animation:animation-core:1.7.2 +androidx.compose.animation:animation:1.7.2 +androidx.compose.foundation:foundation-android:1.7.2 +androidx.compose.foundation:foundation-layout-android:1.7.2 +androidx.compose.foundation:foundation-layout:1.7.2 +androidx.compose.foundation:foundation:1.7.2 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 androidx.compose.material:material-icons-core-android:1.7.0 @@ -36,24 +36,24 @@ androidx.compose.material:material-icons-extended-android:1.7.0 androidx.compose.material:material-icons-extended:1.7.0 androidx.compose.material:material-ripple-android:1.7.0 androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.0 -androidx.compose.runtime:runtime-saveable-android:1.7.0 -androidx.compose.runtime:runtime-saveable:1.7.0 -androidx.compose.runtime:runtime:1.7.0 -androidx.compose.ui:ui-android:1.7.0 -androidx.compose.ui:ui-geometry-android:1.7.0 -androidx.compose.ui:ui-geometry:1.7.0 -androidx.compose.ui:ui-graphics-android:1.7.0 -androidx.compose.ui:ui-graphics:1.7.0 -androidx.compose.ui:ui-text-android:1.7.0 -androidx.compose.ui:ui-text:1.7.0 -androidx.compose.ui:ui-tooling-preview-android:1.7.0 -androidx.compose.ui:ui-tooling-preview:1.7.0 -androidx.compose.ui:ui-unit-android:1.7.0 -androidx.compose.ui:ui-unit:1.7.0 -androidx.compose.ui:ui-util-android:1.7.0 -androidx.compose.ui:ui-util:1.7.0 -androidx.compose.ui:ui:1.7.0 +androidx.compose.runtime:runtime-android:1.7.2 +androidx.compose.runtime:runtime-saveable-android:1.7.2 +androidx.compose.runtime:runtime-saveable:1.7.2 +androidx.compose.runtime:runtime:1.7.2 +androidx.compose.ui:ui-android:1.7.2 +androidx.compose.ui:ui-geometry-android:1.7.2 +androidx.compose.ui:ui-geometry:1.7.2 +androidx.compose.ui:ui-graphics-android:1.7.2 +androidx.compose.ui:ui-graphics:1.7.2 +androidx.compose.ui:ui-text-android:1.7.2 +androidx.compose.ui:ui-text:1.7.2 +androidx.compose.ui:ui-tooling-preview-android:1.7.2 +androidx.compose.ui:ui-tooling-preview:1.7.2 +androidx.compose.ui:ui-unit-android:1.7.2 +androidx.compose.ui:ui-unit:1.7.2 +androidx.compose.ui:ui-util-android:1.7.2 +androidx.compose.ui:ui-util:1.7.2 +androidx.compose.ui:ui:1.7.2 androidx.compose:compose-bom:2024.09.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 @@ -71,42 +71,42 @@ androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2-views-helper:1.3.0 androidx.emoji2:emoji2:1.3.0 androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment-compose:1.8.3 -androidx.fragment:fragment-ktx:1.8.3 -androidx.fragment:fragment:1.8.3 +androidx.fragment:fragment-compose:1.8.4 +androidx.fragment:fragment-ktx:1.8.4 +androidx.fragment:fragment:1.8.4 androidx.graphics:graphics-path:1.0.1 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.5 -androidx.lifecycle:lifecycle-common-jvm:2.8.5 -androidx.lifecycle:lifecycle-common:2.8.5 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata-core:2.8.5 -androidx.lifecycle:lifecycle-livedata-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata:2.8.5 -androidx.lifecycle:lifecycle-process:2.8.5 -androidx.lifecycle:lifecycle-runtime-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.5 -androidx.lifecycle:lifecycle-runtime:2.8.5 -androidx.lifecycle:lifecycle-service:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.5 -androidx.lifecycle:lifecycle-viewmodel:2.8.5 +androidx.lifecycle:lifecycle-common-java8:2.8.6 +androidx.lifecycle:lifecycle-common-jvm:2.8.6 +androidx.lifecycle:lifecycle-common:2.8.6 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata-core:2.8.6 +androidx.lifecycle:lifecycle-livedata-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata:2.8.6 +androidx.lifecycle:lifecycle-process:2.8.6 +androidx.lifecycle:lifecycle-runtime-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.6 +androidx.lifecycle:lifecycle-runtime:2.8.6 +androidx.lifecycle:lifecycle-service:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.6 +androidx.lifecycle:lifecycle-viewmodel:2.8.6 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.1.0 -androidx.navigation:navigation-common-ktx:2.8.0 -androidx.navigation:navigation-common:2.8.0 -androidx.navigation:navigation-compose:2.8.0 -androidx.navigation:navigation-fragment:2.8.0 -androidx.navigation:navigation-runtime-ktx:2.8.0 -androidx.navigation:navigation-runtime:2.8.0 -androidx.navigation:navigation-ui:2.8.0 +androidx.navigation:navigation-common-ktx:2.8.3 +androidx.navigation:navigation-common:2.8.3 +androidx.navigation:navigation-compose:2.8.3 +androidx.navigation:navigation-fragment:2.8.3 +androidx.navigation:navigation-runtime-ktx:2.8.3 +androidx.navigation:navigation-runtime:2.8.3 +androidx.navigation:navigation-ui:2.8.3 androidx.preference:preference:1.2.1 androidx.print:print:1.0.0 androidx.profileinstaller:profileinstaller:1.3.1 diff --git a/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt b/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt index ee1537aed3a..63b272eddcb 100644 --- a/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt @@ -1,9 +1,9 @@ -androidx.activity:activity-compose:1.9.2 -androidx.activity:activity-ktx:1.9.2 -androidx.activity:activity:1.9.2 +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 androidx.annotation:annotation-experimental:1.4.1 -androidx.annotation:annotation-jvm:1.8.2 -androidx.annotation:annotation:1.8.2 +androidx.annotation:annotation-jvm:1.9.0 +androidx.annotation:annotation:1.9.0 androidx.appcompat:appcompat-resources:1.7.0 androidx.appcompat:appcompat:1.7.0 androidx.arch.core:core-common:2.2.0 @@ -11,23 +11,23 @@ androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.biometric:biometric:1.1.0 androidx.browser:browser:1.3.0 -androidx.camera:camera-camera2:1.3.1 -androidx.camera:camera-core:1.3.1 -androidx.camera:camera-lifecycle:1.3.1 -androidx.camera:camera-video:1.3.1 -androidx.camera:camera-view:1.3.1 +androidx.camera:camera-camera2:1.3.4 +androidx.camera:camera-core:1.3.4 +androidx.camera:camera-lifecycle:1.3.4 +androidx.camera:camera-video:1.3.4 +androidx.camera:camera-view:1.3.4 androidx.cardview:cardview:1.0.0 -androidx.collection:collection-jvm:1.4.2 -androidx.collection:collection-ktx:1.4.2 -androidx.collection:collection:1.4.2 -androidx.compose.animation:animation-android:1.7.0 -androidx.compose.animation:animation-core-android:1.7.0 -androidx.compose.animation:animation-core:1.7.0 -androidx.compose.animation:animation:1.7.0 -androidx.compose.foundation:foundation-android:1.7.0 -androidx.compose.foundation:foundation-layout-android:1.7.0 -androidx.compose.foundation:foundation-layout:1.7.0 -androidx.compose.foundation:foundation:1.7.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.2 +androidx.compose.animation:animation-core-android:1.7.2 +androidx.compose.animation:animation-core:1.7.2 +androidx.compose.animation:animation:1.7.2 +androidx.compose.foundation:foundation-android:1.7.2 +androidx.compose.foundation:foundation-layout-android:1.7.2 +androidx.compose.foundation:foundation-layout:1.7.2 +androidx.compose.foundation:foundation:1.7.2 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 androidx.compose.material:material-icons-core-android:1.7.0 @@ -36,24 +36,24 @@ androidx.compose.material:material-icons-extended-android:1.7.0 androidx.compose.material:material-icons-extended:1.7.0 androidx.compose.material:material-ripple-android:1.7.0 androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.0 -androidx.compose.runtime:runtime-saveable-android:1.7.0 -androidx.compose.runtime:runtime-saveable:1.7.0 -androidx.compose.runtime:runtime:1.7.0 -androidx.compose.ui:ui-android:1.7.0 -androidx.compose.ui:ui-geometry-android:1.7.0 -androidx.compose.ui:ui-geometry:1.7.0 -androidx.compose.ui:ui-graphics-android:1.7.0 -androidx.compose.ui:ui-graphics:1.7.0 -androidx.compose.ui:ui-text-android:1.7.0 -androidx.compose.ui:ui-text:1.7.0 -androidx.compose.ui:ui-tooling-preview-android:1.7.0 -androidx.compose.ui:ui-tooling-preview:1.7.0 -androidx.compose.ui:ui-unit-android:1.7.0 -androidx.compose.ui:ui-unit:1.7.0 -androidx.compose.ui:ui-util-android:1.7.0 -androidx.compose.ui:ui-util:1.7.0 -androidx.compose.ui:ui:1.7.0 +androidx.compose.runtime:runtime-android:1.7.2 +androidx.compose.runtime:runtime-saveable-android:1.7.2 +androidx.compose.runtime:runtime-saveable:1.7.2 +androidx.compose.runtime:runtime:1.7.2 +androidx.compose.ui:ui-android:1.7.2 +androidx.compose.ui:ui-geometry-android:1.7.2 +androidx.compose.ui:ui-geometry:1.7.2 +androidx.compose.ui:ui-graphics-android:1.7.2 +androidx.compose.ui:ui-graphics:1.7.2 +androidx.compose.ui:ui-text-android:1.7.2 +androidx.compose.ui:ui-text:1.7.2 +androidx.compose.ui:ui-tooling-preview-android:1.7.2 +androidx.compose.ui:ui-tooling-preview:1.7.2 +androidx.compose.ui:ui-unit-android:1.7.2 +androidx.compose.ui:ui-unit:1.7.2 +androidx.compose.ui:ui-util-android:1.7.2 +androidx.compose.ui:ui-util:1.7.2 +androidx.compose.ui:ui:1.7.2 androidx.compose:compose-bom:2024.09.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 @@ -71,42 +71,42 @@ androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2-views-helper:1.3.0 androidx.emoji2:emoji2:1.3.0 androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment-compose:1.8.3 -androidx.fragment:fragment-ktx:1.8.3 -androidx.fragment:fragment:1.8.3 +androidx.fragment:fragment-compose:1.8.4 +androidx.fragment:fragment-ktx:1.8.4 +androidx.fragment:fragment:1.8.4 androidx.graphics:graphics-path:1.0.1 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.5 -androidx.lifecycle:lifecycle-common-jvm:2.8.5 -androidx.lifecycle:lifecycle-common:2.8.5 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata-core:2.8.5 -androidx.lifecycle:lifecycle-livedata-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata:2.8.5 -androidx.lifecycle:lifecycle-process:2.8.5 -androidx.lifecycle:lifecycle-runtime-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.5 -androidx.lifecycle:lifecycle-runtime:2.8.5 -androidx.lifecycle:lifecycle-service:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.5 -androidx.lifecycle:lifecycle-viewmodel:2.8.5 +androidx.lifecycle:lifecycle-common-java8:2.8.6 +androidx.lifecycle:lifecycle-common-jvm:2.8.6 +androidx.lifecycle:lifecycle-common:2.8.6 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata-core:2.8.6 +androidx.lifecycle:lifecycle-livedata-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata:2.8.6 +androidx.lifecycle:lifecycle-process:2.8.6 +androidx.lifecycle:lifecycle-runtime-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.6 +androidx.lifecycle:lifecycle-runtime:2.8.6 +androidx.lifecycle:lifecycle-service:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.6 +androidx.lifecycle:lifecycle-viewmodel:2.8.6 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.1.0 -androidx.navigation:navigation-common-ktx:2.8.0 -androidx.navigation:navigation-common:2.8.0 -androidx.navigation:navigation-compose:2.8.0 -androidx.navigation:navigation-fragment:2.8.0 -androidx.navigation:navigation-runtime-ktx:2.8.0 -androidx.navigation:navigation-runtime:2.8.0 -androidx.navigation:navigation-ui:2.8.0 +androidx.navigation:navigation-common-ktx:2.8.3 +androidx.navigation:navigation-common:2.8.3 +androidx.navigation:navigation-compose:2.8.3 +androidx.navigation:navigation-fragment:2.8.3 +androidx.navigation:navigation-runtime-ktx:2.8.3 +androidx.navigation:navigation-runtime:2.8.3 +androidx.navigation:navigation-ui:2.8.3 androidx.preference:preference:1.2.1 androidx.print:print:1.0.0 androidx.profileinstaller:profileinstaller:1.3.1 diff --git a/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt b/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt index ee1537aed3a..63b272eddcb 100644 --- a/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt @@ -1,9 +1,9 @@ -androidx.activity:activity-compose:1.9.2 -androidx.activity:activity-ktx:1.9.2 -androidx.activity:activity:1.9.2 +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 androidx.annotation:annotation-experimental:1.4.1 -androidx.annotation:annotation-jvm:1.8.2 -androidx.annotation:annotation:1.8.2 +androidx.annotation:annotation-jvm:1.9.0 +androidx.annotation:annotation:1.9.0 androidx.appcompat:appcompat-resources:1.7.0 androidx.appcompat:appcompat:1.7.0 androidx.arch.core:core-common:2.2.0 @@ -11,23 +11,23 @@ androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.biometric:biometric:1.1.0 androidx.browser:browser:1.3.0 -androidx.camera:camera-camera2:1.3.1 -androidx.camera:camera-core:1.3.1 -androidx.camera:camera-lifecycle:1.3.1 -androidx.camera:camera-video:1.3.1 -androidx.camera:camera-view:1.3.1 +androidx.camera:camera-camera2:1.3.4 +androidx.camera:camera-core:1.3.4 +androidx.camera:camera-lifecycle:1.3.4 +androidx.camera:camera-video:1.3.4 +androidx.camera:camera-view:1.3.4 androidx.cardview:cardview:1.0.0 -androidx.collection:collection-jvm:1.4.2 -androidx.collection:collection-ktx:1.4.2 -androidx.collection:collection:1.4.2 -androidx.compose.animation:animation-android:1.7.0 -androidx.compose.animation:animation-core-android:1.7.0 -androidx.compose.animation:animation-core:1.7.0 -androidx.compose.animation:animation:1.7.0 -androidx.compose.foundation:foundation-android:1.7.0 -androidx.compose.foundation:foundation-layout-android:1.7.0 -androidx.compose.foundation:foundation-layout:1.7.0 -androidx.compose.foundation:foundation:1.7.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.2 +androidx.compose.animation:animation-core-android:1.7.2 +androidx.compose.animation:animation-core:1.7.2 +androidx.compose.animation:animation:1.7.2 +androidx.compose.foundation:foundation-android:1.7.2 +androidx.compose.foundation:foundation-layout-android:1.7.2 +androidx.compose.foundation:foundation-layout:1.7.2 +androidx.compose.foundation:foundation:1.7.2 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 androidx.compose.material:material-icons-core-android:1.7.0 @@ -36,24 +36,24 @@ androidx.compose.material:material-icons-extended-android:1.7.0 androidx.compose.material:material-icons-extended:1.7.0 androidx.compose.material:material-ripple-android:1.7.0 androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.0 -androidx.compose.runtime:runtime-saveable-android:1.7.0 -androidx.compose.runtime:runtime-saveable:1.7.0 -androidx.compose.runtime:runtime:1.7.0 -androidx.compose.ui:ui-android:1.7.0 -androidx.compose.ui:ui-geometry-android:1.7.0 -androidx.compose.ui:ui-geometry:1.7.0 -androidx.compose.ui:ui-graphics-android:1.7.0 -androidx.compose.ui:ui-graphics:1.7.0 -androidx.compose.ui:ui-text-android:1.7.0 -androidx.compose.ui:ui-text:1.7.0 -androidx.compose.ui:ui-tooling-preview-android:1.7.0 -androidx.compose.ui:ui-tooling-preview:1.7.0 -androidx.compose.ui:ui-unit-android:1.7.0 -androidx.compose.ui:ui-unit:1.7.0 -androidx.compose.ui:ui-util-android:1.7.0 -androidx.compose.ui:ui-util:1.7.0 -androidx.compose.ui:ui:1.7.0 +androidx.compose.runtime:runtime-android:1.7.2 +androidx.compose.runtime:runtime-saveable-android:1.7.2 +androidx.compose.runtime:runtime-saveable:1.7.2 +androidx.compose.runtime:runtime:1.7.2 +androidx.compose.ui:ui-android:1.7.2 +androidx.compose.ui:ui-geometry-android:1.7.2 +androidx.compose.ui:ui-geometry:1.7.2 +androidx.compose.ui:ui-graphics-android:1.7.2 +androidx.compose.ui:ui-graphics:1.7.2 +androidx.compose.ui:ui-text-android:1.7.2 +androidx.compose.ui:ui-text:1.7.2 +androidx.compose.ui:ui-tooling-preview-android:1.7.2 +androidx.compose.ui:ui-tooling-preview:1.7.2 +androidx.compose.ui:ui-unit-android:1.7.2 +androidx.compose.ui:ui-unit:1.7.2 +androidx.compose.ui:ui-util-android:1.7.2 +androidx.compose.ui:ui-util:1.7.2 +androidx.compose.ui:ui:1.7.2 androidx.compose:compose-bom:2024.09.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 @@ -71,42 +71,42 @@ androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2-views-helper:1.3.0 androidx.emoji2:emoji2:1.3.0 androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment-compose:1.8.3 -androidx.fragment:fragment-ktx:1.8.3 -androidx.fragment:fragment:1.8.3 +androidx.fragment:fragment-compose:1.8.4 +androidx.fragment:fragment-ktx:1.8.4 +androidx.fragment:fragment:1.8.4 androidx.graphics:graphics-path:1.0.1 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.5 -androidx.lifecycle:lifecycle-common-jvm:2.8.5 -androidx.lifecycle:lifecycle-common:2.8.5 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata-core:2.8.5 -androidx.lifecycle:lifecycle-livedata-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata:2.8.5 -androidx.lifecycle:lifecycle-process:2.8.5 -androidx.lifecycle:lifecycle-runtime-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.5 -androidx.lifecycle:lifecycle-runtime:2.8.5 -androidx.lifecycle:lifecycle-service:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.5 -androidx.lifecycle:lifecycle-viewmodel:2.8.5 +androidx.lifecycle:lifecycle-common-java8:2.8.6 +androidx.lifecycle:lifecycle-common-jvm:2.8.6 +androidx.lifecycle:lifecycle-common:2.8.6 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata-core:2.8.6 +androidx.lifecycle:lifecycle-livedata-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata:2.8.6 +androidx.lifecycle:lifecycle-process:2.8.6 +androidx.lifecycle:lifecycle-runtime-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.6 +androidx.lifecycle:lifecycle-runtime:2.8.6 +androidx.lifecycle:lifecycle-service:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.6 +androidx.lifecycle:lifecycle-viewmodel:2.8.6 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.1.0 -androidx.navigation:navigation-common-ktx:2.8.0 -androidx.navigation:navigation-common:2.8.0 -androidx.navigation:navigation-compose:2.8.0 -androidx.navigation:navigation-fragment:2.8.0 -androidx.navigation:navigation-runtime-ktx:2.8.0 -androidx.navigation:navigation-runtime:2.8.0 -androidx.navigation:navigation-ui:2.8.0 +androidx.navigation:navigation-common-ktx:2.8.3 +androidx.navigation:navigation-common:2.8.3 +androidx.navigation:navigation-compose:2.8.3 +androidx.navigation:navigation-fragment:2.8.3 +androidx.navigation:navigation-runtime-ktx:2.8.3 +androidx.navigation:navigation-runtime:2.8.3 +androidx.navigation:navigation-ui:2.8.3 androidx.preference:preference:1.2.1 androidx.print:print:1.0.0 androidx.profileinstaller:profileinstaller:1.3.1 diff --git a/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt b/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt index ee1537aed3a..63b272eddcb 100644 --- a/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt @@ -1,9 +1,9 @@ -androidx.activity:activity-compose:1.9.2 -androidx.activity:activity-ktx:1.9.2 -androidx.activity:activity:1.9.2 +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 androidx.annotation:annotation-experimental:1.4.1 -androidx.annotation:annotation-jvm:1.8.2 -androidx.annotation:annotation:1.8.2 +androidx.annotation:annotation-jvm:1.9.0 +androidx.annotation:annotation:1.9.0 androidx.appcompat:appcompat-resources:1.7.0 androidx.appcompat:appcompat:1.7.0 androidx.arch.core:core-common:2.2.0 @@ -11,23 +11,23 @@ androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.biometric:biometric:1.1.0 androidx.browser:browser:1.3.0 -androidx.camera:camera-camera2:1.3.1 -androidx.camera:camera-core:1.3.1 -androidx.camera:camera-lifecycle:1.3.1 -androidx.camera:camera-video:1.3.1 -androidx.camera:camera-view:1.3.1 +androidx.camera:camera-camera2:1.3.4 +androidx.camera:camera-core:1.3.4 +androidx.camera:camera-lifecycle:1.3.4 +androidx.camera:camera-video:1.3.4 +androidx.camera:camera-view:1.3.4 androidx.cardview:cardview:1.0.0 -androidx.collection:collection-jvm:1.4.2 -androidx.collection:collection-ktx:1.4.2 -androidx.collection:collection:1.4.2 -androidx.compose.animation:animation-android:1.7.0 -androidx.compose.animation:animation-core-android:1.7.0 -androidx.compose.animation:animation-core:1.7.0 -androidx.compose.animation:animation:1.7.0 -androidx.compose.foundation:foundation-android:1.7.0 -androidx.compose.foundation:foundation-layout-android:1.7.0 -androidx.compose.foundation:foundation-layout:1.7.0 -androidx.compose.foundation:foundation:1.7.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.2 +androidx.compose.animation:animation-core-android:1.7.2 +androidx.compose.animation:animation-core:1.7.2 +androidx.compose.animation:animation:1.7.2 +androidx.compose.foundation:foundation-android:1.7.2 +androidx.compose.foundation:foundation-layout-android:1.7.2 +androidx.compose.foundation:foundation-layout:1.7.2 +androidx.compose.foundation:foundation:1.7.2 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 androidx.compose.material:material-icons-core-android:1.7.0 @@ -36,24 +36,24 @@ androidx.compose.material:material-icons-extended-android:1.7.0 androidx.compose.material:material-icons-extended:1.7.0 androidx.compose.material:material-ripple-android:1.7.0 androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.0 -androidx.compose.runtime:runtime-saveable-android:1.7.0 -androidx.compose.runtime:runtime-saveable:1.7.0 -androidx.compose.runtime:runtime:1.7.0 -androidx.compose.ui:ui-android:1.7.0 -androidx.compose.ui:ui-geometry-android:1.7.0 -androidx.compose.ui:ui-geometry:1.7.0 -androidx.compose.ui:ui-graphics-android:1.7.0 -androidx.compose.ui:ui-graphics:1.7.0 -androidx.compose.ui:ui-text-android:1.7.0 -androidx.compose.ui:ui-text:1.7.0 -androidx.compose.ui:ui-tooling-preview-android:1.7.0 -androidx.compose.ui:ui-tooling-preview:1.7.0 -androidx.compose.ui:ui-unit-android:1.7.0 -androidx.compose.ui:ui-unit:1.7.0 -androidx.compose.ui:ui-util-android:1.7.0 -androidx.compose.ui:ui-util:1.7.0 -androidx.compose.ui:ui:1.7.0 +androidx.compose.runtime:runtime-android:1.7.2 +androidx.compose.runtime:runtime-saveable-android:1.7.2 +androidx.compose.runtime:runtime-saveable:1.7.2 +androidx.compose.runtime:runtime:1.7.2 +androidx.compose.ui:ui-android:1.7.2 +androidx.compose.ui:ui-geometry-android:1.7.2 +androidx.compose.ui:ui-geometry:1.7.2 +androidx.compose.ui:ui-graphics-android:1.7.2 +androidx.compose.ui:ui-graphics:1.7.2 +androidx.compose.ui:ui-text-android:1.7.2 +androidx.compose.ui:ui-text:1.7.2 +androidx.compose.ui:ui-tooling-preview-android:1.7.2 +androidx.compose.ui:ui-tooling-preview:1.7.2 +androidx.compose.ui:ui-unit-android:1.7.2 +androidx.compose.ui:ui-unit:1.7.2 +androidx.compose.ui:ui-util-android:1.7.2 +androidx.compose.ui:ui-util:1.7.2 +androidx.compose.ui:ui:1.7.2 androidx.compose:compose-bom:2024.09.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 @@ -71,42 +71,42 @@ androidx.dynamicanimation:dynamicanimation:1.0.0 androidx.emoji2:emoji2-views-helper:1.3.0 androidx.emoji2:emoji2:1.3.0 androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment-compose:1.8.3 -androidx.fragment:fragment-ktx:1.8.3 -androidx.fragment:fragment:1.8.3 +androidx.fragment:fragment-compose:1.8.4 +androidx.fragment:fragment-ktx:1.8.4 +androidx.fragment:fragment:1.8.4 androidx.graphics:graphics-path:1.0.1 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.8.5 -androidx.lifecycle:lifecycle-common-jvm:2.8.5 -androidx.lifecycle:lifecycle-common:2.8.5 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata-core:2.8.5 -androidx.lifecycle:lifecycle-livedata-ktx:2.8.5 -androidx.lifecycle:lifecycle-livedata:2.8.5 -androidx.lifecycle:lifecycle-process:2.8.5 -androidx.lifecycle:lifecycle-runtime-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-compose:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.5 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.5 -androidx.lifecycle:lifecycle-runtime:2.8.5 -androidx.lifecycle:lifecycle-service:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.5 -androidx.lifecycle:lifecycle-viewmodel:2.8.5 +androidx.lifecycle:lifecycle-common-java8:2.8.6 +androidx.lifecycle:lifecycle-common-jvm:2.8.6 +androidx.lifecycle:lifecycle-common:2.8.6 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata-core:2.8.6 +androidx.lifecycle:lifecycle-livedata-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata:2.8.6 +androidx.lifecycle:lifecycle-process:2.8.6 +androidx.lifecycle:lifecycle-runtime-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.6 +androidx.lifecycle:lifecycle-runtime:2.8.6 +androidx.lifecycle:lifecycle-service:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.6 +androidx.lifecycle:lifecycle-viewmodel:2.8.6 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.1.0 -androidx.navigation:navigation-common-ktx:2.8.0 -androidx.navigation:navigation-common:2.8.0 -androidx.navigation:navigation-compose:2.8.0 -androidx.navigation:navigation-fragment:2.8.0 -androidx.navigation:navigation-runtime-ktx:2.8.0 -androidx.navigation:navigation-runtime:2.8.0 -androidx.navigation:navigation-ui:2.8.0 +androidx.navigation:navigation-common-ktx:2.8.3 +androidx.navigation:navigation-common:2.8.3 +androidx.navigation:navigation-compose:2.8.3 +androidx.navigation:navigation-fragment:2.8.3 +androidx.navigation:navigation-runtime-ktx:2.8.3 +androidx.navigation:navigation-runtime:2.8.3 +androidx.navigation:navigation-ui:2.8.3 androidx.preference:preference:1.2.1 androidx.print:print:1.0.0 androidx.profileinstaller:profileinstaller:1.3.1 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4ad78bcc7d1..c20e7f32880 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,11 +17,11 @@ androidMaterial = "1.12.0" # AGP and tools should be updated together androidGradlePlugin = "8.5.2" androidTools = "31.5.2" -androidxActivity = "1.9.2" -androidxAnnotation = "1.8.2" +androidxActivity = "1.9.3" +androidxAnnotation = "1.9.0" androidxAppCompat = "1.7.0" androidxBiometric = "1.1.0" -androidxCamera = "1.3.1" +androidxCamera = "1.3.4" # https://developer.android.com/jetpack/compose/bom/bom-mapping androidxComposeBom = "2024.09.00" androidxConstraintLayout = "2.1.4" @@ -29,10 +29,10 @@ androidxCoordinatorLayout = "1.2.0" androidxCore = "1.13.1" androidxCoreSplashscreen = "1.0.1" androidxDrawerLayout = "1.1.1" -androidxFragment = "1.8.3" -androidxLifecycle = "2.8.5" +androidxFragment = "1.8.4" +androidxLifecycle = "2.8.6" androidxLocalBroadcastManager = "1.1.0" -androidxNavigation = "2.8.0" +androidxNavigation = "2.8.3" androidxRecyclerView = "1.3.2" androidxPreference = "1.2.1" androidxSwiperefreshlayout = "1.1.0" From fb6adc615e0281232bd9665401821dbb5dd04065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Thu, 17 Oct 2024 19:24:13 +0200 Subject: [PATCH 35/45] Bump Jetpack Compose and Kotlin - AndroidX Compose 2024.09.00 -> 2024.10.00 - Kotlin BOM 2.0.20 -> 2.0.21 - Kotlin KSP 2.0.20-1.0.25 -> 2.0.21-1.0.25 --- .../dependencies/releaseRuntimeClasspath.txt | 80 +++++++++---------- .../dependencies/fossBetaRuntimeClasspath.txt | 80 +++++++++---------- .../fossDailyRuntimeClasspath.txt | 80 +++++++++---------- .../fossReleaseRuntimeClasspath.txt | 80 +++++++++---------- .../dependencies/fullBetaRuntimeClasspath.txt | 80 +++++++++---------- .../fullDailyRuntimeClasspath.txt | 80 +++++++++---------- .../fullReleaseRuntimeClasspath.txt | 80 +++++++++---------- gradle/libs.versions.toml | 6 +- 8 files changed, 283 insertions(+), 283 deletions(-) diff --git a/app-k9mail/dependencies/releaseRuntimeClasspath.txt b/app-k9mail/dependencies/releaseRuntimeClasspath.txt index 5e4612d3af2..e9a335a845e 100644 --- a/app-k9mail/dependencies/releaseRuntimeClasspath.txt +++ b/app-k9mail/dependencies/releaseRuntimeClasspath.txt @@ -20,41 +20,41 @@ androidx.cardview:cardview:1.0.0 androidx.collection:collection-jvm:1.4.4 androidx.collection:collection-ktx:1.4.4 androidx.collection:collection:1.4.4 -androidx.compose.animation:animation-android:1.7.2 -androidx.compose.animation:animation-core-android:1.7.2 -androidx.compose.animation:animation-core:1.7.2 -androidx.compose.animation:animation:1.7.2 -androidx.compose.foundation:foundation-android:1.7.2 -androidx.compose.foundation:foundation-layout-android:1.7.2 -androidx.compose.foundation:foundation-layout:1.7.2 -androidx.compose.foundation:foundation:1.7.2 +androidx.compose.animation:animation-android:1.7.4 +androidx.compose.animation:animation-core-android:1.7.4 +androidx.compose.animation:animation-core:1.7.4 +androidx.compose.animation:animation:1.7.4 +androidx.compose.foundation:foundation-android:1.7.4 +androidx.compose.foundation:foundation-layout-android:1.7.4 +androidx.compose.foundation:foundation-layout:1.7.4 +androidx.compose.foundation:foundation:1.7.4 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 -androidx.compose.material:material-icons-core-android:1.7.0 -androidx.compose.material:material-icons-core:1.7.0 -androidx.compose.material:material-icons-extended-android:1.7.0 -androidx.compose.material:material-icons-extended:1.7.0 -androidx.compose.material:material-ripple-android:1.7.0 -androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.2 -androidx.compose.runtime:runtime-saveable-android:1.7.2 -androidx.compose.runtime:runtime-saveable:1.7.2 -androidx.compose.runtime:runtime:1.7.2 -androidx.compose.ui:ui-android:1.7.2 -androidx.compose.ui:ui-geometry-android:1.7.2 -androidx.compose.ui:ui-geometry:1.7.2 -androidx.compose.ui:ui-graphics-android:1.7.2 -androidx.compose.ui:ui-graphics:1.7.2 -androidx.compose.ui:ui-text-android:1.7.2 -androidx.compose.ui:ui-text:1.7.2 -androidx.compose.ui:ui-tooling-preview-android:1.7.2 -androidx.compose.ui:ui-tooling-preview:1.7.2 -androidx.compose.ui:ui-unit-android:1.7.2 -androidx.compose.ui:ui-unit:1.7.2 -androidx.compose.ui:ui-util-android:1.7.2 -androidx.compose.ui:ui-util:1.7.2 -androidx.compose.ui:ui:1.7.2 -androidx.compose:compose-bom:2024.09.00 +androidx.compose.material:material-icons-core-android:1.7.4 +androidx.compose.material:material-icons-core:1.7.4 +androidx.compose.material:material-icons-extended-android:1.7.4 +androidx.compose.material:material-icons-extended:1.7.4 +androidx.compose.material:material-ripple-android:1.7.4 +androidx.compose.material:material-ripple:1.7.4 +androidx.compose.runtime:runtime-android:1.7.4 +androidx.compose.runtime:runtime-saveable-android:1.7.4 +androidx.compose.runtime:runtime-saveable:1.7.4 +androidx.compose.runtime:runtime:1.7.4 +androidx.compose.ui:ui-android:1.7.4 +androidx.compose.ui:ui-geometry-android:1.7.4 +androidx.compose.ui:ui-geometry:1.7.4 +androidx.compose.ui:ui-graphics-android:1.7.4 +androidx.compose.ui:ui-graphics:1.7.4 +androidx.compose.ui:ui-text-android:1.7.4 +androidx.compose.ui:ui-text:1.7.4 +androidx.compose.ui:ui-tooling-preview-android:1.7.4 +androidx.compose.ui:ui-tooling-preview:1.7.4 +androidx.compose.ui:ui-unit-android:1.7.4 +androidx.compose.ui:ui-unit:1.7.4 +androidx.compose.ui:ui-util-android:1.7.4 +androidx.compose.ui:ui-util:1.7.4 +androidx.compose.ui:ui:1.7.4 +androidx.compose:compose-bom:2024.10.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 androidx.constraintlayout:constraintlayout:2.1.4 @@ -187,13 +187,13 @@ org.apache.httpcomponents.core5:httpcore5:5.2.4 org.apache.james:apache-mime4j-core:0.8.9 org.apache.james:apache-mime4j-dom:0.8.9 org.jetbrains.compose.runtime:runtime:1.5.12 -org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-bom:2.0.20 -org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-bom:2.0.21 +org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 diff --git a/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt b/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt index 5e4612d3af2..e9a335a845e 100644 --- a/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt @@ -20,41 +20,41 @@ androidx.cardview:cardview:1.0.0 androidx.collection:collection-jvm:1.4.4 androidx.collection:collection-ktx:1.4.4 androidx.collection:collection:1.4.4 -androidx.compose.animation:animation-android:1.7.2 -androidx.compose.animation:animation-core-android:1.7.2 -androidx.compose.animation:animation-core:1.7.2 -androidx.compose.animation:animation:1.7.2 -androidx.compose.foundation:foundation-android:1.7.2 -androidx.compose.foundation:foundation-layout-android:1.7.2 -androidx.compose.foundation:foundation-layout:1.7.2 -androidx.compose.foundation:foundation:1.7.2 +androidx.compose.animation:animation-android:1.7.4 +androidx.compose.animation:animation-core-android:1.7.4 +androidx.compose.animation:animation-core:1.7.4 +androidx.compose.animation:animation:1.7.4 +androidx.compose.foundation:foundation-android:1.7.4 +androidx.compose.foundation:foundation-layout-android:1.7.4 +androidx.compose.foundation:foundation-layout:1.7.4 +androidx.compose.foundation:foundation:1.7.4 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 -androidx.compose.material:material-icons-core-android:1.7.0 -androidx.compose.material:material-icons-core:1.7.0 -androidx.compose.material:material-icons-extended-android:1.7.0 -androidx.compose.material:material-icons-extended:1.7.0 -androidx.compose.material:material-ripple-android:1.7.0 -androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.2 -androidx.compose.runtime:runtime-saveable-android:1.7.2 -androidx.compose.runtime:runtime-saveable:1.7.2 -androidx.compose.runtime:runtime:1.7.2 -androidx.compose.ui:ui-android:1.7.2 -androidx.compose.ui:ui-geometry-android:1.7.2 -androidx.compose.ui:ui-geometry:1.7.2 -androidx.compose.ui:ui-graphics-android:1.7.2 -androidx.compose.ui:ui-graphics:1.7.2 -androidx.compose.ui:ui-text-android:1.7.2 -androidx.compose.ui:ui-text:1.7.2 -androidx.compose.ui:ui-tooling-preview-android:1.7.2 -androidx.compose.ui:ui-tooling-preview:1.7.2 -androidx.compose.ui:ui-unit-android:1.7.2 -androidx.compose.ui:ui-unit:1.7.2 -androidx.compose.ui:ui-util-android:1.7.2 -androidx.compose.ui:ui-util:1.7.2 -androidx.compose.ui:ui:1.7.2 -androidx.compose:compose-bom:2024.09.00 +androidx.compose.material:material-icons-core-android:1.7.4 +androidx.compose.material:material-icons-core:1.7.4 +androidx.compose.material:material-icons-extended-android:1.7.4 +androidx.compose.material:material-icons-extended:1.7.4 +androidx.compose.material:material-ripple-android:1.7.4 +androidx.compose.material:material-ripple:1.7.4 +androidx.compose.runtime:runtime-android:1.7.4 +androidx.compose.runtime:runtime-saveable-android:1.7.4 +androidx.compose.runtime:runtime-saveable:1.7.4 +androidx.compose.runtime:runtime:1.7.4 +androidx.compose.ui:ui-android:1.7.4 +androidx.compose.ui:ui-geometry-android:1.7.4 +androidx.compose.ui:ui-geometry:1.7.4 +androidx.compose.ui:ui-graphics-android:1.7.4 +androidx.compose.ui:ui-graphics:1.7.4 +androidx.compose.ui:ui-text-android:1.7.4 +androidx.compose.ui:ui-text:1.7.4 +androidx.compose.ui:ui-tooling-preview-android:1.7.4 +androidx.compose.ui:ui-tooling-preview:1.7.4 +androidx.compose.ui:ui-unit-android:1.7.4 +androidx.compose.ui:ui-unit:1.7.4 +androidx.compose.ui:ui-util-android:1.7.4 +androidx.compose.ui:ui-util:1.7.4 +androidx.compose.ui:ui:1.7.4 +androidx.compose:compose-bom:2024.10.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 androidx.constraintlayout:constraintlayout:2.1.4 @@ -187,13 +187,13 @@ org.apache.httpcomponents.core5:httpcore5:5.2.4 org.apache.james:apache-mime4j-core:0.8.9 org.apache.james:apache-mime4j-dom:0.8.9 org.jetbrains.compose.runtime:runtime:1.5.12 -org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-bom:2.0.20 -org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-bom:2.0.21 +org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 diff --git a/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt b/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt index 5e4612d3af2..e9a335a845e 100644 --- a/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt @@ -20,41 +20,41 @@ androidx.cardview:cardview:1.0.0 androidx.collection:collection-jvm:1.4.4 androidx.collection:collection-ktx:1.4.4 androidx.collection:collection:1.4.4 -androidx.compose.animation:animation-android:1.7.2 -androidx.compose.animation:animation-core-android:1.7.2 -androidx.compose.animation:animation-core:1.7.2 -androidx.compose.animation:animation:1.7.2 -androidx.compose.foundation:foundation-android:1.7.2 -androidx.compose.foundation:foundation-layout-android:1.7.2 -androidx.compose.foundation:foundation-layout:1.7.2 -androidx.compose.foundation:foundation:1.7.2 +androidx.compose.animation:animation-android:1.7.4 +androidx.compose.animation:animation-core-android:1.7.4 +androidx.compose.animation:animation-core:1.7.4 +androidx.compose.animation:animation:1.7.4 +androidx.compose.foundation:foundation-android:1.7.4 +androidx.compose.foundation:foundation-layout-android:1.7.4 +androidx.compose.foundation:foundation-layout:1.7.4 +androidx.compose.foundation:foundation:1.7.4 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 -androidx.compose.material:material-icons-core-android:1.7.0 -androidx.compose.material:material-icons-core:1.7.0 -androidx.compose.material:material-icons-extended-android:1.7.0 -androidx.compose.material:material-icons-extended:1.7.0 -androidx.compose.material:material-ripple-android:1.7.0 -androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.2 -androidx.compose.runtime:runtime-saveable-android:1.7.2 -androidx.compose.runtime:runtime-saveable:1.7.2 -androidx.compose.runtime:runtime:1.7.2 -androidx.compose.ui:ui-android:1.7.2 -androidx.compose.ui:ui-geometry-android:1.7.2 -androidx.compose.ui:ui-geometry:1.7.2 -androidx.compose.ui:ui-graphics-android:1.7.2 -androidx.compose.ui:ui-graphics:1.7.2 -androidx.compose.ui:ui-text-android:1.7.2 -androidx.compose.ui:ui-text:1.7.2 -androidx.compose.ui:ui-tooling-preview-android:1.7.2 -androidx.compose.ui:ui-tooling-preview:1.7.2 -androidx.compose.ui:ui-unit-android:1.7.2 -androidx.compose.ui:ui-unit:1.7.2 -androidx.compose.ui:ui-util-android:1.7.2 -androidx.compose.ui:ui-util:1.7.2 -androidx.compose.ui:ui:1.7.2 -androidx.compose:compose-bom:2024.09.00 +androidx.compose.material:material-icons-core-android:1.7.4 +androidx.compose.material:material-icons-core:1.7.4 +androidx.compose.material:material-icons-extended-android:1.7.4 +androidx.compose.material:material-icons-extended:1.7.4 +androidx.compose.material:material-ripple-android:1.7.4 +androidx.compose.material:material-ripple:1.7.4 +androidx.compose.runtime:runtime-android:1.7.4 +androidx.compose.runtime:runtime-saveable-android:1.7.4 +androidx.compose.runtime:runtime-saveable:1.7.4 +androidx.compose.runtime:runtime:1.7.4 +androidx.compose.ui:ui-android:1.7.4 +androidx.compose.ui:ui-geometry-android:1.7.4 +androidx.compose.ui:ui-geometry:1.7.4 +androidx.compose.ui:ui-graphics-android:1.7.4 +androidx.compose.ui:ui-graphics:1.7.4 +androidx.compose.ui:ui-text-android:1.7.4 +androidx.compose.ui:ui-text:1.7.4 +androidx.compose.ui:ui-tooling-preview-android:1.7.4 +androidx.compose.ui:ui-tooling-preview:1.7.4 +androidx.compose.ui:ui-unit-android:1.7.4 +androidx.compose.ui:ui-unit:1.7.4 +androidx.compose.ui:ui-util-android:1.7.4 +androidx.compose.ui:ui-util:1.7.4 +androidx.compose.ui:ui:1.7.4 +androidx.compose:compose-bom:2024.10.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 androidx.constraintlayout:constraintlayout:2.1.4 @@ -187,13 +187,13 @@ org.apache.httpcomponents.core5:httpcore5:5.2.4 org.apache.james:apache-mime4j-core:0.8.9 org.apache.james:apache-mime4j-dom:0.8.9 org.jetbrains.compose.runtime:runtime:1.5.12 -org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-bom:2.0.20 -org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-bom:2.0.21 +org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 diff --git a/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt b/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt index 5e4612d3af2..e9a335a845e 100644 --- a/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt @@ -20,41 +20,41 @@ androidx.cardview:cardview:1.0.0 androidx.collection:collection-jvm:1.4.4 androidx.collection:collection-ktx:1.4.4 androidx.collection:collection:1.4.4 -androidx.compose.animation:animation-android:1.7.2 -androidx.compose.animation:animation-core-android:1.7.2 -androidx.compose.animation:animation-core:1.7.2 -androidx.compose.animation:animation:1.7.2 -androidx.compose.foundation:foundation-android:1.7.2 -androidx.compose.foundation:foundation-layout-android:1.7.2 -androidx.compose.foundation:foundation-layout:1.7.2 -androidx.compose.foundation:foundation:1.7.2 +androidx.compose.animation:animation-android:1.7.4 +androidx.compose.animation:animation-core-android:1.7.4 +androidx.compose.animation:animation-core:1.7.4 +androidx.compose.animation:animation:1.7.4 +androidx.compose.foundation:foundation-android:1.7.4 +androidx.compose.foundation:foundation-layout-android:1.7.4 +androidx.compose.foundation:foundation-layout:1.7.4 +androidx.compose.foundation:foundation:1.7.4 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 -androidx.compose.material:material-icons-core-android:1.7.0 -androidx.compose.material:material-icons-core:1.7.0 -androidx.compose.material:material-icons-extended-android:1.7.0 -androidx.compose.material:material-icons-extended:1.7.0 -androidx.compose.material:material-ripple-android:1.7.0 -androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.2 -androidx.compose.runtime:runtime-saveable-android:1.7.2 -androidx.compose.runtime:runtime-saveable:1.7.2 -androidx.compose.runtime:runtime:1.7.2 -androidx.compose.ui:ui-android:1.7.2 -androidx.compose.ui:ui-geometry-android:1.7.2 -androidx.compose.ui:ui-geometry:1.7.2 -androidx.compose.ui:ui-graphics-android:1.7.2 -androidx.compose.ui:ui-graphics:1.7.2 -androidx.compose.ui:ui-text-android:1.7.2 -androidx.compose.ui:ui-text:1.7.2 -androidx.compose.ui:ui-tooling-preview-android:1.7.2 -androidx.compose.ui:ui-tooling-preview:1.7.2 -androidx.compose.ui:ui-unit-android:1.7.2 -androidx.compose.ui:ui-unit:1.7.2 -androidx.compose.ui:ui-util-android:1.7.2 -androidx.compose.ui:ui-util:1.7.2 -androidx.compose.ui:ui:1.7.2 -androidx.compose:compose-bom:2024.09.00 +androidx.compose.material:material-icons-core-android:1.7.4 +androidx.compose.material:material-icons-core:1.7.4 +androidx.compose.material:material-icons-extended-android:1.7.4 +androidx.compose.material:material-icons-extended:1.7.4 +androidx.compose.material:material-ripple-android:1.7.4 +androidx.compose.material:material-ripple:1.7.4 +androidx.compose.runtime:runtime-android:1.7.4 +androidx.compose.runtime:runtime-saveable-android:1.7.4 +androidx.compose.runtime:runtime-saveable:1.7.4 +androidx.compose.runtime:runtime:1.7.4 +androidx.compose.ui:ui-android:1.7.4 +androidx.compose.ui:ui-geometry-android:1.7.4 +androidx.compose.ui:ui-geometry:1.7.4 +androidx.compose.ui:ui-graphics-android:1.7.4 +androidx.compose.ui:ui-graphics:1.7.4 +androidx.compose.ui:ui-text-android:1.7.4 +androidx.compose.ui:ui-text:1.7.4 +androidx.compose.ui:ui-tooling-preview-android:1.7.4 +androidx.compose.ui:ui-tooling-preview:1.7.4 +androidx.compose.ui:ui-unit-android:1.7.4 +androidx.compose.ui:ui-unit:1.7.4 +androidx.compose.ui:ui-util-android:1.7.4 +androidx.compose.ui:ui-util:1.7.4 +androidx.compose.ui:ui:1.7.4 +androidx.compose:compose-bom:2024.10.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 androidx.constraintlayout:constraintlayout:2.1.4 @@ -187,13 +187,13 @@ org.apache.httpcomponents.core5:httpcore5:5.2.4 org.apache.james:apache-mime4j-core:0.8.9 org.apache.james:apache-mime4j-dom:0.8.9 org.jetbrains.compose.runtime:runtime:1.5.12 -org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-bom:2.0.20 -org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-bom:2.0.21 +org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 diff --git a/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt b/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt index 63b272eddcb..45b02e1a7b2 100644 --- a/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt @@ -20,41 +20,41 @@ androidx.cardview:cardview:1.0.0 androidx.collection:collection-jvm:1.4.4 androidx.collection:collection-ktx:1.4.4 androidx.collection:collection:1.4.4 -androidx.compose.animation:animation-android:1.7.2 -androidx.compose.animation:animation-core-android:1.7.2 -androidx.compose.animation:animation-core:1.7.2 -androidx.compose.animation:animation:1.7.2 -androidx.compose.foundation:foundation-android:1.7.2 -androidx.compose.foundation:foundation-layout-android:1.7.2 -androidx.compose.foundation:foundation-layout:1.7.2 -androidx.compose.foundation:foundation:1.7.2 +androidx.compose.animation:animation-android:1.7.4 +androidx.compose.animation:animation-core-android:1.7.4 +androidx.compose.animation:animation-core:1.7.4 +androidx.compose.animation:animation:1.7.4 +androidx.compose.foundation:foundation-android:1.7.4 +androidx.compose.foundation:foundation-layout-android:1.7.4 +androidx.compose.foundation:foundation-layout:1.7.4 +androidx.compose.foundation:foundation:1.7.4 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 -androidx.compose.material:material-icons-core-android:1.7.0 -androidx.compose.material:material-icons-core:1.7.0 -androidx.compose.material:material-icons-extended-android:1.7.0 -androidx.compose.material:material-icons-extended:1.7.0 -androidx.compose.material:material-ripple-android:1.7.0 -androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.2 -androidx.compose.runtime:runtime-saveable-android:1.7.2 -androidx.compose.runtime:runtime-saveable:1.7.2 -androidx.compose.runtime:runtime:1.7.2 -androidx.compose.ui:ui-android:1.7.2 -androidx.compose.ui:ui-geometry-android:1.7.2 -androidx.compose.ui:ui-geometry:1.7.2 -androidx.compose.ui:ui-graphics-android:1.7.2 -androidx.compose.ui:ui-graphics:1.7.2 -androidx.compose.ui:ui-text-android:1.7.2 -androidx.compose.ui:ui-text:1.7.2 -androidx.compose.ui:ui-tooling-preview-android:1.7.2 -androidx.compose.ui:ui-tooling-preview:1.7.2 -androidx.compose.ui:ui-unit-android:1.7.2 -androidx.compose.ui:ui-unit:1.7.2 -androidx.compose.ui:ui-util-android:1.7.2 -androidx.compose.ui:ui-util:1.7.2 -androidx.compose.ui:ui:1.7.2 -androidx.compose:compose-bom:2024.09.00 +androidx.compose.material:material-icons-core-android:1.7.4 +androidx.compose.material:material-icons-core:1.7.4 +androidx.compose.material:material-icons-extended-android:1.7.4 +androidx.compose.material:material-icons-extended:1.7.4 +androidx.compose.material:material-ripple-android:1.7.4 +androidx.compose.material:material-ripple:1.7.4 +androidx.compose.runtime:runtime-android:1.7.4 +androidx.compose.runtime:runtime-saveable-android:1.7.4 +androidx.compose.runtime:runtime-saveable:1.7.4 +androidx.compose.runtime:runtime:1.7.4 +androidx.compose.ui:ui-android:1.7.4 +androidx.compose.ui:ui-geometry-android:1.7.4 +androidx.compose.ui:ui-geometry:1.7.4 +androidx.compose.ui:ui-graphics-android:1.7.4 +androidx.compose.ui:ui-graphics:1.7.4 +androidx.compose.ui:ui-text-android:1.7.4 +androidx.compose.ui:ui-text:1.7.4 +androidx.compose.ui:ui-tooling-preview-android:1.7.4 +androidx.compose.ui:ui-tooling-preview:1.7.4 +androidx.compose.ui:ui-unit-android:1.7.4 +androidx.compose.ui:ui-unit:1.7.4 +androidx.compose.ui:ui-util-android:1.7.4 +androidx.compose.ui:ui-util:1.7.4 +androidx.compose.ui:ui:1.7.4 +androidx.compose:compose-bom:2024.10.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 androidx.constraintlayout:constraintlayout:2.1.4 @@ -201,13 +201,13 @@ org.apache.httpcomponents.core5:httpcore5:5.2.4 org.apache.james:apache-mime4j-core:0.8.9 org.apache.james:apache-mime4j-dom:0.8.9 org.jetbrains.compose.runtime:runtime:1.5.12 -org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-bom:2.0.20 -org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-bom:2.0.21 +org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 diff --git a/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt b/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt index 63b272eddcb..45b02e1a7b2 100644 --- a/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt @@ -20,41 +20,41 @@ androidx.cardview:cardview:1.0.0 androidx.collection:collection-jvm:1.4.4 androidx.collection:collection-ktx:1.4.4 androidx.collection:collection:1.4.4 -androidx.compose.animation:animation-android:1.7.2 -androidx.compose.animation:animation-core-android:1.7.2 -androidx.compose.animation:animation-core:1.7.2 -androidx.compose.animation:animation:1.7.2 -androidx.compose.foundation:foundation-android:1.7.2 -androidx.compose.foundation:foundation-layout-android:1.7.2 -androidx.compose.foundation:foundation-layout:1.7.2 -androidx.compose.foundation:foundation:1.7.2 +androidx.compose.animation:animation-android:1.7.4 +androidx.compose.animation:animation-core-android:1.7.4 +androidx.compose.animation:animation-core:1.7.4 +androidx.compose.animation:animation:1.7.4 +androidx.compose.foundation:foundation-android:1.7.4 +androidx.compose.foundation:foundation-layout-android:1.7.4 +androidx.compose.foundation:foundation-layout:1.7.4 +androidx.compose.foundation:foundation:1.7.4 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 -androidx.compose.material:material-icons-core-android:1.7.0 -androidx.compose.material:material-icons-core:1.7.0 -androidx.compose.material:material-icons-extended-android:1.7.0 -androidx.compose.material:material-icons-extended:1.7.0 -androidx.compose.material:material-ripple-android:1.7.0 -androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.2 -androidx.compose.runtime:runtime-saveable-android:1.7.2 -androidx.compose.runtime:runtime-saveable:1.7.2 -androidx.compose.runtime:runtime:1.7.2 -androidx.compose.ui:ui-android:1.7.2 -androidx.compose.ui:ui-geometry-android:1.7.2 -androidx.compose.ui:ui-geometry:1.7.2 -androidx.compose.ui:ui-graphics-android:1.7.2 -androidx.compose.ui:ui-graphics:1.7.2 -androidx.compose.ui:ui-text-android:1.7.2 -androidx.compose.ui:ui-text:1.7.2 -androidx.compose.ui:ui-tooling-preview-android:1.7.2 -androidx.compose.ui:ui-tooling-preview:1.7.2 -androidx.compose.ui:ui-unit-android:1.7.2 -androidx.compose.ui:ui-unit:1.7.2 -androidx.compose.ui:ui-util-android:1.7.2 -androidx.compose.ui:ui-util:1.7.2 -androidx.compose.ui:ui:1.7.2 -androidx.compose:compose-bom:2024.09.00 +androidx.compose.material:material-icons-core-android:1.7.4 +androidx.compose.material:material-icons-core:1.7.4 +androidx.compose.material:material-icons-extended-android:1.7.4 +androidx.compose.material:material-icons-extended:1.7.4 +androidx.compose.material:material-ripple-android:1.7.4 +androidx.compose.material:material-ripple:1.7.4 +androidx.compose.runtime:runtime-android:1.7.4 +androidx.compose.runtime:runtime-saveable-android:1.7.4 +androidx.compose.runtime:runtime-saveable:1.7.4 +androidx.compose.runtime:runtime:1.7.4 +androidx.compose.ui:ui-android:1.7.4 +androidx.compose.ui:ui-geometry-android:1.7.4 +androidx.compose.ui:ui-geometry:1.7.4 +androidx.compose.ui:ui-graphics-android:1.7.4 +androidx.compose.ui:ui-graphics:1.7.4 +androidx.compose.ui:ui-text-android:1.7.4 +androidx.compose.ui:ui-text:1.7.4 +androidx.compose.ui:ui-tooling-preview-android:1.7.4 +androidx.compose.ui:ui-tooling-preview:1.7.4 +androidx.compose.ui:ui-unit-android:1.7.4 +androidx.compose.ui:ui-unit:1.7.4 +androidx.compose.ui:ui-util-android:1.7.4 +androidx.compose.ui:ui-util:1.7.4 +androidx.compose.ui:ui:1.7.4 +androidx.compose:compose-bom:2024.10.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 androidx.constraintlayout:constraintlayout:2.1.4 @@ -201,13 +201,13 @@ org.apache.httpcomponents.core5:httpcore5:5.2.4 org.apache.james:apache-mime4j-core:0.8.9 org.apache.james:apache-mime4j-dom:0.8.9 org.jetbrains.compose.runtime:runtime:1.5.12 -org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-bom:2.0.20 -org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-bom:2.0.21 +org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 diff --git a/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt b/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt index 63b272eddcb..45b02e1a7b2 100644 --- a/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt @@ -20,41 +20,41 @@ androidx.cardview:cardview:1.0.0 androidx.collection:collection-jvm:1.4.4 androidx.collection:collection-ktx:1.4.4 androidx.collection:collection:1.4.4 -androidx.compose.animation:animation-android:1.7.2 -androidx.compose.animation:animation-core-android:1.7.2 -androidx.compose.animation:animation-core:1.7.2 -androidx.compose.animation:animation:1.7.2 -androidx.compose.foundation:foundation-android:1.7.2 -androidx.compose.foundation:foundation-layout-android:1.7.2 -androidx.compose.foundation:foundation-layout:1.7.2 -androidx.compose.foundation:foundation:1.7.2 +androidx.compose.animation:animation-android:1.7.4 +androidx.compose.animation:animation-core-android:1.7.4 +androidx.compose.animation:animation-core:1.7.4 +androidx.compose.animation:animation:1.7.4 +androidx.compose.foundation:foundation-android:1.7.4 +androidx.compose.foundation:foundation-layout-android:1.7.4 +androidx.compose.foundation:foundation-layout:1.7.4 +androidx.compose.foundation:foundation:1.7.4 androidx.compose.material3:material3-android:1.3.0 androidx.compose.material3:material3:1.3.0 -androidx.compose.material:material-icons-core-android:1.7.0 -androidx.compose.material:material-icons-core:1.7.0 -androidx.compose.material:material-icons-extended-android:1.7.0 -androidx.compose.material:material-icons-extended:1.7.0 -androidx.compose.material:material-ripple-android:1.7.0 -androidx.compose.material:material-ripple:1.7.0 -androidx.compose.runtime:runtime-android:1.7.2 -androidx.compose.runtime:runtime-saveable-android:1.7.2 -androidx.compose.runtime:runtime-saveable:1.7.2 -androidx.compose.runtime:runtime:1.7.2 -androidx.compose.ui:ui-android:1.7.2 -androidx.compose.ui:ui-geometry-android:1.7.2 -androidx.compose.ui:ui-geometry:1.7.2 -androidx.compose.ui:ui-graphics-android:1.7.2 -androidx.compose.ui:ui-graphics:1.7.2 -androidx.compose.ui:ui-text-android:1.7.2 -androidx.compose.ui:ui-text:1.7.2 -androidx.compose.ui:ui-tooling-preview-android:1.7.2 -androidx.compose.ui:ui-tooling-preview:1.7.2 -androidx.compose.ui:ui-unit-android:1.7.2 -androidx.compose.ui:ui-unit:1.7.2 -androidx.compose.ui:ui-util-android:1.7.2 -androidx.compose.ui:ui-util:1.7.2 -androidx.compose.ui:ui:1.7.2 -androidx.compose:compose-bom:2024.09.00 +androidx.compose.material:material-icons-core-android:1.7.4 +androidx.compose.material:material-icons-core:1.7.4 +androidx.compose.material:material-icons-extended-android:1.7.4 +androidx.compose.material:material-icons-extended:1.7.4 +androidx.compose.material:material-ripple-android:1.7.4 +androidx.compose.material:material-ripple:1.7.4 +androidx.compose.runtime:runtime-android:1.7.4 +androidx.compose.runtime:runtime-saveable-android:1.7.4 +androidx.compose.runtime:runtime-saveable:1.7.4 +androidx.compose.runtime:runtime:1.7.4 +androidx.compose.ui:ui-android:1.7.4 +androidx.compose.ui:ui-geometry-android:1.7.4 +androidx.compose.ui:ui-geometry:1.7.4 +androidx.compose.ui:ui-graphics-android:1.7.4 +androidx.compose.ui:ui-graphics:1.7.4 +androidx.compose.ui:ui-text-android:1.7.4 +androidx.compose.ui:ui-text:1.7.4 +androidx.compose.ui:ui-tooling-preview-android:1.7.4 +androidx.compose.ui:ui-tooling-preview:1.7.4 +androidx.compose.ui:ui-unit-android:1.7.4 +androidx.compose.ui:ui-unit:1.7.4 +androidx.compose.ui:ui-util-android:1.7.4 +androidx.compose.ui:ui-util:1.7.4 +androidx.compose.ui:ui:1.7.4 +androidx.compose:compose-bom:2024.10.00 androidx.concurrent:concurrent-futures:1.1.0 androidx.constraintlayout:constraintlayout-core:1.0.4 androidx.constraintlayout:constraintlayout:2.1.4 @@ -201,13 +201,13 @@ org.apache.httpcomponents.core5:httpcore5:5.2.4 org.apache.james:apache-mime4j-core:0.8.9 org.apache.james:apache-mime4j-dom:0.8.9 org.jetbrains.compose.runtime:runtime:1.5.12 -org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-bom:2.0.20 -org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20 -org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-bom:2.0.21 +org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 +org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c20e7f32880..1104cc0f333 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ androidxAppCompat = "1.7.0" androidxBiometric = "1.1.0" androidxCamera = "1.3.4" # https://developer.android.com/jetpack/compose/bom/bom-mapping -androidxComposeBom = "2024.09.00" +androidxComposeBom = "2024.10.00" androidxConstraintLayout = "2.1.4" androidxCoordinatorLayout = "1.2.0" androidxCore = "1.13.1" @@ -69,10 +69,10 @@ junit = "4.13.2" jutf7 = "1.0.0" jzlib = "1.0.7" koinBom = "3.5.6" -kotlinBom = "2.0.20" +kotlinBom = "2.0.21" # Needs to match the version used by Gradle, just check with `./gradlew --version` kotlinGradleBom = "1.9.24" -kotlinKsp = "2.0.20-1.0.25" +kotlinKsp = "2.0.21-1.0.25" kotlinxCoroutines = "1.8.1" kotlinxCollectionsImmutable = "0.3.8" kotlinxDateTime = "0.6.1" From 8412360d2b47a639171e6a51241326a64bd73934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Thu, 17 Oct 2024 20:19:56 +0200 Subject: [PATCH 36/45] Bump Gradle 8.10 -> 8.10.2 --- gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1104cc0f333..273fc82ddde 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -56,7 +56,7 @@ detektPluginCompose = "0.4.11" fastAdapter = "5.7.0" forkhandlesBom = "2.20.0.0" glide = "4.16.0" -gradle = "8.10" +gradle = "8.10.2" http4kBom = "5.30.0.0" icu4j = "72.1" javaDiffUtils = "4.12" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 66cd5a0e49b..79eb9d003fe 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 6411055b2f9121917e53fd9be3b915309bf4f851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Thu, 17 Oct 2024 20:29:02 +0200 Subject: [PATCH 37/45] Bump test dependencies - Turbine 1.1.0 - 1.2.0 - Http4k 5.30.0.0 -> 5.32.4.0 - Mockito 5.13.0 -> 5.14.2 --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 273fc82ddde..76ab3504081 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -57,7 +57,7 @@ fastAdapter = "5.7.0" forkhandlesBom = "2.20.0.0" glide = "4.16.0" gradle = "8.10.2" -http4kBom = "5.30.0.0" +http4kBom = "5.32.4.0" icu4j = "72.1" javaDiffUtils = "4.12" jcipAnnotations = "1.0" @@ -82,7 +82,7 @@ kxml2 = "1.0" leakcanary = "2.13" mime4j = "0.8.9" minidns = "1.0.5" -mockito = "5.13.0" +mockito = "5.14.2" mockitoKotlin = "5.4.0" moshi = "1.15.1" mozillaAndroidComponents = "130.0" @@ -95,7 +95,7 @@ searchPreference = "v2.3.0" spotlessPlugin = "6.25.0" timber = "5.0.1" tokenautocomplete = "4.0.0-beta01-k9mail02" -turbine = "1.1.0" +turbine = "1.2.0" xmlpull = "1.0" zxing = "3.5.3" From 2f3ccde1f9ca12fff0701d6fdde0d830787e83e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Martell=20Montw=C3=A9?= Date: Thu, 17 Oct 2024 20:32:29 +0200 Subject: [PATCH 38/45] Bump other dependencies - Detekt plugin compose 0.4.11 -> 0.4.16 - Jetbrains Annotations 24.1.0 -> 26.0.1 - Kotlin Coroutines 1.8.1 -> 1.9.0 --- app-k9mail/dependencies/releaseRuntimeClasspath.txt | 10 +++++----- .../dependencies/fossBetaRuntimeClasspath.txt | 10 +++++----- .../dependencies/fossDailyRuntimeClasspath.txt | 10 +++++----- .../dependencies/fossReleaseRuntimeClasspath.txt | 10 +++++----- .../dependencies/fullBetaRuntimeClasspath.txt | 10 +++++----- .../dependencies/fullDailyRuntimeClasspath.txt | 10 +++++----- .../dependencies/fullReleaseRuntimeClasspath.txt | 10 +++++----- gradle/libs.versions.toml | 6 +++--- 8 files changed, 38 insertions(+), 38 deletions(-) diff --git a/app-k9mail/dependencies/releaseRuntimeClasspath.txt b/app-k9mail/dependencies/releaseRuntimeClasspath.txt index e9a335a845e..68832eb68a7 100644 --- a/app-k9mail/dependencies/releaseRuntimeClasspath.txt +++ b/app-k9mail/dependencies/releaseRuntimeClasspath.txt @@ -196,10 +196,10 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 @@ -207,7 +207,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -org.jetbrains:annotations:24.1.0 +org.jetbrains:annotations:26.0.1 org.jsoup:jsoup:1.17.2 org.minidns:minidns-client:1.0.5 org.minidns:minidns-core:1.0.5 diff --git a/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt b/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt index e9a335a845e..68832eb68a7 100644 --- a/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossBetaRuntimeClasspath.txt @@ -196,10 +196,10 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 @@ -207,7 +207,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -org.jetbrains:annotations:24.1.0 +org.jetbrains:annotations:26.0.1 org.jsoup:jsoup:1.17.2 org.minidns:minidns-client:1.0.5 org.minidns:minidns-core:1.0.5 diff --git a/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt b/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt index e9a335a845e..68832eb68a7 100644 --- a/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossDailyRuntimeClasspath.txt @@ -196,10 +196,10 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 @@ -207,7 +207,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -org.jetbrains:annotations:24.1.0 +org.jetbrains:annotations:26.0.1 org.jsoup:jsoup:1.17.2 org.minidns:minidns-client:1.0.5 org.minidns:minidns-core:1.0.5 diff --git a/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt b/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt index e9a335a845e..68832eb68a7 100644 --- a/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fossReleaseRuntimeClasspath.txt @@ -196,10 +196,10 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 @@ -207,7 +207,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -org.jetbrains:annotations:24.1.0 +org.jetbrains:annotations:26.0.1 org.jsoup:jsoup:1.17.2 org.minidns:minidns-client:1.0.5 org.minidns:minidns-core:1.0.5 diff --git a/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt b/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt index 45b02e1a7b2..ba22042d771 100644 --- a/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullBetaRuntimeClasspath.txt @@ -210,10 +210,10 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 @@ -221,7 +221,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -org.jetbrains:annotations:24.1.0 +org.jetbrains:annotations:26.0.1 org.jsoup:jsoup:1.17.2 org.minidns:minidns-client:1.0.5 org.minidns:minidns-core:1.0.5 diff --git a/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt b/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt index 45b02e1a7b2..ba22042d771 100644 --- a/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullDailyRuntimeClasspath.txt @@ -210,10 +210,10 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 @@ -221,7 +221,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -org.jetbrains:annotations:24.1.0 +org.jetbrains:annotations:26.0.1 org.jsoup:jsoup:1.17.2 org.minidns:minidns-client:1.0.5 org.minidns:minidns-core:1.0.5 diff --git a/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt b/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt index 45b02e1a7b2..ba22042d771 100644 --- a/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt +++ b/app-thunderbird/dependencies/fullReleaseRuntimeClasspath.txt @@ -210,10 +210,10 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21 org.jetbrains.kotlin:kotlin-stdlib:2.0.21 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3 @@ -221,7 +221,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.7.3 org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -org.jetbrains:annotations:24.1.0 +org.jetbrains:annotations:26.0.1 org.jsoup:jsoup:1.17.2 org.minidns:minidns-client:1.0.5 org.minidns:minidns-core:1.0.5 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 76ab3504081..09fafbb6cb9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -52,7 +52,7 @@ commonsIo = "2.16.1" dependencyCheckPlugin = "0.51.0" dependencyGuardPlugin = "0.5.0" detektPlugin = "1.23.5" -detektPluginCompose = "0.4.11" +detektPluginCompose = "0.4.16" fastAdapter = "5.7.0" forkhandlesBom = "2.20.0.0" glide = "4.16.0" @@ -61,7 +61,7 @@ http4kBom = "5.32.4.0" icu4j = "72.1" javaDiffUtils = "4.12" jcipAnnotations = "1.0" -jetbrainsAnnotations = "24.1.0" +jetbrainsAnnotations = "26.0.1" jdom = "2.0.6.1" jmapClient = "0.3.1" jsoup = "1.17.2" @@ -73,7 +73,7 @@ kotlinBom = "2.0.21" # Needs to match the version used by Gradle, just check with `./gradlew --version` kotlinGradleBom = "1.9.24" kotlinKsp = "2.0.21-1.0.25" -kotlinxCoroutines = "1.8.1" +kotlinxCoroutines = "1.9.0" kotlinxCollectionsImmutable = "0.3.8" kotlinxDateTime = "0.6.1" kotlinxSerialization = "1.7.3" From 42c40f7145a85ead4321a996dbe5900e770f2dd6 Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Wed, 16 Oct 2024 10:48:25 +0200 Subject: [PATCH 39/45] Use configure on demand for version info automation task --- .github/workflows/shippable_builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/shippable_builds.yml b/.github/workflows/shippable_builds.yml index c87bbb4b978..dc86522a1e3 100644 --- a/.github/workflows/shippable_builds.yml +++ b/.github/workflows/shippable_builds.yml @@ -166,7 +166,7 @@ jobs: RELEASE_TYPE=release fi - ./gradlew :app-${APP_NAME}:printVersionInfo -PbuildType=${RELEASE_TYPE} -PflavorName=${PACKAGE_FLAVOR} + ./gradlew :app-${APP_NAME}:printVersionInfo -PbuildType=${RELEASE_TYPE} -PflavorName=${PACKAGE_FLAVOR} --configure-on-demand - name: Bump version code id: bump_version_code From ae989e38786bc225ce403e89c02e5e04c53e5ef0 Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Wed, 16 Oct 2024 11:11:42 +0200 Subject: [PATCH 40/45] Improve render-notes in release automation * Allow passing repository and branch * Make sure changelog files are not overwritten * Print-only mode for local testing --- scripts/render-notes.py | 52 ++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/scripts/render-notes.py b/scripts/render-notes.py index 0c59ede9c1c..bcf2ae09b27 100644 --- a/scripts/render-notes.py +++ b/scripts/render-notes.py @@ -8,7 +8,15 @@ from jinja2 import Template -def render_notes(version, versioncode, application, applicationid): +def render_notes( + version, + versioncode, + application, + applicationid, + printonly=False, + notesrepo="thunderbird/thunderbird-notes", + notesbranch="master", +): """Update changelog files based on release notes from thunderbird-notes.""" tb_notes_filename = f"{version}.yml" tb_notes_directory = "android_release" @@ -16,8 +24,8 @@ def render_notes(version, versioncode, application, applicationid): tb_notes_filename = f"{version[0:-1]}eta.yml" tb_notes_directory = "android_beta" tb_notes_url = os.path.join( - "https://raw.githubusercontent.com/thunderbird/thunderbird-notes/", - "refs/heads/master/", + f"https://raw.githubusercontent.com/{notesrepo}/", + f"refs/heads/{notesbranch}", tb_notes_directory, tb_notes_filename, ) @@ -69,17 +77,37 @@ def render_notes(version, versioncode, application, applicationid): break lines.insert(index + 1, rendered) break - with open(render_files[render_file]["outfile"], "w") as file: - file.writelines(lines) + if not printonly: + with open(render_files[render_file]["outfile"], "w") as file: + file.writelines(lines) elif render_file == "changelog.txt": stripped = rendered.lstrip() - with open(render_files[render_file]["outfile"], "w") as file: - file.write(stripped) + if not printonly: + with open(render_files[render_file]["outfile"], "x") as file: + file.write(stripped) print(stripped) def main(): parser = argparse.ArgumentParser() + parser.add_argument( + "--print", + "-p", + action="store_true", + help="Only print the processed release notes", + ) + parser.add_argument( + "--repository", + "-r", + default="thunderbird/thunderbird-notes", + help="Repository to retrieve thunderbird-notes from", + ) + parser.add_argument( + "--branch", + "-b", + default="master", + help="Branch to retrieve thunderbird-notes from", + ) parser.add_argument( "applicationid", type=str, @@ -99,7 +127,15 @@ def main(): else: application = "thunderbird" - render_notes(args.version, args.versioncode, application, args.applicationid) + render_notes( + args.version, + args.versioncode, + application, + args.applicationid, + printonly=args.print, + notesrepo=args.repository, + notesbranch=args.branch, + ) if __name__ == "__main__": From 69fec014c4b2867bf3f2106a46476cb80762e42d Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Wed, 16 Oct 2024 13:32:44 +0200 Subject: [PATCH 41/45] Always release to internal testing track first --- scripts/setup_release_automation | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/setup_release_automation b/scripts/setup_release_automation index 4fceda270ba..60d0cb96f07 100644 --- a/scripts/setup_release_automation +++ b/scripts/setup_release_automation @@ -30,15 +30,14 @@ CHANNEL_ENVIRONMENTS = { { "appName": "thunderbird", "releaseTarget": "play", - "playTargetTrack": "internal", # TODO change this to alpha once ready, final promotion should happen in web ui + "playTargetTrack": "internal", "packageFormat": "aab", "packageFlavor": "full", }, { "appName": "k9mail", "releaseTarget": "github|play", - # TODO enable this when ready to publish - # "playTargetTrack": "production", + "playTargetTrack": "internal", "packageFormat": "apk", }, ], @@ -58,15 +57,14 @@ CHANNEL_ENVIRONMENTS = { { "appName": "thunderbird", "releaseTarget": "play", - "playTargetTrack": "internal", # TODO change this to production once ready + "playTargetTrack": "internal", "packageFormat": "aab", "packageFlavor": "full", }, { "appName": "k9mail", "releaseTarget": "github|play", - # TODO enable this when ready to publish - # "playTargetTrack": "beta", + "playTargetTrack": "internal", "packageFormat": "apk", }, ], From 00dd8f15cbdbb8f888deb992b628fd6e5e4dc3c2 Mon Sep 17 00:00:00 2001 From: Philipp Kewisch Date: Wed, 16 Oct 2024 13:33:55 +0200 Subject: [PATCH 42/45] Add version summary to release automation --- .github/workflows/shippable_builds.yml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/shippable_builds.yml b/.github/workflows/shippable_builds.yml index dc86522a1e3..b31f958f7ae 100644 --- a/.github/workflows/shippable_builds.yml +++ b/.github/workflows/shippable_builds.yml @@ -211,7 +211,7 @@ jobs: VERSION_CODE: ${{ steps.bump_version_code.outputs.CODE }} FULL_VERSION_NAME: ${{ steps.appinfo.outputs.VERSION_NAME }}${{ steps.bump_version_suffix.outputs.SUFFIX || steps.appinfo.outputs.VERSION_NAME_SUFFIX }} run: | - echo "

${APPLICATION_LABEL} ${FULL_VERSION_NAME} Release Notes

" | tee -a $GITHUB_STEP_SUMMARY
+          echo "

${APPLICATION_LABEL} ${FULL_VERSION_NAME} Release Notes (${VERSION_CODE})

" | tee -a $GITHUB_STEP_SUMMARY
           mkdir -p ./app-metadata/${APPLICATION_ID}/en-US/changelogs
           python ./scripts/render-notes.py ${APPLICATION_ID} ${FULL_VERSION_NAME} ${VERSION_CODE} | tee -a $GITHUB_STEP_SUMMARY
           echo "
" | tee -a $GITHUB_STEP_SUMMARY @@ -273,6 +273,27 @@ jobs: fi echo "${APP_NAME}_sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT + echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT + + - name: Summary + if: ${{ contains(matrix.releaseTarget, 'github') }} + uses: actions/github-script@v7 + env: + bump_sha: ${{ steps.commit.outputs.sha }} + applicationId: ${{ steps.appinfo.outputs.APPLICATION_ID }} + oldFullVersion: ${{ steps.appinfo.outputs.VERSION_NAME }}${{ steps.appinfo.outputs.VERSION_NAME_SUFFIX }} + oldVersionCode: ${{ steps.appinfo.outputs.VERSION_CODE }} + newFullVersion: ${{ steps.appinfo.outputs.VERSION_NAME }}${{ steps.bump_version_suffix.outputs.SUFFIX || steps.appinfo.outputs.VERSION_NAME_SUFFIX }} + newVersionCode: ${{ steps.bump_version_code.outputs.CODE }} + with: + script: | + let env = process.env; + console.log(env); + await core.summary + .addRaw(`Version for ${env.applicationId} bumped from ${env.oldFullVersion} (${env.oldVersionCode}) to ${env.newFullVersion} (${env.newVersionCode}) in `) + .addLink(process.env.bump_sha, `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/commit/${env.bump_sha}`) + .addEOL() + .write(); build_unsigned: name: Build Unsigned From 47fc6921ae0338cc0fe4d3a3ad57d9a871eeb411 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 18 Oct 2024 10:54:46 +0200 Subject: [PATCH 43/45] Update appearance of `TbOnboardingMigrationScreen` --- .../main/navigation/OnboardingNavHost.kt | 5 +- .../api/OnboardingMigrationManager.kt | 5 +- .../noop/NoOpOnboardingMigrationManager.kt | 5 +- .../TbOnboardingMigrationScreenPreview.kt | 5 +- .../TbOnboardingMigrationManager.kt | 10 +-- .../TbOnboardingMigrationScreen.kt | 62 +++++++++++++++---- .../src/main/res/values/strings.xml | 2 + .../TbOnboardingMigrationScreenKtTest.kt | 37 ++++++++--- 8 files changed, 97 insertions(+), 34 deletions(-) diff --git a/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt b/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt index 78e3dae0706..d820e058b5d 100644 --- a/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt +++ b/feature/onboarding/main/src/main/kotlin/app/k9mail/feature/onboarding/main/navigation/OnboardingNavHost.kt @@ -87,8 +87,9 @@ fun OnboardingNavHost( composable(route = NESTED_NAVIGATION_ROUTE_MIGRATION) { onboardingMigrationManager.OnboardingMigrationScreen( - onQrCodeScanClick = { navController.navigateToSettingsImportQrCode() }, - onAddAccountClick = { navController.navigateToAccountSetup() }, + onQrCodeScan = { navController.navigateToSettingsImportQrCode() }, + onAddAccount = { navController.navigateToAccountSetup() }, + onImport = { navController.navigateToSettingsImport() }, ) } diff --git a/feature/onboarding/migration/api/src/main/kotlin/app/k9mail/feature/onboarding/migration/api/OnboardingMigrationManager.kt b/feature/onboarding/migration/api/src/main/kotlin/app/k9mail/feature/onboarding/migration/api/OnboardingMigrationManager.kt index a750ef22457..1234da1bb07 100644 --- a/feature/onboarding/migration/api/src/main/kotlin/app/k9mail/feature/onboarding/migration/api/OnboardingMigrationManager.kt +++ b/feature/onboarding/migration/api/src/main/kotlin/app/k9mail/feature/onboarding/migration/api/OnboardingMigrationManager.kt @@ -7,7 +7,8 @@ interface OnboardingMigrationManager { @Composable fun OnboardingMigrationScreen( - onQrCodeScanClick: () -> Unit, - onAddAccountClick: () -> Unit, + onQrCodeScan: () -> Unit, + onAddAccount: () -> Unit, + onImport: () -> Unit, ) } diff --git a/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/noop/NoOpOnboardingMigrationManager.kt b/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/noop/NoOpOnboardingMigrationManager.kt index e535451905c..bc37a1b321e 100644 --- a/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/noop/NoOpOnboardingMigrationManager.kt +++ b/feature/onboarding/migration/noop/src/main/kotlin/app/k9mail/feature/onboarding/migration/noop/NoOpOnboardingMigrationManager.kt @@ -8,7 +8,8 @@ class NoOpOnboardingMigrationManager : OnboardingMigrationManager { @Composable override fun OnboardingMigrationScreen( - onQrCodeScanClick: () -> Unit, - onAddAccountClick: () -> Unit, + onQrCodeScan: () -> Unit, + onAddAccount: () -> Unit, + onImport: () -> Unit, ) = Unit } diff --git a/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt b/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt index 67874ef9de3..63064a0b112 100644 --- a/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt +++ b/feature/onboarding/migration/thunderbird/src/debug/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenPreview.kt @@ -12,8 +12,9 @@ internal fun TbOnboardingMigrationScreenPreview() { ThunderbirdTheme2 { Surface { TbOnboardingMigrationScreen( - onQrCodeScanClick = {}, - onAddAccountClick = {}, + onQrCodeScan = {}, + onAddAccount = {}, + onImport = {}, brandNameProvider = object : BrandNameProvider { override val brandName: String = "Thunderbird" }, diff --git a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationManager.kt b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationManager.kt index ef4691f5e6b..fbd2c019058 100644 --- a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationManager.kt +++ b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationManager.kt @@ -8,12 +8,14 @@ class TbOnboardingMigrationManager : OnboardingMigrationManager { @Composable override fun OnboardingMigrationScreen( - onQrCodeScanClick: () -> Unit, - onAddAccountClick: () -> Unit, + onQrCodeScan: () -> Unit, + onAddAccount: () -> Unit, + onImport: () -> Unit, ) { TbOnboardingMigrationScreen( - onQrCodeScanClick, - onAddAccountClick, + onQrCodeScan, + onAddAccount, + onImport, ) } } diff --git a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt index d2072184a62..048821b64b8 100644 --- a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt +++ b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilled +import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonOutlined import app.k9mail.core.ui.compose.designsystem.atom.card.CardFilled import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium @@ -26,8 +27,9 @@ import org.koin.compose.koinInject @Composable internal fun TbOnboardingMigrationScreen( - onQrCodeScanClick: () -> Unit, - onAddAccountClick: () -> Unit, + onQrCodeScan: () -> Unit, + onAddAccount: () -> Unit, + onImport: () -> Unit, modifier: Modifier = Modifier, brandNameProvider: BrandNameProvider = koinInject(), ) { @@ -47,7 +49,11 @@ internal fun TbOnboardingMigrationScreen( title = brandNameProvider.brandName, ) - Spacer(modifier = Modifier.height(MainTheme.spacings.double)) + Spacer( + modifier = Modifier + .height(MainTheme.spacings.double) + .weight(1f), + ) TextCard(title = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_title)) { TextBodyMedium( @@ -58,26 +64,36 @@ internal fun TbOnboardingMigrationScreen( ButtonFilled( text = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_button_text), - onClick = onQrCodeScanClick, + onClick = onQrCodeScan, modifier = Modifier .testTag("QrCodeImportButton") .align(Alignment.CenterHorizontally), ) } - Spacer(modifier = Modifier.height(MainTheme.spacings.double)) + Spacer(modifier = Modifier.height(MainTheme.spacings.triple)) - TextCard(title = stringResource(R.string.onboarding_migration_thunderbird_new_account_title)) { - ButtonFilled( + TextGroup(title = stringResource(R.string.onboarding_migration_thunderbird_new_account_title)) { + ButtonOutlined( text = stringResource(R.string.onboarding_migration_thunderbird_new_account_button_text), - onClick = onAddAccountClick, - modifier = Modifier - .testTag("AddAccountButton") - .align(Alignment.CenterHorizontally), + onClick = onAddAccount, + modifier = Modifier.testTag("AddAccountButton"), ) } - Spacer(modifier = Modifier.height(MainTheme.spacings.double)) + TextGroup(title = stringResource(R.string.onboarding_migration_thunderbird_import_title)) { + ButtonOutlined( + text = stringResource(R.string.onboarding_migration_thunderbird_import_button_text), + onClick = onImport, + modifier = Modifier.testTag("ImportButton"), + ) + } + + Spacer( + modifier = Modifier + .height(MainTheme.spacings.double) + .weight(1f), + ) } } } @@ -108,3 +124,25 @@ private fun TextCard( } } } + +@Composable +private fun TextGroup( + title: String, + content: @Composable ColumnScope.() -> Unit, +) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxWidth() + .padding(MainTheme.spacings.double), + ) { + TextTitleMedium( + text = title, + color = MainTheme.colors.primary, + modifier = Modifier + .padding(bottom = MainTheme.spacings.default), + ) + + content() + } +} diff --git a/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml b/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml index b907f8a426d..284327145e2 100644 --- a/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml +++ b/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml @@ -5,4 +5,6 @@ Import settings New to Thunderbird? Add an email account now + Moving from another app or device? + Import your account settings now diff --git a/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt b/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt index 2b0e8a22eef..395c0ba6ba2 100644 --- a/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt +++ b/feature/onboarding/migration/thunderbird/src/test/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreenKtTest.kt @@ -12,13 +12,13 @@ import org.junit.Test class TbOnboardingMigrationScreenKtTest : ComposeTest() { @Test - fun `pressing QrCodeImportButton should call onQrCodeScanClick`() = runComposeTest { + fun `pressing QrCodeImportButton should call onQrCodeScan`() = runComposeTest { var qrCodeScanClickCounter = 0 - var addAccountClickCounter = 0 setContentWithTheme { TbOnboardingMigrationScreen( - onQrCodeScanClick = { qrCodeScanClickCounter++ }, - onAddAccountClick = { addAccountClickCounter++ }, + onQrCodeScan = { qrCodeScanClickCounter++ }, + onAddAccount = { error("Should not be called") }, + onImport = { error("Should not be called") }, brandNameProvider = FakeBrandNameProvider, ) } @@ -28,17 +28,16 @@ class TbOnboardingMigrationScreenKtTest : ComposeTest() { .performClick() assertThat(qrCodeScanClickCounter).isEqualTo(1) - assertThat(addAccountClickCounter).isEqualTo(0) } @Test - fun `pressing AddAccountButton button should call onAddAccountClick`() = runComposeTest { - var qrCodeScanClickCounter = 0 + fun `pressing AddAccountButton button should call onAddAccount`() = runComposeTest { var addAccountClickCounter = 0 setContentWithTheme { TbOnboardingMigrationScreen( - onQrCodeScanClick = { qrCodeScanClickCounter++ }, - onAddAccountClick = { addAccountClickCounter++ }, + onQrCodeScan = { error("Should not be called") }, + onAddAccount = { addAccountClickCounter++ }, + onImport = { error("Should not be called") }, brandNameProvider = FakeBrandNameProvider, ) } @@ -48,7 +47,25 @@ class TbOnboardingMigrationScreenKtTest : ComposeTest() { .performClick() assertThat(addAccountClickCounter).isEqualTo(1) - assertThat(qrCodeScanClickCounter).isEqualTo(0) + } + + @Test + fun `pressing ImportButton button should call onImport`() = runComposeTest { + var importClickCounter = 0 + setContentWithTheme { + TbOnboardingMigrationScreen( + onQrCodeScan = { error("Should not be called") }, + onAddAccount = { error("Should not be called") }, + onImport = { importClickCounter++ }, + brandNameProvider = FakeBrandNameProvider, + ) + } + + composeTestRule.onNodeWithTag("ImportButton") + .performScrollTo() + .performClick() + + assertThat(importClickCounter).isEqualTo(1) } } From d21afd0324e52c551a41fddf87af5516ebad9e3c Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 18 Oct 2024 13:10:46 +0200 Subject: [PATCH 44/45] Update text in "Already using Thunderbird on desktop?" card --- .../designsystem/atom/text/TextBodyMedium.kt | 18 +++++ .../TbOnboardingMigrationScreen.kt | 80 +++++++++++++++---- .../src/main/res/values/strings.xml | 5 +- 3 files changed, 87 insertions(+), 16 deletions(-) diff --git a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/text/TextBodyMedium.kt b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/text/TextBodyMedium.kt index 105c68bc0fd..129b8fdaab9 100644 --- a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/text/TextBodyMedium.kt +++ b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/text/TextBodyMedium.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.style.LineHeightStyle import androidx.compose.ui.text.style.TextAlign import app.k9mail.core.ui.compose.theme2.MainTheme import androidx.compose.material3.Text as Material3Text @@ -39,3 +40,20 @@ fun TextBodyMedium( style = MainTheme.typography.bodyMedium, ) } + +@Composable +fun TextBodyMedium( + text: String, + lineHeightStyle: LineHeightStyle, + modifier: Modifier = Modifier, + color: Color = Color.Unspecified, + textAlign: TextAlign? = null, +) { + Material3Text( + text = text, + modifier = modifier, + color = color, + textAlign = textAlign, + style = MainTheme.typography.bodyMedium.copy(lineHeightStyle = lineHeightStyle), + ) +} diff --git a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt index 048821b64b8..d2deab666c1 100644 --- a/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt +++ b/feature/onboarding/migration/thunderbird/src/main/kotlin/app/k9mail/feature/onboarding/migration/thunderbird/TbOnboardingMigrationScreen.kt @@ -2,6 +2,7 @@ package app.k9mail.feature.onboarding.migration.thunderbird import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -14,6 +15,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.LineHeightStyle import app.k9mail.core.common.provider.BrandNameProvider import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilled import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonOutlined @@ -23,6 +25,8 @@ import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium import app.k9mail.core.ui.compose.designsystem.template.ResponsiveWidthContainer import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.feature.account.common.ui.AppTitleTopHeader +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf import org.koin.compose.koinInject @Composable @@ -55,21 +59,7 @@ internal fun TbOnboardingMigrationScreen( .weight(1f), ) - TextCard(title = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_title)) { - TextBodyMedium( - text = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_description), - modifier = Modifier - .padding(bottom = MainTheme.spacings.double), - ) - - ButtonFilled( - text = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_button_text), - onClick = onQrCodeScan, - modifier = Modifier - .testTag("QrCodeImportButton") - .align(Alignment.CenterHorizontally), - ) - } + AlreadyUsingThunderbirdCard(onQrCodeScan) Spacer(modifier = Modifier.height(MainTheme.spacings.triple)) @@ -98,6 +88,38 @@ internal fun TbOnboardingMigrationScreen( } } +@Composable +private fun AlreadyUsingThunderbirdCard(onQrCodeScan: () -> Unit) { + TextCard(title = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_title)) { + TextBodyMedium( + text = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_text), + modifier = Modifier + .padding(bottom = MainTheme.spacings.double), + ) + + TextBodyMediumFullLineHeight( + text = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_instructions_intro), + ) + + BulletList( + items = persistentListOf( + stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_instructions_bullet_1), + stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_instructions_bullet_2), + ), + modifier = Modifier + .padding(bottom = MainTheme.spacings.double), + ) + + ButtonFilled( + text = stringResource(R.string.onboarding_migration_thunderbird_qr_code_import_button_text), + onClick = onQrCodeScan, + modifier = Modifier + .testTag("QrCodeImportButton") + .align(Alignment.CenterHorizontally), + ) + } +} + @Composable private fun TextCard( title: String, @@ -146,3 +168,31 @@ private fun TextGroup( content() } } + +@Composable +private fun BulletList( + items: ImmutableList, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier) { + for (item in items) { + Row { + TextBodyMediumFullLineHeight(text = " \u2022 ") + TextBodyMediumFullLineHeight(text = item) + } + } + } +} + +@Composable +private fun TextBodyMediumFullLineHeight(text: String) { + // Disable line height trimming so that the space between TextBodyMediumFullLineHeight instances following each + // other is the same as the space between lines of text inside a single TextBodyMedium. + TextBodyMedium( + text = text, + lineHeightStyle = LineHeightStyle( + alignment = LineHeightStyle.Alignment.Proportional, + trim = LineHeightStyle.Trim.None, + ), + ) +} diff --git a/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml b/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml index 284327145e2..d373a1bdf61 100644 --- a/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml +++ b/feature/onboarding/migration/thunderbird/src/main/res/values/strings.xml @@ -1,7 +1,10 @@ Already using Thunderbird on desktop? - You can easily import your account settings.\n\nIn your Thunderbird desktop client, go to the top menu bar, click on ‘Settings’, and select ‘Export for Mobile’.\n\nA new tab with QR codes will appear. Use your Android device to scan the codes. + Easily import your account settings by scanning a QR code. + In Thunderbird desktop, go to: + ‘Settings’ in the Spaces Toolbar (bottom left) + Select ‘Export to Mobile’ and follow the instructions Import settings New to Thunderbird? Add an email account now From 6f7759a9114dacf55334bd0c183044ff5aac3d1b Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 18 Oct 2024 13:12:17 +0200 Subject: [PATCH 45/45] Switch `CardFilled` to be not clickable --- .../k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt index 27bc159878b..70802a44547 100644 --- a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt +++ b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/card/CardFilled.kt @@ -8,11 +8,9 @@ import androidx.compose.material3.Card as Material3Card @Composable fun CardFilled( modifier: Modifier = Modifier, - onClick: () -> Unit = {}, content: @Composable ColumnScope.() -> Unit, ) { Material3Card( - onClick = onClick, modifier = modifier, content = content, )