From b76f7202a46d74b0679f9746f3876d6d868d2f90 Mon Sep 17 00:00:00 2001 From: Dave Severns <149429124+dseverns-livefront@users.noreply.github.com> Date: Fri, 8 Nov 2024 09:36:54 -0500 Subject: [PATCH 1/9] PM-14621 update the copy for step three instruction and cta button (#4259) --- .../ui/vault/feature/importlogins/ImportLoginsScreen.kt | 1 + .../importlogins/components/ImportLoginsInstructionStep.kt | 3 ++- app/src/main/res/values/strings.xml | 3 ++- .../ui/vault/feature/importlogins/ImportLoginsScreenTest.kt | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt index e41ddeae4..2f8ed1e3b 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt @@ -460,6 +460,7 @@ private fun ImportLoginsStepThreeContent( ), ), onBackClick = onBackClick, + ctaText = stringResource(R.string.done_text), onContinueClick = onContinueClick, onHelpClick = onHelpClick, modifier = modifier, diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/components/ImportLoginsInstructionStep.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/components/ImportLoginsInstructionStep.kt index 3c846e1b1..ac60bd3e3 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/components/ImportLoginsInstructionStep.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/components/ImportLoginsInstructionStep.kt @@ -40,6 +40,7 @@ import kotlinx.collections.immutable.persistentListOf fun ImportLoginsInstructionStep( stepText: String, stepTitle: String, + ctaText: String = stringResource(R.string.continue_text), instructions: ImmutableList, onBackClick: () -> Unit, onContinueClick: () -> Unit, @@ -88,7 +89,7 @@ fun ImportLoginsInstructionStep( ) Spacer(Modifier.height(24.dp)) BitwardenFilledButton( - label = stringResource(R.string.continue_text), + label = ctaText, onClick = onContinueClick, modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index efd7faf15..934e4da65 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1035,7 +1035,7 @@ Do you want to switch to this account? log in to your current browser or password manager. Export your passwords. This option is usually found in your settings. Export your passwords. - Select Import data in the web app, then Done to finish syncing. + Select Import data in the web app, then Done below to finish syncing. Select Import data Step 1 of 3 Export your saved logins @@ -1086,4 +1086,5 @@ Do you want to switch to this account? Log in quickly and easily across devices Bitwarden can notify you each time you receive a new login request from another device. Skip for now + Done diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreenTest.kt index 344c1fbdc..1ecbcfd34 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreenTest.kt @@ -332,7 +332,7 @@ class ImportLoginsScreenTest : BaseComposeTest() { .performClick() verifyActionSent(ImportLoginsAction.MoveToStepTwo) composeTestRule - .onNodeWithText("Continue") + .onNodeWithText("Done") .performClick() verifyActionSent(ImportLoginsAction.MoveToSyncInProgress) } From 27666c193e8906ed4c11fc647aff42ac5e191a66 Mon Sep 17 00:00:00 2001 From: David Perez Date: Fri, 8 Nov 2024 11:03:54 -0600 Subject: [PATCH 2/9] PM-14644: Segmented control should be conditionally displayed for modal generator screen (#4262) --- .../segment/BitwardenSegmentedButton.kt | 1 + .../tools/feature/generator/GeneratorScreen.kt | 18 ++++++++---------- .../feature/generator/GeneratorViewModel.kt | 12 ++++++++++-- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/segment/BitwardenSegmentedButton.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/segment/BitwardenSegmentedButton.kt index 46a846e25..3dad060ba 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/segment/BitwardenSegmentedButton.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/segment/BitwardenSegmentedButton.kt @@ -29,6 +29,7 @@ fun BitwardenSegmentedButton( options: ImmutableList, modifier: Modifier = Modifier, ) { + if (options.isEmpty()) return Box( modifier = modifier .background(color = BitwardenTheme.colorScheme.background.secondary) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt index 9d065e45c..6166f50a9 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt @@ -202,16 +202,14 @@ fun GeneratorScreen( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), ) { innerPadding -> Column(modifier = Modifier.padding(innerPadding)) { - if (state.generatorMode == GeneratorMode.Default) { - MainStateOptionsItem( - selectedType = state.selectedType, - passcodePolicyOverride = state.passcodePolicyOverride, - possibleMainStates = state.typeOptions.toImmutableList(), - onMainStateOptionClicked = onMainStateOptionClicked, - modifier = Modifier - .scrolledContainerBottomDivider(topAppBarScrollBehavior = scrollBehavior), - ) - } + MainStateOptionsItem( + selectedType = state.selectedType, + passcodePolicyOverride = state.passcodePolicyOverride, + possibleMainStates = state.typeOptions.toImmutableList(), + onMainStateOptionClicked = onMainStateOptionClicked, + modifier = Modifier + .scrolledContainerBottomDivider(topAppBarScrollBehavior = scrollBehavior), + ) ScrollContent( state = state, onRegenerateClick = onRegenerateClick, diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorViewModel.kt index e3387ac40..3be394188 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorViewModel.kt @@ -53,6 +53,7 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import javax.inject.Inject +import kotlin.collections.filter import kotlin.math.max private const val KEY_STATE = "state" @@ -1726,10 +1727,17 @@ data class GeneratorState( ) : Parcelable { /** - * Provides a list of available main types for the generator. + * Provides a list of available main types for the generator based on the [GeneratorMode]. */ val typeOptions: List - get() = MainTypeOption.entries.toList() + get() = when (generatorMode) { + GeneratorMode.Default -> MainTypeOption.entries.toList() + GeneratorMode.Modal.Password -> MainTypeOption + .entries + .filter { it != MainTypeOption.USERNAME } + + is GeneratorMode.Modal.Username -> emptyList() + } /** * Enum representing the main type options for the generator, such as PASSWORD PASSPHRASE, and From 96c6b9c2147d51c0dc2ffb13274404044c56dc9c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:47:22 +0000 Subject: [PATCH 3/9] Autosync Crowdin Translations (#4260) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> Co-authored-by: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> --- app/src/main/res/values-af-rZA/strings.xml | 5 ++ app/src/main/res/values-ar-rSA/strings.xml | 5 ++ app/src/main/res/values-az-rAZ/strings.xml | 9 ++- app/src/main/res/values-be-rBY/strings.xml | 5 ++ app/src/main/res/values-bg-rBG/strings.xml | 9 ++- app/src/main/res/values-bn-rBD/strings.xml | 5 ++ app/src/main/res/values-bs-rBA/strings.xml | 5 ++ app/src/main/res/values-ca-rES/strings.xml | 5 ++ app/src/main/res/values-cs-rCZ/strings.xml | 5 ++ app/src/main/res/values-cy-rGB/strings.xml | 5 ++ app/src/main/res/values-da-rDK/strings.xml | 9 ++- app/src/main/res/values-de-rDE/strings.xml | 23 +++--- app/src/main/res/values-el-rGR/strings.xml | 5 ++ app/src/main/res/values-en-rGB/strings.xml | 5 ++ app/src/main/res/values-en-rIN/strings.xml | 5 ++ app/src/main/res/values-es-rES/strings.xml | 5 ++ app/src/main/res/values-et-rEE/strings.xml | 5 ++ app/src/main/res/values-eu-rES/strings.xml | 5 ++ app/src/main/res/values-fa-rIR/strings.xml | 5 ++ app/src/main/res/values-fi-rFI/strings.xml | 9 ++- app/src/main/res/values-fil-rPH/strings.xml | 5 ++ app/src/main/res/values-fr-rFR/strings.xml | 5 ++ app/src/main/res/values-gl-rES/strings.xml | 5 ++ app/src/main/res/values-hi-rIN/strings.xml | 5 ++ app/src/main/res/values-hr-rHR/strings.xml | 5 ++ app/src/main/res/values-hu-rHU/strings.xml | 9 ++- app/src/main/res/values-in-rID/strings.xml | 5 ++ app/src/main/res/values-it-rIT/strings.xml | 15 ++-- app/src/main/res/values-iw-rIL/strings.xml | 5 ++ app/src/main/res/values-ja-rJP/strings.xml | 5 ++ app/src/main/res/values-ka-rGE/strings.xml | 5 ++ app/src/main/res/values-kn-rIN/strings.xml | 5 ++ app/src/main/res/values-ko-rKR/strings.xml | 53 +++++++------- app/src/main/res/values-lt-rLT/strings.xml | 5 ++ app/src/main/res/values-lv-rLV/strings.xml | 9 ++- app/src/main/res/values-ml-rIN/strings.xml | 5 ++ app/src/main/res/values-mr-rIN/strings.xml | 5 ++ app/src/main/res/values-my-rMM/strings.xml | 5 ++ app/src/main/res/values-nb-rNO/strings.xml | 5 ++ app/src/main/res/values-ne-rNP/strings.xml | 5 ++ app/src/main/res/values-nl-rNL/strings.xml | 9 ++- app/src/main/res/values-nn-rNO/strings.xml | 5 ++ app/src/main/res/values-or-rIN/strings.xml | 5 ++ app/src/main/res/values-pl-rPL/strings.xml | 5 ++ app/src/main/res/values-pt-rBR/strings.xml | 9 ++- app/src/main/res/values-pt-rPT/strings.xml | 5 ++ app/src/main/res/values-ro-rRO/strings.xml | 5 ++ app/src/main/res/values-ru-rRU/strings.xml | 9 ++- app/src/main/res/values-si-rLK/strings.xml | 5 ++ app/src/main/res/values-sk-rSK/strings.xml | 9 ++- app/src/main/res/values-sl-rSI/strings.xml | 5 ++ app/src/main/res/values-sr-rSP/strings.xml | 79 +++++++++++---------- app/src/main/res/values-sv-rSE/strings.xml | 17 +++-- app/src/main/res/values-ta-rIN/strings.xml | 5 ++ app/src/main/res/values-te-rIN/strings.xml | 5 ++ app/src/main/res/values-th-rTH/strings.xml | 5 ++ app/src/main/res/values-tr-rTR/strings.xml | 5 ++ app/src/main/res/values-uk-rUA/strings.xml | 49 +++++++------ app/src/main/res/values-vi-rVN/strings.xml | 9 ++- app/src/main/res/values-zh-rCN/strings.xml | 67 +++++++++-------- app/src/main/res/values-zh-rTW/strings.xml | 5 ++ 61 files changed, 461 insertions(+), 156 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index e7e5b03df..263366235 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -1073,6 +1073,7 @@ Wil u na die rekening omskakel? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Wil u na die rekening omskakel? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 74a19059c..23855fd85 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -1073,6 +1073,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml index 36f55ab01..762ea8c39 100644 --- a/app/src/main/res/values-az-rAZ/strings.xml +++ b/app/src/main/res/values-az-rAZ/strings.xml @@ -1072,12 +1072,17 @@ Bu hesaba keçmək istəyirsiniz? Bitwarden Alətləri Anladım Heç bir giriş daxilə köçürülmədi + Doğrulanmış SSO Domen Endpoint Girişlər daxilə köçürüldü Kompüterinizdən daxilə köçürdüyünüz parol faylını silməyi unutmayın SSH açarı Public açar Private açar SSH açarları - Copy public key - Copy fingerprint + Public açarı kopyala + Barmaq izini kopyala + Bildirişləri fəallaşdır + Cihazlar arasında cəld və asan giriş et + Bitwarden, başqa bir cihazdan yeni bir giriş tələbi aldığınız hər dəfəsində sizi məlumatlandıracaq. + İndilik ötür diff --git a/app/src/main/res/values-be-rBY/strings.xml b/app/src/main/res/values-be-rBY/strings.xml index 64ba828fd..aedc2be7c 100644 --- a/app/src/main/res/values-be-rBY/strings.xml +++ b/app/src/main/res/values-be-rBY/strings.xml @@ -1072,6 +1072,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1080,4 +1081,8 @@ SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index bfd48a34d..ba2b23494 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -1073,12 +1073,17 @@ Инструменти на Битуорден Разбрано Не бяха внесени никакви елементи за вписване + Потвърден адрес на домейн за еднократно удостоверяване Данните за вписване са внесени Не забравяйте да изтриете файла с паролите за внасяне от компютъра си SSH ключ Публичен ключ Частен ключ SSH ключове - Copy public key - Copy fingerprint + Копиране на публичния ключ + Копиране на отпечатъка + Включване на известията + Вписввайте се бързо и лесно на всяко устройство + Битуорден може да Ви известява всеки път, когато получите нова заявка за вписване от друго устройство. + Пропускане засега diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index a8436edc9..67986a711 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-bs-rBA/strings.xml b/app/src/main/res/values-bs-rBA/strings.xml index dee39d9fb..ec415032d 100644 --- a/app/src/main/res/values-bs-rBA/strings.xml +++ b/app/src/main/res/values-bs-rBA/strings.xml @@ -1072,6 +1072,7 @@ Skeniranje će biti izvršeno automatski. Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1080,4 +1081,8 @@ Skeniranje će biti izvršeno automatski. SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 10bbf6901..fcfded796 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -1073,6 +1073,7 @@ Voleu canviar a aquest compte? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Voleu canviar a aquest compte? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 4960aa13f..8f2846aa3 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -1072,6 +1072,7 @@ Chcete se přepnout na tento účet? Nástroje Bitwarden Rozumím Nebyla importována žádná přihlášení + Ověřený koncový bod domény SSO Přihlášení byla importována Nezapomeňte smazat soubor importovaných hesel z Vašeho počítače SSH klíč @@ -1080,4 +1081,8 @@ Chcete se přepnout na tento účet? SSH klíče Kopírovat veřejný klíč Kopírovat otisk prstu + Povolit oznámení + Přihlašujte se rychle a snadno napříč zařízeními + Bitwarden Vás může upozornit pokaždé, když obdržíte novou žádost o přihlášení z jiného zařízení. + Prozatím přeskočit diff --git a/app/src/main/res/values-cy-rGB/strings.xml b/app/src/main/res/values-cy-rGB/strings.xml index ceb653c72..45b2f57f6 100644 --- a/app/src/main/res/values-cy-rGB/strings.xml +++ b/app/src/main/res/values-cy-rGB/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 9b6b9c22f..69d9156a3 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -1073,12 +1073,17 @@ Skift til denne konto? Bitwarden-værktøjer Forstået Ingen logins blev importeret + Bekræftet SSO Domæne Endepunkt Logins importeret Husk at slette den importerede adgangskodefil fra computeren SSH-nøgle Offentlig nøgle Privat nøgle SSH-nøgler - Copy public key - Copy fingerprint + Kopiér offentlig nøgle + Kopiér fingeraftryk + Aktivér notifikationer + Log ind hurtigt og nemt på tværs af enheder + Bitwarden kan give besked, hver gang man modtager en ny login-anmodning fra en anden enhed. + Overspring for nu diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index b7f75c99f..28ed26561 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -1054,7 +1054,7 @@ Möchtest du zu diesem Konto wechseln? then Done Zu deiner eigenen Sicherheit solltest du deine gespeicherte Passwortdatei löschen. lösche deine gespeicherte Passwortdatei. - Need help? Check out import help. + Brauchst du Hilfe? Schau dir die Importhilfe an. Importhilfe Speichere die exportierte Datei irgendwo auf deinem Computer, so dass du sie leicht wiederfinden kannst. Speichere die exportierte Datei @@ -1072,12 +1072,17 @@ Möchtest du zu diesem Konto wechseln? Bitwarden-Werkzeuge Verstanden Es wurden keine Zugangsdaten importiert - Logins imported - Remember to delete your imported password file from your computer - SSH key - Public key - Private key - SSH keys - Copy public key - Copy fingerprint + Verifizierter SSO-Domain-Endpunkt + Zugangsdaten importiert + Vergiss nicht, deine importierte Passwortdatei von deinem Computer zu löschen + SSH-Schlüssel + Öffentlicher Schlüssel + Privater Schlüssel + SSH-Schlüssel + Öffentlichen Schlüssel kopieren + Fingerabdruck kopieren + Benachrichtigungen aktivieren + Schnelle und einfache Anmeldung über verschiedene Geräte hinweg + Bitwarden kann Sie jedes Mal benachrichtigen, wenn Sie eine neue Anmeldeanforderung von einem anderen Gerät erhalten. + Erst einmal überspringen diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index af0f0bc10..c44abb910 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -1073,6 +1073,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer Κλειδί SSH @@ -1081,4 +1082,8 @@ Κλειδιά SSH Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 52d451a93..21dc4dc24 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-en-rIN/strings.xml b/app/src/main/res/values-en-rIN/strings.xml index 816fa9b2c..83af2e503 100644 --- a/app/src/main/res/values-en-rIN/strings.xml +++ b/app/src/main/res/values-en-rIN/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index e1ef7d37f..8f6d62890 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1074,6 +1074,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1082,4 +1083,8 @@ seleccione Agregar TOTP para almacenar la clave de forma segura SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 010d5ecb3..d941a5a28 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -1073,6 +1073,7 @@ Soovid selle konto peale lülituda? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Soovid selle konto peale lülituda? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-eu-rES/strings.xml b/app/src/main/res/values-eu-rES/strings.xml index ef0bb8504..11ef86e0b 100644 --- a/app/src/main/res/values-eu-rES/strings.xml +++ b/app/src/main/res/values-eu-rES/strings.xml @@ -1071,6 +1071,7 @@ Kontu honetara aldatu nahi duzu? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1079,4 +1080,8 @@ Kontu honetara aldatu nahi duzu? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 186d51d67..aefb8e8c7 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -1073,6 +1073,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index b173c7897..f0022ee97 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -1073,12 +1073,17 @@ Haluatko vaihtaa tähän tiliin? Bitwarden-työkalut Selvä Kirjautumistietoja ei tuotu + Verified SSO Domain Endpoint Kirjautumistietoja tuotiin Remember to delete your imported password file from your computer SSH-avain Julkinen avain Yksityinen avain SSH-avaimet - Copy public key - Copy fingerprint + Kopioi julkinen avain + Kopioi sormenjälki + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index f38c0d744..7cc82bcc9 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -1073,6 +1073,7 @@ Gusto mo bang pumunta sa account na ito? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Gusto mo bang pumunta sa account na ito? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index e3348780e..6b70a9375 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -1073,6 +1073,7 @@ Voulez-vous basculer vers ce compte ? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Voulez-vous basculer vers ce compte ? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml index 684b33a78..6e7ecc67a 100644 --- a/app/src/main/res/values-gl-rES/strings.xml +++ b/app/src/main/res/values-gl-rES/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 7199f3e93..22195edab 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -1072,6 +1072,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1080,4 +1081,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index 07e05b423..095470202 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -1071,6 +1071,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1079,4 +1080,8 @@ SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 32fa6c68a..753bdabd1 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -1072,12 +1072,17 @@ Szeretnénk átváltani erre a fiókra? Bitwarden eszközök Rendben Nem lett bejelentkezés importáva. + Ellenőrzött SSO tartomány végpont A bejelentkezések importálásra kerültek. Ne felejtsük el törölni az importált jelszófájlt a számítógépről. SSH kulcs Nyilvános kulcs Személyes kulcs SSH kulcsok - Copy public key - Copy fingerprint + Nyilvános kulcs másolása + Ujjlenyomat másolása + Értesítések engedélyezése + Bejelentkezés gyorsan és egyszerűen minden eszközön + A Bitwarden minden alkalommal értesíthetést küld, amikor új bejelentkezési kérelem érkezik egy másik eszközről. + Kihagyás most diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index c61fc8b42..48b886642 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 636db10e5..6e5705c74 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -130,7 +130,7 @@ 1 ora 1 minuto 4 ore - Immediatamente + Immediato Blocco automatico della cassaforte Azione programmata Uscire rimuoverà tutti gli accessi alla tua cassaforte e richiede l\'autenticazione online dopo il periodo di timeout. Sei sicuro di voler usare questa opzione? @@ -146,7 +146,7 @@ Numero minimo di caratteri speciali Altre impostazioni È necessario accedere all\'app principale di Bitwarden prima di poter utilizzare l\'estensione. - Nessuna + Nessuno Elemento aggiunto Nessun elemento importante Nessun elemento @@ -1013,9 +1013,9 @@ Vuoi passare a questo account? Master password hint Important: Your master password cannot be recovered if you forget it! 12 characters minimum. Get started - Save and protect your data - The vault protects more than just passwords. Store secure logins, IDs, cards and notes securely here. - New login + Salva e proteggi i tuoi dati + La cassaforte protegge non solo le password ma anche i login, le identità, le carte e le note in modo sicuro. + Aggiungi un elemento Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure. Send sensitive information, safely Import saved logins @@ -1072,6 +1072,7 @@ Vuoi passare a questo account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1080,4 +1081,8 @@ Vuoi passare a questo account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 03a310b3c..647906643 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -1076,6 +1076,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1084,4 +1085,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 7f1733249..9c079cce3 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1073,6 +1073,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index 1263eba5d..637919302 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index d95418c9c..76b8b6113 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 716b1e3a8..bfdfcd40a 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -4,7 +4,7 @@ 추가 폴더 추가 항목 추가 - 오류가 발생했습니다. + 오류 뒤로 Bitwarden 취소 @@ -41,7 +41,7 @@ PIN이 잘못되었습니다. 다시 시도해 주세요. 열기 로그인 - Log in + 로그인 로그인 로그아웃 정말 로그아웃하시겠습니까? @@ -741,7 +741,7 @@ 사용자 이름 생성 이메일 유형 Website (required) - 알 수 없는 %1$s 오류가 발생했습니다. + 알 수 없는 %1$s 오류 발생 Use your email provider\'s subaddress capabilities Use your domain\'s configured catch-all inbox. Generate an email alias with an external forwarding service. @@ -813,7 +813,7 @@ Application You cannot edit passkey application because it would invalidate the passkey Passkey will not be copied - The passkey will not be copied to the cloned item. Do you want to continue cloning this item? + 패스키는 복제된 아이템에 복사되지 않습니다. 계속 이 항목을 복제하시겠어요? Copy application Available for two-step login Master password re-prompt help @@ -844,17 +844,17 @@ Log in with device must be set up in the settings of the Bitwarden app. Need another option? Log in with device Logging in on - Vault - Appearance - Account security - Bitwarden Help Center + 보관함 + 외관 + 계정 보안 + Bitwarden 지원 Contact Bitwarden support Copy app information Sync now Unlock options - Session timeout - Session timeout action - Account fingerprint phrase + 세션 만료 + 세션 만료 시 동작 + 계정 지문 구절 One hour and one minute One hour and %1$s minutes %1$s hours and one minute @@ -864,13 +864,13 @@ The Android Autofill Framework is used to assist in filling login information into other apps on your device. Use inline autofill if your selected keyboard supports it. Otherwise, use the default overlay. Additional options - Continue to web app? - Continue to %1$s? - Continue to Help center? - Continue to contact support? - Continue to privacy policy? - Continue to app store? - Continue to device Settings? + 웹앱에서 계속하기 + %1$s 이동하기 + 도움말 센터로 이동 + 지원으로 이동하기 + 개인정보 처리방침으로 이동하기 + 스토어로 이동하기 + 기기 설정으로 이동하기 Make your account more secure by setting up two-step login in the Bitwarden web app. You can change your master password on the Bitwarden web app. You can import data to your vault on %1$s. @@ -898,7 +898,7 @@ Follow the steps from Duo to finish logging in. Launch Duo Verification required by %1$s - Verification required for this action. Set up an unlock method in Bitwarden to continue. + 이 동작을 수행하려면 인증이 필요합니다. 계속하려면 Bitwarden에서 잠금 해제 수단을 설정해주세요. Error creating passkey Error reading passkey There was a problem creating a passkey for %1$s. Try again later. @@ -925,19 +925,19 @@ Passkey operation failed because app not found in asset links Passkey operation failed because app could not be verified Confirm file password - Continue to Give Feedback? - Select continue to give feedback on the new app! + 피드백을 보내시겠어요? + 계속해서 새 앱에 대한 피드백을 보내실 수 있습니다! File password Give Feedback Password Protected This password will be used to export and import this file Autofill suggestion - Continue to complete WebAuthn verification. + 계속해서 WebAuthn 인증을 완료해주세요. Launch WebAuthn There was an error starting WebAuthn two factor authentication Self-hosted server URL - Passkey operation failed because user could not be verified. - User verification + 인증에 실패해서 패스키를 사용할 수 없습니다. + 사용자 인증 Creating on: Follow the instructions in the email sent to %1$s to continue creating your account. We sent an email to %1$s. @@ -1073,6 +1073,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index 247729907..f6f3255e6 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -1073,6 +1073,7 @@ Ar norite pereiti prie šios paskyros? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Ar norite pereiti prie šios paskyros? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index 929beda00..fcf15a997 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -1073,12 +1073,17 @@ Vai pārslēgties uz šo kontu? Bitwarden rīki Sapratu Netika ievietots neviens pieteikšanās vienums + Apliecināts SSO domēna galamērķis Pieteikšanās vienumi ievietoti Jāatceras datorā izdzēst savu ievietoto paroļu datni SSH atslēga Publiskā atslēga Privātā atslēga SSH atslēgas - Copy public key - Copy fingerprint + Ievietot starpliktuvē publisko atslēgu + Ievietot starpliktuvē pirkstu nospiedumu + Iespējot paziņojumus + Ātra un viegla pieteikšanās dažādās ierīcēs + Bitwarden var paziņot par katru reizi, kad tiek saņemts jauns pieteikšanās pieprasījums no citas ierīces. + Pagaidām izlaist diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index e60279a5d..4f42fb83e 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index b2a8cba26..3a4da68a5 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 1263eba5d..637919302 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index b0d66db41..717d5df1d 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -1073,6 +1073,7 @@ Vil du bytte til denne kontoen? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Vil du bytte til denne kontoen? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index 1263eba5d..637919302 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 4e0bd115b..ebea4edc3 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -1073,12 +1073,17 @@ Wilt u naar dit account wisselen? Bitwarden-hulpmiddelen Ik snap het Er zijn geen logins geïmporteerd + SSO-domeineindpoint geverifieerd Inloggegevens geïmporteerd Vergeet niet het geïmporteerde wachtwoordbestand van je computer te verwijderen SSH-sleutel Publieke sleutel Privésleutel SSH-sleutels - Copy public key - Copy fingerprint + Publieke sleutel kopiëren + Vingerafdruk kopiëren + Meldingen inschakelen + Snel en gemakkelijk inloggen op verschillende apparaten + Bitwarden kan je iedere keer dat je een nieuw inlogverzoek ontvangt van een ander apparaat laten weten. + Voorlopig overslaan diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index 0312c6bca..a1a399786 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-or-rIN/strings.xml b/app/src/main/res/values-or-rIN/strings.xml index ba1c28ead..c10b7e0ba 100644 --- a/app/src/main/res/values-or-rIN/strings.xml +++ b/app/src/main/res/values-or-rIN/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index c109c5f8d..0138fe768 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -1073,6 +1073,7 @@ Czy chcesz przełączyć się na to konto? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Czy chcesz przełączyć się na to konto? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e703f5e59..2581bf6b2 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -195,7 +195,7 @@ Traduções Itens para %1$s Não existem itens no seu cofre para %1$s. - There are no items in your vault that match “%1$s” + Não existem itens no seu cofre que correspondam a \"%1$s\" Pesquise por um login ou adicione um novo login Quando você selecionar um campo de entrada e ver uma sobreposição de autopreenchimento no Bitwarden, você pode tocar nele para iniciar o serviço de autopreenchimento. Toque nesta notificação para autopreencher um item a partir do seu cofre. @@ -1030,7 +1030,7 @@ Você deseja mudar para esta conta? A partir do seu computador, siga estas instruções para exportar senhas salvas do seu navegador ou de outro gerenciador de senhas. Em seguida, importe-as com segurança para o Bitwarden. Dê ao seu cofre uma entrada de cabeça O desbloqueio com dados biométricos requer uma autenticação biométrica forte e pode não ser compatível com todas as opções biométricas deste dispositivo. - Unlock with biometrics requires strong biometric authentication and is not compatible with the biometrics options available on this device. + O desbloqueio com dados biométricos requer uma autenticação biométrica forte e não é compatível com as opções de dados biométricos disponíveis neste dispositivo. On your computer, log in to your current browser or password manager. log in to your current browser or password manager. Export your passwords. This option is usually found in your settings. @@ -1073,6 +1073,7 @@ Você deseja mudar para esta conta? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Você deseja mudar para esta conta? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index e331bc773..a0fc04b44 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -1073,6 +1073,7 @@ Anule a subscrição em qualquer altura. Ferramentas do Bitwarden Percebido Não foram importadas credenciais + Ponto de extremidade de domínio SSO verificado Credenciais importadas Lembre-se de eliminar o ficheiro da palavra-passe importada do seu computador Chave SSH @@ -1081,4 +1082,8 @@ Anule a subscrição em qualquer altura. Chaves SSH Copy public key Copy fingerprint + Ativar notificações + Iniciar sessão de forma rápida e fácil em todos os dispositivos + O Bitwarden pode notificá-lo sempre que receber um novo pedido de início de sessão de outro dispositivo. + Saltar por agora diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 9137f995b..64d9ec5ec 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -1073,6 +1073,7 @@ Doriți să comutați la acest cont? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Doriți să comutați la acest cont? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 0335848f0..10d2554c6 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -1075,12 +1075,17 @@ Инструменты Bitwarden Понятно Ни один логин не был импортирован + Конечная точка домена SSO верифицирована Логины импортированы Не забудьте удалить файл импортированных паролей с компьютера Ключ SSH Публичный ключ Приватный ключ Ключи SSH - Copy public key - Copy fingerprint + Скопировать публичный ключ + Скопировать отпечаток + Включить уведомления + Быстро и легко авторизуйтесь на разных устройствах + Bitwarden может уведомлять вас каждый раз, когда вы получаете новый запрос на вход с другого устройства. + Пока пропустить diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index 98907381d..e398c3f76 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index fc2d6e88a..04619d0f6 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -1073,12 +1073,17 @@ Chcete prepnúť na tento účet? Nástroje Bitwardenu Chápem Neboli importované žiadne prihlasovacie údaje + Overený koncový bod domény SSO Prihlasovacie údaje boli importované Nezabudnite z počítača odstrániť importovaný súbor s heslami SSH kľúč Verejný kľúč Súkromný kľúč SSH kľúče - Copy public key - Copy fingerprint + Kopírovať verejný kľúč + Kopírovať odtlačok prsta + Povoliť upozornenia + Rýchle a jednoduché prihlásenie v rôznych zariadeniach + Bitwarden vás môže upozorniť vždy, keď dostanete novú žiadosť o prihlásenie z iného zariadenia. + Teraz preskočiť diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml index 2b43f3791..65622aeeb 100644 --- a/app/src/main/res/values-sl-rSI/strings.xml +++ b/app/src/main/res/values-sl-rSI/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index c7340a14b..5e6327fb8 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -195,7 +195,7 @@ Преводи Ставке за %1$s У вашем сефу нема ставке за %1$s. - There are no items in your vault that match “%1$s” + У вашем сефу нема ставке за \"%1$s\" Потражите лозинку или додајте нову лозинку Када одаберете поље за унос и видите Bitwarden прозор за аутоматско попуњавање, можете да га додирнете да бисте покренули услугу ауто-попуњавања. Додирните ово обавештење да бисте аутоматски попунили ставку из сефа. @@ -538,7 +538,7 @@ Услови коришћења услуге Политика приватности Bitwarden треба пажњу - Омогућите „Преко“ у „Сервиси Ауто-пуњења“ из подешавања Bitwarden-а - Управљање приступачног кључа + Управљање приступног кључа Сервиси Ауто-пуњења Употребити на месту Ауто-пуњење Употребити на месту Ауто-пуњење ако Ваша тастатура то подржава. Ако ваша конфигурација није подржана (или је ова опција онемогућена), подразумевано прекривање Ауто-пуњење ће се користити. @@ -809,12 +809,12 @@ Одобрити са главном лозинком Искључите ако се користи јавни уређај Запамти овај уређај - Приступачни кључ - Приступачни кључеви + Приступни кључ + Приступни кључеви Апликација - Не може да се уреди апликација кључева јер би то поништило приступачни кључ - Приступачни кључ неће бити копиран - Приступачни кључ неће бити копиран на клонирану ставку. Да ли желите да наставите са клонирањем ставке? + Не може да се уреди апликација кључева јер би то поништило приступни кључ + Приступни кључ неће бити копиран + Приступни кључ неће бити копиран на клонирану ставку. Да ли желите да наставите са клонирањем ставке? Копирај апликацију Доступно за пријаву у два корака Помоћ поновно тражење главне лозинке @@ -900,15 +900,15 @@ Покренути Duo Потребдна верификација %1$s За ову радњу је потребна верификација. Подесите метод откључавања у Bitwarden да би наставили. - Грешка у креацији приступачног кључа - Грешка у читању приступачног кључа + Грешка у креацији приступног кључа + Грешка у читању приступног кључа Дошло је до проблема при креирању приступачког кључа за %1$s. Покушајте поново касније. Дошло је до проблема при читању приступачког кључа за %1$s. Покушајте поново касније. Верификација идентитета... Лозинке Непознат налог Подесити ауто-пуњење - Имајте инстантни приступ Вашим лозинкама и приступачним кључевима! + Имајте инстантни приступ Вашим лозинкама и приступним кључевима! Да бисте подесили ауто-пуњење лозинки и управљање приступним кључевима, подесите Bitwarden као ваш омиљени провајдер у подешавањима iOS-а. 1. Идите на подешавања уређаја > Лозинке > Опције лозинке 2. Омогућите ауто-пуњење @@ -952,7 +952,7 @@ Нисте добили имејл? Назад за промену ваше имејл адресе. Или пријавите се, можда већ имате налог. Добијајте имјл од Bitwarden-а за најаве, савете и могућности истраживања. Откажите претплату у било ком тренутку. - Get advice, announcements, and research opportunities from Bitwarden in your inbox. Unsubscribe at any time. + Добијајте савете, најаве и могућности истраживања од Bitwarden-а у пријемном сандучету. Откажите претплату у било ком тренутку. Приватност, приоритет Сачувајте пријаве, картице и идентитете у свој безбедни сеф. Bitwarden користи шифровање од почетка-до-краја да заштити оно што вам је важно. Подесите биометријско откључавање и аутоматско попуњавање да бисте се пријавили на своје налоге без уноса ниједног слова. @@ -961,8 +961,8 @@ Користите генератор да креирате и сачувате јаке, јединствене лозинке за све ваше налоге. Ваши подаци, када и где су вам потребни Сачувајте неограничене лозинке на неограниченим уређајима помоћу Bitwarden мобилних апликација, претраживача и десктоп апликација. - Уклонити приступачни кључ - Приступачни кључ је уклоњен + Уклонити приступни кључ + Приступни кључ је уклоњен Шта лозинку чини јаком? Што је ваша лозинка дужа, то је теже хаковати. Минимум за креирање налога је 12 знакова, али ако направите 14 знакова, време за пробијање ваше лозинке би трајало векове! Најјаче лозинке су обично: @@ -1001,8 +1001,8 @@ Истекла веза Поново покрените регистрацију или покушајте да се пријавите. Можда већ имате налог. Поново покрените регистрацију - Authenticator Sync - Allow authenticator syncing + Синхронизација аутентификатора + Дозволи синхронизацију аутентификатора Дошло је до проблема са валидацијом регистрационог токена. Омогућите ауто-пуњење Користите ауто-пуњење да бисте се пријавили на своје налоге једним додиром. @@ -1021,7 +1021,7 @@ Делите датотеке и податке безбедно са било ким, на било којој платформи. Ваше информације ће остати шифроване од почетка-до-краја уз ограничење изложености. Шаљите осетљиве информације, безбедно Увезите сачуване пријаве - Use a computer to import logins from an existing password manager + Користите рачунар за увоз пријава из постојећег менаџера лозинки Можете се вратити да бисте завршили овај корак у било ком тренутку у подешавањима. сефа. Увезите пријаве касније Желите ли касније да увезете пријаве? @@ -1056,30 +1056,35 @@ и после Заврши Ради ваше безбедности, обавезно избришите своју сачувану датотеку лозинке. избришите своју сачувану датотеку лозинке. - Need help? Check out import help. + Треба вам помоћ? Проверите помоћ за увоз. помоћ за увоз Сачувајте извезену датотеку негде на рачунару где можете лако да пронађете. Сачувајте извезену датотеку Ово није признати Bitwarden сервер. Можда ћете морати да проверите код свог провајдера или да ажурирате сервер. - Syncing logins... + Синхронизовање пријављивања... SSH Key Cipher Item Types - Download the browser extension - Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. - Use the web app - Log in at bitwarden.com to easily manage your account and update settings. - Autofill passwords - Set up autofill on all your devices to login with a single tap anywhere. - Import Successful! - Manage your logins from anywhere with Bitwarden tools for web and desktop. - Bitwarden Tools - Got it - No logins were imported - Logins imported - Remember to delete your imported password file from your computer - SSH key - Public key - Private key - SSH keys - Copy public key - Copy fingerprint + Преузмите проширење претраживача + Идите на bitwarden.com/download да интегришете Bitwarden у свој омиљени претраживач за беспрекорно искуство. + Користите веб апликацију + Пријавите се на bitwarden.com да лако управљате својим налогом и ажурирате подешавања. + Ауто-попуњавање лозинки + Подесите ауто-попуњавање на свим својим уређајима да бисте се пријавили једним додиром било где. + Увоз успешан! + Управљајте својим пријавама са било ког места помоћу Bitwarden алата за веб и десктоп. + Bitwarden алатке + Разумем + Нису увезене никакве пријаве + Verified SSO Domain Endpoint + Увезене пријаве + Не заборавите да избришете увезену датотеку лозинке са свог рачунара + SSH кључ + Јавни кључ + Приватни кључ + SSH кључеве + Копирај јавни кључ + Копирати отисак + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 78afa60f5..74240a2ca 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -50,7 +50,7 @@ Kontot har redan lagts till Vill du byta till det nu? Huvudlösenord - Master password (required) + Huvudlösenord (obligatoriskt) Mer Mitt valv Autentiserare @@ -973,7 +973,7 @@ Vill du byta till detta konto? Try it out Account setup Set up unlock - Set up later + Ställ in senare Set up unlock later? You can return to complete this step anytime from Account Security in Settings. Bekräfta @@ -990,7 +990,7 @@ Vill du byta till detta konto? Write this password down and keep it somewhere safe. Learn about other ways to prevent account lockout Help with server geolocations. - Email address (required) + E-postadress (obligatoriskt) "Välj länken i e-postmeddelandet för att verifiera din e-postadress och fortsätta skapa ditt konto. " Ändra e-postadress Nästa @@ -1042,8 +1042,8 @@ Vill du byta till detta konto? Export your saved logins You’ll delete this file after import is complete. On your computer, open a new browser tab and go to %1$s - gå till vault.bitwarden.com - Log in to the Bitwarden web app. + gå till %1$s + Logga in på Bitwardens webbapp. Steg 2 av 3 Logga in på Bitwarden Steg 3 av 3 @@ -1071,9 +1071,10 @@ Vill du byta till detta konto? Set up autofill on all your devices to login with a single tap anywhere. Import Successful! Manage your logins from anywhere with Bitwarden tools for web and desktop. - Bitwarden Tools + Bitwarden-verktyg Got it Inga inloggningar importerades + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH-nyckel @@ -1082,4 +1083,8 @@ Vill du byta till detta konto? SSH-nycklar Copy public key Kopiera fingeravtryck + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index c52d5f0d9..186301d30 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -1073,6 +1073,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml index 1263eba5d..637919302 100644 --- a/app/src/main/res/values-te-rIN/strings.xml +++ b/app/src/main/res/values-te-rIN/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 167b78c7c..6a06adcf5 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -1073,6 +1073,7 @@ Do you want to switch to this account? Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ Do you want to switch to this account? SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 4752f9a29..4a0172079 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -1072,6 +1072,7 @@ Bu hesaba geçmek ister misiniz? Bitwarden Araçları Anladım Hiç hesap aktarılmadı + Doğrulanmış SSO Alan Adı Uç Noktası Hesaplar içe aktarıldı İçe aktardığınız parola dosyasını bilgisayarınızdan silmeyi unutmayın SSH anahtarı @@ -1080,4 +1081,8 @@ Bu hesaba geçmek ister misiniz? SSH anahtarları Ortak anahtarı kopyala Parmak izini kopyala + Bildirimleri etkinleştir + Farklı cihazlarda hızlıca ve kolayca oturum açın + Başka bir cihazdan yeni bir giriş isteği aldığınızda Bitwarden size bildirim gönderebilir. + Şimdilik geç diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 346af8668..9401eba57 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -214,7 +214,7 @@ Відповідні записи Можливі відповідні записи Пошук - Ви шукаєте запис для \"%1$s\". + Ви шукаєте запис автозаповнення для \"%1$s\". Докладніше про організації Не вдається відкрити програму \"%1$s\". Програма автентифікації @@ -332,7 +332,7 @@ У цій збірці немає записів. У цій теці немає записів. У смітнику немає записів. - Служба спеціальних можливостей автозаповнення + Служба доступності автозаповнення Допомога із заповненням полів імені користувача і пароля в інших програмах і в інтернеті. Служба автозаповнення Bitwarden використовує Android Autofill Framework для введення облікових даних в інших програмах на вашому пристрої. Використовуйте службу автозаповнення Bitwarden, щоб автоматично вводити облікові дані в інших програмах. @@ -368,7 +368,7 @@ Утримуйте Yubikey біля верхньої частини пристрою. Спробуйте знову Щоб продовжити, утримуйте YubiKey NEO навпроти задньої частини пристрою. - Служба спеціальних можливостей може бути корисною, коли програми не підтримують стандартну службу автозаповнення. + Служба доступності може бути корисною, коли програми не підтримують стандартну службу автозаповнення. Пароль оновлено Оновлено Автозаповнення активовано! @@ -376,7 +376,7 @@ Тепер ви можете легко отримувати доступ до своїх записів з клавіатури під час входу в програмах і на вебсайтах. Ми радимо вимкнути будь-які інші програми з функцією автозаповнення в Параметрах, якщо ви не плануєте ними користуватися. Отримуйте доступ до свого сховища безпосередньо з клавіатури, щоб швидко вводити паролі. - Для увімкнення автозаповнення паролів на вашому пристрої, виконайте такі дії: + Щоб увімкнути автозаповнення паролів на вашому пристрої, виконайте такі дії: 1. Відкрийте \"Параметри\" свого пристрою iOS 2. Оберіть \"Паролі\" 3. Торкніться до \"Автозаповнення паролів\" @@ -478,7 +478,7 @@ Біометрична перевірка біометрією Використовувати біометрію для розблокування - Bitwarden потребує вашої уваги - Див. розділ \"Служба спеціальних можливостей автозаповнення\" в налаштуваннях Bitwarden + Bitwarden потребує вашої уваги. Перегляньте розділ \"Служба доступності автозаповнення\" в налаштуваннях Bitwarden 3. У налаштуваннях Android для Bitwarden перейдіть до \"Накладання інших програм\" (розділ Розширені) і змініть положення перемикача для активації накладання. Дозвіл Відкрити налаштування дозволів накладання @@ -501,7 +501,7 @@ Відкрити Виникла проблема зі збереженням цього вкладення. Якщо проблема не зникне, ви можете зберегти його з вебсховища. Вкладення успішно збережено - Увімкніть \"Службу спеціальних можливостей автозаповнення\" у налаштуваннях Bitwarden для використання панелі автозаповнення. + Увімкніть \"Службу доступності автозаповнення\" в налаштуваннях Bitwarden, щоб використовувати панель автозаповнення. Полів пароля не виявлено Перенесення до смітника... Запис переміщено до смітника. @@ -537,20 +537,20 @@ Умови користування та політика приватності не погоджені. Умови користування Політика приватності - Bitwarden потребує вашої уваги - Увімкніть \"Накладання\" в \"Службах автозаповнення\" в налаштуваннях Bitwarden + Bitwarden потребує вашої уваги. Увімкніть \"Накладання\" в \"Службах автозаповнення\" в налаштуваннях Bitwarden Керування ключами доступу Служби автозаповнення Використовувати вбудоване автозаповнення Використовуйте вбудоване автозаповнення, якщо ваш спосіб введення (клавіатура) його підтримує. Якщо ваша конфігурація не підтримується (або ця функція вимкнена), буде використано типове накладання автозаповнення. Використовувати спеціальні можливості - Використовуйте службу спеціальних можливостей Bitwarden для автоматичного заповнення паролів у програмах та на вебсайтах. Якщо увімкнено, при виборі полів входу буде показано спливне повідомлення. - Використовуйте службу спеціальних можливостей Bitwarden для заповнення паролів у програмах і на вебсайтах. (Необхідно увімкнути накладання) + Використовуйте службу доступності Bitwarden, щоб автоматично заповнювати паролі в програмах і на вебсайтах. Якщо налаштовано, з\'являтиметься спливне сповіщення під час вибору полів входу. + Використовуйте службу доступності Bitwarden, щоб автоматично заповнювати паролі в програмах і на вебсайтах. (Необхідно увімкнути накладання) Використовуйте службу спеціальних можливостей Bitwarden для використання панелі швидких дій автозаповнення, а також для показу спливного повідомлення з накладанням (якщо увімкнено). Обов\'язкове використання панелі швидких дій автозаповнення, або виклику служби автозаповнення з накладанням (якщо увімкнено). Необхідно використовувати плитку швидких дій для автозаповнення. Використовувати накладання Якщо увімкнено, дозволяє службі спеціальних можливостей Bitwarden показувати спливне повідомлення при виборі полів входу. - Якщо увімкнено, служба спеціальних можливостей Bitwarden показуватиме спливне повідомлення при виборі полів входу, щоб допомогти автоматично заповнити ваші облікові дані. + Якщо увімкнено, служба доступності Bitwarden показуватиме спливне сповіщення під час вибору полів входу, щоб допомогти автоматично заповнити ваші облікові дані. Якщо увімкнено, служба спеціальних можливостей покаже спливне повідомлення, щоб викликати службу автозаповнення для старіших програм, які не підтримують Android Autofill Framework. Згідно з політикою компанії, вам заборонено зберігати записи в особистому сховищі. Змініть опцію власника на організацію та виберіть серед доступних збірок. Політика організації впливає на ваші параметри власності. @@ -1040,8 +1040,8 @@ Крок 1 з 3 Експортуйте збережені записи Після завершення імпорту видаліть цей файл. - На вашому комп\'ютері відкрийте нову вкладку браузера і перейдіть до vault.bitwarden.com - перейдіть до vault.bitwarden.com + На вашому комп\'ютері відкрийте нову вкладку браузера і перейдіть до %1$s + перейдіть до %1$s Увійдіть у вебпрограму Bitwarden. Крок 2 з 3 Увійдіть у Bitwarden @@ -1055,7 +1055,7 @@ потім натисніть Виконано З міркувань безпеки, обов\'язково видаліть збережений файл із паролями. видаліть збережений файл із паролями. - Need help? Check out import help. + Потрібна допомога? Перегляньте довідку щодо імпорту. довідка щодо імпорту Збережіть експортований файл у легкодоступному місці на цьому комп\'ютері. Збережіть експортований файл @@ -1064,7 +1064,7 @@ Типи елементів ключів шифрування SSH Завантажити розширення браузера Відкрийте bitwarden.com/download, щоб інтегрувати Bitwarden у свій браузер для найкращої продуктивності. - Використовувати веб-застосунок + Використовувати вебпрограму Увійдіть на bitwarden.com, щоб легко керувати обліковим записом і змінювати налаштування. Автозаповнення паролів Налаштуйте автозаповнення на всіх пристроях для входу одним дотиком. @@ -1073,12 +1073,17 @@ Інструменти Bitwarden Зрозуміло Жодного запису не імпортовано - Logins imported - Remember to delete your imported password file from your computer - SSH key - Public key - Private key - SSH keys - Copy public key - Copy fingerprint + Кінцеву точку домену SSO підтверджено + Записи імпортовано + Обов\'язково видаліть імпортований файл із паролями з комп\'ютера + Ключ SSH + Відкритий ключ + Закритий ключ + Ключі SSH + Копіювати відкритий ключ + Копіювати відбиток + Увімкнути сповіщення + Швидко й легко виконуйте вхід на різних пристроях + Bitwarden може сповіщати вас щоразу, коли ви отримуєте новий запит на вхід з іншого пристрою. + Наразі пропустити diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index a13f820d1..1ef7ba1d8 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -1073,12 +1073,17 @@ Bạn có muốn chuyển sang tài khoản này không? Công cụ Bitwarden Đã hiểu Chưa nhập lượt đăng nhập nào + Điểm cuối tên miền SSO đã xác minh Đã nhập lượt đăng nhập Nhớ xóa file mật khẩu đã nhập khỏi máy tính Khóa SSH Khóa công khai Khóa riêng tư Khóa SSH - Copy public key - Copy fingerprint + Chép khóa công khai + Chép vân tay + Bật thông báo + Đăng nhập nhanh và dễ dàng giữa các thiết bị + Bitwarden có thể thông báo cho bạn mỗi khi bạn nhận được yêu cầu đăng nhập mới từ thiết bị khác. + Bỏ qua diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e0fab051b..37654f8b4 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -463,7 +463,7 @@ 黑色 Nord 过曝暗 - 自动填充被阻止的 URI + 自动填充已屏蔽的 URI 询问添加登录 在密码库中找不到匹配项目时询问添加一个。 App 重启时 @@ -544,7 +544,7 @@ 如果您所选的 IME(键盘)支持,将使用内嵌方式的自动填充。如果您的配置不支持(或此选项被关闭),将使用默认的叠加层方式的自动填充。 使用无障碍 使用 Bitwarden 无障碍服务来自动填充您在 App 和网络中的登录信息。启用后,选中登录字段时将显示弹出窗口。 - 使用 Bitwarden 无障碍服务来自动填充您在 App 和网络上的登录信息。(需同时启用 Draw-Over 功能) + 使用 Bitwarden 无障碍服务来自动填充您在 App 和网络上的登录信息(需同时启用 Draw-Over 功能)。 使用 Bitwarden 无障碍服务来使用自动填充快速行动磁贴,和/或使用 Draw-Over(若已启用)来显示弹出窗口。 要求使用自动填充快速行动磁贴,或通过使用 Draw-Over (若已启用)来增强自动填充服务。 已请求使用自动填充快速操作图块。 @@ -977,7 +977,7 @@ 您可以随时回到「设置」中的「账户安全」来完成此步骤。 确认 设置生物识别或选择一个 PIN 码,以快速访问您的密码库并自动填充您的登录信息。 - 永远不会失去对您的密码库的访问权限 + 千万不要失去对您的密码库的访问权限 要确保您始终能够访问自己的账户,最好的办法是从一开始就设置好安全保障措施。 创建提示 当您请求时,提示将通过电子邮件发送给您。 @@ -1001,7 +1001,7 @@ 请重新注册或尝试登录。您可能已经有一个账户了。 重新开始注册 验证器同步 - 允许 Bitwarden 验证器同步 + 允许验证器同步 验证注册令牌时出现问题。 打开自动填充 使用自动填充功能,只需点击一次即可登录您的账户。 @@ -1029,8 +1029,8 @@ 导入登录信息 按照以下说明,从您的电脑上导出您的浏览器或其他密码管理器保存的密码。然后安全地导入到 Bitwarden。 Give your vault a head start - Unlock with biometrics requires strong biometric authentication and may not be compatible with all biometric options on this device. - Unlock with biometrics requires strong biometric authentication and is not compatible with the biometrics options available on this device. + 使用生物识别解锁需要强大的生物识别身份验证,其可能与本设备上的所有生物识别选项不兼容。 + 使用生物识别解锁需要强大的生物识别身份验证,其与本设备上提供的生物识别选项不兼容。 在您的计算机上,登录到当前浏览器或密码管理器。 登录到当前浏览器或密码管理器。 导出您的密码。此选项通常可以在设置中找到。 @@ -1039,9 +1039,9 @@ 选择「导入数据」 步骤 1 / 3 导出已保存的登录信息 - 导入完成后您需要删除此文件。 - 在您的计算机上,打开一个新的浏览器标签页并访问 vault.bitwarden.com - 访问 vault.bitwarden.com + 导入完成后您应该删除此文件。 + 在您的计算机上,打开一个新的浏览器标签页并转到 %1$s + 转到 %1$s 登录到 Bitwarden 网页 App。 步骤 2 / 3 登录到 Bitwarden @@ -1055,30 +1055,35 @@ 然后「完成」 为了您的安全,请务必删除已保存的密码文件。 删除已保存的密码文件。 - Need help? Check out import help. + 需要帮助吗?请查看导入帮助。 导入帮助 将导出的文件保存到您可以在计算机上轻松找到的地方。 保存导出的文件 - This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + 这是一个无法识别的 Bitwarden 服务器。您可能需要向您的提供商查询或更新您的服务器。 正在同步登录信息... - SSH Key Cipher Item Types - Download the browser extension - Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. - Use the web app - Log in at bitwarden.com to easily manage your account and update settings. - Autofill passwords - Set up autofill on all your devices to login with a single tap anywhere. - Import Successful! - Manage your logins from anywhere with Bitwarden tools for web and desktop. - Bitwarden Tools - Got it - No logins were imported - Logins imported - Remember to delete your imported password file from your computer - SSH key - Public key - Private key - SSH keys - Copy public key - Copy fingerprint + SSH 密钥 Cipher 项目类型 + 下载浏览器扩展 + 请访问 bitwarden.com/download,将 Bitwarden 集成到您最喜欢的浏览器中,获得无缝体验。 + 使用网页 App + 登录到 bitwarden.com 以轻松管理您的账户和更新设置。 + 自动填充密码 + 在所有设备上设置自动填充,随时随地轻点一下即可登录。 + 导入成功! + 使用 Bitwarden 网络和桌面工具,随时随地管理您的登录信息。 + Bitwarden 工具 + 知道了 + 未导入任何登录信息 + 已验证的 SSO 域端点 + 登录信息已导入 + 记得从电脑中删除已导入的密码文件 + SSH 密钥 + 公钥 + 私钥 + SSH 密钥 + 复制公钥 + 复制指纹 + 启用通知 + 快速和轻松地跨设备登录 + Bitwarden 可以在每次收到来自其他设备的新登录请求时通知您。 + 暂时跳过 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index d485e0ed0..04fd3d030 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1073,6 +1073,7 @@ Bitwarden Tools Got it No logins were imported + Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer SSH key @@ -1081,4 +1082,8 @@ SSH keys Copy public key Copy fingerprint + Enable notifications + Log in quickly and easily across devices + Bitwarden can notify you each time you receive a new login request from another device. + Skip for now From b6dfc3d17bc0b8f5da915678777ca5ca13a2e168 Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Fri, 8 Nov 2024 13:23:39 -0500 Subject: [PATCH 4/9] PM-14433 update flow type to nullable so we can handle gracefully and avoid crash (#4263) Co-authored-by: Dave Severns <149429124+dseverns-livefront@users.noreply.github.com> --- .../bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt | 2 ++ .../bitwarden/data/vault/datasource/disk/dao/DomainsDao.kt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt index 91a6b8fe5..cdb1e1235 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt @@ -17,6 +17,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge @@ -124,6 +125,7 @@ class VaultDiskSourceImpl( override fun getDomains(userId: String): Flow = domainsDao .getDomains(userId) + .filterNotNull() .map { entity -> withContext(dispatcherManager.default) { json.decodeFromString(entity.domainsJson) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/dao/DomainsDao.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/dao/DomainsDao.kt index a5977cb26..bec92cd0d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/dao/DomainsDao.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/dao/DomainsDao.kt @@ -25,7 +25,7 @@ interface DomainsDao { @Query("SELECT * FROM domains WHERE user_id = :userId") fun getDomains( userId: String, - ): Flow + ): Flow /** * Inserts domains into the database. From 54d3b348760c299f555a40555338a10c032a0643 Mon Sep 17 00:00:00 2001 From: aj-rosado <109146700+aj-rosado@users.noreply.github.com> Date: Fri, 8 Nov 2024 18:33:49 +0000 Subject: [PATCH 5/9] [PM-11753] Listening to vaultUnlock state on mutableCiphers, folders, collections and send state flow (#4214) --- .../repository/util/StateFlowExtensions.kt | 34 +++++++++ .../vault/repository/VaultRepositoryImpl.kt | 35 ++++++++-- .../util/StateFlowExtensionsTest.kt | 69 +++++++++++++++++++ .../vault/repository/VaultRepositoryTest.kt | 21 +++++- 4 files changed, 151 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/util/StateFlowExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/util/StateFlowExtensions.kt index e2f2a1d5e..e5447a385 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/util/StateFlowExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/util/StateFlowExtensions.kt @@ -1,12 +1,14 @@ package com.x8bit.bitwarden.data.platform.repository.util import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson +import com.x8bit.bitwarden.data.vault.repository.model.VaultUnlockData import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map @@ -31,3 +33,35 @@ fun MutableStateFlow.observeWhenSubscribedAndLoggedIn( .flatMapLatest { activeUserId -> activeUserId?.let(observer) ?: flow { awaitCancellation() } } + +/** + * Invokes the [observer] callback whenever the user is logged in, the active changes, + * the vault for the user changes and there are subscribers to the [MutableStateFlow]. + * The flow from all previous calls to the `observer` + * is canceled whenever the `observer` is re-invoked, there is no active user (logged-out), + * there are no subscribers to the [MutableStateFlow] or the vault is not unlocked. + */ +@OptIn(ExperimentalCoroutinesApi::class) +fun MutableStateFlow.observeWhenSubscribedAndUnlocked( + userStateFlow: Flow, + vaultUnlockFlow: Flow>, + observer: (activeUserId: String) -> Flow, +): Flow = + combine( + this.subscriptionCount.map { it > 0 }.distinctUntilChanged(), + userStateFlow.map { it?.activeUserId }.distinctUntilChanged(), + userStateFlow + .map { it?.activeUserId } + .distinctUntilChanged() + .filterNotNull() + .flatMapLatest { activeUserId -> + vaultUnlockFlow + .map { it.any { it.userId == activeUserId } } + .distinctUntilChanged() + }, + ) { isSubscribed, activeUserId, isUnlocked -> + activeUserId.takeIf { isSubscribed && isUnlocked } + } + .flatMapLatest { activeUserId -> + activeUserId?.let(observer) ?: flow { awaitCancellation() } + } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt index edc6d259d..12ac59c11 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt @@ -36,6 +36,7 @@ import com.x8bit.bitwarden.data.platform.repository.util.combineDataStates import com.x8bit.bitwarden.data.platform.repository.util.map import com.x8bit.bitwarden.data.platform.repository.util.mapNullable import com.x8bit.bitwarden.data.platform.repository.util.observeWhenSubscribedAndLoggedIn +import com.x8bit.bitwarden.data.platform.repository.util.observeWhenSubscribedAndUnlocked import com.x8bit.bitwarden.data.platform.repository.util.updateToPendingOrLoading import com.x8bit.bitwarden.data.platform.util.asFailure import com.x8bit.bitwarden.data.platform.util.asSuccess @@ -222,7 +223,13 @@ class VaultRepositoryImpl( // Cancel any ongoing sync request and clear the vault data in memory every time // the user switches or the vault is locked for the active user. merge( - authDiskSource.userSwitchingChangesFlow, + authDiskSource + .userSwitchingChangesFlow + .onEach { + // DomainState is not part of the locked data but should still be cleared + // when the user changes + mutableDomainsStateFlow.update { DataState.Loading } + }, vaultLockManager .vaultUnlockDataStateFlow .filter { vaultUnlockDataList -> @@ -238,31 +245,46 @@ class VaultRepositoryImpl( // Setup ciphers MutableStateFlow mutableCiphersStateFlow - .observeWhenSubscribedAndLoggedIn(authDiskSource.userStateFlow) { activeUserId -> + .observeWhenSubscribedAndUnlocked( + userStateFlow = authDiskSource.userStateFlow, + vaultUnlockFlow = vaultUnlockDataStateFlow, + ) { activeUserId -> observeVaultDiskCiphers(activeUserId) } .launchIn(unconfinedScope) + // Setup domains MutableStateFlow mutableDomainsStateFlow - .observeWhenSubscribedAndLoggedIn(authDiskSource.userStateFlow) { activeUserId -> + .observeWhenSubscribedAndLoggedIn( + userStateFlow = authDiskSource.userStateFlow, + ) { activeUserId -> observeVaultDiskDomains(activeUserId) } .launchIn(unconfinedScope) // Setup folders MutableStateFlow mutableFoldersStateFlow - .observeWhenSubscribedAndLoggedIn(authDiskSource.userStateFlow) { activeUserId -> + .observeWhenSubscribedAndUnlocked( + userStateFlow = authDiskSource.userStateFlow, + vaultUnlockFlow = vaultUnlockDataStateFlow, + ) { activeUserId -> observeVaultDiskFolders(activeUserId) } .launchIn(unconfinedScope) // Setup collections MutableStateFlow mutableCollectionsStateFlow - .observeWhenSubscribedAndLoggedIn(authDiskSource.userStateFlow) { activeUserId -> + .observeWhenSubscribedAndUnlocked( + userStateFlow = authDiskSource.userStateFlow, + vaultUnlockFlow = vaultUnlockDataStateFlow, + ) { activeUserId -> observeVaultDiskCollections(activeUserId) } .launchIn(unconfinedScope) // Setup sends MutableStateFlow mutableSendDataStateFlow - .observeWhenSubscribedAndLoggedIn(authDiskSource.userStateFlow) { activeUserId -> + .observeWhenSubscribedAndUnlocked( + authDiskSource.userStateFlow, + vaultUnlockFlow = vaultUnlockDataStateFlow, + ) { activeUserId -> observeVaultDiskSends(activeUserId) } .launchIn(unconfinedScope) @@ -305,7 +327,6 @@ class VaultRepositoryImpl( private fun clearUnlockedData() { mutableCiphersStateFlow.update { DataState.Loading } - mutableDomainsStateFlow.update { DataState.Loading } mutableFoldersStateFlow.update { DataState.Loading } mutableCollectionsStateFlow.update { DataState.Loading } mutableSendDataStateFlow.update { DataState.Loading } diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/util/StateFlowExtensionsTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/util/StateFlowExtensionsTest.kt index 0f851b3b0..cef05ad73 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/util/StateFlowExtensionsTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/util/StateFlowExtensionsTest.kt @@ -2,6 +2,7 @@ package com.x8bit.bitwarden.data.platform.repository.util import app.cash.turbine.test import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson +import com.x8bit.bitwarden.data.vault.repository.model.VaultUnlockData import io.mockk.every import io.mockk.mockk import kotlinx.coroutines.flow.MutableStateFlow @@ -50,6 +51,74 @@ class StateFlowExtensionsTest { assertEquals(0, awaitItem()) assertEquals(1, awaitItem()) + job.cancel() + // Job is canceled, we should have no more subscribers + assertEquals(0, awaitItem()) + } + } + + @Suppress("MaxLineLength") + @Test + fun `observeWhenSubscribedAndUnlocked should observe the given flow depending on the state of the source user and vault unlock flow`() = + runTest { + val userStateFlow = MutableStateFlow(null) + val vaultUnlockFlow = MutableStateFlow>(emptyList()) + val observerStateFlow = MutableStateFlow("") + val sourceMutableStateFlow = MutableStateFlow(Unit) + + assertEquals(0, observerStateFlow.subscriptionCount.value) + sourceMutableStateFlow + .observeWhenSubscribedAndUnlocked( + userStateFlow = userStateFlow, + vaultUnlockFlow = vaultUnlockFlow, + observer = { observerStateFlow }, + ) + .launchIn(backgroundScope) + + observerStateFlow.subscriptionCount.test { + // No subscriber to start + assertEquals(0, awaitItem()) + + userStateFlow.value = mockk { + every { activeUserId } returns "user_id_1234" + } + // Still none, since no one has subscribed to the testMutableStateFlow + expectNoEvents() + + vaultUnlockFlow.value = listOf( + VaultUnlockData( + userId = "user_id_1234", + status = VaultUnlockData.Status.UNLOCKED, + ), + ) + + // Still none, since no one has subscribed to the testMutableStateFlow + expectNoEvents() + + val job = sourceMutableStateFlow.launchIn(backgroundScope) + // Now we subscribe to the observer flow since have a active user and a listener + assertEquals(1, awaitItem()) + + userStateFlow.value = mockk { + every { activeUserId } returns "user_id_4321" + } + // The user changed, so we clear the previous observer but then resubscribe + // with the new user ID + assertEquals(0, awaitItem()) + assertEquals(1, awaitItem()) + + vaultUnlockFlow.value = listOf( + VaultUnlockData( + userId = "user_id_4321", + status = VaultUnlockData.Status.UNLOCKED, + ), + ) + + // The VaultUnlockData changed, so we clear the previous observer but then resubscribe + // with the new data + assertEquals(0, awaitItem()) + assertEquals(1, awaitItem()) + job.cancel() // Job is canceled, we should have no more subscribers assertEquals(0, awaitItem()) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt index 159ed4dd2..8c9213a92 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt @@ -344,8 +344,15 @@ class VaultRepositoryTest { DataState.Loaded(createMockDomainsData(number = 1)), domainsStateFlow.awaitItem(), ) + setVaultToUnlocked(userId = userId) + ciphersFlow.tryEmit(listOf(createMockCipher(number = 1))) + collectionsFlow.tryEmit(listOf(createMockCollection(number = 1))) + foldersFlow.tryEmit(listOf(createMockFolder(number = 1))) + sendsFlow.tryEmit(listOf(createMockSend(number = 1))) + domainsFlow.tryEmit(createMockDomains(number = 1)) + assertEquals( DataState.Loaded(listOf(createMockCipherView(number = 1))), ciphersStateFlow.awaitItem(), @@ -487,7 +494,7 @@ class VaultRepositoryTest { assertEquals(DataState.Loading, collectionsStateFlow.awaitItem()) assertEquals(DataState.Loading, foldersStateFlow.awaitItem()) assertEquals(DataState.Loading, sendsStateFlow.awaitItem()) - assertEquals(DataState.Loading, domainsStateFlow.awaitItem()) + domainsStateFlow.expectNoEvents() } } @@ -1807,6 +1814,9 @@ class VaultRepositoryTest { settingsDiskSource.getLastSyncTime(userId = userId) } returns clock.instant() + mutableVaultStateFlow.update { + listOf(VaultUnlockData(userId, VaultUnlockData.Status.UNLOCKED)) + } fakeAuthDiskSource.userState = MOCK_USER_STATE setupEmptyDecryptionResults() setupVaultDiskSourceFlows( @@ -1963,6 +1973,7 @@ class VaultRepositoryTest { expectNoEvents() setVaultToUnlocked(userId = MOCK_USER_STATE.activeUserId) + sendsFlow.tryEmit(emptyList()) assertEquals(DataState.Loaded(null), awaitItem()) sendsFlow.tryEmit(listOf(createMockSend(number = sendId))) assertEquals(DataState.Loaded(sendView), awaitItem()) @@ -4596,6 +4607,14 @@ class VaultRepositoryTest { */ private fun setVaultToUnlocked(userId: String) { mutableUnlockedUserIdsStateFlow.update { it + userId } + mutableVaultStateFlow.tryEmit( + listOf( + VaultUnlockData( + userId, + VaultUnlockData.Status.UNLOCKED, + ), + ), + ) } /** From fe84feb18427ffdac4c3845a6cdd71e4439e25cd Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Fri, 8 Nov 2024 15:18:18 -0500 Subject: [PATCH 6/9] PM-14433: Null domain data (#4268) Co-authored-by: Dave Severns <149429124+dseverns-livefront@users.noreply.github.com> Co-authored-by: David Perez --- .../5.json | 256 ++++++++++++++++++ .../vault/datasource/disk/VaultDiskSource.kt | 2 +- .../datasource/disk/VaultDiskSourceImpl.kt | 6 +- .../datasource/disk/database/VaultDatabase.kt | 2 +- .../datasource/disk/entity/DomainsEntity.kt | 2 +- .../network/model/SyncResponseJson.kt | 2 +- .../repository/util/DomainsExtensions.kt | 6 +- .../datasource/disk/VaultDiskSourceTest.kt | 9 +- .../datasource/disk/dao/FakeDomainsDao.kt | 5 +- 9 files changed, 274 insertions(+), 16 deletions(-) create mode 100644 app/schemas/com.x8bit.bitwarden.data.vault.datasource.disk.database.VaultDatabase/5.json diff --git a/app/schemas/com.x8bit.bitwarden.data.vault.datasource.disk.database.VaultDatabase/5.json b/app/schemas/com.x8bit.bitwarden.data.vault.datasource.disk.database.VaultDatabase/5.json new file mode 100644 index 000000000..f1136b0ff --- /dev/null +++ b/app/schemas/com.x8bit.bitwarden.data.vault.datasource.disk.database.VaultDatabase/5.json @@ -0,0 +1,256 @@ +{ + "formatVersion": 1, + "database": { + "version": 5, + "identityHash": "ee697e71290c92fe5b607d0b7665481b", + "entities": [ + { + "tableName": "ciphers", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` TEXT NOT NULL, `cipher_type` TEXT NOT NULL, `cipher_json` TEXT NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "cipherType", + "columnName": "cipher_type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "cipherJson", + "columnName": "cipher_json", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_ciphers_user_id", + "unique": false, + "columnNames": [ + "user_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_ciphers_user_id` ON `${TABLE_NAME}` (`user_id`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "collections", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` TEXT NOT NULL, `organization_id` TEXT NOT NULL, `should_hide_passwords` INTEGER NOT NULL, `name` TEXT NOT NULL, `external_id` TEXT, `read_only` INTEGER NOT NULL, `manage` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "organizationId", + "columnName": "organization_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "shouldHidePasswords", + "columnName": "should_hide_passwords", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "externalId", + "columnName": "external_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isReadOnly", + "columnName": "read_only", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "canManage", + "columnName": "manage", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_collections_user_id", + "unique": false, + "columnNames": [ + "user_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_collections_user_id` ON `${TABLE_NAME}` (`user_id`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "domains", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`user_id` TEXT NOT NULL, `domains_json` TEXT, PRIMARY KEY(`user_id`))", + "fields": [ + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "domainsJson", + "columnName": "domains_json", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "user_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "folders", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` TEXT NOT NULL, `name` TEXT, `revision_date` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "revisionDate", + "columnName": "revision_date", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_folders_user_id", + "unique": false, + "columnNames": [ + "user_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_folders_user_id` ON `${TABLE_NAME}` (`user_id`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "sends", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` TEXT NOT NULL, `send_type` TEXT NOT NULL, `send_json` TEXT NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "sendType", + "columnName": "send_type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "sendJson", + "columnName": "send_json", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_sends_user_id", + "unique": false, + "columnNames": [ + "user_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_sends_user_id` ON `${TABLE_NAME}` (`user_id`)" + } + ], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ee697e71290c92fe5b607d0b7665481b')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSource.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSource.kt index 9c4329a65..13cb5a3fe 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSource.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSource.kt @@ -37,7 +37,7 @@ interface VaultDiskSource { /** * Retrieves all domains from the data source for a given [userId]. */ - fun getDomains(userId: String): Flow + fun getDomains(userId: String): Flow /** * Deletes a folder from the data source for the given [userId] and [folderId]. diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt index cdb1e1235..204fe787e 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt @@ -122,13 +122,13 @@ class VaultDiskSourceImpl( }, ) - override fun getDomains(userId: String): Flow = + override fun getDomains(userId: String): Flow = domainsDao .getDomains(userId) .filterNotNull() .map { entity -> withContext(dispatcherManager.default) { - json.decodeFromString(entity.domainsJson) + entity?.domainsJson?.let { json.decodeFromString(it) } } } @@ -242,7 +242,7 @@ class VaultDiskSourceImpl( domainsDao.insertDomains( domains = DomainsEntity( userId = userId, - domainsJson = json.encodeToString(vault.domains), + domainsJson = vault.domains?.let { json.encodeToString(it) }, ), ) } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt index 23511a03f..19dcdc75d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt @@ -26,7 +26,7 @@ import com.x8bit.bitwarden.data.vault.datasource.disk.entity.SendEntity FolderEntity::class, SendEntity::class, ], - version = 4, + version = 5, exportSchema = true, ) @TypeConverters(ZonedDateTimeTypeConverter::class) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/entity/DomainsEntity.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/entity/DomainsEntity.kt index e8213b1d9..ee9414ba8 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/entity/DomainsEntity.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/entity/DomainsEntity.kt @@ -14,5 +14,5 @@ data class DomainsEntity( val userId: String, @ColumnInfo(name = "domains_json") - val domainsJson: String, + val domainsJson: String?, ) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseJson.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseJson.kt index a476fa672..d8aec4b85 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseJson.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseJson.kt @@ -39,7 +39,7 @@ data class SyncResponseJson( val policies: List?, @SerialName("domains") - val domains: Domains, + val domains: Domains?, @SerialName("sends") val sends: List?, diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/DomainsExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/DomainsExtensions.kt index f889d724a..1b8ecc087 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/DomainsExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/DomainsExtensions.kt @@ -6,14 +6,14 @@ import com.x8bit.bitwarden.data.vault.repository.model.DomainsData /** * Map the API [Domains] model to the internal [DomainsData] model. */ -fun Domains.toDomainsData(): DomainsData { +fun Domains?.toDomainsData(): DomainsData { val globalEquivalentDomains = this - .globalEquivalentDomains + ?.globalEquivalentDomains ?.map { it.toInternalModel() } .orEmpty() return DomainsData( - equivalentDomains = this.equivalentDomains.orEmpty(), + equivalentDomains = this?.equivalentDomains.orEmpty(), globalEquivalentDomains = globalEquivalentDomains, ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt index 7c5719b7b..8f0724828 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt @@ -248,10 +248,13 @@ class VaultDiskSourceTest { // We cannot compare the JSON strings directly because of formatting differences // So we split that off into its own assertion. assertEquals( - DOMAINS_ENTITY.copy(domainsJson = ""), - storedDomainsEntity.copy(domainsJson = ""), + DOMAINS_ENTITY.copy(domainsJson = null), + storedDomainsEntity.copy(domainsJson = null), + ) + assertJsonEquals( + requireNotNull(DOMAINS_ENTITY.domainsJson), + requireNotNull(storedDomainsEntity.domainsJson), ) - assertJsonEquals(DOMAINS_ENTITY.domainsJson, storedDomainsEntity.domainsJson) // Verify the folders dao is updated assertEquals(listOf(FOLDER_ENTITY), foldersDao.storedFolders) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/disk/dao/FakeDomainsDao.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/disk/dao/FakeDomainsDao.kt index 675341c0c..90b69914f 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/disk/dao/FakeDomainsDao.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/disk/dao/FakeDomainsDao.kt @@ -3,7 +3,6 @@ package com.x8bit.bitwarden.data.vault.datasource.disk.dao import com.x8bit.bitwarden.data.platform.repository.util.bufferedMutableSharedFlow import com.x8bit.bitwarden.data.vault.datasource.disk.entity.DomainsEntity import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.filterNotNull class FakeDomainsDao : DomainsDao { var storedDomains: DomainsEntity? = null @@ -18,9 +17,9 @@ class FakeDomainsDao : DomainsDao { deleteDomainsCalled = true } - override fun getDomains(userId: String): Flow { + override fun getDomains(userId: String): Flow { getDomainsCalled = true - return mutableDomainsFlow.filterNotNull() + return mutableDomainsFlow } override suspend fun insertDomains(domains: DomainsEntity) { From 016d0f889cef755f6e01460d6f15bc4049acb4b5 Mon Sep 17 00:00:00 2001 From: David Perez Date: Fri, 8 Nov 2024 15:30:14 -0600 Subject: [PATCH 7/9] PM-14411: Allow accessibility autofill to run when app is already in background (#4255) --- .../main/java/com/x8bit/bitwarden/MainViewModel.kt | 2 ++ .../manager/AccessibilityCompletionManagerImpl.kt | 8 ++++---- .../data/autofill/util/AutofillIntentUtils.kt | 2 +- .../data/tiles/BitwardenAutofillTileService.kt | 2 +- .../manager/AccessibilityCompletionManagerTest.kt | 14 +++++++------- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/MainViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/MainViewModel.kt index f16b9fd97..8432a388d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/MainViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/MainViewModel.kt @@ -190,12 +190,14 @@ class MainViewModel @Inject constructor( private fun handleAccessibilitySelectionReceive( action: MainAction.Internal.AccessibilitySelectionReceive, ) { + specialCircumstanceManager.specialCircumstance = null sendEvent(MainEvent.CompleteAccessibilityAutofill(cipherView = action.cipherView)) } private fun handleAutofillSelectionReceive( action: MainAction.Internal.AutofillSelectionReceive, ) { + specialCircumstanceManager.specialCircumstance = null sendEvent(MainEvent.CompleteAutofill(cipherView = action.cipherView)) } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/autofill/accessibility/manager/AccessibilityCompletionManagerImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/autofill/accessibility/manager/AccessibilityCompletionManagerImpl.kt index 3fa8dff8d..07f76ffe1 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/autofill/accessibility/manager/AccessibilityCompletionManagerImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/autofill/accessibility/manager/AccessibilityCompletionManagerImpl.kt @@ -26,18 +26,18 @@ class AccessibilityCompletionManagerImpl( .intent ?.getAutofillSelectionDataOrNull() ?: run { - activity.finish() + activity.finishAndRemoveTask() return } if (autofillSelectionData.framework != AutofillSelectionData.Framework.ACCESSIBILITY) { - activity.finish() + activity.finishAndRemoveTask() return } val uri = autofillSelectionData .uri ?.toUriOrNull() ?: run { - activity.finish() + activity.finishAndRemoveTask() return } @@ -47,7 +47,7 @@ class AccessibilityCompletionManagerImpl( ) mainScope.launch { totpManager.tryCopyTotpToClipboard(cipherView = cipherView) - activity.finish() } + activity.finishAndRemoveTask() } } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt b/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt index dea17c41d..2125cc903 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt @@ -38,7 +38,7 @@ fun createAutofillSelectionIntent( .apply { // This helps prevent a crash when using the accessibility framework if (framework == AutofillSelectionData.Framework.ACCESSIBILITY) { - setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) } putExtra( AUTOFILL_BUNDLE_KEY, diff --git a/app/src/main/java/com/x8bit/bitwarden/data/tiles/BitwardenAutofillTileService.kt b/app/src/main/java/com/x8bit/bitwarden/data/tiles/BitwardenAutofillTileService.kt index 3303a6185..f9248ab08 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/tiles/BitwardenAutofillTileService.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/tiles/BitwardenAutofillTileService.kt @@ -44,7 +44,7 @@ class BitwardenAutofillTileService : TileService() { } accessibilityAutofillManager.accessibilityAction = AccessibilityAction.AttemptParseUri val intent = Intent(applicationContext, AccessibilityActivity::class.java) - .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) if (isBuildVersionBelow(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)) { @Suppress("DEPRECATION") startActivityAndCollapse(intent) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/autofill/accessibility/manager/AccessibilityCompletionManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/autofill/accessibility/manager/AccessibilityCompletionManagerTest.kt index 46669b560..ad6e82dc9 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/autofill/accessibility/manager/AccessibilityCompletionManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/autofill/accessibility/manager/AccessibilityCompletionManagerTest.kt @@ -26,7 +26,7 @@ import org.junit.jupiter.api.Test class AccessibilityCompletionManagerTest { private val activity: Activity = mockk { - every { finish() } just runs + every { finishAndRemoveTask() } just runs } private val accessibilityAutofillManager: AccessibilityAutofillManager = mockk() private val totpManager: AutofillTotpManager = mockk() @@ -68,7 +68,7 @@ class AccessibilityCompletionManagerTest { verify(exactly = 1) { activity.intent - activity.finish() + activity.finishAndRemoveTask() } } @@ -87,7 +87,7 @@ class AccessibilityCompletionManagerTest { verify(exactly = 1) { activity.intent mockIntent.getAutofillSelectionDataOrNull() - activity.finish() + activity.finishAndRemoveTask() } } @@ -111,7 +111,7 @@ class AccessibilityCompletionManagerTest { verify(exactly = 1) { activity.intent mockIntent.getAutofillSelectionDataOrNull() - activity.finish() + activity.finishAndRemoveTask() } } @@ -135,7 +135,7 @@ class AccessibilityCompletionManagerTest { verify(exactly = 1) { activity.intent mockIntent.getAutofillSelectionDataOrNull() - activity.finish() + activity.finishAndRemoveTask() } } @@ -162,7 +162,7 @@ class AccessibilityCompletionManagerTest { verify(exactly = 1) { activity.intent mockIntent.getAutofillSelectionDataOrNull() - activity.finish() + activity.finishAndRemoveTask() } } @@ -201,7 +201,7 @@ class AccessibilityCompletionManagerTest { cipherView = cipherView, uri = uri, ) - activity.finish() + activity.finishAndRemoveTask() } coVerify(exactly = 1) { totpManager.tryCopyTotpToClipboard(cipherView = cipherView) From 49642f5a1de54372f67c296cb9dfcd4916572fc0 Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:21:16 -0500 Subject: [PATCH 8/9] [PM-14656] Add default value to `BaseEnumeratedIntSerializer` (#4272) --- .../serializer/BaseEnumeratedIntSerializer.kt | 8 +++++-- .../network/model/PolicyTypeJson.kt | 15 +++++++++++-- .../BaseEnumeratedIntSerializerTest.kt | 21 +++++++++++++++++-- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/BaseEnumeratedIntSerializer.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/BaseEnumeratedIntSerializer.kt index 0216594e7..109e7f259 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/BaseEnumeratedIntSerializer.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/BaseEnumeratedIntSerializer.kt @@ -10,11 +10,13 @@ import kotlinx.serialization.encoding.Encoder /** * Base [KSerializer] for mapping an [Enum] with possible values given by [values] to/from integer - * values, which should be specified using [SerialName]. + * values, which should be specified using [SerialName]. If a [default] value is provided, it will + * be used when an unknown value is provided. */ @Suppress("UnnecessaryAbstractClass") abstract class BaseEnumeratedIntSerializer>( private val values: Array, + private val default: T? = null, ) : KSerializer { override val descriptor: SerialDescriptor @@ -25,7 +27,9 @@ abstract class BaseEnumeratedIntSerializer>( override fun deserialize(decoder: Decoder): T { val decodedValue = decoder.decodeInt().toString() - return values.first { it.serialNameAnnotation?.value == decodedValue } + return values.firstOrNull { it.serialNameAnnotation?.value == decodedValue } + ?: default + ?: throw IllegalArgumentException("Unknown value $decodedValue") } override fun serialize(encoder: Encoder, value: T) { diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/PolicyTypeJson.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/PolicyTypeJson.kt index b9f1207dc..bb74e1bc5 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/PolicyTypeJson.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/PolicyTypeJson.kt @@ -81,8 +81,19 @@ enum class PolicyTypeJson { */ @SerialName("11") ACTIVATE_AUTOFILL, + + /** + * Represents an unknown policy type. + * + * This is used for forward compatibility to handle new policy types that the client doesn't yet + * understand. + */ + @SerialName("-1") + UNKNOWN, } @Keep -private class PolicyTypeSerializer : - BaseEnumeratedIntSerializer(PolicyTypeJson.entries.toTypedArray()) +private class PolicyTypeSerializer : BaseEnumeratedIntSerializer( + values = PolicyTypeJson.entries.toTypedArray(), + default = PolicyTypeJson.UNKNOWN, +) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/BaseEnumeratedIntSerializerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/BaseEnumeratedIntSerializerTest.kt index 88457e915..ae9783f39 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/BaseEnumeratedIntSerializerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/BaseEnumeratedIntSerializerTest.kt @@ -35,6 +35,18 @@ class BaseEnumeratedIntSerializerTest { ), ) } + + @Test + fun `properly returns default value when unknown value is provided`() { + assertEquals( + TestEnum.UNKNOWN, + json.decodeFromString( + """ + -1 + """, + ), + ) + } } @Serializable(TestEnumSerializer::class) @@ -44,7 +56,12 @@ private enum class TestEnum { @SerialName("2") CASE_2, + + @SerialName("-1") + UNKNOWN, } -private class TestEnumSerializer : - BaseEnumeratedIntSerializer(values = TestEnum.entries.toTypedArray()) +private class TestEnumSerializer : BaseEnumeratedIntSerializer( + values = TestEnum.entries.toTypedArray(), + default = TestEnum.UNKNOWN, +) From 63324fcec105a4551d0150385830ed78e7586830 Mon Sep 17 00:00:00 2001 From: David Perez Date: Fri, 8 Nov 2024 17:02:58 -0600 Subject: [PATCH 9/9] PM-14458: Fix notifications prompt on first use (#4275) --- .../accountsecurity/pendingrequests/PendingRequestsScreen.kt | 2 +- .../pendingrequests/PendingRequestsScreenTest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreen.kt index f38b56f25..9bea08324 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreen.kt @@ -114,7 +114,7 @@ fun PendingRequestsScreen( isFdroid || isBuildVersionBelow(Build.VERSION_CODES.TIRAMISU) || permissionsManager.checkPermission(Manifest.permission.POST_NOTIFICATIONS) || - !permissionsManager.shouldShowRequestPermissionRationale( + permissionsManager.shouldShowRequestPermissionRationale( permission = Manifest.permission.POST_NOTIFICATIONS, ) BitwardenModalBottomSheet( diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreenTest.kt index 2311cc0b2..df33a0c95 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreenTest.kt @@ -46,7 +46,7 @@ class PendingRequestsScreenTest : BaseComposeTest() { } private val permissionsManager = FakePermissionManager().apply { checkPermissionResult = false - shouldShowRequestRationale = true + shouldShowRequestRationale = false } @Before