From e668f016b498adb8d8342657e32b8ca5129189ef Mon Sep 17 00:00:00 2001 From: Reza Almanda Date: Mon, 10 May 2021 09:16:00 +0000 Subject: [PATCH 01/20] Translated using Weblate (Indonesian) Currently translated at 72.1% (381 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/id/ --- app/src/main/res/values-id/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 44ca19de3..6b4a97edc 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -160,7 +160,7 @@ ASCII Diperluas Tanda Kurung Aplikasi - Batas Waktu Aplikasi + Waktu habis Fungsi Derivasi Kunci Algoritma Enkripsi Enkripsi From 283ff7a280f5989edb261421b5895a479ff87066 Mon Sep 17 00:00:00 2001 From: ssantos Date: Sun, 9 May 2021 15:00:50 +0000 Subject: [PATCH 02/20] Translated using Weblate (Portuguese) Currently translated at 85.9% (454 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt/ --- app/src/main/res/values-pt/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 98d6f8322..b90f0759e 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -177,7 +177,7 @@ Nome do campo Não pôde ser ativado o serviço de preenchimento automático. Digite um número inteiro positivo no campo \"Tamanho\". - Um nome do campo é necessário para cada string. + Um nome do campo é necessário para cada cadeia. \"Número de rodadas\" é muito grande. Modificado para 2147483648. As palavras-passe não coincidem. Pelo menos um tipo de geração de palavra-chave deve ser selecionado. @@ -255,7 +255,7 @@ Solicitar uma pesquisa quando abrir a base de dados Pesquisa rápida Omite os grupos \"Backup\" e \"Cesto da reciclagem\" dos resultados da busca - Não procurar por entradas no backup ou na lixeira + Não procurar por entradas no backup ou no lixo Sobre Mascarar palavras-passe (***) por predefinição Esconder palavras-passe @@ -452,7 +452,7 @@ Adicionar grupo Adicionar entrada Aceitar - Credencial do dispositivo + Credencial do aparelho Incapaz de inicializar o desbloqueio antecipado. Erro de desbloqueio avançado: %1$s Não conseguia reconhecer impressão de desbloqueio avançado From cf025b91352ce1274f264700f965c164ec4a967a Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Tue, 11 May 2021 11:47:20 +0200 Subject: [PATCH 03/20] Update version and CHANGELOG --- CHANGELOG | 3 +++ app/build.gradle | 4 ++-- fastlane/metadata/android/en-US/changelogs/77.txt | 2 +- fastlane/metadata/android/en-US/changelogs/79.txt | 1 + fastlane/metadata/android/fr-FR/changelogs/77.txt | 2 +- fastlane/metadata/android/fr-FR/changelogs/79.txt | 1 + 6 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/79.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/79.txt diff --git a/CHANGELOG b/CHANGELOG index 4e340fcee..33527918f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +KeePassDX(2.10.2) + * + KeePassDX(2.10.1) * Fix parcelable with custom data #986 diff --git a/app/build.gradle b/app/build.gradle index df9640179..c820d0f1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.kunzisoft.keepass" minSdkVersion 15 targetSdkVersion 30 - versionCode = 78 - versionName = "2.10.1" + versionCode = 79 + versionName = "2.10.2" multiDexEnabled true testApplicationId = "com.kunzisoft.keepass.tests" diff --git a/fastlane/metadata/android/en-US/changelogs/77.txt b/fastlane/metadata/android/en-US/changelogs/77.txt index 42780ecb1..343800ee3 100644 --- a/fastlane/metadata/android/en-US/changelogs/77.txt +++ b/fastlane/metadata/android/en-US/changelogs/77.txt @@ -1 +1 @@ - * \ No newline at end of file + * Fix parcelable with custom data #986 \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/79.txt b/fastlane/metadata/android/en-US/changelogs/79.txt new file mode 100644 index 000000000..42780ecb1 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/79.txt @@ -0,0 +1 @@ + * \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/77.txt b/fastlane/metadata/android/fr-FR/changelogs/77.txt index 42780ecb1..79bdd3a47 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/77.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/77.txt @@ -1 +1 @@ - * \ No newline at end of file + * Correction des parcelable avec données customisées #986 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/79.txt b/fastlane/metadata/android/fr-FR/changelogs/79.txt new file mode 100644 index 000000000..42780ecb1 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/79.txt @@ -0,0 +1 @@ + * \ No newline at end of file From 37f38fe988e6ece225d59bff3e4a2d448ee43548 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Tue, 11 May 2021 11:49:25 +0200 Subject: [PATCH 04/20] Fix fields references #987 --- .../database/element/database/DatabaseKDBX.kt | 35 +++++++++++++++++-- .../element/database/DatabaseVersioned.kt | 20 ----------- .../element/entry/FieldReferencesEngine.kt | 16 ++++----- .../metadata/android/en-US/changelogs/79.txt | 2 +- .../metadata/android/fr-FR/changelogs/79.txt | 2 +- 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDBX.kt index 6b626b5d3..0368a8bba 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDBX.kt @@ -332,9 +332,40 @@ class DatabaseKDBX : DatabaseVersioned { return this.iconsManager.getIcon(iconUuid) } - /** - * To perform a search in entry custom data + /* + * Search methods */ + + fun getEntryByTitle(title: String, recursionLevel: Int): EntryKDBX? { + return this.entryIndexes.values.find { entry -> + entry.decodeTitleKey(recursionLevel).equals(title, true) + } + } + + fun getEntryByUsername(username: String, recursionLevel: Int): EntryKDBX? { + return this.entryIndexes.values.find { entry -> + entry.decodeUsernameKey(recursionLevel).equals(username, true) + } + } + + fun getEntryByURL(url: String, recursionLevel: Int): EntryKDBX? { + return this.entryIndexes.values.find { entry -> + entry.decodeUrlKey(recursionLevel).equals(url, true) + } + } + + fun getEntryByPassword(password: String, recursionLevel: Int): EntryKDBX? { + return this.entryIndexes.values.find { entry -> + entry.decodePasswordKey(recursionLevel).equals(password, true) + } + } + + fun getEntryByNotes(notes: String, recursionLevel: Int): EntryKDBX? { + return this.entryIndexes.values.find { entry -> + entry.decodeNotesKey(recursionLevel).equals(notes, true) + } + } + fun getEntryByCustomData(customDataValue: String): EntryKDBX? { return entryIndexes.values.find { entry -> entry.customData.containsItemWithValue(customDataValue) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseVersioned.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseVersioned.kt index e6c1fbd6c..790df515c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseVersioned.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseVersioned.kt @@ -271,26 +271,6 @@ abstract class DatabaseVersioned< return this.entryIndexes[id] } - fun getEntryByTitle(title: String): Entry? { - return this.entryIndexes.values.find { entry -> entry.title.equals(title, true) } - } - - fun getEntryByUsername(username: String): Entry? { - return this.entryIndexes.values.find { entry -> entry.username.equals(username, true) } - } - - fun getEntryByURL(url: String): Entry? { - return this.entryIndexes.values.find { entry -> entry.url.equals(url, true) } - } - - fun getEntryByPassword(password: String): Entry? { - return this.entryIndexes.values.find { entry -> entry.password.equals(password, true) } - } - - fun getEntryByNotes(notes: String): Entry? { - return this.entryIndexes.values.find { entry -> entry.notes.equals(notes, true) } - } - fun addEntryIndex(entry: Entry) { val entryId = entry.nodeId if (entryIndexes.containsKey(entryId)) { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt index d60f36275..3105d5917 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt @@ -68,9 +68,9 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) { val fullReference = "$STR_REF_START$reference$STR_REF_END" if (!refsCache.containsKey(fullReference)) { - val result = findReferenceTarget(reference) - val entryFound = result.entry val newRecursionLevel = recursionLevel + 1 + val result = findReferenceTarget(reference, newRecursionLevel) + val entryFound = result.entry val data: String? = when (result.wanted) { 'T' -> entryFound?.decodeTitleKey(newRecursionLevel) 'U' -> entryFound?.decodeUsernameKey(newRecursionLevel) @@ -98,7 +98,7 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) { return newText } - private fun findReferenceTarget(reference: String): TargetResult { + private fun findReferenceTarget(reference: String, recursionLevel: Int): TargetResult { val targetResult = TargetResult(null, 'J') @@ -116,11 +116,11 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) { val searchIn = Character.toUpperCase(reference[2]) val searchQuery = reference.substring(4) targetResult.entry = when (searchIn) { - 'T' -> mDatabase.getEntryByTitle(searchQuery) - 'U' -> mDatabase.getEntryByUsername(searchQuery) - 'A' -> mDatabase.getEntryByURL(searchQuery) - 'P' -> mDatabase.getEntryByPassword(searchQuery) - 'N' -> mDatabase.getEntryByNotes(searchQuery) + 'T' -> mDatabase.getEntryByTitle(searchQuery, recursionLevel) + 'U' -> mDatabase.getEntryByUsername(searchQuery, recursionLevel) + 'A' -> mDatabase.getEntryByURL(searchQuery, recursionLevel) + 'P' -> mDatabase.getEntryByPassword(searchQuery, recursionLevel) + 'N' -> mDatabase.getEntryByNotes(searchQuery, recursionLevel) 'I' -> { UuidUtil.fromHexString(searchQuery)?.let { uuid -> mDatabase.getEntryById(NodeIdUUID(uuid)) diff --git a/fastlane/metadata/android/en-US/changelogs/79.txt b/fastlane/metadata/android/en-US/changelogs/79.txt index 42780ecb1..31912a94f 100644 --- a/fastlane/metadata/android/en-US/changelogs/79.txt +++ b/fastlane/metadata/android/en-US/changelogs/79.txt @@ -1 +1 @@ - * \ No newline at end of file + * Fix fields references #987 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/79.txt b/fastlane/metadata/android/fr-FR/changelogs/79.txt index 42780ecb1..17fdb6eb2 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/79.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/79.txt @@ -1 +1 @@ - * \ No newline at end of file + * Correction des références de champs #987 \ No newline at end of file From 1460c1364a6cad62ae19cc8263bd44ebfebcb802 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Tue, 11 May 2021 12:05:09 +0200 Subject: [PATCH 05/20] Fix search fields references #987 --- CHANGELOG | 2 +- .../database/element/entry/FieldReferencesEngine.kt | 8 ++++---- fastlane/metadata/android/en-US/changelogs/79.txt | 2 +- fastlane/metadata/android/fr-FR/changelogs/79.txt | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 33527918f..dc4939431 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,5 @@ KeePassDX(2.10.2) - * + * Fix search fields references #987 KeePassDX(2.10.1) * Fix parcelable with custom data #986 diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt index 3105d5917..c4853e4e5 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt @@ -22,13 +22,13 @@ package com.kunzisoft.keepass.database.element.entry import com.kunzisoft.keepass.database.element.database.DatabaseKDBX import com.kunzisoft.keepass.database.element.node.NodeIdUUID import com.kunzisoft.keepass.utils.UuidUtil -import java.util.* +import java.util.concurrent.ConcurrentHashMap class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) { // Key : @: // Value : content - private var refsCache: MutableMap = HashMap() + private var refsCache = ConcurrentHashMap() fun clear() { refsCache.clear() @@ -91,9 +91,9 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) { private fun fillReferencesUsingCache(text: String): String { var newText = text - for ((key, value) in refsCache) { + refsCache.keys.forEach { key -> // Replace by key if value not found - newText = newText.replace(key, value ?: key, true) + newText = newText.replace(key, refsCache[key] ?: key, true) } return newText } diff --git a/fastlane/metadata/android/en-US/changelogs/79.txt b/fastlane/metadata/android/en-US/changelogs/79.txt index 31912a94f..a089c677d 100644 --- a/fastlane/metadata/android/en-US/changelogs/79.txt +++ b/fastlane/metadata/android/en-US/changelogs/79.txt @@ -1 +1 @@ - * Fix fields references #987 \ No newline at end of file + * Fix search fields references #987 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/79.txt b/fastlane/metadata/android/fr-FR/changelogs/79.txt index 17fdb6eb2..b92b52447 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/79.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/79.txt @@ -1 +1 @@ - * Correction des références de champs #987 \ No newline at end of file + * Correction de la recherche des références de champs #987 \ No newline at end of file From 4588611cbf264c357ffcdb55dd76b63b83af2a7a Mon Sep 17 00:00:00 2001 From: Paco Chan Date: Sat, 15 May 2021 19:27:31 +0000 Subject: [PATCH 06/20] Translated using Weblate (Catalan) Currently translated at 47.5% (251 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ca/ --- app/src/main/res/values-ca/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 63ff75ab3..a0136cd5c 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -25,7 +25,7 @@ Afegeix entrada Afegeix grup Algoritme de xifrat - Temps d\'espera de l\'aplicació + Temps d\'espera esgotat Temps d\'inactivitat abans de blocar la base de dades Aplicació Configuració de l\'aplicació @@ -289,4 +289,6 @@ L\'OTP existent no està reconegut per aquest formulari, la seva validació ja no pot generar correctament el token. No s\'ha pogut crear una base de dades amb aquesta contrasenya i arxiu de clau. No s\'ha pogut habilitar el servei d\'autocompletat. + Nodes fill + Funció de derivació de clau \ No newline at end of file From dd60ff8b74b8c6c266f358fae7eb5e9c95e93caf Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 16 May 2021 09:47:43 +0000 Subject: [PATCH 07/20] Translated using Weblate (Danish) Currently translated at 100.0% (528 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/da/ --- app/src/main/res/values-da/strings.xml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 2f351e073..5cdf0e664 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -223,7 +223,7 @@ Brugerflade Øvrige Tastatur - Magikeyboard + Magi keyboard Aktiver et brugerdefineret tastatur, der udfylder adgangskoder og alle identitetsfelter Tillad ingen hovednøgle Tillader at trykke på knappen \"Åbn\", hvis der ikke er valgt nogen legitimationsoplysninger @@ -283,8 +283,8 @@ Tema, der bruges i programmet Ikonpakke Ikonpakke, der anvendes - Magikeyboard - Magikeyboard (KeePassDX) + Magi keyboard + Magi keyboard (KeePassDX) Magikeyboard indstillinger Post Udløbstid @@ -300,7 +300,7 @@ Taster Vibrerende tastetryk Hørbare tastetryk - Build %1$s + Byg %1$s Tidsudløb for at rydde indtastning Noter Valgstilstand @@ -426,7 +426,7 @@ Skjule brudte databaselinks Skjul brudte links på listen over seneste databaser Giv fil skriveadgang for at gemme databasændringer - Opsætning af engangs-adgangskode-styring (HOTP / TOTP) for at generere et token anmodet af tofaktor-autentisering (2FA). + Sæt op engangs-adgangskode-styring (HOTP / TOTP) for at generere et token anmodet af tofaktor-autentisering (2FA). Opsætning af OTP Databasefilen kunne ikke oprettes. Tilføj vedhæng @@ -537,7 +537,7 @@ Der opstod en fejl under udførelsen af en handling på databasen. Der opstod en fejl med at fjerne fildata. Den existerende OTP type kunne ikke genkendes, den kan være tiden er udløbet for at lave dette token. - Sammenkæd din adgangskode, med din scannede biometriske oplysninger eller enheds legitimationsoplysninger for, hurtigt at låse din database op. + Sammenkæd din adgangskode, med din scannede biometriske oplysninger eller enheds legitimationsoplysninger for hurtigt oplåsning af din database. Enter Varigheden af avanceret oplåsning, før indholdet slettes Giver dig mulighed for at bruge dine enhedsoplysninger for at åbne databasen @@ -561,4 +561,6 @@ Eksporter app-egenskaber Vælg en fil for at importere app-egenskaber Importer appegenskaber + Du kan flytte en gruppe her. + Dette ord er reseveret og kan ikke bruges. \ No newline at end of file From 00a32463c7af780927fda66174a34e1ce78c9039 Mon Sep 17 00:00:00 2001 From: Paco Chan Date: Sat, 15 May 2021 19:17:41 +0000 Subject: [PATCH 08/20] Translated using Weblate (Spanish) Currently translated at 100.0% (528 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/ --- app/src/main/res/values-es/strings.xml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b67a05309..b9abd2b04 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -26,7 +26,7 @@ Añadir entrada Añadir grupo Algoritmo de cifrado - Tiempo de espera de la aplicación excedido + Tiempo de espera excedido Inactividad antes del bloqueo de aplicación Aplicación Configuración de la aplicación @@ -492,7 +492,7 @@ Ocultar las entradas expiradas Buscar información compartida Subir %1$s - Configurar la gestión de contraseñas de una sola vez (HOTP / TOTP) para generar un token solicitado para la autenticación de dos factores (2FA). + Configurar la gestión de contraseñas de un solo uso (HOTP / TOTP) para generar un token solicitado para la autenticación de dos factores (2FA). Establecer la contaseña de un solo uso Vincule su contraseña con su credencial biométrica o del dispositivo escaneada para desbloquear rápidamente su base de datos. Desbloqueo avanzado de la base de datos @@ -544,4 +544,24 @@ ¡Cancelado! Los datos de archivo ya existen. Ha habido un error al subir el archivo de datos. + Propiedades de KeePassDX para gestionar la configuración de la aplicación + Información de contraseña de un solo uso + Personalizado + Estándar + Seleccione tema claro u oscuro + Brillo del tema + Propiedades + Error al importar las propiedades de la aplicación + Error al exportar las propiedades de la aplicación + Propiedades de la aplicación exportadas + Propiedades de la aplicación importadas + Cree un archivo para exportar las propiedades de la aplicación + Exportar propiedades de la aplicación + Seleccione un archivo para importar las propiedades de la aplicación + Importar propiedades de la aplicación + Ocurrió un error al realizar una acción en la base de datos. + Ocurrió un error al eliminar los datos del archivo. + El archivo que está tratando de cargar es demasiado grande. + No puede mover un grupo aquí. + Esta palabra está reservada y no se puede usar. \ No newline at end of file From aa15d261f36c55c358667bb19ae5b9736ca1c835 Mon Sep 17 00:00:00 2001 From: zer0-x Date: Sat, 15 May 2021 06:51:39 +0000 Subject: [PATCH 09/20] Translated using Weblate (Arabic) Currently translated at 65.3% (345 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ar/ --- app/src/main/res/values-ar/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index fa1746388..ea3ad4d50 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with KeePassDX. If not, see . --> - الصفحة الرئيسية + الصفحة الرئيسة قبول إضافة مجموعة التعمية @@ -106,8 +106,8 @@ إضافة حقول مخصصة نسخ حقل تأمين قاعدة البيانات - الأصداء - تنفيذ أندرويد لمدير كلمات السر «كي‌باس» + التغذية الراجعة + التنفيذ لمُدير كلمات المرور «كي‌ باس» على نظام أندرويد إضافة مدخلة تحرير مدخلة وظيفة اشتقاق المفتاح From c46c286b513c8bf06ddef6dfe1b70a24a34e1ae1 Mon Sep 17 00:00:00 2001 From: Yngvar Skjaldulfsson Date: Fri, 21 May 2021 05:19:16 +0000 Subject: [PATCH 10/20] Translated using Weblate (Spanish) Currently translated at 100.0% (528 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/ --- app/src/main/res/values-es/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b9abd2b04..59cb900ec 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -436,7 +436,7 @@ Base de datos abierta Adjuntar Cargue un archivo adjunto a la entrada para guardar datos externos importantes. - Las entradas caducadas no se muestran + Las entradas caducadas no se están mostrando La eliminación de datos no vinculados puede disminuir el tamaño de su base de datos, pero también puede eliminar los datos usados por los complementos de KeePass. Se supone que una base de datos KeePass contiene solo pequeños archivos de utilidad (como archivos de clave PGP). \n @@ -548,7 +548,7 @@ Información de contraseña de un solo uso Personalizado Estándar - Seleccione tema claro u oscuro + Seleccionar temas oscuros o claros Brillo del tema Propiedades Error al importar las propiedades de la aplicación From d55dccdeb14e6f3f22b048133539a5b211545d1a Mon Sep 17 00:00:00 2001 From: Joan Jaume Oliver Date: Fri, 21 May 2021 05:17:31 +0000 Subject: [PATCH 11/20] Translated using Weblate (Spanish) Currently translated at 100.0% (528 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/ --- app/src/main/res/values-es/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 59cb900ec..ae60ef50e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -542,8 +542,8 @@ Recargar la base de datos El tipo de OTP existente no es reconocido por este formulario, su validación ya no puede generar correctamente el token. ¡Cancelado! - Los datos de archivo ya existen. - Ha habido un error al subir el archivo de datos. + Los datos del archivo ya existen. + Ha habido un error al subir los datos del archivo. Propiedades de KeePassDX para gestionar la configuración de la aplicación Información de contraseña de un solo uso Personalizado From 3959896832c70323e5dccde33b6395f56e2861d4 Mon Sep 17 00:00:00 2001 From: Yngvar Skjaldulfsson Date: Fri, 21 May 2021 05:19:58 +0000 Subject: [PATCH 12/20] Translated using Weblate (Spanish) Currently translated at 100.0% (528 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/ --- app/src/main/res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ae60ef50e..84af78f39 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -543,7 +543,7 @@ El tipo de OTP existente no es reconocido por este formulario, su validación ya no puede generar correctamente el token. ¡Cancelado! Los datos del archivo ya existen. - Ha habido un error al subir los datos del archivo. + Error al subir datos del archivo. Propiedades de KeePassDX para gestionar la configuración de la aplicación Información de contraseña de un solo uso Personalizado From cea91f7b2f760d373b2a15524f80d5180b6037f8 Mon Sep 17 00:00:00 2001 From: VfBFan Date: Tue, 25 May 2021 07:53:29 +0000 Subject: [PATCH 13/20] Translated using Weblate (German) Currently translated at 100.0% (528 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/ --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6536f4e7f..c199cd2e0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -71,7 +71,7 @@ Datenbank nicht lesbar. Sicherstellen, dass der Pfad korrekt ist. Namen eingeben. - Schlüsseldatei wählen. + Schlüsseldatei auswählen. Zu wenig Speicherplatz, um die ganze Datenbank zu laden. Mindestens eine Art der Passwortgenerierung muss ausgewählt sein. Die Passwörter stimmen nicht überein. From 0fd3b37641c74dc7b042af8da3fccee416bb2308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=2E=20R=C3=BCdinger?= Date: Thu, 27 May 2021 10:13:12 +0000 Subject: [PATCH 14/20] Translated using Weblate (German) Currently translated at 100.0% (528 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/ --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c199cd2e0..0b81b8806 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -454,7 +454,7 @@ Gemeinsame Infos durchsuchen Starten Sie die Anwendung, die das Formular enthält, neu, um die Sperrung zu aktivieren. Automatisches Ausfüllen sperren - Liste der Domains, auf denen ein automatisches Ausfüllen unterlassen wird + Liste der Domains, auf denen ein automatisches Ausfüllen verhindert wird Liste gesperrter Web-Domains Liste der Apps, in denen ein automatisches Ausfüllen verhindert wird Liste gesperrter Anwendungen From c1e70393574b9fdc2a967f39b02f2bdaf51a5d94 Mon Sep 17 00:00:00 2001 From: Yudong <1939245371@qq.com> Date: Fri, 28 May 2021 14:39:22 +0000 Subject: [PATCH 15/20] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (528 of 528 strings) Translation: KeePassDX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 60 +++++++++++----------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f28203dc8..4efc04ef0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -27,7 +27,7 @@ 延时 在锁定数据库前处于非活动状态的时长 应用 - 程序设置 + 应用设置 括号 需要一款接受意图操作 ACTION_CREATE_DOCUMENT 和 ACTION_OPEN_DOCUMENT 的文件管理器来创建、打开和保存数据库文件。 剪贴板已清空 @@ -46,14 +46,14 @@ 取消 备注 确认密码 - 新建时间 + 创建时间 过期时间 密钥文件 修改时间 密码 保存 名称 - 链接 + 网址 用户名 不支持Arcfour流式加密。 无法在KeePassDX中处理此URI。 @@ -96,7 +96,7 @@ 锁定数据库 打开 搜索 - 打开链接 + 打开网址 减号 从不 没有搜索结果 @@ -128,14 +128,14 @@ ASCII拓展区字符 允许 剪切板错误 - 一些设备不允许程序使用剪切板。 + 某些设备不允许应用程序使用剪贴板。 无法清空剪切板 主题 图标包 程序中使用的图标包 编辑条目 密钥推导函数 - 找不到条目。 + 找不到条目数据。 无法加载数据库。 无法加载密钥。尝试降低KDF的“内存使用”值。 无法启用自动填充服务。 @@ -153,10 +153,10 @@ 只读 可修改 搜索时忽略备份条目 - 搜索时忽略“备份”与“回收站”群组 + 从搜索结果中忽略“备份”和“回收站”群组 保护 只读 - KeePassDX需要写入权限以修改数据库。 + 根据您的文件管理器,KeePassDX 可能不允许在您的存储中写入数据。 最近文件历史 记住最近使用的文件名 加密所有数据时采用的算法。 @@ -178,8 +178,8 @@ 外观 常规 自动填充 - 使用KeePassDX自动填充 - 使用KeePassDX密码登录 + KeePassDX 自动填充 + 使用 KeePassDX 登录 剪贴板 剪贴板通知 锁定 @@ -334,7 +334,7 @@ 删除字段 UUID 无法移动条目到此处。 - 无法复制条目到此处。 + 您不能在此处复制条目。 显示条目数量 显示群组中的条目数 背景 @@ -350,17 +350,17 @@ 主密钥 安全 历史 - 设置一次性密码 - 一次性密码类型 + 设置 OTP + OTP 类型 密钥 时长(秒) 计数器 数字位数 算法 - 一次性密码 + OTP 错误的一次性密码密钥。 至少需要设置一个凭据。 - 这里不能复制组。 + 您无法在此处复制群组。 密钥必须是BASE32格式。 计数器必须在%1$d和%2$d之间。 时长必须在%1$d秒到%2$d秒之间。 @@ -369,11 +369,11 @@ 新建数据库… 安全设置 主密钥设置 - 数据库包含重复UUID。 - 通过为重复项生成新的UUID以解决问题? + 该数据库包含重复的 UUID。 + 通过为重复项生成新的 UUID 以解决问题? 数据库开启 使用设备的剪贴板来复制输入字段 - 使用高级解锁轻松打开数据库 + 使用高级解锁以便快速解锁数据库 数据压缩 数据压缩减少了数据库的大小 最大数量 @@ -444,7 +444,7 @@ 重新启动包含该表单的应用程序以激活拦截。 阻止自动填充 禁止在下列域名中自动填充凭证 - Web域名黑名单 + Web 域名黑名单 禁止应用程序自动填充的黑名单 应用拦截列表 过滤器 @@ -508,8 +508,8 @@ 用高级解锁识别打开数据库 警告:即使您使用高级解锁识别,您仍然需要记住您的主密码。 高级解锁识别 - 打开高级解锁提示来存储凭证 - 打开高级解锁提示来解锁数据库 + 点击以打开高级解锁提示来存储凭证 + 点击以使用生物识别解锁 删除高级解锁密钥 输入 退格键 @@ -550,15 +550,15 @@ 删除文件数据时发生了一个错误。 文件数据已存在。 属性 - 应用属性导出期间出错 - 已导出应用属性 - 导入应用属性期间出错 - 已导入应用属性 - 管理应用设置的 KeePassDX 属性 - 创建一个文件来导出应用属性 - 导出应用属性 - 选择一个文件来导入应用属性 - 导入应用属性 + 导出应用配置时出错 + 已导出应用配置 + 导入应用配置时出错 + 已导入应用配置 + 管理应用设置的 KeePassDX 配置 + 创建一个文件以导出应用配置 + 导出配置 + 选择一个文件以导入应用配置 + 导入配置 对数据库执行操作时发生了一个错误。 你不能把一个组移动到此处。 这个单词是保留的,不能使用。 From fb865af088247763b448c76f4aabc9c495518afb Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 31 May 2021 14:45:19 +0200 Subject: [PATCH 16/20] Capture placeholder exception --- .../element/entry/FieldReferencesEngine.kt | 67 ++++++++++--------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt index c4853e4e5..81ce52dee 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/FieldReferencesEngine.kt @@ -19,6 +19,7 @@ */ package com.kunzisoft.keepass.database.element.entry +import android.util.Log import com.kunzisoft.keepass.database.element.database.DatabaseKDBX import com.kunzisoft.keepass.database.element.node.NodeIdUUID import com.kunzisoft.keepass.utils.UuidUtil @@ -53,38 +54,42 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) { && numberInlineRef <= MAX_INLINE_REF) { numberInlineRef++ - textValue = fillReferencesUsingCache(textValue) - - val start = textValue.indexOf(STR_REF_START, offset, true) - if (start < 0) { - break - } - val end = textValue.indexOf(STR_REF_END, offset, true) - if (end <= start) { - break - } - - val reference = textValue.substring(start + STR_REF_START.length, end) - val fullReference = "$STR_REF_START$reference$STR_REF_END" - - if (!refsCache.containsKey(fullReference)) { - val newRecursionLevel = recursionLevel + 1 - val result = findReferenceTarget(reference, newRecursionLevel) - val entryFound = result.entry - val data: String? = when (result.wanted) { - 'T' -> entryFound?.decodeTitleKey(newRecursionLevel) - 'U' -> entryFound?.decodeUsernameKey(newRecursionLevel) - 'A' -> entryFound?.decodeUrlKey(newRecursionLevel) - 'P' -> entryFound?.decodePasswordKey(newRecursionLevel) - 'N' -> entryFound?.decodeNotesKey(newRecursionLevel) - 'I' -> UuidUtil.toHexString(entryFound?.nodeId?.id) - else -> null - } - refsCache[fullReference] = data + try { textValue = fillReferencesUsingCache(textValue) - } - offset = end + val start = textValue.indexOf(STR_REF_START, offset, true) + if (start < 0) { + break + } + val end = textValue.indexOf(STR_REF_END, offset, true) + if (end <= start) { + break + } + + val reference = textValue.substring(start + STR_REF_START.length, end) + val fullReference = "$STR_REF_START$reference$STR_REF_END" + + if (!refsCache.containsKey(fullReference)) { + val newRecursionLevel = recursionLevel + 1 + val result = findReferenceTarget(reference, newRecursionLevel) + val entryFound = result.entry + val data: String? = when (result.wanted) { + 'T' -> entryFound?.decodeTitleKey(newRecursionLevel) + 'U' -> entryFound?.decodeUsernameKey(newRecursionLevel) + 'A' -> entryFound?.decodeUrlKey(newRecursionLevel) + 'P' -> entryFound?.decodePasswordKey(newRecursionLevel) + 'N' -> entryFound?.decodeNotesKey(newRecursionLevel) + 'I' -> UuidUtil.toHexString(entryFound?.nodeId?.id) + else -> null + } + refsCache[fullReference] = data + textValue = fillReferencesUsingCache(textValue) + } + + offset = end + } catch (e: Exception) { + Log.e(TAG, "Error when fill placeholders by reference", e) + } } return textValue } @@ -139,5 +144,7 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) { private const val MAX_INLINE_REF = 10 private const val STR_REF_START = "{REF:" private const val STR_REF_END = "}" + + private val TAG = FieldReferencesEngine::class.java.name } } From d309a67416dea4d6080709e3182b52c88c06dc7a Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 31 May 2021 14:48:59 +0200 Subject: [PATCH 17/20] Capture exception when restart service --- .../keepass/services/DatabaseTaskNotificationService.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt index b24a1015d..cf1bfb179 100644 --- a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt @@ -280,8 +280,10 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress stopSelf() } else { // Restart the service to open lock notification - startService(Intent(applicationContext, - DatabaseTaskNotificationService::class.java)) + try { + startService(Intent(applicationContext, + DatabaseTaskNotificationService::class.java)) + } catch (e: IllegalStateException) {} } } } From 9574cf16fb473f7307a20c283d2ae57900c85663 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 31 May 2021 15:32:35 +0200 Subject: [PATCH 18/20] Fix custom fields iteration --- .../database/cursor/EntryCursorKDBX.kt | 4 +-- .../database/cursor/ExtraFieldCursor.kt | 2 +- .../keepass/database/element/Entry.kt | 8 ++--- .../database/element/entry/EntryKDBX.kt | 32 ++++++++++++------- .../database/file/input/DatabaseInputKDBX.kt | 2 +- 5 files changed, 28 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/cursor/EntryCursorKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/cursor/EntryCursorKDBX.kt index a6d8bf342..8524bf08e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/cursor/EntryCursorKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/cursor/EntryCursorKDBX.kt @@ -45,8 +45,8 @@ class EntryCursorKDBX : EntryCursorUUID() { entry.expires )) - for (element in entry.customFields.entries) { - extraFieldCursor.addExtraField(entryId, element.key, element.value) + entry.doForEachDecodedCustomField { key, value -> + extraFieldCursor.addExtraField(entryId, key, value) } entryId++ diff --git a/app/src/main/java/com/kunzisoft/keepass/database/cursor/ExtraFieldCursor.kt b/app/src/main/java/com/kunzisoft/keepass/database/cursor/ExtraFieldCursor.kt index ea4533f15..83b3951fc 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/cursor/ExtraFieldCursor.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/cursor/ExtraFieldCursor.kt @@ -42,7 +42,7 @@ class ExtraFieldCursor : MatrixCursor(arrayOf( } fun populateExtraFieldInEntry(pwEntry: EntryKDBX) { - pwEntry.putExtraField(getString(getColumnIndex(COLUMN_LABEL)), + pwEntry.putField(getString(getColumnIndex(COLUMN_LABEL)), ProtectedString(getInt(getColumnIndex(COLUMN_PROTECTION)) > 0, getString(getColumnIndex(COLUMN_VALUE)))) } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Entry.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Entry.kt index fb928c407..00e82c24c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Entry.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Entry.kt @@ -283,8 +283,8 @@ class Entry : Node, EntryVersionedInterface { fun getExtraFields(): List { val extraFields = ArrayList() entryKDBX?.let { - for (field in it.customFields) { - extraFields.add(Field(field.key, field.value)) + it.doForEachDecodedCustomField { key, value -> + extraFields.add(Field(key, value)) } } return extraFields @@ -294,7 +294,7 @@ class Entry : Node, EntryVersionedInterface { * Update or add an extra field to the list (standard or custom) */ fun putExtraField(field: Field) { - entryKDBX?.putExtraField(field.name, field.protectedValue) + entryKDBX?.putField(field.name, field.protectedValue) } private fun addExtraFields(fields: List) { @@ -310,7 +310,7 @@ class Entry : Node, EntryVersionedInterface { fun getOtpElement(): OtpElement? { entryKDBX?.let { return OtpEntryFields.parseFields { key -> - it.customFields[key]?.toString() + it.getField(key)?.toString() } } return null diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt index 38d5f3205..03f76326a 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt @@ -38,6 +38,7 @@ import com.kunzisoft.keepass.database.element.security.ProtectedString import com.kunzisoft.keepass.utils.ParcelableUtil import com.kunzisoft.keepass.utils.UnsignedLong import java.util.* +import java.util.function.BiConsumer import kotlin.collections.ArrayList import kotlin.collections.LinkedHashMap @@ -265,25 +266,32 @@ class EntryKDBX : EntryVersioned, NodeKDBXInte || key == STR_NOTES) } - var customFields = LinkedHashMap() - get() { - field.clear() - for ((key, value) in fields) { - if (!isStandardField(key)) { - field[key] = ProtectedString(value.isProtected, decodeRefKey(mDecodeRef, key, 0)) - } + fun doForEachDecodedCustomField(action: (key: String, value: ProtectedString) -> Unit) { + val iterator = fields.entries.iterator() + while (iterator.hasNext()) { + val mapEntry = iterator.next() + if (!isStandardField(mapEntry.key)) { + action.invoke(mapEntry.key, + ProtectedString(mapEntry.value.isProtected, + decodeRefKey(mDecodeRef, mapEntry.key, 0) + ) + ) } - return field } + } + + fun getField(key: String): ProtectedString? { + return fields[key] + } + + fun putField(label: String, value: ProtectedString) { + fields[label] = value + } fun removeAllFields() { fields.clear() } - fun putExtraField(label: String, value: ProtectedString) { - fields[label] = value - } - /** * It's a list because history labels can be defined multiple times */ diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt index ed1165274..4287a32e7 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt @@ -807,7 +807,7 @@ class DatabaseInputKDBX(cacheDirectory: File, return KdbContext.Entry } else if (ctx == KdbContext.EntryString && name.equals(DatabaseKDBXXML.ElemString, ignoreCase = true)) { if (ctxStringName != null && ctxStringValue != null) - ctxEntry?.putExtraField(ctxStringName!!, ctxStringValue!!) + ctxEntry?.putField(ctxStringName!!, ctxStringValue!!) ctxStringName = null ctxStringValue = null From 6153a28b4bbe84c9b076315b37c8cd90b807bf6c Mon Sep 17 00:00:00 2001 From: Archit Sharma <74408634+iArchitSharma@users.noreply.github.com> Date: Mon, 31 May 2021 20:47:20 +0700 Subject: [PATCH 19/20] fixed and added some hindi translation --- app/src/main/res/values-hi/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 31f425d33..65a8c5fc8 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -18,7 +18,7 @@ along with KeePassDX. If not, see . --> - प्रतिक्रिया + प्प्रतिपुष्टिा होमपेज एंड्रॉयड पर आधारित KeePass पासवर्ड मैनेजर स्वीकार @@ -35,7 +35,7 @@ विस्तारित ASCII अनुमति दें क्लिपबोर्ड साफ कर दिया - क्लिपबोर्ड त्रुटि + क्लिपबोर्ड एरर सैमसंग के कुछ एंड्रॉइड फोन क्लिपबोर्ड का उपयोग नहीं करने देंगे। क्लिपबोर्ड को साफ़ नहीं किया जा सका क्लिपबोर्ड टाइमआउट @@ -104,7 +104,7 @@ काउंटर अंक एल्गोरिथ्म - OTP + ओटीप अमान्य ओटीपी गुप्त। कम से कम एक क्रेडेंशियल सेट किया जाना चाहिए। - \ No newline at end of file + From 1b6c416893cc93fdc9f35e2746ccd0c29d93160d Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 31 May 2021 16:10:31 +0200 Subject: [PATCH 20/20] Fix autotype #997 --- CHANGELOG | 1 + app/build.gradle | 2 +- .../database/element/entry/AutoType.kt | 49 ++++++++++++++----- .../database/element/entry/EntryKDBX.kt | 3 +- .../database/file/input/DatabaseInputKDBX.kt | 2 +- .../file/output/DatabaseOutputKDBX.kt | 2 +- .../metadata/android/en-US/changelogs/79.txt | 1 - .../metadata/android/en-US/changelogs/80.txt | 2 + .../metadata/android/fr-FR/changelogs/79.txt | 1 - .../metadata/android/fr-FR/changelogs/80.txt | 2 + 10 files changed, 46 insertions(+), 19 deletions(-) delete mode 100644 fastlane/metadata/android/en-US/changelogs/79.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/80.txt delete mode 100644 fastlane/metadata/android/fr-FR/changelogs/79.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/80.txt diff --git a/CHANGELOG b/CHANGELOG index dc4939431..54f830cb2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ KeePassDX(2.10.2) * Fix search fields references #987 + * Fix Auto-Types with same key #997 KeePassDX(2.10.1) * Fix parcelable with custom data #986 diff --git a/app/build.gradle b/app/build.gradle index c820d0f1b..e6e466b5d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { applicationId "com.kunzisoft.keepass" minSdkVersion 15 targetSdkVersion 30 - versionCode = 79 + versionCode = 80 versionName = "2.10.2" multiDexEnabled true diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/AutoType.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/AutoType.kt index b4b2419a1..3c550db31 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/AutoType.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/AutoType.kt @@ -21,8 +21,6 @@ package com.kunzisoft.keepass.database.element.entry import android.os.Parcel import android.os.Parcelable - -import com.kunzisoft.keepass.utils.ParcelableUtil import com.kunzisoft.keepass.utils.UnsignedInt class AutoType : Parcelable { @@ -30,7 +28,7 @@ class AutoType : Parcelable { var enabled = true var obfuscationOptions = OBF_OPT_NONE var defaultSequence = "" - private var windowSeqPairs = LinkedHashMap() + private var windowSeqPairs = ArrayList() constructor() @@ -38,16 +36,15 @@ class AutoType : Parcelable { this.enabled = autoType.enabled this.obfuscationOptions = autoType.obfuscationOptions this.defaultSequence = autoType.defaultSequence - for ((key, value) in autoType.windowSeqPairs) { - this.windowSeqPairs[key] = value - } + this.windowSeqPairs.clear() + this.windowSeqPairs.addAll(autoType.windowSeqPairs) } constructor(parcel: Parcel) { this.enabled = parcel.readByte().toInt() != 0 this.obfuscationOptions = UnsignedInt(parcel.readInt()) this.defaultSequence = parcel.readString() ?: defaultSequence - this.windowSeqPairs = ParcelableUtil.readStringParcelableMap(parcel) + parcel.readTypedList(this.windowSeqPairs, AutoTypeItem.CREATOR) } override fun describeContents(): Int { @@ -58,15 +55,43 @@ class AutoType : Parcelable { dest.writeByte((if (enabled) 1 else 0).toByte()) dest.writeInt(obfuscationOptions.toKotlinInt()) dest.writeString(defaultSequence) - ParcelableUtil.writeStringParcelableMap(dest, windowSeqPairs) + dest.writeTypedList(windowSeqPairs) } - fun put(key: String, value: String) { - windowSeqPairs[key] = value + fun add(key: String, value: String) { + windowSeqPairs.add(AutoTypeItem(key, value)) } - fun entrySet(): Set> { - return windowSeqPairs.entries + fun doForEachAutoTypeItem(action: (key: String, value: String) -> Unit) { + windowSeqPairs.forEach { + action.invoke(it.key, it.value) + } + } + + private data class AutoTypeItem(var key: String, var value: String): Parcelable { + constructor(parcel: Parcel) : this( + parcel.readString() ?: "", + parcel.readString() ?: "") { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(key) + parcel.writeString(value) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): AutoTypeItem { + return AutoTypeItem(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } } companion object { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt index 03f76326a..b57eb458c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt @@ -38,7 +38,6 @@ import com.kunzisoft.keepass.database.element.security.ProtectedString import com.kunzisoft.keepass.utils.ParcelableUtil import com.kunzisoft.keepass.utils.UnsignedLong import java.util.* -import java.util.function.BiConsumer import kotlin.collections.ArrayList import kotlin.collections.LinkedHashMap @@ -239,7 +238,7 @@ class EntryKDBX : EntryVersioned, NodeKDBXInte size += getAttachmentsSize(attachmentPool) size += autoType.defaultSequence.length.toLong() - for ((key, value) in autoType.entrySet()) { + autoType.doForEachAutoTypeItem { key, value -> size += key.length.toLong() size += value.length.toLong() } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt index 4287a32e7..2103fb149 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt @@ -824,7 +824,7 @@ class DatabaseInputKDBX(cacheDirectory: File, return KdbContext.Entry } else if (ctx == KdbContext.EntryAutoTypeItem && name.equals(DatabaseKDBXXML.ElemAutoTypeItem, ignoreCase = true)) { if (ctxATName != null && ctxATSeq != null) - ctxEntry?.autoType?.put(ctxATName!!, ctxATSeq!!) + ctxEntry?.autoType?.add(ctxATName!!, ctxATSeq!!) ctxATName = null ctxATSeq = null diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDBX.kt index 9294e9901..d844c1773 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDBX.kt @@ -530,7 +530,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX, writeString(DatabaseKDBXXML.ElemAutoTypeDefaultSeq, autoType.defaultSequence, true) } - for ((key, value) in autoType.entrySet()) { + autoType.doForEachAutoTypeItem { key, value -> xml.startTag(null, DatabaseKDBXXML.ElemAutoTypeItem) xml.startTag(null, DatabaseKDBXXML.ElemWindow) diff --git a/fastlane/metadata/android/en-US/changelogs/79.txt b/fastlane/metadata/android/en-US/changelogs/79.txt deleted file mode 100644 index a089c677d..000000000 --- a/fastlane/metadata/android/en-US/changelogs/79.txt +++ /dev/null @@ -1 +0,0 @@ - * Fix search fields references #987 \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/80.txt b/fastlane/metadata/android/en-US/changelogs/80.txt new file mode 100644 index 000000000..aa027e772 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/80.txt @@ -0,0 +1,2 @@ + * Fix search fields references #987 + * Fix Auto-Types with same key #997 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/79.txt b/fastlane/metadata/android/fr-FR/changelogs/79.txt deleted file mode 100644 index b92b52447..000000000 --- a/fastlane/metadata/android/fr-FR/changelogs/79.txt +++ /dev/null @@ -1 +0,0 @@ - * Correction de la recherche des références de champs #987 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/80.txt b/fastlane/metadata/android/fr-FR/changelogs/80.txt new file mode 100644 index 000000000..193f200cd --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/80.txt @@ -0,0 +1,2 @@ + * Correction de la recherche des références de champs #987 + * Correction des Auto-Types avec la même clé #997 \ No newline at end of file