From 84e7fe5b60f5493d75507d5856aded3ed2c25278 Mon Sep 17 00:00:00 2001 From: HARADA Hiroyuki Date: Fri, 18 Sep 2020 13:01:00 +0000 Subject: [PATCH 01/53] Translated using Weblate (Japanese) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ja/ --- app/src/main/res/values-ja/strings.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a01857f39..f7665805e 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -473,7 +473,7 @@ 最大サイズ エントリーあたりの履歴項目の数を制限します 最大値 - データ圧縮によりデータベースのサイズが縮小されます。 + データ圧縮によりデータベースのサイズが縮小されます データ圧縮 ファイル名 対応するハードウェアが見つかりませんでした。 @@ -497,4 +497,12 @@ エントリーに添付ファイルをアップロードして、重要な外部データを保存します。 添付ファイルを追加 それでもファイルを追加しますか? + キーファイルの内容は決して変更してはいけません。また万全を期すにはランダムに生成されたデータを含んでいるべきです。 + データ + 空のキーファイルを追加することは推奨されません。 + リンクされていないデータを削除すると、データベースのサイズが小さくなるかもしれませんが、KeePass プラグインで使用されているデータも削除されるかもしれません。 + 認証情報について + データベースに含まれているがエントリーにリンクされていない添付ファイルを削除します + リンクされていないデータを削除 + それでもこのデータを削除しますか? \ No newline at end of file From ae0afb7b530c9e412d394d90ca106c1354ed421c Mon Sep 17 00:00:00 2001 From: HARADA Hiroyuki Date: Fri, 18 Sep 2020 13:36:36 +0000 Subject: [PATCH 02/53] Translated using Weblate (Japanese) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ja/ --- app/src/main/res/values-ja/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f7665805e..d06e29cf4 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -502,7 +502,7 @@ 空のキーファイルを追加することは推奨されません。 リンクされていないデータを削除すると、データベースのサイズが小さくなるかもしれませんが、KeePass プラグインで使用されているデータも削除されるかもしれません。 認証情報について - データベースに含まれているがエントリーにリンクされていない添付ファイルを削除します + データベースに含まれているが、エントリーにリンクされていない添付ファイルを削除します リンクされていないデータを削除 それでもこのデータを削除しますか? \ No newline at end of file From 63a0f5f91c48577285fdddc67e496fe3922db50e Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Fri, 18 Sep 2020 19:49:58 +0000 Subject: [PATCH 03/53] Translated using Weblate (Russian) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/ --- app/src/main/res/values-ru/strings.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1faf54a1b..e76693daf 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -404,7 +404,7 @@ Копирование полей ввода с помощью буфера обмена устройства Использовать дополнительную разблокировку для более лёгкого открытия базы данных Сжатие данных - Сжатие данных уменьшает размер базы. + Сжатие данных уменьшает размер базы Максимум записей Ограничение числа элементов истории каждой записи Максимальный размер @@ -497,4 +497,12 @@ \nЕсли добавить этот файл, база станет очень большой и снизится производительность. Добавление этого файла заменит существующий. Добавить файл в любом случае\? + Удаляет вложения, содержащиеся в базе данных, но не связанные с записью + Удалить несвязанные данные + Данные + Содержимое ключевого файла никогда не должно изменяться и в лучшем случае должно содержать случайно сгенерированные данные. + Не рекомендуется добавлять пустой ключевой файл. + Все равно удалить эти данные\? + Удаление несвязанных данных может уменьшить размер вашей базы данных, но также может удалить данные, используемые для плагинов KeePass. + Информация об учётных данных \ No newline at end of file From ea8c5ad6e1494dbb3abfc4fa16e938b3319995ca Mon Sep 17 00:00:00 2001 From: zeritti Date: Sat, 19 Sep 2020 08:49:47 +0000 Subject: [PATCH 04/53] Translated using Weblate (Czech) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/ --- app/src/main/res/values-cs/strings.xml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index ce4e2e7a2..fe8e45406 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -402,7 +402,7 @@ Kopírujte pole záznamů pomocí schránky Vašeho zařízení K snadnějšímu otevření databáze použijte pokročilé odemknutí Komprese dat - Komprese dat snižuje velikost databáze. + Komprese dat snižuje velikost databáze Maximální počet Omezit počet položek v historii záznamu Maximální velikost @@ -453,7 +453,7 @@ Ukázat nedávné soubory Ukázat umístění nedávných databází Skrýt špatné odkazy na databáze - Skrýt špatné odkazy v seznamu nedávných databází + Skrýt nesprávné odkazy v seznamu nedávných databází Udělit právo zápisu pro uložení změn v databázi KeePassDX © %1$d Kunzisoft je <strong>open source</strong> a <strong>bey reklam</strong>. \nJe poskytován jak je, pod licencí <strong>GPLv3</strong>, bez jakékoli záruky. @@ -490,4 +490,20 @@ Automaticky přepnout zpět na předchozí klávesnici na obrazovce ověřovacích údajů databáze Obrazovka ověřovacích údajů databáze Přepnout klávesnici + Nahrát %1$s + Info o údajích + Databáze KeePassu předpokládá uchovávat jen malé pomocné sobory (např. PGP soubory). +\n +\nVaše databáze by se mohla značně zvětšit a tímto nahráním tak ztratit na výkonnosti. + Nahráním tohoto souboru nahradíte existující soubor. + I přesto přidat soubor\? + Odstranění dat bez propojení patrně sníží velikost Vaší databáze, ale může též dojít k smazání dat používaných pluginy KeePassu. + I přesto odstranit tato data\? + Nedoporučuje se přidat prázdný soubor klíčů. + Obsah souboru klíčů by se neměl nikdy změnit, v nejlepším případě by měl obsahovat náhodně generovaná data. + Data + Odstranit data bez propojení + Odstraní přílohy obsažené v databázi, ale nikoli přílohy propojené se záznamem + Přidat přílohu + Nahrát přílohu k záznamu pro uložení důležitých externích dat. \ No newline at end of file From 9d4ab60fc4e856f59b8983fce4af8fc253933006 Mon Sep 17 00:00:00 2001 From: HARADA Hiroyuki Date: Sat, 19 Sep 2020 10:10:53 +0000 Subject: [PATCH 05/53] Translated using Weblate (Japanese) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ja/ --- app/src/main/res/values-ja/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index d06e29cf4..aeaf8df40 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -114,7 +114,7 @@ データベースを保存しています… スペース 検索 - 自然順 + 並べ替えなし 特殊文字 検索 Twofish @@ -176,7 +176,7 @@ 書き込み禁止 ファイル マネージャーによっては、KeePassDX によるストレージへの書き込みを許可していない場合があります。 すべてのデータで使用するデータベース暗号化アルゴリズムです。 - 並び替え + 並べ替え 昇順 ↓ ゴミ箱を一番下にする タイトル @@ -304,7 +304,7 @@ \nグループ(≒フォルダ)はデータベース内のエントリーを整理します。 エントリーを検索 データベースのロックを解除 - 項目の並び替え + 項目の並べ替え データベースに項目を追加 マスターキーを設定 これまで使ってきたデータベース ファイルを、ファイルブラウザから開いて引き続き使用します。 From 1fe6f11ef48730f57e9262414ef9cf7f3dfe8f70 Mon Sep 17 00:00:00 2001 From: Stephan Paternotte Date: Fri, 18 Sep 2020 18:11:00 +0000 Subject: [PATCH 06/53] Translated using Weblate (Dutch) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/nl/ --- app/src/main/res/values-nl/strings.xml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index e7c5d48ab..03e67cbc7 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -315,8 +315,8 @@ Argon2 App-thema Thema gebruikt in de app - Icoonverzameling - Iconenverzameling gebruikt in de app + Pictogrammenverzameling + Pictogrammenverzameling in gebruik Build %1$s Magikeyboard Magikeyboard (KeePassDX) @@ -353,10 +353,10 @@ Item toevoegen Groep toevoegen Bestandsinformatie - Wachtwoordcheckbox - Sleutelbestandcheckbox + Wachtwoord-selectie + Sleutelbestand-selectie Weergave van het wachtwoord wisselen - Item-icoon + Item-pictogram Wachtwoordgenerator Wachtwoordlengte Veld toevoegen @@ -408,7 +408,7 @@ Kopieer invoervelden met behulp van het klembord van uw apparaat Geavanceerde ontgrendeling gebruiken om een database gemakkelijker te openen Gegevenscompressie - Gegevenscompressie verkleint de omvang van de database. + Gegevenscompressie verkleint de omvang van de database Maximum aantal Beperk het aantal geschiedenisitems per item Maximum @@ -499,4 +499,12 @@ \n \nDe database kan erg groot worden en de prestaties kunnen verminderen bij deze upload. Als je dit bestand uploadt, wordt het bestaande vervangen. + Inloggegevens + Het verwijderen van niet-gekoppelde gegevens kan de omvang van uw database verkleinen, maar kan ook gegevens verwijderen die voor KeePass-plug-ins worden gebruikt. + Deze gegevens toch verwijderen\? + Het is niet raadzaam om een leeg sleutelbestand toe te voegen. + De inhoud van het sleutelbestand mag nooit worden gewijzigd en moet in het beste geval willekeurig gegenereerde gegevens bevatten. + Gegevens + Niet-gekoppelde gegevens verwijderen + Verwijdert bijlagen die in de database staan, maar niet aan een item zijn gekoppeld \ No newline at end of file From ccbe9ad21eef81ccb493ce9db818b508937a27ba Mon Sep 17 00:00:00 2001 From: solokot Date: Fri, 18 Sep 2020 20:01:50 +0000 Subject: [PATCH 07/53] Translated using Weblate (Russian) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/ --- app/src/main/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e76693daf..5a0f21d50 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -502,7 +502,7 @@ Данные Содержимое ключевого файла никогда не должно изменяться и в лучшем случае должно содержать случайно сгенерированные данные. Не рекомендуется добавлять пустой ключевой файл. - Все равно удалить эти данные\? + Всё равно удалить эти данные\? Удаление несвязанных данных может уменьшить размер вашей базы данных, но также может удалить данные, используемые для плагинов KeePass. Информация об учётных данных \ No newline at end of file From 1dca2b4387499b3c7db5ad959ed488db7c4704c7 Mon Sep 17 00:00:00 2001 From: ihor_ck Date: Fri, 18 Sep 2020 20:27:03 +0000 Subject: [PATCH 08/53] Translated using Weblate (Ukrainian) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/uk/ --- app/src/main/res/values-uk/strings.xml | 30 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 7f4f96131..945a7c46f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -27,7 +27,7 @@ Час очікування застосунку Час очікування до блокування бази даних Застосунок - Налаштування застосунку + Параметри застосунку Дужки Для створення, відкриття та збереження файлів баз даних потрібен файловий менеджер, який приймає дії Intent ACTION_CREATE_DOCUMENT та ACTION_OPEN_DOCUMENT. Буфер обміну очищено @@ -65,7 +65,7 @@ Бракує пам\'яті для завантаження всієї вашої бази даних. Необхідно вибрати принаймні один тип створення пароля. Паролі не збігаються. - Забагато циклів. Установлено 2147483648. + Забагато циклів. Встановлено 2147483648. Введіть додатне ціле число до поля \"Довжина\". Файловий менеджер Згенерувати пароль @@ -87,8 +87,8 @@ Типово приховувати паролі за (***) Про KeePassDX Змінити головний ключ - Налаштування - Налаштування бази даних + Параметри + Параметри бази даних Видалити Допомогти Змінити @@ -166,7 +166,7 @@ Увімкнути Очищати під час закриття Дозволити копіювання пароля та захищених полів до буфера обміну - Інформація про файл + Відомості про файл Додати запис Тло Не вдалося очистити буфер обміну @@ -207,7 +207,7 @@ Видалити збережений біометричний ключ Поле файла ключа Налаштування головного ключа - Налаштування безпеки + Параметри безпеки Розширені параметри розблокування Заповнення форм Скопійовано %1$s @@ -329,14 +329,14 @@ Створюйте записи для керування вашими обліковими записами. \n \nСтворюйте групи (~теки) для впорядкування записів у вашій базі даних. - Налаштування клавіатури пристрою + Параметри клавіатури пристрою Додавайте елементи до вашої бази даних Відкрийте наявну базу даних Відкрийте файл раніше створеної бази даних з файлового менеджера, щоб продовжити користуватися ним. Створіть ваш перший файл керування паролями. Створити файл бази даних Скинути навчальні підказки - Показати всю навчальну інформацію знову + Показати всі навчальні підказки знову Скидання навчальних підказок Виділяти елементи, щоб дізнатися, як працює застосунок Навчальні підказки @@ -392,7 +392,7 @@ Група кошик Переміщати групи та записи до групи \"Кошик\" перед видаленням Використання кошика - Стиснення даних зменшує розмір бази даних. + Стиснення даних зменшує розмір бази даних Стиснення даних Призначити головний ключ Шлях @@ -471,8 +471,8 @@ Паралельність Використання пам\'яті Алгоритм шифрування бази даних, застосований для всіх даних. - Автоматичний пошук загальнодоступної інформації для заповнення клавіатури - Пошук доступної інформації + Автоматично шукати загальнодоступні дані для заповнення клавіатури + Пошук доступних даних Перезапустіть застосунок, який містить форму, для застосування блокування. Блокування автозаповнення Вебдомени для яких вимкнено автозаповнення @@ -497,4 +497,12 @@ Додати вкладення Все одно додати файл\? Завантаження цього файлу замінить наявний. + Відомості про облікові дані + Вилучення непов’язаних даних може зменшити розмір вашої бази даних, але може також видалити дані, що використовуються для плагінів KeePass. + Все одно вилучити ці дані\? + Не рекомендовано додавати порожній файл ключа. + Вміст файлу ключів ніколи не слід змінювати, а в кращому випадку повинен містити випадково згенеровані дані. + Дані + Вилучити незв\'язані дані + Вилучає вкладення, що містяться в базі даних, але не пов’язані із записом \ No newline at end of file From c7000c8ac69eb6ca0b1c319a47406ce366d909db Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 19 Sep 2020 05:18:54 +0000 Subject: [PATCH 09/53] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 7e885a392..0edd21d24 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -406,7 +406,7 @@ 使用设备的剪贴板来复制输入字段 使用高级解锁轻松打开数据库 数据压缩 - 数据压缩可降低数据库大小。 + 数据压缩减少了数据库的大小 最大数量 限制每个条目的历史记录条数 最大大小 @@ -497,4 +497,12 @@ KeePass数据库应该只包含小的实用程序文件(例如PGP密钥文件)。 \n \n上传大文件会使增大数据库体积并降低性能。 + 凭证信息 + 删除未链接的数据可能会减少数据库的大小,但也可能会删除用于KeePass插件的数据。 + 无论如何要删除这些数据\? + 不推荐添加一个空的密钥文件。 + 密钥文件的内容应该永不更改,在最好的情况下,应该包含随机生成的数据。 + 数据 + 删除未链接的数据 + 删除包含于数据库中但未连接到一个条目的附件 \ No newline at end of file From 2c96a802808ab6171fd0d56f02a3c1338d44d59c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Fri, 18 Sep 2020 15:04:44 +0000 Subject: [PATCH 10/53] Translated using Weblate (Turkish) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/tr/ --- app/src/main/res/values-tr/strings.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 82a875397..ffa39c600 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -388,7 +388,7 @@ Cihazınızın panosunu kullanarak giriş alanlarını kopyala Veritabanını daha kolay açmak için gelişmiş kilit açma özelliğini kullan Veri sıkıştırma - Veri sıkıştırma veritabanı boyutunu azaltır. + Veri sıkıştırma veri tabanı boyutunu azaltır Azami sayı Girdi başına geçmiş ögelerinin sayısını sınırla Azami boyut @@ -481,4 +481,12 @@ Bir KeePass veri tabanının sadece küçük yardımcı dosyaları (PGP anahtar dosyaları gibi) içermesi beklenmektedir. \n \nVeri tabanınız bu yüklemeyle çok büyük hale gelebilir ve performansı düşürebilir. + Kimlik bilgileri + Bağlantısız verileri kaldırmak veri tabanınızın boyutunu azaltabilir, ancak KeePass eklentileri için kullanılan verileri de silebilir. + Bu veriler yine de kaldırılsın mı\? + Boş bir anahtar dosyası eklemeniz önerilmez. + Anahtar dosyanın içeriği hiçbir zaman değiştirilmemeli ve en iyi durumda rastgele oluşturulmuş veriler içermelidir. + Veri + Bağlantısız verileri kaldır + Veri tabanında bulunan ancak bir girdiye bağlı olmayan ekleri kaldırır \ No newline at end of file From 35b7633f4d38189a6684079a64a08358df83afe4 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 21 Sep 2020 10:56:09 +0200 Subject: [PATCH 11/53] Fix autofill recognition #712 and update version to 2.9 --- CHANGELOG | 3 +++ app/build.gradle | 4 ++-- .../kunzisoft/keepass/autofill/StructureParser.kt | 15 +++++---------- fastlane/metadata/android/en-US/changelogs/42.txt | 1 + fastlane/metadata/android/fr-FR/changelogs/42.txt | 1 + 5 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/42.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/42.txt diff --git a/CHANGELOG b/CHANGELOG index f436cbfd5..0f5587d64 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +KeePassDX(2.9) + * Fix Autofill recognition + KeePassDX(2.8.5) * Fix Base 64 #708 diff --git a/app/build.gradle b/app/build.gradle index 5c9a4e023..e3c85eba2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.kunzisoft.keepass" minSdkVersion 14 targetSdkVersion 29 - versionCode = 41 - versionName = "2.8.5" + versionCode = 42 + versionName = "2.9" multiDexEnabled true testApplicationId = "com.kunzisoft.keepass.tests" diff --git a/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt b/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt index fc663e4ca..35bb74264 100644 --- a/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt +++ b/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt @@ -100,19 +100,14 @@ internal class StructureParser(private val structure: AssistStructure) { val autofillId = node.autofillId node.autofillHints?.forEach { when { - it.equals(View.AUTOFILL_HINT_USERNAME, true) - || it.equals(View.AUTOFILL_HINT_EMAIL_ADDRESS, true) - || it.equals("email", true) - || it.equals(View.AUTOFILL_HINT_PHONE, true) - || it.contains("OrUsername", true) - || it.contains("OrEmailAddress", true) - || it.contains("OrEmail", true) - || it.contains("OrPhone", true)-> { + it.contains(View.AUTOFILL_HINT_USERNAME, true) + || it.contains(View.AUTOFILL_HINT_EMAIL_ADDRESS, true) + || it.contains("email", true) + || it.contains(View.AUTOFILL_HINT_PHONE, true)-> { result?.usernameId = autofillId Log.d(TAG, "Autofill username hint") } - it.equals(View.AUTOFILL_HINT_PASSWORD, true) - || it.contains("password", true) -> { + it.contains(View.AUTOFILL_HINT_PASSWORD, true) -> { result?.passwordId = autofillId Log.d(TAG, "Autofill password hint") // Username not needed in this case diff --git a/fastlane/metadata/android/en-US/changelogs/42.txt b/fastlane/metadata/android/en-US/changelogs/42.txt new file mode 100644 index 000000000..647cd4929 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/42.txt @@ -0,0 +1 @@ + * Fix Autofill recognition #709 diff --git a/fastlane/metadata/android/fr-FR/changelogs/42.txt b/fastlane/metadata/android/fr-FR/changelogs/42.txt new file mode 100644 index 000000000..d9f1080bc --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/42.txt @@ -0,0 +1 @@ + * Correction de la reconnaissance de remplissage automatique #709 From 8de49fa02734f1c1430ff8cef3cd7ebb4c189a9d Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 21 Sep 2020 11:31:14 +0200 Subject: [PATCH 12/53] Fix renaming custom field #709 --- CHANGELOG | 3 ++- .../keepass/activities/EntryEditFragment.kt | 17 ++++++++++++++--- .../java/com/kunzisoft/keepass/model/Field.kt | 5 +++++ .../metadata/android/en-US/changelogs/42.txt | 3 ++- .../metadata/android/fr-FR/changelogs/42.txt | 3 ++- 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 0f5587d64..51a7c96c8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ KeePassDX(2.9) - * Fix Autofill recognition + * Fix Autofill recognition #712 + * Keep value after renaming custom field #709 KeePassDX(2.8.5) * Fix Base 64 #708 diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditFragment.kt index 57de64db4..2c5560487 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditFragment.kt @@ -413,7 +413,7 @@ class EntryEditFragment: StylishFragment() { } /** - * Update an extra field or create a new one if doesn't exists + * Update an extra field or create a new one if doesn't exists, the old value is lost */ fun putExtraField(extraField: Field) { extraFieldsContainerView.visibility = View.VISIBLE @@ -434,13 +434,24 @@ class EntryEditFragment: StylishFragment() { } } + /** + * Update an extra field and keep the old value + */ fun replaceExtraField(oldExtraField: Field, newExtraField: Field) { extraFieldsContainerView.visibility = View.VISIBLE val index = mExtraFieldsList.indexOf(oldExtraField) + val oldValueEditText: EditText = extraFieldsListView.getChildAt(index) + .findViewWithTag("FIELD_VALUE_TAG") + val oldValue = oldValueEditText.text.toString() + val newExtraFieldWithOldValue = Field(newExtraField).apply { + this.protectedValue.stringValue = oldValue + } mExtraFieldsList.removeAt(index) - mExtraFieldsList.add(index, newExtraField) + mExtraFieldsList.add(index, newExtraFieldWithOldValue) extraFieldsListView.removeViewAt(index) - extraFieldsListView.addView(buildViewFromField(newExtraField), index) + val newView = buildViewFromField(newExtraFieldWithOldValue) + extraFieldsListView.addView(newView, index) + newView?.requestFocus() } fun removeExtraField(oldExtraField: Field) { diff --git a/app/src/main/java/com/kunzisoft/keepass/model/Field.kt b/app/src/main/java/com/kunzisoft/keepass/model/Field.kt index 0ab85025c..e078f106e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/model/Field.kt +++ b/app/src/main/java/com/kunzisoft/keepass/model/Field.kt @@ -33,6 +33,11 @@ class Field : Parcelable { this.protectedValue = value } + constructor(fieldToCopy: Field) { + this.name = fieldToCopy.name + this.protectedValue = fieldToCopy.protectedValue + } + constructor(parcel: Parcel) { this.name = parcel.readString() ?: name this.protectedValue = parcel.readParcelable(ProtectedString::class.java.classLoader) ?: protectedValue diff --git a/fastlane/metadata/android/en-US/changelogs/42.txt b/fastlane/metadata/android/en-US/changelogs/42.txt index 647cd4929..1537ebdd3 100644 --- a/fastlane/metadata/android/en-US/changelogs/42.txt +++ b/fastlane/metadata/android/en-US/changelogs/42.txt @@ -1 +1,2 @@ - * Fix Autofill recognition #709 + * Fix Autofill recognition #712 + * Keep value after renaming custom field #709 diff --git a/fastlane/metadata/android/fr-FR/changelogs/42.txt b/fastlane/metadata/android/fr-FR/changelogs/42.txt index d9f1080bc..6bf0e5e7d 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/42.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/42.txt @@ -1 +1,2 @@ - * Correction de la reconnaissance de remplissage automatique #709 + * Correction de la reconnaissance de remplissage automatique #712 + * La valeur du champ customisé est gardée après son renommage #709 From 650ca3844ee78c3faadf44a8e720eb494870c951 Mon Sep 17 00:00:00 2001 From: ian Vatega Date: Tue, 22 Sep 2020 12:56:17 +0200 Subject: [PATCH 13/53] Added translation using Weblate (Esperanto) --- app/src/main/res/values-eo/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-eo/strings.xml diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/app/src/main/res/values-eo/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 47e211bf3c0bfe54eeec6b6e00c8079c5f1610bc Mon Sep 17 00:00:00 2001 From: ssantos Date: Tue, 22 Sep 2020 17:31:10 +0200 Subject: [PATCH 14/53] Added translation using Weblate (Portuguese) --- app/src/main/res/values-pt/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-pt/strings.xml diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/app/src/main/res/values-pt/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From df62a9d32bdffb7fc2ed3c2ec6f852e0ef227f46 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 23 Sep 2020 11:35:20 +0200 Subject: [PATCH 15/53] Binary dir as no backup --- .../com/kunzisoft/keepass/activities/EntryEditActivity.kt | 3 ++- .../com/kunzisoft/keepass/activities/PasswordActivity.kt | 3 ++- app/src/main/java/com/kunzisoft/keepass/app/App.kt | 3 ++- .../keepass/database/action/CreateDatabaseRunnable.kt | 4 +++- .../keepass/database/action/LoadDatabaseRunnable.kt | 8 +++++--- .../java/com/kunzisoft/keepass/utils/BroadcastAction.kt | 2 +- app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt | 8 ++++++++ 7 files changed, 23 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index 29760914b..3cffa92bb 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -63,6 +63,7 @@ import com.kunzisoft.keepass.tasks.AttachmentFileBinderManager import com.kunzisoft.keepass.timeout.TimeoutHelper import com.kunzisoft.keepass.utils.MenuUtil import com.kunzisoft.keepass.utils.UriUtil +import com.kunzisoft.keepass.utils.closeDatabase import com.kunzisoft.keepass.view.asError import com.kunzisoft.keepass.view.showActionError import com.kunzisoft.keepass.view.updateLockPaddingLeft @@ -416,7 +417,7 @@ class EntryEditActivity : LockingActivity(), private fun buildNewAttachment(attachmentToUploadUri: Uri, fileName: String) { val compression = mDatabase?.compressionForNewEntry() ?: false - mDatabase?.buildNewBinary(applicationContext.filesDir, false, compression)?.let { binaryAttachment -> + mDatabase?.buildNewBinary(UriUtil.getBinaryDir(this), false, compression)?.let { binaryAttachment -> val entryAttachment = Attachment(fileName, binaryAttachment) // Ask to replace the current attachment if ((mDatabase?.allowMultipleAttachments != true && entryEditFragment?.containsAttachment() == true) || diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt index cffabd490..ec1ced859 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt @@ -67,6 +67,7 @@ import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.utils.BACK_PREVIOUS_KEYBOARD_ACTION import com.kunzisoft.keepass.utils.MenuUtil import com.kunzisoft.keepass.utils.UriUtil +import com.kunzisoft.keepass.utils.closeDatabase import com.kunzisoft.keepass.view.AdvancedUnlockInfoView import com.kunzisoft.keepass.view.KeyFileSelectionView import com.kunzisoft.keepass.view.asError @@ -763,7 +764,7 @@ open class PasswordActivity : SpecialModeActivity() { when (resultCode) { LockingActivity.RESULT_EXIT_LOCK -> { clearCredentialsViews() - Database.getInstance().closeAndClear(applicationContext.filesDir) + Database.getInstance().closeAndClear(UriUtil.getBinaryDir(this)) } Activity.RESULT_CANCELED -> { clearCredentialsViews() diff --git a/app/src/main/java/com/kunzisoft/keepass/app/App.kt b/app/src/main/java/com/kunzisoft/keepass/app/App.kt index 48ad694d6..8094648b6 100644 --- a/app/src/main/java/com/kunzisoft/keepass/app/App.kt +++ b/app/src/main/java/com/kunzisoft/keepass/app/App.kt @@ -22,6 +22,7 @@ package com.kunzisoft.keepass.app import androidx.multidex.MultiDexApplication import com.kunzisoft.keepass.activities.stylish.Stylish import com.kunzisoft.keepass.database.element.Database +import com.kunzisoft.keepass.utils.UriUtil class App : MultiDexApplication() { @@ -33,7 +34,7 @@ class App : MultiDexApplication() { } override fun onTerminate() { - Database.getInstance().closeAndClear(applicationContext.filesDir) + Database.getInstance().closeAndClear(UriUtil.getBinaryDir(this)) super.onTerminate() } } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt index 885c03bb1..7b7f90d0b 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt @@ -25,6 +25,8 @@ import android.util.Log import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.settings.PreferencesUtil +import com.kunzisoft.keepass.utils.UriUtil +import com.kunzisoft.keepass.utils.closeDatabase class CreateDatabaseRunnable(context: Context, private val mDatabase: Database, @@ -45,7 +47,7 @@ class CreateDatabaseRunnable(context: Context, createData(mDatabaseUri, databaseName, rootName) } } catch (e: Exception) { - mDatabase.closeAndClear(context.applicationContext.filesDir) + mDatabase.closeAndClear(UriUtil.getBinaryDir(context)) setError(e) } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/LoadDatabaseRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/LoadDatabaseRunnable.kt index 9813b36ce..5f9d0ce04 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/LoadDatabaseRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/LoadDatabaseRunnable.kt @@ -30,6 +30,8 @@ import com.kunzisoft.keepass.database.exception.LoadDatabaseException import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.tasks.ActionRunnable import com.kunzisoft.keepass.tasks.ProgressTaskUpdater +import com.kunzisoft.keepass.utils.UriUtil +import com.kunzisoft.keepass.utils.closeDatabase class LoadDatabaseRunnable(private val context: Context, private val mDatabase: Database, @@ -45,7 +47,7 @@ class LoadDatabaseRunnable(private val context: Context, override fun onStartRun() { // Clear before we load - mDatabase.closeAndClear(context.applicationContext.filesDir) + mDatabase.closeAndClear(UriUtil.getBinaryDir(context)) } override fun onActionRun() { @@ -53,7 +55,7 @@ class LoadDatabaseRunnable(private val context: Context, mDatabase.loadData(mUri, mPass, mKey, mReadonly, context.contentResolver, - context.applicationContext.filesDir, + UriUtil.getBinaryDir(context), mFixDuplicateUUID, progressTaskUpdater) } @@ -81,7 +83,7 @@ class LoadDatabaseRunnable(private val context: Context, // Register the current time to init the lock timer PreferencesUtil.saveCurrentTime(context) } else { - mDatabase.closeAndClear(context.applicationContext.filesDir) + mDatabase.closeAndClear(UriUtil.getBinaryDir(context)) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/BroadcastAction.kt b/app/src/main/java/com/kunzisoft/keepass/utils/BroadcastAction.kt index cc11945a2..7410eeb6e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/utils/BroadcastAction.kt +++ b/app/src/main/java/com/kunzisoft/keepass/utils/BroadcastAction.kt @@ -133,5 +133,5 @@ fun Context.closeDatabase() { cancelAll() } // Clear data - Database.getInstance().closeAndClear(applicationContext.filesDir) + Database.getInstance().closeAndClear(UriUtil.getBinaryDir(this)) } \ No newline at end of file diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt b/app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt index 30e54fd43..e72afb6d4 100644 --- a/app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt +++ b/app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt @@ -146,4 +146,12 @@ object UriUtil { gotoUrl(context, context.getString(resId)) } + fun getBinaryDir(context: Context): File { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + context.applicationContext.noBackupFilesDir + } else { + context.applicationContext.filesDir + } + } + } From 777a20182eff274abc84604f15891d8bf061bf69 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 23 Sep 2020 12:13:22 +0200 Subject: [PATCH 16/53] Revert "Early return in readHeaderField" #713 This reverts commit f2150e3d8578bd97a2d3d17fbe8adcfeb8a1d7df. --- .../kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt index 6bab5f387..3152cd4dd 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt @@ -192,11 +192,10 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader( } } - if (fieldID == PwDbHeaderV4Fields.EndOfHeader) - return true - if (fieldData != null) when (fieldID) { + PwDbHeaderV4Fields.EndOfHeader -> return true + PwDbHeaderV4Fields.CipherID -> setCipher(fieldData) PwDbHeaderV4Fields.CompressionFlags -> setCompressionFlags(fieldData) From ea126b90e2ad896f2cecb45bb1c93b983acae087 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 23 Sep 2020 13:13:22 +0200 Subject: [PATCH 17/53] Revert "Revert "Early return in readHeaderField" #713" This reverts commit 777a20182eff274abc84604f15891d8bf061bf69. --- .../kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt index 3152cd4dd..6bab5f387 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/DatabaseHeaderKDBX.kt @@ -192,10 +192,11 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader( } } + if (fieldID == PwDbHeaderV4Fields.EndOfHeader) + return true + if (fieldData != null) when (fieldID) { - PwDbHeaderV4Fields.EndOfHeader -> return true - PwDbHeaderV4Fields.CipherID -> setCipher(fieldData) PwDbHeaderV4Fields.CompressionFlags -> setCompressionFlags(fieldData) From 62cca09045f8e9f634ab10c6313c21fb0391dcd8 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 23 Sep 2020 16:46:31 +0200 Subject: [PATCH 18/53] Change length binary method --- .../keepass/database/element/database/BinaryAttachment.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryAttachment.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryAttachment.kt index 5e237f9f2..1eab8f95a 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryAttachment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryAttachment.kt @@ -36,9 +36,7 @@ class BinaryAttachment : Parcelable { private var dataFile: File? = null fun length(): Long { - if (dataFile != null) - return dataFile!!.length() - return 0 + return dataFile?.length() ?: 0 } /** @@ -65,7 +63,7 @@ class BinaryAttachment : Parcelable { @Throws(IOException::class) fun getInputDataStream(): InputStream { return when { - dataFile != null -> FileInputStream(dataFile!!) + length() > 0 -> FileInputStream(dataFile!!) else -> ByteArrayInputStream(ByteArray(0)) } } From a45d1145270446c2104ef1adc9747f96ec840f50 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 23 Sep 2020 16:47:10 +0200 Subject: [PATCH 19/53] Add toString() for BinaryPool --- .../keepass/database/element/database/BinaryPool.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryPool.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryPool.kt index 5cea2345d..98346223d 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryPool.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryPool.kt @@ -137,6 +137,17 @@ class BinaryPool { pool.clear() } + override fun toString(): String { + val stringBuffer = StringBuffer() + for ((key, value) in pool) { + if (stringBuffer.isNotEmpty()) + stringBuffer.append(", {$key:$value}") + else + stringBuffer.append("{$key:$value}") + } + return stringBuffer.toString() + } + /** * Utility data class to order binaries */ From 920764ad330f9fbc62fdff1f646d3e2682f2dc64 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 23 Sep 2020 17:07:15 +0200 Subject: [PATCH 20/53] Fix binaries unique Ids #713 --- .../keepass/database/element/database/DatabaseKDBX.kt | 4 +++- .../keepass/database/file/input/DatabaseInputKDBX.kt | 8 +++++++- 2 files changed, 10 insertions(+), 2 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 baadf38e9..b18ae74a9 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 @@ -107,6 +107,7 @@ class DatabaseKDBX : DatabaseVersioned { val customData = HashMap() var binaryPool = BinaryPool() + private var binaryIncrement = 0 // Unique id (don't use current time because CPU too fast) var localizedAppName = "KeePassDX" @@ -561,7 +562,8 @@ class DatabaseKDBX : DatabaseVersioned { compression: Boolean, binaryPoolId: Int? = null): BinaryAttachment { // New file with current time - val fileInCache = File(cacheDirectory, System.currentTimeMillis().toString()) + val fileInCache = File(cacheDirectory, binaryIncrement.toString()) + binaryIncrement++ val binaryAttachment = BinaryAttachment(fileInCache, protection, compression) // add attachment to pool binaryPool.put(binaryPoolId, binaryAttachment) 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 e234f7a4c..f695d4186 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 @@ -954,7 +954,13 @@ class DatabaseInputKDBX(cacheDirectory: File, xpp.next() // Consume end tag val id = Integer.parseInt(ref) // A ref is not necessarily an index in Database V3.1 - mDatabase.binaryPool[id] + var binaryRetrieve = mDatabase.binaryPool[id] + // Create empty binary if not retrieved in pool + if (binaryRetrieve == null) { + binaryRetrieve = mDatabase.buildNewBinary(cacheDirectory, + protection = false, compression = false, binaryPoolId = id) + } + return binaryRetrieve } key != null -> { createBinary(key.toIntOrNull(), xpp) From c8bae9fba6861505aa9f4550a797a5bffe283c51 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 23 Sep 2020 17:15:45 +0200 Subject: [PATCH 21/53] Fix binaries unique Ids #713 --- .../keepass/database/element/database/DatabaseKDB.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDB.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDB.kt index 15be1dda9..579aa62c9 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDB.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDB.kt @@ -44,6 +44,8 @@ class DatabaseKDB : DatabaseVersioned() { private var kdfListV3: MutableList = ArrayList() + private var binaryIncrement = 0 + override val version: String get() = "KeePass 1" @@ -264,8 +266,9 @@ class DatabaseKDB : DatabaseVersioned() { } fun buildNewBinary(cacheDirectory: File): BinaryAttachment { - // Generate an unique new file with timestamp - val fileInCache = File(cacheDirectory, System.currentTimeMillis().toString()) + // Generate an unique new file + val fileInCache = File(cacheDirectory, binaryIncrement.toString()) + binaryIncrement++ return BinaryAttachment(fileInCache) } From 28b8fb1b97c8cf7d19e1635030b4968c968abd6c Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 23 Sep 2020 17:16:30 +0200 Subject: [PATCH 22/53] Update CHANGELOG --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 51a7c96c8..7dc383445 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ KeePassDX(2.9) * Fix Autofill recognition #712 * Keep value after renaming custom field #709 + * Prevent random binary bug #713 KeePassDX(2.8.5) * Fix Base 64 #708 From 16c4e4dc5bddd9321360c6fdc10769a5ce3a5db7 Mon Sep 17 00:00:00 2001 From: ssantos Date: Tue, 22 Sep 2020 15:52:12 +0000 Subject: [PATCH 23/53] Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt_PT/ --- app/src/main/res/values-pt-rPT/strings.xml | 52 ++++++++++++++-------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index c3ae9f50d..faffeceb5 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -42,8 +42,8 @@ A desencriptar o conteúdo da base de dados… Utilizar como base de dados predefinida Dígitos - KeePassDX © %1$d Kunzisoft é de <strong>código aberto</strong> e <strong>sem publicidade</strong>. -\nÉ fornecido como está, sob <strong>licença GPLv3</strong>, sem qualquer garantia. + KeePassDX © %1$d Kunzisoft é open source e sem publicidade. +\nÉ fornecido como está, sob a licença GPLv3, sem qualquer garantia. Abrir uma base de dados existente Acedido Cancelar @@ -62,7 +62,7 @@ A cifra de fluxo Arcfour não é suportada. Não pôde tratar esta URI no KeePassDX. Não foi possível criar o ficheiro - Não foi possível ler a base de dados. + Não foi possível ler o banco de dados. Certifique-se que o caminho é válido. Introduza um nome. Selecione um ficheiro chave. @@ -190,7 +190,7 @@ Continuar sem proteção de desbloqueio por palavra-passe\? Continuar sem a chave de criptografia\? Compilação %1$s - Prompt biométrico suportado, mas não configurado. + O escaneamento biométrico é suportado, mas não configurado. Palavra-passe encriptada armazenada Biométrico não reconhecido Problema do biométrico: %1$s @@ -214,12 +214,12 @@ Caracteres da palavra-passe Definir os caracteres permitodos para o gerador de palavra-passe Notificações da área de transferência - Ative notificações da área de transferência para campos copiáveis quando estiver a visualizar uma entrada + Mostrar notificações de área de transferência para copiar campos ao visualizar uma entrada Bloquear Bloqueio de ecrã Bloqueie a base de dados quando o ecrã estiver desligado Não foi possível iniciar esse recurso. - Sua versão do Android %1$s não corresponde a versão mínima %2$s necessária. + O aparelho está a executar Android %1$s, mas precisa de %2$s ou posterior. Não foi possível encontrar o hardware correspondente. Nome do ficheiro Caminho @@ -252,7 +252,7 @@ \nGrupos (~pastas) organizam as suas entradas na sua base de dados. Pesquise suas entradas Entre com título, nome de utilizador ou outros campos para recuperar facilmente as suas palavras-passe. - Desbloquear a base de dados por biométrico + Desbloqueio da base de dados por biométricos Ligue a sua palavra-passe e o seu biométrico gravado para rapidamente desbloquear a sua base de dados. Modifique a entrada Edite a sua entrada com campos personalizados. Os conjuntos de dados podem ser referenciados entre campos de entradas diferentes. @@ -296,7 +296,7 @@ Se a limpeza da área de transferência falhar, limpe seu histórico manualmente. Aviso: A área de transferência é compartilhada por todas as apps. Se dados sensíveis forem copiados, outros programas podem recuperá-lo. Não permitir chave mestra - Ativar o botão \"Abrir\" se nenhuma credencial for selecionada + Permite tocar no botão \"Abrir\" se nenhumas credenciais estiverem selecionadas Dicas educacionais Destacar elementos para aprender como a app funciona Apenas leitura @@ -342,7 +342,7 @@ Inserir nó Adicionar entrada Adicionar grupo - Informações do ficheiro + Informações sobre ficheiro Caixa de seleção da palavra-passe Caixa de seleção keyfile Repetir alternar a visibilidade da palavra-passe @@ -357,7 +357,7 @@ Mostrar número de entradas Mostrar o número de entradas dentro de um grupo Cor personalizada da base de dados - A compressão dos dados reduz o tamanho da base de dados. + A compressão de dados reduz o tamanho da base de dados Permite que escaneie o seu biométrico para abrir a base de dados Usar desbloqueamento avançado para abrir a base de dados mais facilmente Base de dados aberta @@ -398,15 +398,15 @@ Ação da tecla \"Go\" após pressionar a tecla \"Field\" Tipo do OTP Adicionar anexo - Instalar OTP + Configurar OTP Compressão Validação - Lembrar o local dos ficheiros-chave das bases de dados + Mantém o controle sobre onde os ficheiros de chaves são armazenados Histórico O período deve estar entre %1$d e %2$d segundos. Chave Mestre Recomendar mudança da chave mestre (em dias) - Gravar o local das bases de dados + Lembrar locais das bases de dados A inicializar… Configurações de segurança Desativar @@ -420,7 +420,7 @@ Anexos Gzip Descartar - Lembrar o local das bases de dados + Mantém o controle sobre onde os bancos de dados são armazenados Solicitar uma pesquisa quando abrir a base de dados Lembrar nomes recentes de ficheiros A finalizar… @@ -475,7 +475,7 @@ Gravar a base de dados automaticamente Ação de chave automática Ocultar entradas expiradas - As entradas expiradas foram ocultadas + As entradas expiradas não são mostradas Configurações da chave-mestre Configurar OTP Procurar informação compartilhada @@ -484,11 +484,27 @@ Consertar o problema gerando novas UUIDs para duplicatas para continuar\? Forçar renovação na próxima vez Desbloqueio avançado - Configure a gestão de palavras-passe descartáveis (HOTP / TOTP) para gerar um token solicitado para a autenticação de dois fatores (2FA). - Gravar o local dos ficheiros-chave + Configurar a gestão de palavra-passe única (HOTP / TOTP) para gerar um token solicitado para autenticação de dois fatores (2FA). + Lembrar locais de ficheiros-chave Apagar todas as chaves de criptografia relacionadas ao reconhecimento biométrico\? Em progresso: %1$d%% - Abrir automaticamente o prompt de biomẽtrico + Abrir automaticamente o escaneamento de biomẽtrico Desbloqueio avançado Renovação recomendada + Enviar %1$s + Envie um anexo à sua entrada para gravar dados externos importantes. + Adicionar anexo + Remove anexos contidos na base de dados, mas não ligados a uma entrada + Remover dados não ligados + Dados + O conteúdo do ficheiro-chave nunca deve ser alterado e, no melhor dos casos, deve conter dados gerados aleatoriamente. + Não é recomendável adicionar um ficheiro de chave vazio. + Remover esses dados mesmo assim\? + Remover dados não ligados pode diminuir o tamanho da sua base de dados, mas também pode apagar dados utilizados para os plugins do KeePass. + Adicionar o ficheiro mesmo assim\? + Enviar deste ficheiro substituirá o existente. + Uma base de dados KeePass deve conter apenas pequenos ficheiros utilitários (tais como ficheiros chave PGP). +\n +\nA sua base de dados pode se tornar muito grande e reduzir o desempenho com este envio. + Informações sobre credenciais \ No newline at end of file From 2ee506ac06370f583974620ebbd30c0f8b9bafbc Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Tue, 22 Sep 2020 00:22:40 +0000 Subject: [PATCH 24/53] Translated using Weblate (Croatian) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/hr/ --- app/src/main/res/values-hr/strings.xml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 7aefc1a17..31f2d171b 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -49,7 +49,7 @@ Duljina lozinke Dodaj polje Ukloni polje - Ažuriraj + Aktualiziraj Ukloni Zatvori polja Kopiraj %1$s u međuspremnik @@ -206,7 +206,7 @@ Putanja Zadaj glavni ključ Komprimiranje podataka - Komprimiranje podataka smanjuje veličinu baze podataka. + Komprimiranje podataka smanjuje veličinu baze podataka Maksimalni broj Maksimalna veličina Preporuči obnavljanje @@ -481,4 +481,12 @@ Dodaj privitak Svejedno dodati datoteku\? Prijenosom ove datoteke zamijenit će se postojeća. + Sadržaj datoteke ključeva nikada se ne bi trebao mijenjati, a u najboljem slučaju, trebao bi sadržavati nasumice generirane podatke. + Ne preporučuje se dodavanje prazne datoteke ključeva. + Uklanjanje nepovezanih podataka može smanjiti veličinu baze podataka, ali može i izbrisati podatke koji se koriste za KeePass dodatke. + Uklanja priložene datoteke u bazi podataka, koje nisu povezane s nekim unosom + Ukloni nepovezane podatke + Podaci + Svejedno ukloniti ove podatke\? + Podaci podataka prijave \ No newline at end of file From d9da32808803bfff582c8d13a40d48690e5208fa Mon Sep 17 00:00:00 2001 From: Zidan Pragata Date: Mon, 21 Sep 2020 07:49:00 +0000 Subject: [PATCH 25/53] Translated using Weblate (Indonesian) Currently translated at 44.3% (204 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/id/ --- app/src/main/res/values-id/strings.xml | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index e4dc0a5ba..27093aae5 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -145,7 +145,7 @@ Batalkan perubahan\? Mengesahkan Ikon Entri - Kotak Centang Berkas Kunci + Kotak Centang File Kunci Kotak Centang Kata Sandi Info File Tambahkan Item @@ -158,7 +158,7 @@ Beberapa perangkat tidak mengizinkan aplikasi menggunakan papan klip. Kesalahan Papan Klip Ijinkan - ASCII Diperpanjang + ASCII Diperluas Tanda Kurung Aplikasi Batas Waktu Aplikasi @@ -183,4 +183,26 @@ Buat basisdata baru Buka basisdata yang sudah ada Pasang browser web untuk membuka URL ini. + Penggunaan memori + Putaran transformasi + Algoritma enkripsi basisdata digunakan untuk semua data. + Root + Sembunyikan tautan yang rusak dalam daftar basisdata terbaru + Sembunyikan tautan basisdata yang rusak + Tampilkan lokasi dari basisdata terbaru + Tampilkan file sebelumnya + Melacak di mana file kunci disimpan + Ingat lokasi file kunci + Melacak di mana database disimpan + Ingat lokasi basisdata + Mode seleksi + Selesaikan masalah dengan menghasilkan UUID baru, lanjutkan\? + Basisdata berisi UUIDs duplikat. + Tergantung pada manajer file Anda, KeePassDX mungkin tidak diizinkan untuk menulis di penyimpanan Anda. + Terlindung dari penulisan + Perlindungan + Sedang bekerja… + Membuat basisdata baru… + Cari Domain Web dengan Kendala Subdomain + Pencarian Subdomain \ No newline at end of file From 4721ed7c15248d5e055b74bca18e74a9deaad99b Mon Sep 17 00:00:00 2001 From: ssantos Date: Tue, 22 Sep 2020 15:31:40 +0000 Subject: [PATCH 26/53] Translated using Weblate (Portuguese) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt/ --- app/src/main/res/values-pt/strings.xml | 475 ++++++++++++++++++++++++- 1 file changed, 474 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index a6b3daec9..ca5d1dca8 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1,2 +1,475 @@ - \ No newline at end of file + + Abrir a base de dados somente leitura por defeito + Apenas leitura + Pode ser modificado + Protegido contra escrita + Destacar elementos para aprender como a app funciona + Dicas educacionais + Não permitir chave mestra + Aviso: A área de transferência é compartilhada por todas as apps. Se dados sensíveis forem copiados, outros programas podem recuperá-lo. + Se a limpeza da área de transferência falhar, limpe seu histórico manualmente. + Cancelar + Colar + Mover + Copiar + Não pode mover um grupo para si mesmo. + Área de transferência limpa + Uma implementação do gestor de palavras-chave KeePass para Android + Pacote de ícones usado na app + Pacote de ícones + Tema usado na app + Tema da app + Argon2 + AES + ChaCha20 + Twofish + Rijndael (AES) + Contribuir + Descarregar + Lembre-se de manter o sua app atualizada, instalando novas versões. + Estamos trabalhando duro para lançar esse recurso o mais rápido possível. + Obrigado por sua contribuição. + está a incentivar os programadores a criar <strong>novos recursos</strong> e a <strong>corrigir erros </strong> de acordo com as suas observações. + <strong>Contribuindo </strong>, + Ao comprar a versão <strong>pro</strong>, + Esse recurso está <strong>em desenvolvimento</strong> e exige que sua <strong>contribuição</strong> para que esteja disponível em breve. + Para manter a nossa liberdade e estarmos sempre ativos, nós contamos com a sua <strong>contribuição.</strong> + Este <strong>estilo visual</strong> está disponível graças à sua generosidade. + Ao comprar a versão pro, terá acesso a este <strong>recurso visual</strong> e ajudará especialmente a <strong>realizar projetos comunitários.</strong> + Ao contrário de muitas apps de gestão de palavras-passe, esta app é <strong>livre de anúncios</strong>, é <strong>software livre copyleft</strong> e não coleta dados pessoais nos servidores dela, mesmo na sua versão gratuita. + Ajude a aumentar a estabilidade, segurança e na adição de mais recursos. + Participar + Escolha como entradas e grupos são ordenadas. + Ordenação de itens + Bloqueie a sua base de dados rapidamente, pode parametrizar a app para bloqueá-lo depois de um tempo, e quando o ecrã se apaga. + Bloqueie a base de dados + Campos copiados podem ser colados em qualquer lugar. +\n +\nUse a forma de preenchimento de formulário que preferir. + Copiar um campo + Entre com a palavra-passe e/ou com o caminho para o ficheiro-chave da base de dados. +\n +\nGuarde uma cópia do seu ficheiro do banco num lugar mais seguro depois de cada alteração. + Desbloqueie a sua base de dados + Registe um campo adicional, acrescente um valor e proteja-o opcionalmente. + Adicione campos customizados + Gere uma palavra-passe forte para associar a sua entrada, defina-a facilmente de acordo com os critérios do formulário e não se esqueça de torná-la segura. + Crie uma palavra-passe forte + Edite a sua entrada com campos personalizados. Os conjuntos de dados podem ser referenciados entre campos de entradas diferentes. + Modifique a entrada + Entre com título, nome de utilizador ou outros campos para recuperar facilmente as suas palavras-passe. + Pesquise suas entradas + Entradas ajudam a gerir as suas identidades digitais. +\n +\nGrupos (~pastas) organizam as suas entradas na sua base de dados. + Adicione itens ao seu banco + Abra a sua base de dados de mais cedo pelo seu navegador de ficheiros. + Abra uma base de dados existente + Crie o seu primeiro ficheiro de gestão de palavras-passe. + Crie um ficheiro de base de dados + Dicas educacionais redefinidas + Exibir todas as informações educacionais novamente + Reiniciar dicas educacionais + Magikeyboard + Teclado + Outros + App + Texto + Versão da base de dados + Descrição da base de dados + Nome da base de dados + Permite copiar a palavra-passe e campos protegidos à área de transferência + Confiança da área de transferência + Muda a fonte usada nos campos para melhor visibilidade dos caracteres + Fonte do Campo + Move grupos e entradas para o \"Cesto da reciclagem\" antes de apagar + Usar cesto da reciclagem + Criar base de dados + Defina uma chave mestre + Caminho + Nome do ficheiro + Não foi possível encontrar o hardware correspondente. + Não foi possível iniciar esse recurso. + Bloqueie a base de dados quando o ecrã estiver desligado + Bloqueio de ecrã + Bloquear + Notificações da área de transferência + Definir os caracteres permitodos para o gerador de palavra-passe + Caracteres da palavra-passe + Define o tamanho predefinido para palavras-passe geradas + Tamanho da palavra-chave gerada + Definir como serviço de preenchimento automático predefinido + Entrar com KeePassDX + Serviço de Preenchimento Automático do KeePassDX + Preenchimento automático + Geral + Palavra-passe encriptada armazenada + Versão %1$s + Continuar sem a chave de criptografia\? + Continuar sem proteção de desbloqueio por palavra-passe\? + Evite caracteres fora do formato de codificação do ficheiro do banco (todos os caracteres não reconhecidos são convertidos para a mesma letra). + Aviso + Maiúsculas + Versão da base de dados não suportada. + Sublinhado + Resultados da pesquisa + Título/descrição da entrada + Especiais + Último acesso + Última modificação + Data de criação + Nome de utilizador + Título + Ordenação natural + Cesto da reciclagem no fundo + Grupos primeiro + Ascendente + Ordenar + Pesquisar + Espaço + A gravar a base de dados… + Grau de paralelismo (ou seja, número de threads) usado pela função de derivação de chave. + Paralelismo + Quantidade de memória (em bytes) a ser usada pela função de derivação de chave. + Uso de memória + Rodadas adicionais de criptografia adicionam mais proteção contra ataques de força bruta, mas podem tornar o processo de carregar e gravar mais lentos. + Rodadas de criptografia + Para gerar uma chave para o algoritmo de encriptação, a chave mestre comprimida (SHA-256) é transformada usando uma função de derivação de chave (com um salt aleatório). + Algoritmo de encriptação usado para todos os dados. + Raiz + KeePassDX precisa de permissões de escrita para poder mudar qualquer coisa no seu banco. + Apenas leitura + Proteção + Em funcionamento… + A criar nova base de dados… + Abrir uma base de dados existente + Instale um navegador para abrir esta URL. + A pesquisa não obteve resultados + Nunca + Menos + Ir para o URL + Mostrar palavra-chave + Pesquisar + Abrir + Trancar base de dados + Ocultar palavra-chave + Editar + Doar + Eliminar + Preenchimento de formulário + Configurações do app + Configurações + Cópia de %1$s + Minúsculas + A carregar base de dados… + Tamanho do texto na lista de grupos + Tamanho da lista de grupos + Comprimento + O ficheiro-chave está vazio. + Não pôde reconhecer formato da base de dados. + Algoritmo errado. + Palavra-chave + Palavra-passe + Comprimento + Ficheiro-chave + Nome do grupo + Palavra-chave gerada + Confirmar a palavra-passe + Gerar palavra-chave + Gestor de ficheiros + Ficheiro não encontrado. Tente reabrí-lo de seu provedor de conteúdo. + Valor do campo + 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. + \"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. + As entradas expiradas não são mostradas + Completo! + Enviar %1$s + Configurar a gestão de palavra-passe única (HOTP / TOTP) para gerar um token solicitado para autenticação de dois fatores (2FA). + Configurar OTP + Envie um anexo à sua entrada para gravar dados externos importantes. + Adicionar anexo + Desbloqueio da base de dados por biométricos + Permite tocar no botão \"Abrir\" se nenhumas credenciais estiverem selecionadas + Remove anexos contidos na base de dados, mas não ligados a uma entrada + Remover dados não ligados + A compressão de dados reduz o tamanho da base de dados + Dados + O aparelho está a executar Android %1$s, mas precisa de %2$s ou posterior. + Mostrar notificações de área de transferência para copiar campos ao visualizar uma entrada + O escaneamento biométrico é suportado, mas não configurado. + Abrir automaticamente o escaneamento de biomẽtrico + O conteúdo do ficheiro-chave nunca deve ser alterado e, no melhor dos casos, deve conter dados gerados aleatoriamente. + Não é recomendável adicionar um ficheiro de chave vazio. + Remover esses dados mesmo assim\? + Remover dados não ligados pode diminuir o tamanho da sua base de dados, mas também pode apagar dados utilizados para os plugins do KeePass. + Adicionar o ficheiro mesmo assim\? + Enviar deste ficheiro substituirá o existente. + Uma base de dados KeePass deve conter apenas pequenos ficheiros utilitários (tais como ficheiros chave PGP). +\n +\nA sua base de dados pode se tornar muito grande e reduzir o desempenho com este envio. + Mantém o controle sobre onde os ficheiros de chaves são armazenados + Lembrar locais de ficheiros-chave + Mantém o controle sobre onde os bancos de dados são armazenados + Lembrar locais das bases de dados + Desbloqueio avançado + Não foi possível ler o banco de dados. + KeePassDX © %1$d Kunzisoft é <strong>open source</strong> e <strong>sem publicidade</strong>. +\nÉ fornecido como está, sob a <strong>licença GPLv3</strong>, sem qualquer garantia. + Informações sobre ficheiro + Informações sobre credenciais + Voltar automaticamente para o teclado anterior depois de executar a ação da tecla automática + Ação de tecla automática + Voltar automaticamente para o teclado anterior no ecrã de credenciais da base de dados + Ecrã de credenciais da base de dados + Mudar de teclado + Reinicie a app que contém o formulário para ativar o bloqueio. + Bloquear preenchimento automático + Lista de bloqueio que impede o preenchimento automático de domínios da web + Lista de bloqueio de domínio da web + Lista de bloqueio que impede o preenchimento automático de apps + Lista de bloqueio de aplicações + Filtro + Pesquisar domínios da web com restrições de subdomínios + Pesquisa de subdomínios + Este texto não corresponde ao item solicitado. + Adicionar item + Procurar automaticamente pela informação compartilhada para popular o teclado + Procurar informação compartilhada + Sugerir resultados de pesquisa automaticamente do domínio da web ou do ID da aplicação + Pesquisa automática + Mostrar o botão de bloqueio na interface do utilizador + Mostrar botão de bloqueio + Configurações de preenchimento automático + Acesso ao ficheiro revogado pelo gestor de ficheiros + Este rótulo já existe. + Incapaz de criar o ficheiro de base de dados. + Adicionar anexo + Adicionar campo + Gerador de palavras-passe + Descartar + Descartar alterações\? + Validação + Conceder acesso de gravação de ficheiro para gravar alterações na base de dados + Esconder ligações quebradas na lista de bases de dados recentes + Esconder ligações quebradas de bases de dados + Lembrar nomes recentes de ficheiros + Histórico de ficheiros recentes + 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 + Sobre + Mascarar palavras-passe (***) por predefinição + Esconder palavras-passe + Para <strong>manter a liberdade</strong>, <strong>solucionar bugs</strong>, <strong>adicionar funções</strong> e <strong>para sermos sempre ativoa</strong>, contamos com sua <strong>contribuição</strong>. + Página inicial + Comentários + Contribuição + Contato + Ocultar entradas expiradas + A finalizar… + Em progresso: %1$d%% + A inicializar… + Descarregar %1$s + Ação da tecla \"Go\" após pressionar a tecla \"Field\" + Ação de chave automática + Apagar histórico + Restaurar histórico + Anexos + Gravar a base de dados automaticamente depois de uma ação importante (somente no modo \"Modificável\") + Gravar a base de dados automaticamente + Grupo de cesto da reciclagem + Digite sua palavra-passe e depois clique no botão de \"Biométrico\". + A chave não foi propriamente inicializada. + Apagar permanentemente os nós selecionados\? + A executar o comando… + Esvaziar cesto da reciclagem + Gravar base de dados + Não foi possível gravar a base de dados. + Ligue a sua palavra-passe e o seu biométrico gravado para rapidamente desbloquear a sua base de dados. + Configurações do teclado do aparelho + Ative um teclado customizado, populando suas palavras-passe e todos os campos de identidade + Gzip + Nenhum + Compressão + Cor personalizada da base de dados + Nome de utilizador predefinido + Forçar mudança da chave-mestre na próxima vez (uma vez) + Forçar renovação na próxima vez + Forçar mudança de chave-mestre (em dias) + Forçar renovação + Recomendar mudança da chave mestre (em dias) + Renovação recomendada + Limitar o tamanho do histórico (em bytes) por entrada + Tamanho máximo + Limitar a quantidade de itens do histórico por entrada + Número máximo + Compressão dos dados + Usar desbloqueamento avançado para abrir a base de dados mais facilmente + Copiar campos de entrada usando a área de transferência do seu aparelho + Base de dados aberta + Ativar o serviço para preencher formulários em outras aplicações + Histórico + Consertar o problema gerando novas UUIDs para duplicatas para continuar\? + A base de dados contém UUIDs duplicados. + Configurações da chave-mestre + Configurações de segurança + A criar a base de dados… + %1$s com o mesmo UUID %2$s já existe. + Não foi possível ler as credenciais. + O token deve conter de %1$d até %2$d dígitos. + O período deve estar entre %1$d e %2$d segundos. + O contador deve estar entre %1$d e %2$d. + A chave secreta deve estar em formato Base32. + Mão pode copiar um grupo aqui. + Ao menos uma credencial deve ser definida. + Segredo OTP inválido. + OTP + Algorítimo + Dígitos + Contador + Período (segundos) + Segredo + Tipo do OTP + Configurar OTP + Histórico + Segurança + Chave Mestre + Desativar + Ativar + Apagar todas as chaves de criptografia relacionadas ao reconhecimento biométrico\? + Apague todas as chaves de encriptação relacionadas ao reconhecimento de biométrico + Apague chaves de encriptação + Pedir pelo biométrico automaticamente se a base de dados estiver configurada para usá-la + Permite que escaneie o seu biométrico para abrir a base de dados + Desbloqueio por biométrico + Desbloqueio avançado + Biométrico + Aparência + Ainda não há nenhuma palavra-chave armazenada nesta base de dados. + Problema do biométrico: %1$s + Biométrico não reconhecido + Não pôde ler a chave biométrica. Por favor, apague-a e repita o procedimento de reconhecimento biométrico. + Extrair credenciais da base de dados com biométrico + Abrir base de dados com biométrico + Aviso: apesar de usar o reconhecimento biométrico, ainda precisará de se lembrar da sua palavra-passe. + Gravar reconhecimento biométrico + Use o biométrico para armazenar esta palavra-chave + Escaneamento do biométrico para abrir a base de dados + Apagar o biométrico gravado + Definições da base de dados + Alterar chave mestre + Impossível de criar uma base de dados com essa palavra-passe e ficheiro-chave. + Fechar campos + Remover + Atualizar + Plano de fundo + Um gestor de ficheiros que aceita a ação intencional ACTION_CREATE_DOCUMENT e ACTION_OPEN_DOCUMENT é necessário para criar, abrir e gravar ficheiros de base de dados. + Mostrar o número de entradas dentro de um grupo + Mostrar número de entradas + Não pode copiar uma entrada aqui. + Não pode mover uma entrada para cá. + UUID + Remover campo + Comprimento da palavra-passe + Ícone da entrada + Repetir alternar a visibilidade da palavra-passe + Caixa de seleção keyfile + Caixa de seleção da palavra-passe + Adicionar grupo + Adicionar entrada + Inserir nó + Crianças do nó + Abrir ficheiro + Apaga a palavra-passe inserida após uma tentativa de conexão + Deletar palavra-passe + Mostrar campos de entrada no Magikeyboard quando estiver visualizando uma Entrada + Seleção de entrada + Cesto da reciclagem + Bloquear a base de dados quando a duração da área de transferência expirar ou quando a notificação for fechada depois de começar a utilizá-la + Limpar ao fechar + Tranca a base de dados quando o utilizador pressiona o botão voltar no ecrã inicial + Pressione \'Voltar\' para bloquear + Não mate a app… + Modo de seleção + Notas + Som ao pressionar teclas + Pressão de chaves vibratórias + Teclas + Tema do teclado + Aparência + Fecha a base de dados ao dispensar a notificação + Limpar ao fechar + %1$s + %1$s disponível no Magikeyboard + Entrada + Mostrar uma notificação quando uma entrada estiver disponível + Informação de notificação + Tempo limite para limpar a entrada do teclado + Tempo limite + Entrada + Configurações do Magikeyboard + Magikeyboard (KeePassDX) + Magikeyboard + Compilação %1$s + A criar a chave da base de dados… + Área de transferência + Mostrar nomes de utilizador em listas de entrada + Mostrar nomes de utilizador + Não foi possível carregar a chave. Tente descarregar o \"Uso de Memória\" do KDF. + Não foi possível abrir a sua base de dados. + Editar entrada + Altere o modo de abertura para a sessão. +\n +\n\"Somente leitura\" evita que faça alterações não intencionais na base de dados. +\n\"Gravação\" permite-o adicionar, apagar ou modificar todos os elementos. + Proteja seu banco de modificações + Falta de memória para carregar toda a base de dados. + Selecione um ficheiro chave. + Introduza um nome. + Certifique-se que o caminho é válido. + Não foi possível criar o ficheiro + Não pôde tratar esta URI no KeePassDX. + A cifra de fluxo Arcfour não é suportada. + Nome de utilizador + URL + Nome + Guardar + Palavra-passe + Não foi possível encontrar os dados da entrada. + Modificado + Ficheiro chave + Expira + Criado + Confirmar palavra-passe + Cancelar + Acedido + Dígitos + Utilizar como base de dados predefinida + A desencriptar o conteúdo da base de dados… + Base de dados + Selecione para copiar %1$s para a área de transferência + Duração do armazenamento na área de transferência (se for suportado pelo seu aparelho) + Tempo de espera da área de transferência + Não foi possível limpar a área de transferência + Alguns aparelhos não deixam as apps usarem a área de transferência. + Erro na área de transferência + Permitir + ASCII Estendido + Parênteses + App + Inatividade antes de bloquear a base de dados + Tempo de espera da app + Função de derivação de chave + Algoritmo de encriptação + Encriptação + Adicionar grupo + Adicionar entrada + Aceitar + \ No newline at end of file From ff2e47bf70b23d0d1746e9a329ef54afabfe7dbe Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 09:25:31 +0200 Subject: [PATCH 27/53] Change version to 2.8.6 --- CHANGELOG | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7dc383445..f518ddc8f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,4 @@ -KeePassDX(2.9) +KeePassDX(2.8.6) * Fix Autofill recognition #712 * Keep value after renaming custom field #709 * Prevent random binary bug #713 diff --git a/app/build.gradle b/app/build.gradle index e3c85eba2..4686df662 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { minSdkVersion 14 targetSdkVersion 29 versionCode = 42 - versionName = "2.9" + versionName = "2.8.6" multiDexEnabled true testApplicationId = "com.kunzisoft.keepass.tests" From 5d59419a0613eeeb9d35318e9973d0d96e071964 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 11:48:42 +0200 Subject: [PATCH 28/53] Fix autofill domain with Android 11 #702 --- .../com/kunzisoft/keepass/autofill/StructureParser.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt b/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt index 35bb74264..ef5e53186 100644 --- a/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt +++ b/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt @@ -68,9 +68,11 @@ internal class StructureParser(private val structure: AssistStructure) { private fun parseViewNode(node: AssistStructure.ViewNode): Boolean { // Get the domain of a web app - node.webDomain?.let { - result?.domain = it - Log.d(TAG, "Autofill domain: $it") + node.webDomain?.let { webDomain -> + if (webDomain.isNotEmpty()) { + result?.domain = webDomain + Log.d(TAG, "Autofill domain: $webDomain") + } } // Only parse visible nodes From 75e8feb9b831070c7c7b44bcfbd6ab302b8dad37 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 12:10:44 +0200 Subject: [PATCH 29/53] Change yes -> ok, no -> cancel --- .../keepass/activities/dialogs/DeleteNodesDialogFragment.kt | 4 ++-- .../keepass/activities/dialogs/FileTooBigDialogFragment.kt | 4 ++-- .../activities/dialogs/ReplaceAttachmentDialogFragment.kt | 4 ++-- .../kunzisoft/keepass/settings/NestedAppSettingsFragment.kt | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DeleteNodesDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DeleteNodesDialogFragment.kt index 4fbc0a18d..23b424576 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DeleteNodesDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DeleteNodesDialogFragment.kt @@ -69,10 +69,10 @@ class DeleteNodesDialogFragment : DialogFragment() { val builder = AlertDialog.Builder(activity) builder.setMessage(getString(R.string.warning_permanently_delete_nodes)) - builder.setPositiveButton(android.R.string.yes) { _, _ -> + builder.setPositiveButton(android.R.string.ok) { _, _ -> mListener?.permanentlyDeleteNodes(mNodesToDelete) } - builder.setNegativeButton(android.R.string.no) { _, _ -> dismiss() } + builder.setNegativeButton(android.R.string.cancel) { _, _ -> dismiss() } // Create the AlertDialog object and return it return builder.create() } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/FileTooBigDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/FileTooBigDialogFragment.kt index e35874b78..b76e0c109 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/FileTooBigDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/FileTooBigDialogFragment.kt @@ -60,12 +60,12 @@ class FileTooBigDialogFragment : DialogFragment() { append("\n\n") append(getString(R.string.warning_sure_add_file)) }) - builder.setPositiveButton(android.R.string.yes) { _, _ -> + builder.setPositiveButton(android.R.string.ok) { _, _ -> mActionChooseListener?.onValidateUploadFileTooBig( arguments?.getParcelable(KEY_FILE_URI), arguments?.getString(KEY_FILE_NAME)) } - builder.setNegativeButton(android.R.string.no) { _, _ -> + builder.setNegativeButton(android.R.string.cancel) { _, _ -> dismiss() } // Create the AlertDialog object and return it diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/ReplaceAttachmentDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/ReplaceAttachmentDialogFragment.kt index 1acefbc18..0c6625409 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/ReplaceAttachmentDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/ReplaceAttachmentDialogFragment.kt @@ -61,12 +61,12 @@ class ReplaceFileDialogFragment : DialogFragment() { append("\n\n") append(getString(R.string.warning_sure_add_file)) }) - builder.setPositiveButton(android.R.string.yes) { _, _ -> + builder.setPositiveButton(android.R.string.ok) { _, _ -> mActionChooseListener?.onValidateReplaceFile( arguments?.getParcelable(KEY_FILE_URI), arguments?.getParcelable(KEY_ENTRY_ATTACHMENT)) } - builder.setNegativeButton(android.R.string.no) { _, _ -> + builder.setNegativeButton(android.R.string.cancel) { _, _ -> dismiss() } // Create the AlertDialog object and return it diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/NestedAppSettingsFragment.kt b/app/src/main/java/com/kunzisoft/keepass/settings/NestedAppSettingsFragment.kt index dc8e465e7..eea2d31fb 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/NestedAppSettingsFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/NestedAppSettingsFragment.kt @@ -237,7 +237,7 @@ class NestedAppSettingsFragment : NestedSettingsFragment() { AlertDialog.Builder(context) .setMessage(resources.getString(R.string.biometric_delete_all_key_warning)) .setIcon(android.R.drawable.ic_dialog_alert) - .setPositiveButton(resources.getString(android.R.string.yes) + .setPositiveButton(resources.getString(android.R.string.ok) ) { _, _ -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { BiometricUnlockDatabaseHelper.deleteEntryKeyInKeystoreForBiometric( @@ -260,7 +260,7 @@ class NestedAppSettingsFragment : NestedSettingsFragment() { } CipherDatabaseAction.getInstance(context.applicationContext).deleteAll() } - .setNegativeButton(resources.getString(android.R.string.no)) + .setNegativeButton(resources.getString(android.R.string.cancel)) { _, _ -> }.show() } false From 5b4d8f971fec4bb225852f1aa3f867ebe43af592 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 12:12:27 +0200 Subject: [PATCH 30/53] Fix string --- app/src/main/res/values-fa/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index cde839e08..4c5abdb1d 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -4,7 +4,7 @@ تاریخچه رمز ورود را وارد کنید و سپس روی دکمه \"بیومتریک\" کلیک کنید. این پایگاه داده هنوز اطلاعات کاربری ذخیره نشده است. - خطای بیومتریک:٪ 1 $ s + خطای بیومتریک:%1$s بایومتریک قابل تشخیص نیست "کلید بیومتریک را نمی توان خواند. لطفاً آن را حذف کرده و روش شناخت بیومتریک را تکرار کنید." رمز رمزگذاری شده ذخیره شده است From 7044efa7c399afed10f563ffb817dfe1d9c36122 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 12:17:55 +0200 Subject: [PATCH 31/53] Upgrade compilation version --- app/build.gradle | 8 ++++---- build.gradle | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4686df662..18dad7548 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,13 +4,13 @@ apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 29 - buildToolsVersion '29.0.3' + compileSdkVersion 30 + buildToolsVersion '30.0.2' defaultConfig { applicationId "com.kunzisoft.keepass" minSdkVersion 14 - targetSdkVersion 29 + targetSdkVersion 30 versionCode = 42 versionName = "2.8.6" multiDexEnabled true @@ -98,7 +98,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.constraintlayout:constraintlayout:2.0.1' implementation 'androidx.documentfile:documentfile:1.0.1' implementation 'androidx.biometric:biometric:1.0.1' // Lifecycle - LiveData - ViewModel - Coroutines diff --git a/build.gradle b/build.gradle index a6ac28a9c..3690f924b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.4.0' + ext.kotlin_version = '1.4.10' repositories { jcenter() google() From caf93c019afb9558132e4c157e03904fc08cdab9 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 14:28:12 +0200 Subject: [PATCH 32/53] Add Looper in Handler --- .../java/com/kunzisoft/keepass/activities/EntryActivity.kt | 3 ++- .../com/kunzisoft/keepass/activities/EntryEditActivity.kt | 5 +++-- .../keepass/activities/FileDatabaseSelectActivity.kt | 3 ++- .../java/com/kunzisoft/keepass/activities/GroupActivity.kt | 3 ++- .../com/kunzisoft/keepass/activities/PasswordActivity.kt | 3 ++- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt index 2a4cd5caa..8849d26fe 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt @@ -25,6 +25,7 @@ import android.graphics.drawable.ColorDrawable import android.net.Uri import android.os.Bundle import android.os.Handler +import android.os.Looper import android.util.Log import android.view.Menu import android.view.MenuItem @@ -422,7 +423,7 @@ class EntryActivity : LockingActivity() { } // Show education views - Handler().post { performedNextEducation(EntryActivityEducation(this), menu) } + Handler(Looper.getMainLooper()).post { performedNextEducation(EntryActivityEducation(this), menu) } return true } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index 3cffa92bb..52701c6a1 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -26,6 +26,7 @@ import android.net.Uri import android.os.Build import android.os.Bundle import android.os.Handler +import android.os.Looper import android.util.Log import android.view.Menu import android.view.MenuItem @@ -526,7 +527,7 @@ class EntryEditActivity : LockingActivity(), override fun onPrepareOptionsMenu(menu: Menu?): Boolean { entryEditActivityEducation?.let { - Handler().post { performedNextEducation(it) } + Handler(Looper.getMainLooper()).post { performedNextEducation(it) } } return super.onPrepareOptionsMenu(menu) } @@ -663,7 +664,7 @@ class EntryEditActivity : LockingActivity(), } entryEditActivityEducation?.let { - Handler().post { performedNextEducation(it) } + Handler(Looper.getMainLooper()).post { performedNextEducation(it) } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt index efe87c9b6..a3e8d8e8e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt @@ -28,6 +28,7 @@ import android.net.Uri import android.os.Build import android.os.Bundle import android.os.Handler +import android.os.Looper import android.util.Log import android.view.Menu import android.view.MenuItem @@ -412,7 +413,7 @@ class FileDatabaseSelectActivity : SpecialModeActivity(), MenuUtil.defaultMenuInflater(menuInflater, menu) } - Handler().post { performedNextEducation(FileDatabaseSelectActivityEducation(this)) } + Handler(Looper.getMainLooper()).post { performedNextEducation(FileDatabaseSelectActivityEducation(this)) } return true } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt index 27f0be7e1..1381e6bfa 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -28,6 +28,7 @@ import android.graphics.Color import android.os.Build import android.os.Bundle import android.os.Handler +import android.os.Looper import android.util.Log import android.view.Menu import android.view.MenuItem @@ -776,7 +777,7 @@ class GroupActivity : LockingActivity(), super.onCreateOptionsMenu(menu) // Launch education screen - Handler().post { performedNextEducation(GroupActivityEducation(this), menu) } + Handler(Looper.getMainLooper()).post { performedNextEducation(GroupActivityEducation(this), menu) } return true } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt index ec1ced859..73753a221 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt @@ -27,6 +27,7 @@ import android.net.Uri import android.os.Build import android.os.Bundle import android.os.Handler +import android.os.Looper import android.text.Editable import android.text.TextWatcher import android.util.Log @@ -663,7 +664,7 @@ open class PasswordActivity : SpecialModeActivity() { if (!performedEductionInProgress) { performedEductionInProgress = true // Show education views - Handler().post { performedNextEducation(PasswordActivityEducation(this), menu) } + Handler(Looper.getMainLooper()).post { performedNextEducation(PasswordActivityEducation(this), menu) } } } From d6acbc2fb19126232df564ea94d027dcf944e19c Mon Sep 17 00:00:00 2001 From: zeritti Date: Thu, 24 Sep 2020 14:59:09 +0000 Subject: [PATCH 33/53] Translated using Weblate (Czech) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/ --- app/src/main/res/values-cs/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index fe8e45406..345c5afa3 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -25,7 +25,7 @@ Přidat skupinu Šifrovací algoritmus Časový limit aplikace - Doba nečinnosti než se aplikace zamkne + Doba nečinnosti, po které se aplikace zamkne Aplikace Nastavení aplikace Závorky @@ -37,7 +37,7 @@ Časový limit schránky Doba uchování ve schránce Vyberte zkopírovat %1$s do schránky - Vytváření klíče databáze… + Načítám klíč databáze… Databáze Rozšifrovávání obsahu databáze… Použít jako výchozí databázi @@ -354,7 +354,7 @@ Generátor hesel Délka hesla Přidej pole - Odebrat pole + Odeber pole UUID Sem záznam přesunout nelze. Sem záznam zkopírovat nelze. From 80abaf70f28d52deac5a99d22ee3b260b5c2362a Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 24 Sep 2020 14:58:38 +0000 Subject: [PATCH 34/53] Translated using Weblate (Czech) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/ --- app/src/main/res/values-cs/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 345c5afa3..8978a840e 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -341,11 +341,11 @@ Při prohlížení záznamu ukázat na Magikeyboard pole položek Smazat heslo Smaže heslo zadané po pokusu o připojení k databázi - Otevři soubor + Otevřít soubor Potomci uzlu Přidej uzel Přidej záznam - Přidej skupinu + Přidat skupinu Informace o souboru Checkbox hesla Checkbox souboru s klíčem From 4f07bac9ec649e5af3f6e94819d5a53b566a2faa Mon Sep 17 00:00:00 2001 From: zeritti Date: Thu, 24 Sep 2020 14:59:38 +0000 Subject: [PATCH 35/53] Translated using Weblate (Czech) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/ --- app/src/main/res/values-cs/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 8978a840e..7b9ed0aed 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -39,7 +39,7 @@ Vyberte zkopírovat %1$s do schránky Načítám klíč databáze… Databáze - Rozšifrovávání obsahu databáze… + Dešifruji obsah databáze… Použít jako výchozí databázi Číslice Otevřít existující databázi From 0ee72db2e987b5320bec04b6fe109589ff799711 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 24 Sep 2020 14:59:25 +0000 Subject: [PATCH 36/53] Translated using Weblate (Czech) Currently translated at 100.0% (460 of 460 strings) Translation: KeePass DX/Strings Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/ --- app/src/main/res/values-cs/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 7b9ed0aed..696022cf7 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -37,7 +37,7 @@ Časový limit schránky Doba uchování ve schránce Vyberte zkopírovat %1$s do schránky - Načítám klíč databáze… + Načítání klíče databáze… Databáze Dešifruji obsah databáze… Použít jako výchozí databázi From b87448410102c84c5422d5b2cf17e7352ba77438 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 17:51:05 +0200 Subject: [PATCH 37/53] Refactor binary protection --- .../keepass/activities/EntryEditActivity.kt | 2 +- .../keepass/database/element/Database.kt | 6 +++--- .../element/database/BinaryAttachment.kt | 17 ++++++++--------- .../database/element/database/DatabaseKDBX.kt | 4 ++-- .../database/file/input/DatabaseInputKDBX.kt | 10 +++++----- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index 52701c6a1..c444f7ecf 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -418,7 +418,7 @@ class EntryEditActivity : LockingActivity(), private fun buildNewAttachment(attachmentToUploadUri: Uri, fileName: String) { val compression = mDatabase?.compressionForNewEntry() ?: false - mDatabase?.buildNewBinary(UriUtil.getBinaryDir(this), false, compression)?.let { binaryAttachment -> + mDatabase?.buildNewBinary(UriUtil.getBinaryDir(this), compression)?.let { binaryAttachment -> val entryAttachment = Attachment(fileName, binaryAttachment) // Ask to replace the current attachment if ((mDatabase?.allowMultipleAttachments != true && entryEditFragment?.containsAttachment() == true) || diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt index 059d14049..93350b2d5 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt @@ -453,10 +453,10 @@ class Database { } fun buildNewBinary(cacheDirectory: File, - enableProtection: Boolean = false, - compressed: Boolean = false): BinaryAttachment? { + compressed: Boolean = false, + protected: Boolean = false): BinaryAttachment? { return mDatabaseKDB?.buildNewBinary(cacheDirectory) - ?: mDatabaseKDBX?.buildNewBinary(cacheDirectory, enableProtection, compressed) + ?: mDatabaseKDBX?.buildNewBinary(cacheDirectory, compressed, protected) } fun removeAttachmentIfNotUsed(attachment: Attachment) { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryAttachment.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryAttachment.kt index 1eab8f95a..623d64412 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryAttachment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/database/BinaryAttachment.kt @@ -28,12 +28,12 @@ import java.util.zip.GZIPOutputStream class BinaryAttachment : Parcelable { + private var dataFile: File? = null var isCompressed: Boolean = false private set var isProtected: Boolean = false private set var isCorrupted: Boolean = false - private var dataFile: File? = null fun length(): Long { return dataFile?.length() ?: 0 @@ -44,20 +44,19 @@ class BinaryAttachment : Parcelable { */ constructor() - constructor(dataFile: File, enableProtection: Boolean = false, compressed: Boolean = false) { - this.isCompressed = compressed - this.isProtected = enableProtection + constructor(dataFile: File, compressed: Boolean = false, protected: Boolean = false) { this.dataFile = dataFile + this.isCompressed = compressed + this.isProtected = protected } private constructor(parcel: Parcel) { - val compressedByte = parcel.readByte().toInt() - isCompressed = compressedByte != 0 - isProtected = parcel.readByte().toInt() != 0 - isCorrupted = parcel.readByte().toInt() != 0 parcel.readString()?.let { dataFile = File(it) } + isCompressed = parcel.readByte().toInt() != 0 + isProtected = parcel.readByte().toInt() != 0 + isCorrupted = parcel.readByte().toInt() != 0 } @Throws(IOException::class) @@ -183,10 +182,10 @@ class BinaryAttachment : Parcelable { } override fun writeToParcel(dest: Parcel, flags: Int) { + dest.writeString(dataFile?.absolutePath) dest.writeByte((if (isCompressed) 1 else 0).toByte()) dest.writeByte((if (isProtected) 1 else 0).toByte()) dest.writeByte((if (isCorrupted) 1 else 0).toByte()) - dest.writeString(dataFile?.absolutePath) } companion object { 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 b18ae74a9..8c117931b 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 @@ -558,13 +558,13 @@ class DatabaseKDBX : DatabaseVersioned { } fun buildNewBinary(cacheDirectory: File, - protection: Boolean, compression: Boolean, + protection: Boolean, binaryPoolId: Int? = null): BinaryAttachment { // New file with current time val fileInCache = File(cacheDirectory, binaryIncrement.toString()) binaryIncrement++ - val binaryAttachment = BinaryAttachment(fileInCache, protection, compression) + val binaryAttachment = BinaryAttachment(fileInCache, compression, protection) // add attachment to pool binaryPool.put(binaryPoolId, binaryAttachment) return binaryAttachment 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 f695d4186..00e5635bf 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 @@ -253,10 +253,10 @@ class DatabaseInputKDBX(cacheDirectory: File, } DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.Binary -> { // Read in a file - val protectedFlag = dataInputStream.readBytes(1)[0].toInt() != 0 + val protectedFlag = dataInputStream.readBytes(1)[0] == DatabaseHeaderKDBX.KdbxBinaryFlags.Protected val byteLength = size - 1 // No compression at this level - val protectedBinary = mDatabase.buildNewBinary(cacheDirectory, protectedFlag, false) + val protectedBinary = mDatabase.buildNewBinary(cacheDirectory, false, protectedFlag) protectedBinary.getOutputDataStream().use { outputStream -> dataInputStream.readBytes(byteLength, DatabaseKDBX.BUFFER_SIZE_BYTES) { buffer -> outputStream.write(buffer) @@ -958,7 +958,7 @@ class DatabaseInputKDBX(cacheDirectory: File, // Create empty binary if not retrieved in pool if (binaryRetrieve == null) { binaryRetrieve = mDatabase.buildNewBinary(cacheDirectory, - protection = false, compression = false, binaryPoolId = id) + compression = false, protection = true, binaryPoolId = id) } return binaryRetrieve } @@ -975,7 +975,7 @@ class DatabaseInputKDBX(cacheDirectory: File, @Throws(IOException::class, XmlPullParserException::class) private fun createBinary(binaryId: Int?, xpp: XmlPullParser): BinaryAttachment? { var compressed = false - var protected = false + var protected = true if (xpp.attributeCount > 0) { val compress = xpp.getAttributeValue(null, DatabaseKDBXXML.AttrCompressed) @@ -994,7 +994,7 @@ class DatabaseInputKDBX(cacheDirectory: File, return null // Build the new binary and compress - val binaryAttachment = mDatabase.buildNewBinary(cacheDirectory, protected, compressed, binaryId) + val binaryAttachment = mDatabase.buildNewBinary(cacheDirectory, compressed, protected, binaryId) try { binaryAttachment.getOutputDataStream().use { outputStream -> outputStream.write(Base64.decode(base64, BASE_64_FLAG)) From f7d0b64dead093eb33bd8c28d95cdc710f2ddbe4 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 18:07:58 +0200 Subject: [PATCH 38/53] Small changes --- .../kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt | 2 +- .../database/file/output/DatabaseInnerHeaderOutputKDBX.kt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) 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 00e5635bf..e9e3fa0b8 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 @@ -253,7 +253,7 @@ class DatabaseInputKDBX(cacheDirectory: File, } DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.Binary -> { // Read in a file - val protectedFlag = dataInputStream.readBytes(1)[0] == DatabaseHeaderKDBX.KdbxBinaryFlags.Protected + val protectedFlag = dataInputStream.read().toByte() == DatabaseHeaderKDBX.KdbxBinaryFlags.Protected val byteLength = size - 1 // No compression at this level val protectedBinary = mDatabase.buildNewBinary(cacheDirectory, false, protectedFlag) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseInnerHeaderOutputKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseInnerHeaderOutputKDBX.kt index a7cdf32e3..87f29d7be 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseInnerHeaderOutputKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseInnerHeaderOutputKDBX.kt @@ -61,7 +61,6 @@ class DatabaseInnerHeaderOutputKDBX(private val database: DatabaseKDBX, dataOutputStream.writeInt(protectedBinary.length().toInt() + 1) dataOutputStream.write(flag.toInt()) - // if was compressed in cache, uncompress it protectedBinary.getInputDataStream().use { inputStream -> inputStream.readBytes(BUFFER_SIZE_BYTES) { buffer -> dataOutputStream.write(buffer) From 27e60edaf4b391cc2ae00a2ced436a14d495a6c5 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 18:43:43 +0200 Subject: [PATCH 39/53] Fix check create button visibility --- .../activities/FileDatabaseSelectActivity.kt | 1 - .../keepass/utils/ExternalFileManager.kt | 17 ++++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt index a3e8d8e8e..36fa0f765 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt @@ -210,7 +210,6 @@ class FileDatabaseSelectActivity : SpecialModeActivity(), /** * Create a new file by calling the content provider */ - @SuppressLint("InlinedApi") private fun createNewFile() { createDocument(this, getString(R.string.database_file_name_default) + getString(R.string.database_file_extension_default), "application/x-keepass") diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/ExternalFileManager.kt b/app/src/main/java/com/kunzisoft/keepass/utils/ExternalFileManager.kt index b0444dde5..c42d25127 100644 --- a/app/src/main/java/com/kunzisoft/keepass/utils/ExternalFileManager.kt +++ b/app/src/main/java/com/kunzisoft/keepass/utils/ExternalFileManager.kt @@ -19,6 +19,7 @@ */ package com.kunzisoft.keepass.utils +import android.annotation.SuppressLint import android.app.Activity import android.content.Intent import android.content.pm.PackageManager @@ -37,12 +38,18 @@ fun getUnusedCreateFileRequestCode(): Int { return newCreateFileRequestCode } +@SuppressLint("InlinedApi") fun allowCreateDocumentByStorageAccessFramework(packageManager: PackageManager): Boolean { - - return Intent(Intent.ACTION_CREATE_DOCUMENT).apply { - addCategory(Intent.CATEGORY_OPENABLE) - type = "application/x-keepass" - }.resolveActivity(packageManager) != null + return when { + // To check if a custom file manager can manage the ACTION_CREATE_DOCUMENT + Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT -> { + packageManager.queryIntentActivities(Intent(Intent.ACTION_CREATE_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "application/x-keepass" + }, PackageManager.MATCH_DEFAULT_ONLY).isNotEmpty() + } + else -> true + } } fun createDocument(activity: FragmentActivity, From eabbc6f037bae6b3791cf471df7bc25a21e83dd3 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Sep 2020 19:01:21 +0200 Subject: [PATCH 40/53] Refactor binary write in header --- .../file/output/DatabaseInnerHeaderOutputKDBX.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseInnerHeaderOutputKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseInnerHeaderOutputKDBX.kt index 87f29d7be..a3c627db5 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseInnerHeaderOutputKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseInnerHeaderOutputKDBX.kt @@ -49,16 +49,17 @@ class DatabaseInnerHeaderOutputKDBX(private val database: DatabaseKDBX, database.binaryPool.doForEachOrderedBinary { _, keyBinary -> val protectedBinary = keyBinary.binary - var flag = DatabaseHeaderKDBX.KdbxBinaryFlags.None - if (protectedBinary.isProtected) { - flag = flag or DatabaseHeaderKDBX.KdbxBinaryFlags.Protected - } - // Force decompression to add binary in header protectedBinary.decompress() - + // Write type binary dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.Binary.toInt()) + // Write size dataOutputStream.writeInt(protectedBinary.length().toInt() + 1) + // Write protected flag + var flag = DatabaseHeaderKDBX.KdbxBinaryFlags.None + if (protectedBinary.isProtected) { + flag = flag or DatabaseHeaderKDBX.KdbxBinaryFlags.Protected + } dataOutputStream.write(flag.toInt()) protectedBinary.getInputDataStream().use { inputStream -> From 02403cf566fe94802ec2e90d88da76213be6da16 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Fri, 25 Sep 2020 16:28:48 +0200 Subject: [PATCH 41/53] Fix dialog background #717 --- CHANGELOG | 1 + app/src/main/res/values/style_black.xml | 1 - app/src/main/res/values/style_dark.xml | 1 - app/src/main/res/values/style_purple.xml | 1 - app/src/main/res/values/styles.xml | 2 -- fastlane/metadata/android/en-US/changelogs/42.txt | 2 ++ fastlane/metadata/android/fr-FR/changelogs/42.txt | 2 ++ 7 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f518ddc8f..b166d0f84 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ KeePassDX(2.8.6) * Fix Autofill recognition #712 * Keep value after renaming custom field #709 * Prevent random binary bug #713 + * Fix dialog background #717 KeePassDX(2.8.5) * Fix Base 64 #708 diff --git a/app/src/main/res/values/style_black.xml b/app/src/main/res/values/style_black.xml index 000568676..af1813020 100644 --- a/app/src/main/res/values/style_black.xml +++ b/app/src/main/res/values/style_black.xml @@ -64,7 +64,6 @@ diff --git a/app/src/main/res/values/style_dark.xml b/app/src/main/res/values/style_dark.xml index ee1a94e69..55c1b1f2c 100644 --- a/app/src/main/res/values/style_dark.xml +++ b/app/src/main/res/values/style_dark.xml @@ -61,7 +61,6 @@ diff --git a/app/src/main/res/values/style_purple.xml b/app/src/main/res/values/style_purple.xml index 444108785..288c548da 100644 --- a/app/src/main/res/values/style_purple.xml +++ b/app/src/main/res/values/style_purple.xml @@ -69,7 +69,6 @@ diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9361f7392..76406e20a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -257,13 +257,11 @@