From 0cec6945af19ecb206b9e999a95b8adb0a348c80 Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 25 Feb 2018 00:32:31 +0100 Subject: [PATCH 001/248] Disable AAPT2 due to a bug See https://github.com/cketti/ckChangeLog/issues/48 --- gradle.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gradle.properties b/gradle.properties index 5cf256ac90..466c5b5521 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,3 +9,5 @@ junitVersion=4.12 mockitoVersion=1.10.19 okioVersion=1.11.0 truthVersion=0.35 + +android.enableAapt2=false -- GitLab From 2994da93faaec7261f6b748abeaaf1c8a2e0c033 Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 25 Feb 2018 00:17:15 +0100 Subject: [PATCH 002/248] Version 5.500 --- k9mail/build.gradle | 2 +- k9mail/src/main/res/xml/changelog_master.xml | 23 +++++++++----------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/k9mail/build.gradle b/k9mail/build.gradle index 479d164154..6b285a81a8 100644 --- a/k9mail/build.gradle +++ b/k9mail/build.gradle @@ -54,7 +54,7 @@ android { testApplicationId "com.fsck.k9.tests" versionCode 25000 - versionName '5.500-SNAPSHOT' + versionName '5.500' minSdkVersion 15 targetSdkVersion 22 diff --git a/k9mail/src/main/res/xml/changelog_master.xml b/k9mail/src/main/res/xml/changelog_master.xml index 226f434b32..82d4655286 100644 --- a/k9mail/src/main/res/xml/changelog_master.xml +++ b/k9mail/src/main/res/xml/changelog_master.xml @@ -8,22 +8,19 @@ They are automatically updated with "ant bump-version". --> - - Import/Export maintain account ordering - Improvements to HTML sanitisation mechanism - IMAP message sync improvements - Further improvements to encryption UX - Forward-as-attachment feature - Adding option for limiting push connections to 5 - Altered identity prioritisation + + Further improvements to encryption user experience + Added ability to forward a message as attachment + Improved the way we display text/plain messages Improved rendering of RTL text + Import/Export maintain account ordering + Altered identity prioritization + Added option for limiting push connections to 5 Added SMTP hostname privacy option - Added ability to show email address during composition - Removed IMAP namespace prefix from folder names - Fixed Mailsploit bug - Fixed bug when adding recipients during composition + Fixed bug that caused draft messages to be lost Fixed bug relating to encrypted attached emails - Fixed various typos + Updated translations + More bug fixes Fixed bug that caused 'Quiet Time' to behave erratically -- GitLab From 1618b6fc8af859eb92b81922bfcaa785d77b24d2 Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 25 Feb 2018 18:44:11 +0100 Subject: [PATCH 003/248] Update Proguard config to not strip important crypto interface classes Fixes #3215 --- k9mail/proguard-rules.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/k9mail/proguard-rules.pro b/k9mail/proguard-rules.pro index 3cbaf1676c..18eb79bb16 100644 --- a/k9mail/proguard-rules.pro +++ b/k9mail/proguard-rules.pro @@ -21,3 +21,5 @@ -dontnote com.fsck.k9.PRNGFixes -dontnote com.fsck.k9.ui.messageview.** -dontnote com.fsck.k9.view.** + +-keep public class org.openintents.openpgp.** -- GitLab From e1788984acef42fe833854f2d19dbb175b20394a Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 25 Feb 2018 18:47:42 +0100 Subject: [PATCH 004/248] Version 5.501 --- k9mail/build.gradle | 4 ++-- k9mail/src/main/res/xml/changelog_master.xml | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/k9mail/build.gradle b/k9mail/build.gradle index 6b285a81a8..dfa6caa1c6 100644 --- a/k9mail/build.gradle +++ b/k9mail/build.gradle @@ -53,8 +53,8 @@ android { applicationId "com.fsck.k9" testApplicationId "com.fsck.k9.tests" - versionCode 25000 - versionName '5.500' + versionCode 25010 + versionName '5.501' minSdkVersion 15 targetSdkVersion 22 diff --git a/k9mail/src/main/res/xml/changelog_master.xml b/k9mail/src/main/res/xml/changelog_master.xml index 82d4655286..96fe54b1d3 100644 --- a/k9mail/src/main/res/xml/changelog_master.xml +++ b/k9mail/src/main/res/xml/changelog_master.xml @@ -8,6 +8,9 @@ They are automatically updated with "ant bump-version". --> + + Fixed bug that lead to important files being stripped from the APK + Further improvements to encryption user experience Added ability to forward a message as attachment -- GitLab From 67e113883724776437fb90939efc1937a7818ebd Mon Sep 17 00:00:00 2001 From: cketti Date: Sat, 10 Mar 2018 19:12:30 +0100 Subject: [PATCH 005/248] Update translations --- k9mail/src/main/res/values-bg/strings.xml | 37 +++++++ k9mail/src/main/res/values-br/strings.xml | 2 + k9mail/src/main/res/values-ca/strings.xml | 7 ++ k9mail/src/main/res/values-cs/strings.xml | 104 +++++++++++++----- k9mail/src/main/res/values-cy/strings.xml | 2 + k9mail/src/main/res/values-da/strings.xml | 2 + k9mail/src/main/res/values-de/strings.xml | 7 ++ k9mail/src/main/res/values-el/strings.xml | 2 + k9mail/src/main/res/values-eo/strings.xml | 7 ++ k9mail/src/main/res/values-es/strings.xml | 2 + k9mail/src/main/res/values-eu/strings.xml | 2 + k9mail/src/main/res/values-fi/strings.xml | 6 + k9mail/src/main/res/values-fr/strings.xml | 7 ++ k9mail/src/main/res/values-gd/strings.xml | 2 + k9mail/src/main/res/values-hu/strings.xml | 1 + k9mail/src/main/res/values-in/strings.xml | 35 +++++- k9mail/src/main/res/values-is/strings.xml | 2 + k9mail/src/main/res/values-it/strings.xml | 7 ++ k9mail/src/main/res/values-ja/strings.xml | 7 ++ k9mail/src/main/res/values-lv/strings.xml | 2 + k9mail/src/main/res/values-nb/strings.xml | 7 ++ k9mail/src/main/res/values-nl/strings.xml | 49 +++++---- k9mail/src/main/res/values-pl/strings.xml | 2 + k9mail/src/main/res/values-pt-rBR/strings.xml | 2 + k9mail/src/main/res/values-pt-rPT/strings.xml | 2 + k9mail/src/main/res/values-ro/strings.xml | 2 + k9mail/src/main/res/values-ru/strings.xml | 6 + k9mail/src/main/res/values-sk/strings.xml | 2 + k9mail/src/main/res/values-sl/strings.xml | 2 + k9mail/src/main/res/values-sq/strings.xml | 6 + k9mail/src/main/res/values-sr/strings.xml | 2 + k9mail/src/main/res/values-sv/strings.xml | 2 + k9mail/src/main/res/values-tr/strings.xml | 7 ++ k9mail/src/main/res/values-uk/strings.xml | 2 + k9mail/src/main/res/values-zh-rCN/strings.xml | 2 + 35 files changed, 285 insertions(+), 53 deletions(-) diff --git a/k9mail/src/main/res/values-bg/strings.xml b/k9mail/src/main/res/values-bg/strings.xml index 02c9f93541..2e5806fcd0 100644 --- a/k9mail/src/main/res/values-bg/strings.xml +++ b/k9mail/src/main/res/values-bg/strings.xml @@ -225,6 +225,7 @@ K-9 Mail е мощен, безплатен имейл клиент за Андр За този контакт не може да бъде намерен email адрес. Някой от прикачените файлове не могат да бъдат препратени, тъй като не са свалени. Съобщението не може да бъде препратено, защото не всички прикачени файлове са свалени + Включване на цитирани съобщения Премахни цитираният текст Редактирай цитираният текст От: %s <%s> @@ -986,7 +987,37 @@ K-9 Mail е мощен, безплатен имейл клиент за Андр \"от край\" - \"до край\" подписа съдържа грешка трябва да се свали съобщението за да се обработи подписа съдържа наподдържан \"от край\" - \"до край\" подпис + Съобщението е криптирано, но в неподдържан формат. + Съобщението е криптирано, но декриптирането е прекратено. + Подписания от край-до-край некриптиран текст + с потвърден подпис + Подписан некриптиран текст + но ключът от край-до-край несъвпада с този на изпращача + но ключът от край-до-край е изтекъл + но ключът от край-до-край е оттеглен + но ключът от край-до-край не се счита за сигурен + от непознат ключ край-до-край + Криптиран + но възникна грешка при декриптирането + тряба да се изтегли цялото съобщение за декриптиране + но няма настроена крипто приложение + но е в неподържан формат + но декриптирането е прекратено + Криптирано + но не е от край-до-край + Криптирано от край-до-край + от потвърден изпащач + Криптирано + от непознат ключ край-до-край + но ключът от край-до-край не съвпада с този на изпращача + но ключът от край-до-край е изтекъл + но ключът от край-до-край е оттеглен + но ключът от край-до-край не се счита за сигурен + но информацията от край-до-край има грешки + но криптирането не се счита за сигурно ОК + Преглед на подписалия се + Преглед на изпращача Информация Отключване Тази част не криптирана и може да е несигурна. @@ -1025,9 +1056,15 @@ K-9 Mail е мощен, безплатен имейл клиент за Андр Включване на криптирането Изключване на криптирането Криптирането на съобщения подсигурява, че те могат да бъдат прочетени единствено от получателя им и никой друг. + Криптирането ще се покаже единствено, когато е поддържано от всички получатели и ако те са Ви изпратили имейл преди. Промянана на криптирането след натискане на тази икона. Ясно Назад Изключване на криптирането OpenPGP криптиране + Взаимен режим на Autocrypt + Взаимен режим на Autocrypt + Обикновено съобщенията ще бъдат криптирано ако това е изрично зададено или ако се отговаря на криптирано съобщение. + Ако както изпращача така и получателите активират взаимния режим, криптирането ще бъде активирано по подразбиране. + Може да натиснете тук, за да научете повече. diff --git a/k9mail/src/main/res/values-br/strings.xml b/k9mail/src/main/res/values-br/strings.xml index e46a793143..055923bbc9 100644 --- a/k9mail/src/main/res/values-br/strings.xml +++ b/k9mail/src/main/res/values-br/strings.xml @@ -984,6 +984,8 @@ Danevellit beugoù, kenlabourit war keweriusterioù nevez ha savit goulennoù wa Gallout a ra ar sinadur bezañ diskouezet evel ur genstagadenn ’signature.asc’ e arvalioù ’zo. Ar c’hemennadennoù enrineget a endalc’h atav ur sinadur. Testenn blaen + Enrineget eo ar gemennadenn met en ur mentrezh anskor emañ. + Enrineget eo ar gemennadenn met nullet eo bet an ezrinegañ. OK Munudoù Dibrennañ diff --git a/k9mail/src/main/res/values-ca/strings.xml b/k9mail/src/main/res/values-ca/strings.xml index b56e4876d7..bb555c4f38 100644 --- a/k9mail/src/main/res/values-ca/strings.xml +++ b/k9mail/src/main/res/values-ca/strings.xml @@ -988,6 +988,8 @@ Si us plau, envieu informes d\'errors, contribuïu-hi amb noves millores i feu p La signatura d\'extrem a extrem contenia un error. cal baixar completament el missatge per processar-ne la signatura conté una signatura d\'extrem a extrem no admesa + El missatge està encriptat, però en un format no admès. + El missatge està encriptat, però se n\'ha cancel·lat la desencriptació. Text pla signat d\'extrem a extrem des d\'un signant verificat Text pla signat @@ -1061,4 +1063,9 @@ Si us plau, envieu informes d\'errors, contribuïu-hi amb noves millores i feu p Enrere Inhabilita l\'encriptació Encriptació d\'OpenPGP + Mode mutu d\'autoencriptació + Mode mutu d\'autoencriptació + Els missatges s\'encriptaran normalment per selecció o en respondre un missatge encriptat. + Si tant el remitent com el destinatari habiliten el mode mutu, l\'encriptació s\'habilitarà per defecte. + Podeu clicar aquí per saber-ne més. diff --git a/k9mail/src/main/res/values-cs/strings.xml b/k9mail/src/main/res/values-cs/strings.xml index b3d37fcb50..2dc79c32f5 100644 --- a/k9mail/src/main/res/values-cs/strings.xml +++ b/k9mail/src/main/res/values-cs/strings.xml @@ -18,7 +18,7 @@

K-9 Mail je výkonný emailový klient pro Android.

-Jeho vylepšené funkce obsahují: +Vylepšené funkce zahrnují:

  • Push mail při použití IMAP IDLE
  • @@ -28,13 +28,13 @@ Jeho vylepšené funkce obsahují:
  • Skryté kopie sobě
  • Odebírané složky
  • Synchronizace všech složek
  • -
  • Konfigurace zpáteční adresy
  • +
  • Nastavení zpáteční adresy
  • Klávesové zkratky
  • Lepší podpora IMAP
  • -
  • Ukládání příloh na SD
  • +
  • Ukládání příloh na SD kartu
  • Vysypání koše
  • Třídění zpráv
  • -
  • … a další
  • +
  • …a další

K-9 nepodporuje většinu bezplatných účtů Hotmail a jako mnoho poštovních klientů vykazuje zvláštnosti při komunikaci s Microsoft Exchange. @@ -78,8 +78,9 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Zpracování %s:%s%s \u0020%d/%d Příští dotaz %s - Synchronizace vypnuta – žádná síť - Synchronizace vypnuta – žádná aktivita na pozadí + Synchronizace vypnutá – žádná síť + Synchronizace vypnutá – žádná aktivita na pozadí + Dotazování a odesílání vypnuto Synchronizace blokována Synchronizace vypnuta %d vybraných @@ -90,7 +91,7 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Zrušit Odeslat Odeslat znovu - Předmět je prázdný, dotykem přesto odeslat + Předmět není vyplněn, dotykem pokud přesto odeslat Vybrat Zrušit výběr Odpovědět @@ -154,7 +155,7 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Načítání zpráv\u2026 Chyba spojení Zpráva nenalezena - Chyba načtení zprávy + Chyba při načítání zprávy Opakujte načtení více zpráv Načti až o %d více @@ -162,8 +163,8 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte MB KB B - Účet \"%s\" byl stlačen z %s na %s - Komprimuji účet \"%s\" + Účet \"%s\" byl oříznut z %s na %s + Komprimuje se účet \"%s\" Čistím účet \"%s\" Obnovuji účet \"%s\" Nová zpráva @@ -184,8 +185,8 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Nevyžádaná Chyba certifikátu pro %s Zkontrolujte nastavení serveru - Ověření selhalo - Ověření selhalo pro %s. Aktualizujte svá nastavení serveru. + Přihlášení se nezdařilo + Přihlášení k %s se nezdařilo. Aktualizujte svá nastavení pro server. Zjišťování pošty: %s:%s Zjišťování pošty Odesílání pošty: %s @@ -223,9 +224,10 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte %s napsal(a): %1$s, %2$s napsal: Musíte přidat alespoň jednoho příjemce. - Pole příjemce neobsahuje kompletní informaci! + Kolonka příjemce neobsahuje úplnou informaci! Adresa tohoto kontaktu nebyla nalezena. Některé přílohy nelze přeposlat, protože ještě nebyly staženy. + Zprávu není možné přeposlat protože nebyly staženy přílohy. Zahrnout citovanou zprávu Odstranit citovaný text Upravit citovaný text @@ -247,6 +249,7 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Načtení dalších záhlaví z databáze nebo poštovního serveru selhalo. Více od tohoto odesílatele Od %s + Ladící/čisté tělo zprávy Zpráva byla zrušena Zpráva byla uložena jako koncept Zprávy s \u2605 @@ -282,9 +285,11 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Označit všechny zprávy jako přečtené Smazat (z oznámení) Skrýt mailového klienta - Odstraň K-9 Agenta z hlaviček emailů + Odstranit informaci o K-9 (user agent) z hlaviček emailů Skrýt časovou zónu + Používat v hlavičkách e-mailů a odpovědí univerzální čas (UTC) namísto toho místního Skrýt název stroje + Při připojování k SMTP serverům se prokazovat jako „localhost“ Schovej předmet v upozorněních Nikdy Když je telefon uzamčený @@ -295,7 +300,7 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Vždy Zobrazit tlačítko pro rychlé mazání zpráv Oznámení na obrazovce uzamčení - Žádná oznámení na obrazovce uzamčení + Žádná oznámení na uzamčené obrazovce Jméno aplikace Počet nepřečtených zpráv Počet zpráv a odesilatelů @@ -649,9 +654,11 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Pokud chcete používat IMAP nebo POP3 s tímto poskytovatelem, měli byste povolit použití POP3 na stránce Nastavení pošty Au one. Pokud chcete používat IMAP nebo POP3 s tímto poskytovatelem, měli byste povolit použití POP3 na stránce Nastavení pošty Naver. Pokud chcete používat IMAP nebo POP3 s tímto poskytovatelem, měli byste povolit použití POP3 na stránce Nastavení pošty Hanmail(Daum). - Certifikát nebyl rozeznán + Nerozpoznaný certifikát Přijmout klíč Odmítnout klíč + Delete (nebo D) – Smazat\nR – Odpovědět\nA – Odpovědět všem\nC – Vytvořit\nF – Přeposlat\nM – Přesunout\nV - Archivovat\nY – Kopírovat\nZ – Označit (Ne)přečtené\nG – Hvězdička\nO – Uspořádat podle typu\nI – Uspořádat podle pořadí\nQ – Zpět ke složkám\nS – Označit/odznačit\nJ nebo P – Předešlá zpráva\nK nebo N – Další zpráva + Delete (nebo D) – Smazat\nC – Vytvořit\nM – Přesunout\nV – Archivovat\nY – Zkopírovat\nZ – Označit jako (ne)přečtené\nG – Označit hvězdičkou\nO – Typ řazení\nI – Pořadí řazení\nQ – Návrat na složky\nS – Označit / zrušit označení 1 - Zobrazit jen složky 1. třídy\n2 - Zobrazit složky 1. a 2. třídy\n3 - Zobrazit všechny mimo složek 2. třídy\n4 - Zobrazit všechny složky\nQ - Návrat k účtům\nS - Upravit nastavení účtu Název složky obsahuje Zobrazit složky… @@ -792,7 +799,7 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Ladící záznam povolen » - Import & Export nastavení + Import a export nastavení Exportovat nastaveni účtu Exportovat nastavení a účty Import @@ -807,12 +814,13 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Nastavení úspěšně exportována Importováno globální nastaveni z %s Importováno %s z %s + Importováno %s jako %s 1 účet %s účty %s účtů - Export nastavení selhal + Export nastavení se nezdařil Nepodařilo se importovat jakékoli nastavení z %s Export úspěšný Export selhal @@ -843,12 +851,15 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Přesouvání účtu… Zobrazit počet nepřečtených pro… Účet + Účet pro který má být zobrazen počet nepřečtených Sjednocená doručená pošta Všechny zprávy Počet ve složce Zobrazit počet nepřečtených pouze pro jedinou složku Složka + Složka pro kterou má být zobrazen počet nepřečtených Hotovo + %1$s%2$s Nebyl vybrán žádný účet Nebyla vybrána žádná složka Chybějící Správce souborů @@ -890,13 +901,18 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Načítání %d výsledků Načítání %d výsledků + + Stahování %1$d z %2$d výsledků + Stahování %1$d z %2$d výsledků + Stahování %1$d z %2$d výsledků + Vzdálené vyhledávání se nezdařilo Hledání Povolit vyhledávání na serveru Hledat zprávy na serveru navíc k těm v zařízení Hledat zprávy na serveru - Posuň k prohledání serveru… - Uvolni k prohledávání serveru… + Posunout k prohledání serveru… + Uvolnit k prohledávání serveru… Vzdálené vyhledávání není k dispozici bez připojení k síti. Ztmavit zprávy po přečtení Prečtená zpráva bude mít jiné pozadí. @@ -936,7 +952,7 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte *Zašifrováno* Přidat z kontaktů - Zrušit + Storno Pokračovat Kopie Skrytá kopie @@ -952,6 +968,7 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Nešifrovat Pokud možno šifrovat Šifrovat + Poskytovatel šifrování používá neslučitelnou verzi. Zkontrolujte svá nastavení! Nelze se spojit se službou šifrování, zkontrolujte své nastavení nebo ťukněte na ikonu šifrování pro nový pokus. Přístup ke službě šifrování zamítnut, ťuknout na ikonu šifrování pro nový pokus! PGP/INLINE mód nepodporuje přílohy! @@ -965,11 +982,11 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Může dojít k poškození podpisu v průběhu přenosu Přílohy nejsou podporovány Rozumím! - Zakázat - Nechat povolené + Vypnout + Ponechat zapnuté Rozumím! - Zakázat - Nechat povolené + Vypnout + Ponechat zapnuté Pouze PGP podpisový mód V tomto módu bude váš PGP klíč použit k vytvoření kryptografického podpisu nešifrovaného emailu. Toto nezašifruje text emailu, ale poskytne ověření, že byl email podepsán vaším klíčem. @@ -977,8 +994,19 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Podpisy mohou být v některých klientských aplikacích zobrazeny jako soubor přílohy \'signature.asc\'. Šifrované zprávy vždy obsahují podpis. Holý text + podpis autora obsahoval chybu + podpis bude možné zpracovat až po úplném stažení zprávy + obsahuje nepodporovaný podpis + Zpráva je zašifrována, ale v nepodporovaném formátu. + Zpráva je zašifrována, ale dešifrování bylo zrušeno. + Holý text podepsaný přímo autorem od ověřeného podepisujícího Podepsaný čitelný text + ale klíč neodpovídá autorovi + ale platnost podpisového klíče autora skončila + ale platnost autorova klíče byla odvolána + ale klíč autora není považován za bezpečný + podepsáno neznámým klíčem Šifrováno ale vyskytla se chyba při rozšifrovávání pro rozšifrování je třeba zprávu napřed celou stáhnout @@ -986,20 +1014,29 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte ale je v nepodporovaném formátu ale rozšifrování bylo zrušeno Šifrováno + není podepsáno přímo autorem + Podepsáno přímo autorem od ověřeného odesilatele Šifrováno + podepsáno neznámým klíčem + klíč neodpovídá autorovi + ale platnost podpisového klíče autora skončila + ale platnost autorova klíče byla odvolána + ale klíč autora není považován za bezpečný + ale podepsaná data mají chyby + ale šifra není považovaná za bezpečnou OK Zobrazit podepisujícího Zobrazit odesilatele Podrobnosti Odemknout - Tato část nebyla zašifrována a nemusí být bezpečná. + Tato část nebyla zašifrovaná a nemusí proto být bezpečná. Nechráněná příloha Načítání… Rozšifrování zrušeno. Opakovat Zašifrovaná zpráva musí být stažena pro dešifrování. - Chyba dešifrování emailu + Chyba při rozšifrovávání e-mailu Speciální znaky nejsou momentálně podporovány! Chyba parsování adresy! Zobrazit nešifrované podpisy @@ -1016,21 +1053,28 @@ Chybová hlášení prosím posílejte, přispívejte novými funkcemi a ptejte Rozumím! APG Žádná OpenPGP aplikace nakonfigurována, shlédněte globální nastavení! - Tento email je šifrovaný + Tento e-mail je šifrovaný Tento email byl zašifrovaný pomocí OpenPGP.\nAbyste si ho mohl/a přečíst, potřebujete si nainstalovat a nakonfigurovat kompatibilní OpenPGP aplikaci. Vyprat OpenPGP aplikaci Seznam zpráv K-9 - Načítají se zprávy… + Načítání zpráv… Nepodařilo se načíst seznam složek Zobrazit podrobnosti + Chyba při získávání stavu příjemce z poskytovatele OpenPGP! Šifrování není možné Někteří ze zvolených příjemců nepodporují tuto funkci! Zapnout šifrování Vypnout šifrování Šifrování zpráv zajistí, že budou čitelné pouze pro příjemce a nikoho jiného. + Šifrování se zobrazí pouze tehdy, pokud je podporováno všemi příjemci a je třeba, aby vám už dříve poslali nějaký e-mail. Přepněte šifrování kliknutím na tuto ikonu. - Pochopil(a) jsem + Rozumím Zpět Vypnout šifrování Šifrování OpenGPG + Vzájemný režim automatického šifrování + Vzájemný režim automatického šifrování + Normálně budou zprávy šifrovány volitelně, nebo při odpovědi na šifrovanou zprávu. + Pokud jak odesilatel, tak příjemce zapnou vzájemný režim, šifrování bude ve výchozím stavu zapnuté. + Více informací je možné zjistit kliknutím sem. diff --git a/k9mail/src/main/res/values-cy/strings.xml b/k9mail/src/main/res/values-cy/strings.xml index 3774054314..3911b1496c 100644 --- a/k9mail/src/main/res/values-cy/strings.xml +++ b/k9mail/src/main/res/values-cy/strings.xml @@ -1007,6 +1007,8 @@ Plîs rhowch wybod am unrhyw wallau, syniadau am nodweddion newydd, neu ofyn cwe roedd gwall mewn llofnod diwedd-i-ddiwedd rhaid lawrlwytho\'r neges yn gyfan er mwyn prosesu\'r llofnod mae\'n cynnwys llofnod diwedd-i-ddiwedd anghydnaws + Mae\'r neges wedi ei amgryptio, ond mewn fformat diarth. + Mae\'r neges wedi ei amgryptio, ond diddymwyd yr amgryptio. Llofnod testun plaen Diwedd-i-Ddiwedd oddi wrth lofnodwr wedi\'i gwirio Llofnod testun plaen diff --git a/k9mail/src/main/res/values-da/strings.xml b/k9mail/src/main/res/values-da/strings.xml index 8d6faf61e3..e87c03028d 100644 --- a/k9mail/src/main/res/values-da/strings.xml +++ b/k9mail/src/main/res/values-da/strings.xml @@ -934,6 +934,8 @@ Rapporter venligst fejl, forslag til nye funktioner eller stil spørgsmål på: Signaturer kan blive ødelagt ved afsendelse til postlister. Signaturer bliver måske vist som \'signature.asc\'-vedhæftninger i nogen klienter. Krypterede meddelelser inkluderer altid en signatur + Meddelelsen er krypteret, men i et ikke-understøttet format. + Meddelelsen er krypteret, men dekrypteringen blev afbrudt. OK Lås op Denne del var ikke krypteret og kan være usikker. diff --git a/k9mail/src/main/res/values-de/strings.xml b/k9mail/src/main/res/values-de/strings.xml index 9bcea62e72..fae0ecee02 100644 --- a/k9mail/src/main/res/values-de/strings.xml +++ b/k9mail/src/main/res/values-de/strings.xml @@ -988,6 +988,8 @@ Bitte senden Sie Fehlerberichte, Ideen für neue Funktionen und stellen Sie Frag Ende-zu-Ende-Signatur enthielt einen Fehler muss die Nachricht vollständig herunterladen, um die Signatur zu verarbeiten enthält eine nicht unterstützte Ende-zu-Ende-Signatur + Nachricht ist verschlüsselt, aber in einem nicht unterstützten Format. + Nachricht ist verschlüsselt, aber Entschlüsselung wurde abgebrochen. Ende-zu-Ende signierter Klartext von verifiziertem Signierer Signierter Klartext @@ -1062,4 +1064,9 @@ Um sie zu lesen, muss eine kompatible OpenPGP-App installiert und konfiguriert w Zurück Verschlüsselung deaktivieren OpenPGP-Verschlüsselung + Autocrypt wechselseitiger Modus + Autocrypt wechselseitiger Modus + Nachrichten werden normalerweise auf Wunsch oder beim Antworten auf eine verschlüsselte Nachricht verschlüsselt. + Wenn sowohl Sender als auch Empfänger den wechselseitigen Modus aktiviert haben, wird die Verschlüsselung automatisch aktiviert. + Sie können hier klicken , um mehr zu erfahren. diff --git a/k9mail/src/main/res/values-el/strings.xml b/k9mail/src/main/res/values-el/strings.xml index f673b9cdf6..cd86fdbb9e 100644 --- a/k9mail/src/main/res/values-el/strings.xml +++ b/k9mail/src/main/res/values-el/strings.xml @@ -962,6 +962,8 @@ Οι υπογραφές μπορεί να καταστραφούν όταν στέλνονται σε λίστες αλληλογραφίας. Οι υπογραφές μπορεί να εμφανίζονται ως συνημμένα «signature.asc» σε μερικά προγράμματα. Τα κρυπτογραφημένα μηνύματα περιλαμβάνουν πάντα μια υπογραφή. + Το μήνυμα είναι κρυπτογραφημένο σε μη υποστηριζόμενη μορφοποίηση + Το μήνυμα είναι κρυπτογραφημένο, αλλά η αποκρυπτογράφηση ακυρώθηκε. Εντάξει Ξεκλείδωσε Αυτό το τμήμα δεν ήταν κρυπτογραφημένο και μπορεί να μην είναι ασφαλή. diff --git a/k9mail/src/main/res/values-eo/strings.xml b/k9mail/src/main/res/values-eo/strings.xml index 7c0a93f4e4..8ddd27ff88 100644 --- a/k9mail/src/main/res/values-eo/strings.xml +++ b/k9mail/src/main/res/values-eo/strings.xml @@ -986,6 +986,8 @@ Bonvolu raporti erarojn, kontribui novajn eblojn kaj peti pri novaj funkcioj per ĉifra subskribo enhavas eraron devas esti tute elŝutita por pritrakti subskribon enhavas nesubtenatan ĉifran subskribon + Retletero estas ĉifrita, sed en nesubtenata formo. + Retletero estas ĉifrita, sed malĉifrado estis nuligita. ĉifr-subskribita platteksto de verigita subskribinto Subskribita platteksto @@ -1059,4 +1061,9 @@ Bonvolu raporti erarojn, kontribui novajn eblojn kaj peti pri novaj funkcioj per Antaŭen Malaktivigi ĉifradon OpenPGP-ĉifrado + Reciproke aŭtomata ĉifrado + Reciproke aŭtomata ĉifrado + Mesaĝoj norme estos ĉifritaj laŭ elekto aŭ kiam respondi al ĉifrita mesaĝo + Se ambaŭ sendanto kaj ricevanto aktivigas tiun ĉi reĝimon, ĉifrado estos implicite aktivigita. + Vi povas klaki tien ĉi por sciiĝi pli (en la angla). diff --git a/k9mail/src/main/res/values-es/strings.xml b/k9mail/src/main/res/values-es/strings.xml index d8a3305262..03a42ba422 100644 --- a/k9mail/src/main/res/values-es/strings.xml +++ b/k9mail/src/main/res/values-es/strings.xml @@ -943,6 +943,8 @@ Por favor informe de fallos, aporte nueva funcionalidad o envíe sus preguntas a Las firmas pueden estropearse al ser enviadas a listas de correo. Algunos clientes de correo mostrarán las firmas como adjuntos \'signature.asc\'. Los mensajes cifrados siempres incluirán una firma. + El mensaje está cifrado, pero en un formato no soportado. + El mensaje está cifrado, pero se ha cancelado el descifrado. Aceptar Detalles Desbloquear diff --git a/k9mail/src/main/res/values-eu/strings.xml b/k9mail/src/main/res/values-eu/strings.xml index b4a712a911..327149e081 100644 --- a/k9mail/src/main/res/values-eu/strings.xml +++ b/k9mail/src/main/res/values-eu/strings.xml @@ -987,6 +987,8 @@ Mesedez akatsen berri emateko, ezaugarri berriak gehitzeko eta galderak egiteko muturretik muturrerako sinadurak errore bat zuen mezua osorik deskargatu behar da sinadura prozesatzeko onartzen ez den muturretik muturrerako sinadura dauka + Mezua enkriptatuta dago, baina onartzen ez den formatu batean. + Mezua enkriptatuta dago, baina desenkriptatzea bertan behera utzi da. Muturretik muturrera sinatutako testu arrunta sinatzaile egiaztatutik Sinatutako testu arrunta diff --git a/k9mail/src/main/res/values-fi/strings.xml b/k9mail/src/main/res/values-fi/strings.xml index 017e0ac90f..c2b482f854 100644 --- a/k9mail/src/main/res/values-fi/strings.xml +++ b/k9mail/src/main/res/values-fi/strings.xml @@ -980,10 +980,15 @@ Ilmoita virheistä, ota osaa sovelluskehitykseen ja esitä kysymyksiä osoittees Allekirjoitukset saattavat rikkoontua postituslistoille lähettäessä. Allekirjoitukset saatetaan näyttää \"signature.asc\"-liitteinä joissain sovelluksissa. Salatut viestit sisältävät aina allekirjoituksen. + Raakateksti päästä päähän -allekirjoitus sisälsi virheen viesti täytyy ladata kokonaan, jotta allekirjoitus voidaan käsitellä sisältää ei-tuetun päästä päähän -allekirjoituksen + Viesti on salattu, mutta sen muoto ei ole tuettu. + Viesti on salattu, mutta viestin salauksen purkaminen peruttiin. + Päästä päähän -allekirjoitettu raakateksti vahvistetulta allekirjoittajalta + Allekirjoitettu raakateksti mutta päästä päähän -avain ei vastannut lähettäjää mutta päästä päähän -avain on vanhentunut mutta päästä päähän -avain on kumottu @@ -1053,4 +1058,5 @@ Ilmoita virheistä, ota osaa sovelluskehitykseen ja esitä kysymyksiä osoittees Takaisin Poista salaus käytöstä OpenPGP-salaus + Voit napauttaa tästä saadaksesi lisätietoja. diff --git a/k9mail/src/main/res/values-fr/strings.xml b/k9mail/src/main/res/values-fr/strings.xml index e816321e66..d5866b3c5b 100644 --- a/k9mail/src/main/res/values-fr/strings.xml +++ b/k9mail/src/main/res/values-fr/strings.xml @@ -988,6 +988,8 @@ jusqu’à %d de plus La signature de bout en bout contenait une erreur le courriel doit être complètement téléchargé pour traiter la signature contient une signature de bout en bout non prise en charge + Le courriel est chiffré, mais dans un format non pris en charge. + Le courriel est chiffré, mais le déchiffrement a été annulé. texte en clair signé de bout en bout d’un signataire vérifié Texte en clair signé @@ -1061,4 +1063,9 @@ jusqu’à %d de plus Retour Désactiver le chiffrement Chiffrement OpenPGP + Mode mutuel Autocrypt + Mode mutuel Autocrypt + Les courriels seront habituellement chiffrés par choix ou en répondant à un courriel chiffré. + Si l’expéditeur et les destinataires activent le mode mutuel, le chiffrement sera activé par défaut. + Vous pouvez cliquer ici pour en apprendre davantage. diff --git a/k9mail/src/main/res/values-gd/strings.xml b/k9mail/src/main/res/values-gd/strings.xml index 74372f84bd..9dc10bec61 100644 --- a/k9mail/src/main/res/values-gd/strings.xml +++ b/k9mail/src/main/res/values-gd/strings.xml @@ -955,6 +955,8 @@ Fàilte air bugaichean, com-pàirteachas, iarrtasan airson gleusan ùra is ceist Dh’fhaoidte gum bris soidhneadh nuair a chuireas tu rud gu liosta-phuist. Dh’fhaoidte gun nochd soidhnidhean mar “signature.asc” ann an cuid a chliantan. Bidh soidhneadh am broinn teachdaireachd chrioptaichte an-còmhnaidh. + Tha an teachdaireachd crioptaichte ach ann am fòrmat ris nach eil taic. + Tha an teachdaireachd crioptaichte ach cha sguireadh dhen dì-chrioptachadh. Ceart ma-thà Mion-fhiosrachadh Thoir a’ ghlas dheth diff --git a/k9mail/src/main/res/values-hu/strings.xml b/k9mail/src/main/res/values-hu/strings.xml index ba0a5c0df2..2a76005bf7 100644 --- a/k9mail/src/main/res/values-hu/strings.xml +++ b/k9mail/src/main/res/values-hu/strings.xml @@ -963,6 +963,7 @@ Kérünk küldj hibajelentést, hozzájárulva az új verziókhoz, és tegyél f Letiltás Tartsa bekapcsolva PGP csak-aláírás mód + Az üzenet titkosítva lett, de a visszafejtést megszakították. Titkosított Titkosított Titkosított diff --git a/k9mail/src/main/res/values-in/strings.xml b/k9mail/src/main/res/values-in/strings.xml index 5ec7ce01c3..3443f2b34c 100644 --- a/k9mail/src/main/res/values-in/strings.xml +++ b/k9mail/src/main/res/values-in/strings.xml @@ -41,8 +41,7 @@ Harap dicatat bahwa K-9 tidak mendukung sebagian besar akun Hotmail gratis dan, beberapa kebiasaan saat berbicara dengan Microsoft Exchange.

Kirimkan laporan bug, kontribusikan fitur baru dan ajukan pertanyaan di -https://github.com/k9mail/k-9/. -

+https:/github.com/k9mail/k-9/.

]]> -- \nDikirim dari perangkat Android saya menggunakan K-9 Mail. @@ -70,6 +69,7 @@ https://github.com/k9mail/k-9/. Balas Balas semua Teruskan + Teruskan sebagai Lampiran Pilih akun Pilih Folder Menarik %s:%s%s @@ -100,6 +100,7 @@ https://github.com/k9mail/k-9/. Arsip Spam Teruskan + Teruskan sebagai Lampiran Pindah Kirim… File kan kembali... @@ -222,6 +223,8 @@ https://github.com/k9mail/k-9/. Bidang penerima berisi masukan yang tidak lengkap! Tidak ada alamat surel yang ditemukan untuk kontak ini. Beberapa lampiran tidak bisa diteruskan karena mereka belum diunduh. + Pesan tidak dapat diteruskan karena beberapa lampiran belum diunduh. + Sertakan pesan yang dikutip Buang teks kutipan Sunting teks kutipan Dari: %s <%s> @@ -281,6 +284,8 @@ https://github.com/k9mail/k-9/. Buang User-Agent K-9 dari tajuk surel Sembunyikan zona waktu Gunakan UTC, bukan zona waktu lokal di header email dan header balasan + Sembunyikan nama host + Identifikasi sebagai \'localhost\' saat terhubung ke server SMTP Sembunyikan subyek dalam notifikasi Tidak pernah Ketika perangkat di kunci @@ -687,6 +692,7 @@ https://github.com/k9mail/k-9/. Saat \'Sinkronisasi otomatis\' dicentang Pilih semua Max folder untuk memeriksa dengan dorongan + 5 folder 10 folder 25 folder 50 folder @@ -969,7 +975,27 @@ https://github.com/k9mail/k-9/. Tanda tangan bisa pecah saat dikirim ke milis. Tanda tangan dapat ditampilkan sebagai lampiran \'signature.asc\' pada beberapa klien. Pesan terenkripsi selalu menyertakan tanda tangan. + Teks biasa + tanda tangan akhir-ke-akhir berisi kesalahan + harus mengunduh pesan untuk memproses tanda tangan + berisi tanda tangan akhir-ke-akhir yang tidak didukung + Pesan dienkripsi, namun dalam format yang tidak didukung. + Pesan dienkripsi, tapi dekripsi dibatalkan. + dari penanda yang diverifikasi + Bertanda teks biasa + Terenkripsi + tapi ada kesalahan dekripsi + harus mendownload pesan untuk dekripsi sepenuhnya + namun tidak ada aplikasi kripto yang dikonfigurasi + namun dalam format yang tidak didukung + namun dekripsi dibatalkan + Terenkripsi + dari penanda yang diverifikasi + Terenkripsi + namun enkripsi tidak dianggap aman OK + Lihat Penanda + Lihat Pengirim Detail Buka kunci Bagian ini tidak dienkripsi, dan mungkin tidak aman. @@ -1008,9 +1034,14 @@ https://github.com/k9mail/k-9/. Aktifkan Enkripsi Nonaktifkan enkripsi Mengenkripsi pesan memastikan mereka dapat dibaca oleh penerima, dan tidak ada orang lain. + Enkripsi hanya akan muncul jika didukung oleh semua penerima, dan mereka harus sudah mengirimi Anda email sebelumnya. Alihkan enkripsi dengan mengklik ikon ini. Mengerti Kembali Nonaktifkan enkripsi Enkripsi OpenPGP + Mode gabungan otomatis kripto + Mode gabungan otomatis kripto + Pesan biasanya akan dienkripsi berdasarkan pilihan, atau saat membalas pesan terenkripsi. + Jika kedua pengirim dan penerima mengaktifkan mode bersama, enkripsi akan diaktifkan secara default. diff --git a/k9mail/src/main/res/values-is/strings.xml b/k9mail/src/main/res/values-is/strings.xml index 83e35deefd..09d2e73eff 100644 --- a/k9mail/src/main/res/values-is/strings.xml +++ b/k9mail/src/main/res/values-is/strings.xml @@ -973,6 +973,8 @@ Sendu inn villuskýrslur, leggðu fram nýja eiginleika og spurðu spurninga á PGP Sign-Only hamur Undirritanir geta bilað ef verið er að senda á póstlista. Hreinn texti + Skilaboðin eru dulrituð, en á óstuddu sniði. + Skilaboðin eru dulrituð, en hætt var við afkóðun. frá sannvottuðum undirritara Undirritaður hreintexti Dulritað diff --git a/k9mail/src/main/res/values-it/strings.xml b/k9mail/src/main/res/values-it/strings.xml index ce625e83df..7e4b05968a 100644 --- a/k9mail/src/main/res/values-it/strings.xml +++ b/k9mail/src/main/res/values-it/strings.xml @@ -989,6 +989,8 @@ Per favore invia segnalazioni di errori, contribuisci con nuove funzionalità e la firma end-to-end conteneva un errore devi scaricare completamente il messaggio per verificare la firma contiene una firma end-to-end non supportata + Il messaggio è cifrato, ma in un formato non supportato. + Il messaggio è cifrato, ma la decifratura è stata annullata. Testo semplice firmato End-to-End da firmatario verificato Testo semplice firmato @@ -1062,4 +1064,9 @@ Per favore invia segnalazioni di errori, contribuisci con nuove funzionalità e Indietro Disabilita cifratura Cifratura OpenPGP + Modalità di cifratura reciproca automatica + Modalità di cifratura reciproca automatica + I messaggi saranno normalmente cifrati per scelta o quando si risponde a un messaggio cifrato. + Se il mittente e i destinatari abilitano la modalità reciproca, la cifratura sarà abilitata in modo predefinito. + Puoi fare clic qui per ulteriori informazioni. diff --git a/k9mail/src/main/res/values-ja/strings.xml b/k9mail/src/main/res/values-ja/strings.xml index 209cf21894..df199f136d 100644 --- a/k9mail/src/main/res/values-ja/strings.xml +++ b/k9mail/src/main/res/values-ja/strings.xml @@ -980,6 +980,8 @@ K-9 は大多数のメールクライアントと同様に、ほとんどのフ エンドトゥエンド署名にエラーが含まれていました 署名を処理するために、完全にダウンロードする必要があります サポートされていないエンドトゥエンド署名が含まれています + メッセージは暗号化されていますが、サポートされていない形式です。 + メッセージは暗号化されていますが、復号化をキャンセルされました。 エンドトゥエンド署名された平文 検証済の署名者から 署名された平文 @@ -1053,4 +1055,9 @@ K-9 は大多数のメールクライアントと同様に、ほとんどのフ 戻る 暗号化を無効にする OpenPGP 暗号化 + 自動暗号化相互モード + 自動暗号化相互モード + 通常、メッセージは選択して、または暗号化されたメッセージに返信するときに暗号化されます。 + 送信者と受信者の両方が相互モードを有効にすると、デフォルトで暗号化が有効になります。 + 詳細については ここをクリック してください。 diff --git a/k9mail/src/main/res/values-lv/strings.xml b/k9mail/src/main/res/values-lv/strings.xml index 3437c63001..d7d96128da 100644 --- a/k9mail/src/main/res/values-lv/strings.xml +++ b/k9mail/src/main/res/values-lv/strings.xml @@ -968,6 +968,8 @@ pat %d vairāk Paraksti var tikt bojāti, ja vēstuli sūta saņēmēju sarakstam. Paraksti var parādīties kā \"signature.asc\" pielikums. Šifrētas vēstules vienmēr ietver parakstu. + Vēstule ir šifrēta nepazīstamā veidā + Vēstule ir šifrēta, taču atšifrēšana tika atcelta. Labi Sīkāka informācija Atslēgt diff --git a/k9mail/src/main/res/values-nb/strings.xml b/k9mail/src/main/res/values-nb/strings.xml index 6c90dc4a9b..99198a305e 100644 --- a/k9mail/src/main/res/values-nb/strings.xml +++ b/k9mail/src/main/res/values-nb/strings.xml @@ -227,6 +227,7 @@ til %d flere Ingen e-postadresse ble funnet for denne kontakten. Noen vedlegg kunne ikke videresendes fordi de ikke har blitt lastet ned. Meldingen kan ikke videresendes fordi noen av vedleggene ikke har blitt lastet ned enda. + Inkluder sitert melding Fjern sitert tekst Rediger sitert tekst Fra: %s <%s> @@ -988,6 +989,8 @@ til %d flere ende-til-ende -signaturen inneholdt en feil må laste ned meldingen helt for å behandle signaturen inneholder ustøttet ende-til-ende -signatur + Meldingen er kryptert, med i et ustøttet format. + Meldingen er kryptert, men dekrypteringen ble avbrutt. Ende-til-ende -signert klartekst fra bekreftet underskriver Signert klartekst @@ -1061,4 +1064,8 @@ til %d flere Tilbake Skru av kryptering OpenPGP-kryptering + Gjensidig Autocrypt-modus + Gjensidig Autocrypt-modus + Meldinger vil normalt bli kryptert når valgt, eller ved besvaring av kryptert melding. + Hvis både avsender og mottakere skrur på gjensidig modus, vil kryptering være påslått som forvalg. diff --git a/k9mail/src/main/res/values-nl/strings.xml b/k9mail/src/main/res/values-nl/strings.xml index fea39510af..9be89551f8 100644 --- a/k9mail/src/main/res/values-nl/strings.xml +++ b/k9mail/src/main/res/values-nl/strings.xml @@ -14,10 +14,10 @@ Licensed under the Apache License, Version 2.0. Welkom bij K-9 Mail - K-9 Mail is een krachtige e-mail cliënt voor Android.

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

De verbeterde mogelijkheden bestaan uit ondermeer:

    -
  • Push mail doormiddel van IMAP IDLE
  • +
  • Push mail middels IMAP IDLE
  • Betere prestaties
  • Bericht herclassificatie
  • E-mail handtekeningen
  • @@ -69,7 +69,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Kies account Kies een map Poll %s:%s%s - Het ophalen van koppen %s:%s%s + Koppen ophalen %s:%s%s Verzenden %s%s Proc %s:%s%s \u0020%d/%d @@ -161,7 +161,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Account \"%s\" comprimeren Account \"%s\" wissen Account \"%s\" opnieuw instellen - Nieuwe bericht + Nieuw bericht %d nieuwe berichten %d nieuwe berichten @@ -231,7 +231,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Open Bewaar Opslaan bijlage op SD-kaart mislukt. - De bijlage kon niet worden opgeslagen wegen ruimte gebrek. + De bijlage kon niet worden opgeslagen wegens ruimte gebrek. Laat afbeeldingen zien Niet in staat viewer te vinden voor %s. Download compleet bericht @@ -239,7 +239,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op via %1$s Alle koppen zijn gedownload, maar er zijn geen extra koppen om te tonen. - Het ophalen van extra koppen uit de database of emailserver is mislukt. + Het ophalen van extra koppen uit de database of e-mailserver is mislukt. Meer van deze afzender Van %s Debug / Bericht veld wissen @@ -280,12 +280,12 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Mail client verbergen K-9 gebruikersagent van e-mailkoppen verwijderen Tijdzone verbergen - Gebruik UTC in plaats van de lokale tijdzone in de mailkoppen en bij het antwoorden van e-mail + Gebruik UTC in plaats van de lokale tijdzone in de e-mailkoppen en bij het antwoorden van e-mail Hostname verbergen Identificeer als \'localhost\' tijdens verbinden met SMTP servers Verberg onderwerp in notificaties Nooit - Als toestel gelocked is + Als toestel vergrendeld is Altijd Toon \'Verwijder\' knop Nooit @@ -336,8 +336,8 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op IMAP server WebDAV (Exchange) server Poort - Beveiligings type - Authenticatie type + Beveiligingstype + Authenticatietype Geen SSL/TLS STARTTLS @@ -376,11 +376,11 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Uitgaande server instellingen SMTP server Poort - Beveiligings type + Beveiligingstype Inloggen vereist. Gebruikersnaam Wachtwoord - Authenticatie type + Authenticatietype \"%1$s = %2$s\" is niet geldig met \"%3$s = %4$s\" Ongeldige setup: %s Account opties @@ -469,8 +469,8 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Verwijder handtekening bij reactie Handtekeningen worden verwijderd bij geciteerde berichten Berichtopmaak - Platte Tekst (plaatjes en formattering worden verwijderd) - HTML (plaatjes en formattering blijven behouden) + Platte Tekst (plaatjes en opmaak worden verwijderd) + HTML (plaatjes en opmaak blijven behouden) Automatisch Altijd Cc/Bcc laten zien Leesbevestiging @@ -577,7 +577,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Jouw naam Notificaties Trillen - Trillen wanneer nieuwe mail binnenkomt + Trillen wanneer nieuwe e-mail binnenkomt Tril patronen standaard patroon 1 @@ -735,7 +735,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Mapstatus Bericht lijsten Bericht onderwerp - bericht afzender + Bericht afzender Bericht datum Preview Beeld berichten @@ -804,7 +804,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Geëxporteerde instellingen opgeslagen in %s Instellingen succesvol geëxporteerd Algemene instellingen geimporteerd van %s - %s geimporteerd vanuit %s + %s geïmporteerd vanuit %s %s geïmporteerd als %s 1 account @@ -932,12 +932,12 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Gebruik client certificaat Geen client certificaat Verwijder client certificaat selectie - Alias client certificaat niet ontvangen \"%s\" + Client certificaat niet ontvangen voor alias \"%s\" Geavanceerde opties Client certificaat \"%1$s\" is verlopen of niet geldig (%2$s) *Versleuteld* - Toevoegen vanaf contacten + Toevoegen vanuit contacten Annuleren Doorgaan CC @@ -983,6 +983,8 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op end-to-end handtekening bevat een fout moet bericht volledig downloaden om handtekening te verwerken bevat niet ondersteunde end-to-end handtekening + Bericht is versleuteld, maar in een niet ondersteund formaat. + Bericht is versleuteld, maar ontsleuteling was gestopt. End-to-end getekende platte tekst van geverifieerde ondertekenaar Platte tekst getekend @@ -1033,7 +1035,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Hierdoor is de ondersteuning voor APG verwijderd binnen K-9 mail. De ontwikkeling is gestopt in 2014 Bevat onveilige items - Je kunt hier klikken om meer te leren. + Klik hier voor meer informatie. Begrepen! APG Geen OpenPGP app ingesteld, bekijk de algemene instellingen! @@ -1042,7 +1044,7 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op OpenPGP app kiezen K-9 Bericht Lijst Berichten laden… - Ophalen maplijst mislukte + Ophalen maplijst niet gelukt Details weergeven Fout bij ophalen status van de OpenPGP provider! Versleuteling niet mogelijk @@ -1056,4 +1058,9 @@ Graag foutrapporten sturen, bijdragen voor nieuwe functies en vragen stellen op Terug Versleuteling uitschakelen OpenPGP-versleuteling + Autocrypt wederzijdse modus + Autocrypt wederzijdse modus + Berichten worden op verzoek versleuteld, of bij beantwoorden van een versleuteld bericht. + Als verzender en ontvanger de wederzijdse modus inschakelen dan wordt standaard versleuteling ingesteld. + Klik hier voor meer informatie. diff --git a/k9mail/src/main/res/values-pl/strings.xml b/k9mail/src/main/res/values-pl/strings.xml index 07eb242db5..492e5704a6 100644 --- a/k9mail/src/main/res/values-pl/strings.xml +++ b/k9mail/src/main/res/values-pl/strings.xml @@ -989,6 +989,8 @@ Wysłane za pomocą K-9 Mail. Podpisy mogą ulec uszkodzeniu przy wysyłaniu do list mailingowych W przypadku niektórych klientów, podpisy mogą być wyświetlane jako załączniki \'signature.asc\' . Zaszyfrowane wiadomości są zawsze opatrzone podpisem. + Wiadomość jest zaszyfrowana, ale w niewspieranym formacie. + Wiadomość jest zaszyfrowana, ale deszyfrowanie zostało przerwane. OK Szczegóły Odblokuj diff --git a/k9mail/src/main/res/values-pt-rBR/strings.xml b/k9mail/src/main/res/values-pt-rBR/strings.xml index c514eff65e..163a56bc19 100644 --- a/k9mail/src/main/res/values-pt-rBR/strings.xml +++ b/k9mail/src/main/res/values-pt-rBR/strings.xml @@ -976,6 +976,8 @@ Por favor encaminhe relatórios de bugs, contribua com novos recursos e tire dú Assinaturas podem apresentar problema quando enviadas para listas de discussão. A assinatura pode ser mostrada como um anexo \'signature.asc\' em alguns clientes. Mensagens criptografadas sempre incluem uma assinatura. + A mensagem está criptografada, mas em um formato não suportado. + A mensagem está criptografada, mas a descriptografia foi cancelada. OK Detalhes Desbloquear diff --git a/k9mail/src/main/res/values-pt-rPT/strings.xml b/k9mail/src/main/res/values-pt-rPT/strings.xml index ff8df50d3c..2aea3d7cd8 100644 --- a/k9mail/src/main/res/values-pt-rPT/strings.xml +++ b/k9mail/src/main/res/values-pt-rPT/strings.xml @@ -944,6 +944,8 @@ Por favor envie relatórios de falhas, contribua com novas funcionalidades e col Assinaturas podem romper quando enviadas para listas de discussão. As assinaturas podem ser exibidas como anexos \'signature.asc\' em alguns clientes. Mensagens encriptadas incluem sempre uma assinatura. + A mensagem está encriptada, mas num formato não suportado. + A mensagem está encriptada, mas a desencriptação foi cancelada. OK Detalhes Desbloquear diff --git a/k9mail/src/main/res/values-ro/strings.xml b/k9mail/src/main/res/values-ro/strings.xml index 7d78443965..b273124469 100644 --- a/k9mail/src/main/res/values-ro/strings.xml +++ b/k9mail/src/main/res/values-ro/strings.xml @@ -996,6 +996,8 @@ Uneori datorită faptului că cineva încearcă să te atace pe tine sau serveru semnătura end-to-end conține o eroare trebuie descărcat mesajul complet pentru a procesa semnătura conține o semnătură end-to-end invalidă + Mesajul este criptat, dar este într-un format nesuportat. + Mesajul este criptat, dar decriptarea a fost anulată. Text semnat End-to-End de la semnatar verificat Text semnat diff --git a/k9mail/src/main/res/values-ru/strings.xml b/k9mail/src/main/res/values-ru/strings.xml index 914230dc22..6c0ae62a6e 100644 --- a/k9mail/src/main/res/values-ru/strings.xml +++ b/k9mail/src/main/res/values-ru/strings.xml @@ -1005,6 +1005,8 @@ K-9 Mail — почтовый клиент для Android. неверная подпись сквозного шифрования требуется полная загрузка сообщения для проверки подписи содержит неподдерживаемую подпись сквозного шифрования + Сообщение зашифровано в неподдерживаемом формате + Сообщение зашифровано, дешифрование отменено текст, подписанный ключом сквозного шифрования от проверенного подписанта Подписанный текст @@ -1078,4 +1080,8 @@ K-9 Mail — почтовый клиент для Android. Назад Отключить шифрование Шифрование OpenPGP + Взаимное автошифрование + Взаимное автошифрование + Сообщения шифруются по желанию или при ответе на шифрованное сообщение + Если отправитель и получатели включили режим взаимного автошифрования, включать шифрование по умолчанию. diff --git a/k9mail/src/main/res/values-sk/strings.xml b/k9mail/src/main/res/values-sk/strings.xml index 85a5f3b985..f3c363e26a 100644 --- a/k9mail/src/main/res/values-sk/strings.xml +++ b/k9mail/src/main/res/values-sk/strings.xml @@ -951,6 +951,8 @@ Prosím, nahlasujte prípadné chyby, prispievajte novými funkciami a pýtajte Podpisy môžu byť pri odoslaní do diskusných skupín poškodené. Niektoré e-mailové klienty zobrazujú podpis ako prílohu s názvom \'signature.asc\' Šifrované správy vždy obsahujú podpis. + Formát šifrovanej správy nie je podporovaný. + Správa je šifrovaná, dešifrovanie bolo zrušené. OK Detaily Odomknúť diff --git a/k9mail/src/main/res/values-sl/strings.xml b/k9mail/src/main/res/values-sl/strings.xml index fb514b1028..4e6c00804c 100644 --- a/k9mail/src/main/res/values-sl/strings.xml +++ b/k9mail/src/main/res/values-sl/strings.xml @@ -1006,6 +1006,8 @@ dodatnih %d sporočil end-to-end podpis je vseboval napako za obdelavo podpisa se mora sporočilo prenesti v celoti vsebuje nepodprt end-to-end podpis + Sporočilo je šifrirano, vendar z nepodprto obliko šifriranja. + Sporočilo je šifrirano, vendar je bilo odšifriranje prekinjeno. End-to-end podpisano golo besedilo od preverjenega podpisnika Podpisano besedilno sporočilo diff --git a/k9mail/src/main/res/values-sq/strings.xml b/k9mail/src/main/res/values-sq/strings.xml index 13f88e9a4c..dd577e8256 100644 --- a/k9mail/src/main/res/values-sq/strings.xml +++ b/k9mail/src/main/res/values-sq/strings.xml @@ -989,6 +989,8 @@ Ju lutemi, parashtrim njoftimesh për të meta, kontribute për veçori të reaj nënshkrimi skaj-më-skaj përmban një gabim që të përpunohet nënshkrimi, mesazhi duhet shkarkuar plotësisht përmban nënshkrim skaj-më-skaj të pambuluar + Mesazhi është i fshehtëzuar, por në një format të pambuluar. + Mesazhi është i fshehtëzuar, por shfshehtëzimi u anulua. Tekst i thjeshtë i nënshkruar Skaj-më-Skaj nga nënshkrues i verifikuar Tekst i thjeshtë i nënshkruar @@ -1062,4 +1064,8 @@ Ju lutemi, parashtrim njoftimesh për të meta, kontribute për veçori të reaj Mbrapsht Çaktivizo Fshehtëzimin Fshehtëzim OpenPGP + Mënyra Autocrypt e përbashkët + Mënyra Autocrypt e përbashkët + Mesazhet normalisht do të fshehtëzohen sipas zgjedhjes tuaj, ose kur i përgjigjeni një mesazhi të fshehtëzuar. + Nëse si dërguesi, ashtu edhe marrësit aktivizojnë mënyrën e përbashkët, fshehtëzimi do të aktivizohet si parazgjedhje. diff --git a/k9mail/src/main/res/values-sr/strings.xml b/k9mail/src/main/res/values-sr/strings.xml index 219bebdae7..5c234272c5 100644 --- a/k9mail/src/main/res/values-sr/strings.xml +++ b/k9mail/src/main/res/values-sr/strings.xml @@ -980,6 +980,8 @@ Потписи могу да се покваре ако се шаље на мејлинг-листе. Потписи могу бити приказани као „signature.asc“ прилози у неким клијентима. Шифроване поруке увек укључују потпис. + Порука је шифрована али у неподржаном формату. + Порука је шифрована али је дешифровање отказано. У реду Детаљи Откључај diff --git a/k9mail/src/main/res/values-sv/strings.xml b/k9mail/src/main/res/values-sv/strings.xml index 35406c11de..5e9767258a 100644 --- a/k9mail/src/main/res/values-sv/strings.xml +++ b/k9mail/src/main/res/values-sv/strings.xml @@ -987,6 +987,8 @@ Skicka gärna in rapporter om buggar, eller bidra med nya funktioner eller stäl end-to-end signatur innehöll ett fel måste hämta meddelandet fullständigt för att behandla signaturen innehåller icke-stödd end-to-end signatur + Meddelandet är krypterat, men är i ett format som inte stöds. + Meddelandet är krypterat, men dekrypteringen avbröts. End-to-end signerad oformaterad text Undertecknad oformaterad text men end-to-end nyckel matchade inte avsändaren diff --git a/k9mail/src/main/res/values-tr/strings.xml b/k9mail/src/main/res/values-tr/strings.xml index 7f5c1d0d71..3ae71597d1 100644 --- a/k9mail/src/main/res/values-tr/strings.xml +++ b/k9mail/src/main/res/values-tr/strings.xml @@ -987,6 +987,8 @@ Microsoft Exchange ile konuşurken bazı tuhaflıklar yaşadığını not ediniz uçtan uca imza bir hata içeriyor İmza işlemi için ileti tamamen indirilmelidir desteklenmeyen uçtan uca imza içeriyor + İleti şifreli, fakat desteklenmeyen bir biçim içinde. + İleti şifreli, fakat şifre çözme iptal edildi. Uçtan uca imzalanmış düz metin doğrulanmış imzalayandan İmzalı metin @@ -1060,4 +1062,9 @@ Microsoft Exchange ile konuşurken bazı tuhaflıklar yaşadığını not ediniz Geri şifreleme devre dışı OpenPGP Şifreleme + Autocrypt karşılıklı kipi + Autocrypt karşılıklı kipi + İletiler normalde seçilerek veya şifrelenmiş bir iletiyi yanıtlarken şifrelenecektir. + Hem gönderen hem de alıcının karşılıklı kipi etkinse, şifreleme öntanımlı olarak etkinleştirilir. + Daha fazlasını öğrenmek için buraya tıkla . diff --git a/k9mail/src/main/res/values-uk/strings.xml b/k9mail/src/main/res/values-uk/strings.xml index 44f39f71d7..7074594b93 100644 --- a/k9mail/src/main/res/values-uk/strings.xml +++ b/k9mail/src/main/res/values-uk/strings.xml @@ -945,6 +945,8 @@ K-9 Mail — це вільний клієнт електронної пошти Підписи можуть бути пошкоджені при надсиланні листа у списки розсилки. Деякі клієнти можуть відображати підписи як вкладення \'signature.asc\'. Зашифровані листи завжди підписані. + Повідомлення зашифроване, але це формат не підтримується. + Повідомлення зашифроване, але розшифровування було скасовано. Окей Розблокувати Ця частина не зашифрована й може бути небезпечною. diff --git a/k9mail/src/main/res/values-zh-rCN/strings.xml b/k9mail/src/main/res/values-zh-rCN/strings.xml index 013c411778..919e468c00 100644 --- a/k9mail/src/main/res/values-zh-rCN/strings.xml +++ b/k9mail/src/main/res/values-zh-rCN/strings.xml @@ -962,6 +962,8 @@ https://github.com/k9mail/k-9/20 发送到邮件列表时,签名可能会中断。 签名在一些邮件软件中会显示为附件 “signature.asc”。 加密邮件总是包含一个签名。 + 消息是加密的,但以不支持的格式进行加密。 +  消息已加密,但解密被取消。 确定 详情 解锁 -- GitLab From 5e1291344bf061a5ff0d5609ba28ef25746f4f88 Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 11 Mar 2018 02:43:07 +0100 Subject: [PATCH 006/248] Version 5.502 --- k9mail/build.gradle | 4 ++-- k9mail/src/main/res/xml/changelog_master.xml | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/k9mail/build.gradle b/k9mail/build.gradle index dfa6caa1c6..5273f4d491 100644 --- a/k9mail/build.gradle +++ b/k9mail/build.gradle @@ -53,8 +53,8 @@ android { applicationId "com.fsck.k9" testApplicationId "com.fsck.k9.tests" - versionCode 25010 - versionName '5.501' + versionCode 25020 + versionName '5.502' minSdkVersion 15 targetSdkVersion 22 diff --git a/k9mail/src/main/res/xml/changelog_master.xml b/k9mail/src/main/res/xml/changelog_master.xml index 96fe54b1d3..3b54b144c9 100644 --- a/k9mail/src/main/res/xml/changelog_master.xml +++ b/k9mail/src/main/res/xml/changelog_master.xml @@ -8,6 +8,9 @@ They are automatically updated with "ant bump-version". --> + + Updated translations + Fixed bug that lead to important files being stripped from the APK -- GitLab From e99016c68574f8372c32582053ce9d26eb3d7a2e Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 29 Mar 2018 14:30:00 +0200 Subject: [PATCH 007/248] Fix saving state of OpenPgpKeyPreference --- .../org/openintents/openpgp/util/OpenPgpKeyPreference.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java b/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java index 15eb446936..b52376b5f7 100644 --- a/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java +++ b/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java @@ -252,7 +252,7 @@ public class OpenPgpKeyPreference extends Preference { public SavedState(Parcel source) { super(source); - keyId = source.readInt(); + keyId = source.readLong(); openPgpProvider = source.readString(); defaultUserId = source.readString(); } @@ -291,4 +291,4 @@ public class OpenPgpKeyPreference extends Preference { } } -} \ No newline at end of file +} -- GitLab From c4b6d7f22439573a0a55da33cafda2702dd65893 Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 29 Mar 2018 14:59:06 +0200 Subject: [PATCH 008/248] Restore service connection when resuming from saved state --- .../openpgp/util/OpenPgpKeyPreference.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java b/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java index b52376b5f7..3da905b028 100644 --- a/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java +++ b/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java @@ -73,6 +73,15 @@ public class OpenPgpKeyPreference extends Preference { @Override protected void onClick() { + bindServiceAndGetSignKeyId(new Intent()); + } + + private void bindServiceAndGetSignKeyId(final Intent data) { + if (mServiceConnection != null) { + getSignKeyId(data); + return; + } + // bind to service mServiceConnection = new OpenPgpServiceConnection( getContext().getApplicationContext(), @@ -81,7 +90,7 @@ public class OpenPgpKeyPreference extends Preference { @Override public void onBound(IOpenPgpService2 service) { - getSignKeyId(new Intent()); + getSignKeyId(data); } @Override @@ -284,7 +293,7 @@ public class OpenPgpKeyPreference extends Preference { public boolean handleOnActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_KEY_PREFERENCE && resultCode == Activity.RESULT_OK) { - getSignKeyId(data); + bindServiceAndGetSignKeyId(data); return true; } else { return false; -- GitLab From 44d1a1a454621f968689e90bcb274e7cf901e102 Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 30 Mar 2018 05:00:31 +0200 Subject: [PATCH 009/248] Check if ServiceConnection is bound before using it --- .../java/org/openintents/openpgp/util/OpenPgpKeyPreference.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java b/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java index 3da905b028..dd4b5373d7 100644 --- a/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java +++ b/plugins/openpgp-api-lib/openpgp-api/src/main/java/org/openintents/openpgp/util/OpenPgpKeyPreference.java @@ -77,7 +77,7 @@ public class OpenPgpKeyPreference extends Preference { } private void bindServiceAndGetSignKeyId(final Intent data) { - if (mServiceConnection != null) { + if (mServiceConnection != null && mServiceConnection.isBound()) { getSignKeyId(data); return; } -- GitLab From 05e10d6d936dca208e71be548691a1b9ebc1fca9 Mon Sep 17 00:00:00 2001 From: master Date: Wed, 14 Mar 2018 03:19:52 -0400 Subject: [PATCH 010/248] Fix IMM to clean composing / predictive strings --- .../java/com/fsck/k9/view/RecipientSelectView.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/k9mail/src/main/java/com/fsck/k9/view/RecipientSelectView.java b/k9mail/src/main/java/com/fsck/k9/view/RecipientSelectView.java index 99c15db020..3d523931df 100644 --- a/k9mail/src/main/java/com/fsck/k9/view/RecipientSelectView.java +++ b/k9mail/src/main/java/com/fsck/k9/view/RecipientSelectView.java @@ -207,6 +207,20 @@ public class RecipientSelectView extends TokenCompleteTextView implem } } + /** + * TokenCompleteTextView removes composing strings, and etc, but leaves internal composition + * predictions partially constructed. Changing either/or the Selection or Candidate start/end + * positions, forces the IMM to reset cleaner. + */ + @Override + protected void replaceText(CharSequence text) { + super.replaceText(text); + + InputMethodManager imm = (InputMethodManager) getContext().getSystemService( + Context.INPUT_METHOD_SERVICE); + imm.updateSelection(this, getSelectionStart(), getSelectionEnd(), -1, -1); + } + private void displayKeyboard() { InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm == null) { -- GitLab From ed461831ba1bed32895eeb88388becd8a0007170 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 7 Mar 2018 14:33:35 +0100 Subject: [PATCH 011/248] Fix crash with pendingintents in messageview Only the lower 16 bits can be used for the request code from fragments. This changes our own mask to use the 15th bit instead of the 16th. --- k9mail/src/main/java/com/fsck/k9/activity/MessageList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/k9mail/src/main/java/com/fsck/k9/activity/MessageList.java b/k9mail/src/main/java/com/fsck/k9/activity/MessageList.java index 82b6051132..20857be4e4 100644 --- a/k9mail/src/main/java/com/fsck/k9/activity/MessageList.java +++ b/k9mail/src/main/java/com/fsck/k9/activity/MessageList.java @@ -92,7 +92,7 @@ public class MessageList extends K9Activity implements MessageListFragmentListen private static final int PREVIOUS = 1; private static final int NEXT = 2; - public static final int REQUEST_MASK_PENDING_INTENT = 1 << 16; + public static final int REQUEST_MASK_PENDING_INTENT = 1 << 15; public static void actionDisplaySearch(Context context, SearchSpecification search, boolean noThreading, boolean newTask) { -- GitLab From 83fc4c8d4d08ea6006522ce5e34fd6f0d41daadc Mon Sep 17 00:00:00 2001 From: cketti Date: Mon, 2 Apr 2018 06:15:11 +0200 Subject: [PATCH 012/248] Version 5.503 --- k9mail/build.gradle | 4 ++-- k9mail/src/main/res/xml/changelog_master.xml | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/k9mail/build.gradle b/k9mail/build.gradle index 5273f4d491..a6aafb1e1f 100644 --- a/k9mail/build.gradle +++ b/k9mail/build.gradle @@ -53,8 +53,8 @@ android { applicationId "com.fsck.k9" testApplicationId "com.fsck.k9.tests" - versionCode 25020 - versionName '5.502' + versionCode 25030 + versionName '5.503' minSdkVersion 15 targetSdkVersion 22 diff --git a/k9mail/src/main/res/xml/changelog_master.xml b/k9mail/src/main/res/xml/changelog_master.xml index 3b54b144c9..deae298dae 100644 --- a/k9mail/src/main/res/xml/changelog_master.xml +++ b/k9mail/src/main/res/xml/changelog_master.xml @@ -8,6 +8,10 @@ They are automatically updated with "ant bump-version". --> + + Fixed bug with some soft keyboards when auto-completing recipients + Fixed crash when decrypting messages + Updated translations -- GitLab From ad498fd9d5961b9acd2acd6afa00bf1a8f800c65 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 4 Apr 2018 03:20:54 +0200 Subject: [PATCH 013/248] Fix IllegalArgumentException on empty pendingMoveOrCopy Fixes #3300 --- .../java/com/fsck/k9/controller/MessagingController.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java b/k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java index 718c6efe16..053776bebf 100644 --- a/k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java +++ b/k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java @@ -1866,6 +1866,11 @@ public class MessagingController { } } + if (messages.isEmpty()) { + Timber.i("processingPendingMoveOrCopy: no remote messages to move, skipping"); + return; + } + if (!remoteSrcFolder.exists()) { throw new MessagingException( "processingPendingMoveOrCopy: remoteFolder " + srcFolder + " does not exist", true); -- GitLab From 41d8fc96182666decc4580ba40904df39ef9e53f Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 4 Apr 2018 03:31:48 +0200 Subject: [PATCH 014/248] add unit test for empty pendingMoveOrCopy --- .../k9/controller/MessagingController.java | 26 +++++++++++++------ .../controller/MessagingControllerTest.java | 17 ++++++++++++ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java b/k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java index 053776bebf..6826139536 100644 --- a/k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java +++ b/k9mail/src/main/java/com/fsck/k9/controller/MessagingController.java @@ -1844,14 +1844,24 @@ public class MessagingController { } void processPendingMoveOrCopy(PendingMoveOrCopy command, Account account) throws MessagingException { + String srcFolder = command.srcFolder; + String destFolder = command.destFolder; + boolean isCopy = command.isCopy; + + Map newUidMap = command.newUidMap; + Collection uids = newUidMap != null ? newUidMap.keySet() : command.uids; + + processPendingMoveOrCopy(account, srcFolder, destFolder, uids, isCopy, newUidMap); + } + + @VisibleForTesting + void processPendingMoveOrCopy(Account account, String srcFolder, String destFolder, Collection uids, + boolean isCopy, Map newUidMap) throws MessagingException { Folder remoteSrcFolder = null; Folder remoteDestFolder = null; LocalFolder localDestFolder; - try { - String srcFolder = command.srcFolder; - String destFolder = command.destFolder; - boolean isCopy = command.isCopy; + try { Store remoteStore = account.getRemoteStore(); remoteSrcFolder = remoteStore.getFolder(srcFolder); @@ -1859,7 +1869,6 @@ public class MessagingController { localDestFolder = (LocalFolder) localStore.getFolder(destFolder); List messages = new ArrayList<>(); - Collection uids = command.newUidMap != null ? command.newUidMap.keySet() : command.uids; for (String uid : uids) { if (!uid.startsWith(K9.LOCAL_UID_PREFIX)) { messages.add(remoteSrcFolder.getMessage(uid)); @@ -1916,11 +1925,12 @@ public class MessagingController { * This next part is used to bring the local UIDs of the local destination folder * upto speed with the remote UIDs of remote destination folder. */ - if (command.newUidMap != null && remoteUidMap != null && !remoteUidMap.isEmpty()) { - for (Map.Entry entry : remoteUidMap.entrySet()) { + if (newUidMap != null && remoteUidMap != null && !remoteUidMap.isEmpty()) { + Timber.i("processingPendingMoveOrCopy: changing local uids of %d messages", remoteUidMap.size()); + for (Entry entry : remoteUidMap.entrySet()) { String remoteSrcUid = entry.getKey(); String newUid = entry.getValue(); - String localDestUid = command.newUidMap.get(remoteSrcUid); + String localDestUid = newUidMap.get(remoteSrcUid); if (localDestUid == null) { continue; } diff --git a/k9mail/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java b/k9mail/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java index 131e8d22b9..d3849433f6 100644 --- a/k9mail/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java +++ b/k9mail/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java @@ -3,6 +3,8 @@ package com.fsck.k9.controller; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; @@ -65,6 +67,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; @@ -825,6 +828,20 @@ public class MessagingControllerTest { assertEquals(FetchProfile.Item.BODY_SANE, fetchProfileCaptor.getAllValues().get(3).get(0)); } + @Test + public void processPendingMoveOrCopy_withOnlyLocalMessages() throws Exception { + configureRemoteStoreWithFolder(); + + Collection uids = Arrays.asList(K9.LOCAL_UID_PREFIX + "msg1", K9.LOCAL_UID_PREFIX + "msg2"); + controller.processPendingMoveOrCopy( + account, localFolder.getName(), FOLDER_NAME, uids, false, null); + + verify(account).getRemoteStore(); + verify(remoteStore).getFolder(FOLDER_NAME); + verify(remoteFolder).close(); + verifyNoMoreInteractions(remoteFolder); + } + private void setupAccountWithMessageToSend() throws MessagingException { when(account.getOutboxFolderName()).thenReturn(FOLDER_NAME); when(account.hasSentFolder()).thenReturn(true); -- GitLab From ed91e77a28ceea9e327f76946f826753e7f510a5 Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 8 Apr 2018 17:26:21 +0200 Subject: [PATCH 015/248] Allow "background" attribute for tags , , and --- .../java/com/fsck/k9/message/html/HtmlSanitizer.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/k9mail/src/main/java/com/fsck/k9/message/html/HtmlSanitizer.java b/k9mail/src/main/java/com/fsck/k9/message/html/HtmlSanitizer.java index 1707f7c9ea..ad11115fc5 100644 --- a/k9mail/src/main/java/com/fsck/k9/message/html/HtmlSanitizer.java +++ b/k9mail/src/main/java/com/fsck/k9/message/html/HtmlSanitizer.java @@ -17,13 +17,13 @@ public class HtmlSanitizer { .addAttributes("font", "color", "face", "size") .addAttributes("table", "align", "background", "bgcolor", "border", "cellpadding", "cellspacing", "width") - .addAttributes("tr", "align", "bgcolor", "valign") + .addAttributes("tr", "align", "background", "bgcolor", "valign") .addAttributes("th", - "align", "bgcolor", "colspan", "headers", "height", "nowrap", "rowspan", "scope", "sorted", - "valign", "width") + "align", "background", "bgcolor", "colspan", "headers", "height", "nowrap", "rowspan", "scope", + "sorted", "valign", "width") .addAttributes("td", - "align", "bgcolor", "colspan", "headers", "height", "nowrap", "rowspan", "scope", "valign", - "width") + "align", "background", "bgcolor", "colspan", "headers", "height", "nowrap", "rowspan", "scope", + "valign", "width") .addAttributes("map", "name") .addAttributes("area", "shape", "coords", "href", "alt") .addProtocols("area", "href", "http", "https") -- GitLab From a903bd6f81e929bdd486b12e24afe851d06b7dcf Mon Sep 17 00:00:00 2001 From: cketti Date: Sat, 1 Sep 2018 18:32:39 +0200 Subject: [PATCH 016/248] Version 5.600 --- k9mail/build.gradle | 4 ++-- k9mail/src/main/res/xml/changelog_master.xml | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/k9mail/build.gradle b/k9mail/build.gradle index a6aafb1e1f..129340af9c 100644 --- a/k9mail/build.gradle +++ b/k9mail/build.gradle @@ -53,8 +53,8 @@ android { applicationId "com.fsck.k9" testApplicationId "com.fsck.k9.tests" - versionCode 25030 - versionName '5.503' + versionCode 26000 + versionName '5.600' minSdkVersion 15 targetSdkVersion 22 diff --git a/k9mail/src/main/res/xml/changelog_master.xml b/k9mail/src/main/res/xml/changelog_master.xml index deae298dae..b1aaee690e 100644 --- a/k9mail/src/main/res/xml/changelog_master.xml +++ b/k9mail/src/main/res/xml/changelog_master.xml @@ -8,6 +8,10 @@ They are automatically updated with "ant bump-version". --> + + Allow some outdated HTML attributes so emails from popular internet services are displayed as intended + Fixed bug when moving or copying message (IMAP) + Fixed bug with some soft keyboards when auto-completing recipients Fixed crash when decrypting messages -- GitLab From 76da8ab912e2c0f825d3274689a74af71c3cc5d4 Mon Sep 17 00:00:00 2001 From: Nihar Thakkar Date: Sat, 10 Feb 2018 11:48:28 +0530 Subject: [PATCH 017/248] Implemented material design in themes. --- k9mail/build.gradle | 2 +- k9mail/src/main/AndroidManifest.xml | 5 +++-- k9mail/src/main/ic_launcher-web.png | Bin 0 -> 31378 bytes k9mail/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3048 bytes k9mail/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1867 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4356 bytes .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7041 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10287 bytes k9mail/src/main/res/values/colors.xml | 4 ++++ k9mail/src/main/res/values/themes.xml | 11 ++++++++--- 10 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 k9mail/src/main/ic_launcher-web.png create mode 100644 k9mail/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 k9mail/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 k9mail/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 k9mail/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 k9mail/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/k9mail/build.gradle b/k9mail/build.gradle index 129340af9c..cb9b23bddd 100644 --- a/k9mail/build.gradle +++ b/k9mail/build.gradle @@ -56,7 +56,7 @@ android { versionCode 26000 versionName '5.600' - minSdkVersion 15 + minSdkVersion 21 targetSdkVersion 22 generatedDensities = ['mdpi', 'hdpi', 'xhdpi'] diff --git a/k9mail/src/main/AndroidManifest.xml b/k9mail/src/main/AndroidManifest.xml index bd35d884fb..4bee21acb5 100644 --- a/k9mail/src/main/AndroidManifest.xml +++ b/k9mail/src/main/AndroidManifest.xml @@ -53,8 +53,9 @@ Qlpe8EhXLE zAvMgr_i)a6zW>7e6I|Eqd-YoTv)9@?N>^KjoP?1C0043|RV94@fP()*0U|>1&!P9w z836bit0~=m=smufb;aZ1@ZS!for}uU2%Yw_!}LT&B6dzr_UGKl$U(myW<_Eye5eDg zC|Hb7KR@R1wWgwqQnDbgR=#>fDC%@($CfZcSahwc$-Sj%#AQui)plEMWpih<>R3LE zWWZjGG46ie|0jP)z7%L|V0k>PXMa`7Kxg8$KAQ78+iiUwP&@nSs`hQTlQGz-gL@Ud z+n1&kP|6U3Irxx>$vDmaHuDNwb||`AwV2I!@eF-c-r-WI{eJGvvIk-vx)WT2YOIv0 zA6>57^&iKpkwnF+4QVB44GP6*4Y|aNuO6#oWd&XNBt#a!9QHNb-@aDw5_IKJ#i5;+ zLg$J5(u}JbCd;A4PgI^%o<^QYJ`ZhN&==bmzk`xg!;sEeo*I9W6z{g*5Eygo20 zXnfwQdaLwZV8N~>euo3Wv(_*t^K-`FtoLNwo6wu?Iu*`QRkxU2hF7+*h+Kx-*B=vBnoRN8nc|j2U1ajv9J^y}BX8Ki2)#22V9h+QCwH=2XlkAN( z<94pqroGKO!8p$s+B4NwVPfuxCa4Y7L~0DFX!x@x1{YxBlG`^5P2x!#Gq6IZ#8i=O?dL^68oejoLQ;rPn%M74b>?_7-C z+Ki4m7X4tpP()1o!#kOL#_YB14m-5F3Fh99e9$ac2U{8*!1_Ts1df>l6}PN@B&S~2 z4i!0du5F{rt7(GsVzs*uJ}$tQmU41F(2K#=ug^s zFMy`;LHsjZoXFWMcoM#e)hanM)_m<8x+qN7&K=IFuDu{>{YWOO@oW3Hi)ybZuVT|s zuj{EWeTtpT8`+@J)hoL*iPxJG78!h1hn4Bw3AV&8)y z^@cJ1SKBsG5id_D*Ls8of9jpPb~<{A5T00Tn>ty~e37>M$~gb|f53jP!*9at^LUhwT>;2xiCK5RwCK2@OX^QQ6_OO|}s z6%n>Lafj|Fn@`BB`1ezkKr8;b7c=qryys3xnSTj;{;O)BPtr3Yua$>@kI4C_wH{*< zLk2@$W)aR&q~Ubs)-+IsWT7Fo!A=Ihjo)iD?NJb)XI8Q5*0k0sTT!5_0x{f5?-5#) zrGC%-tyK5Yl*}{glrAKs19CtAfXj9Wb_jRe?hvz+0R3lNxpr<&nxIC;M_qekOlw?A zE0J#CmdBaWlGQ8;ZdHdw#~nLqaOE|x^N&?5&-8B+z=?eEY0(a*HNTg@EOk``vUJd*L?P;QM)h-h{>MB03or z(+kYMa!79av`xuBc{s}_%(LCbwSH__X4(5!?zbRX*Nw}zw^WU#*Bk> zpyIv-Q5)A9qVsy2*_q=Asg$TU6)OH9z!_UdObnCU&gZ6eJO81%vogOXh-Q< zFq2wLs~#vswJSeTDxtoQHu3)N9Ci_+m0(x3GbyrTn%ukWmi;|(<8%*$)Plv*!}-nR zH%7(Z&;@CL%Fr!O)uQdE^NLzA;1qY&p0Vs{_ZZ}5aJJ`rORm%dwj%TeRS zjc9-K@mbE+VKz)Wm#7r<@Xgq6jb_La>T`Fb;_WYb&h{zzLn6Jj} z*^i!YcX3Ntqyv3cSj$}mv>GpPykPE}6#^%n156>OG7#wMXw@+gUg}LNSst7os=u(rTy!MR0GF@aw)R^8T;FgM>eYpQtiE zPQX`mi1adu80y(y9Q+Uu3d9kh%T#c5vL-*%DTq2G?K>xCccg{9$_T!i@R-#s;Q|yx z^A2{mK)zfxsaUz>uGgD}K*h-P1L*F|4M~E>F-9vh+#V?_pFm3KHBVb=*p;owzHSe; zsTCgZgpS=41F!*yDLKh=3iyY_7L134%0OI7@2QG&k+GQcUDnkSS%9UE_`Clxr#9f83-fT*%(O1Zx*F-1Nh>k?@pmtuUeYzJ$gcwo)MkDFl zO%Nk(vGX8>16eqgg$SNzAIY)!1xAh1Ek!sT#1!OG17RX8Cwq}g zl;hBQnlN4HmCAijHVa(gL<=ocMRG!^TMbVPKY%}XoOU`>?5A>nla~e!YpV=5d5MfP zVtv8pR*Ilh26`~9nD87*hh3}^Xw@f=k^V_J4E6H6D^Cjguu& zEPeouLn7;Y(2$fH9G2Z9mQ>9n*prH3aZ`Q#{)ap0yxNWC9Prmf%}Bu7icJaCztpS+ z8fSg#l<6?LgDV{UlTaa)(#jk^jTG{r6Scd87av}_`$>li{vhihA$oMp>h)p7Dw>#` z)9Dq`eqjpIIx-|H`}D1jIVhoHCN{0-oBUh8qdXiBJ7oYf#R&~B-^1FV6ld7L74uox zk6LFx!K5+=^M&$t06P+K|G5qgWRd4TR}R zs2}7(RzFA-?v+c)YlD%~E`@!S0aaJS^OOQT5xS^tmE+K)l$R6v5@OX)J;UnTb0DY! z3LSeuVe#P{&iK*&Qt0C_U?0+d!?Mi;A#x(qqTIB6;;%>rzx4t_i3#bG5g{}e+rTN8 zzyTR-$xwpdQ9@DAL^ZYSd1rGVA6fPy`lHjaNtsw-oD;gTRRLdoGK&yZyUg zTfRarLSoS48(&lX-*F&QgwzmV@vpI>c}b5GJKvH6;+BAn11+H5(sCwL@-5|Cb)y$1 zuXfF`jnU)E*b2Vx?jsNn8<%{QsiEL0kdpWG$J$FtopdI=*ap2zu&Frv^IU=K+)Fm;?HUX zsE!m)os5t+Fr<`MId;^JI(-^dL0XjusV80@!DZ!(vn~Um*CO{LCAbKjNvQ8V8fpBE zonUOO@Wj#M0A|q{9h~brB8NIe>_6!st1yO2c{thQ<#Ux5pT}EZ5&Po_Du(X^0uh-t zP^PYdx(>=-^6orglEFyR4MQw@3?|q)FS!x|Si~bUTdZn0 zc-VIvWN(+*qEpw0RSU6AS)64Z#2Mm32^xC}P@H$~nZ(w-Qwys8a1T2X^0k9Id=gji zD9`!HuU8N4X!n)N5#A<&uV8h$W^Bz3y1rrWf<=PeGZ0oWw&I_<_O2NQ@xWlWYdLne z7($#$lQ2Z=Z5RzaR||N{>0`C$+&;}JR5^R@So;vcU^N7o#MpY^4hdMebwdRXXyxpD z;_c*-_p=ljs~ig zX_8f$zH{%Dz2TSxUiiIU1j=J{v>-_M-Fq;s22udw9co@y0{<wf3EjbztjLG5N-5`R?@u=%)X%!qWnaDDcEBhD+ayn{1^wQRilz zcaHbFuT)sC%p99$OXkhLq%q!CA!3&$@h-k;S-6t6NzOzR!KgX33%u`W*H7b%=sG&WxNL{3ODT);a#Le!H^KBEf}E zQhU6pctvbTOR4cg-vL*$3mQctH6ds}(`wf2lRr(!ZAzX3dCQ-aNbe;oJ2Y1l(OO|L8L#ot#I@4=${cS z1lfhcuh9Iy_9640wvqtmb~Ij7TW-jEtF`ySijnHyu6LMqWOht;TwgIsb(Kdc5C@6t zf9?Ayfz$(NZ7x)vk$I$E_ow#4_EBf#&@WIcyrByzwCcqO&QD~YMcK5F(R{k968*BX zBdUj|F#6=TdwZ_}U6h<%YRtvTD5c^AIi3AB)83} z6IkRpLhbRpPk)aF!p?h3Uynjdh>e(df$m%|xQ*!9c5wxw#c?cW;uz;br`TkHN1=KMpQ&<9vDbrCim>a8zdJq)wo> z#bZ+EsTK~wNm=f4s)N8ycJ7^LN>r99lw&Iy>vqyQW#g~)0D=h2dEcIoimxl_D!TG_ zIadeIFwG1zLocnUYTE{kkd-k1pivY9oTBN@p|S>ab*OWbl`eybG-4ncCC#vgs%p#>lu%o+uha&!`PAp%cX68BzFohbx+^71qO0E7!V1jJ*t}K`Yc8x#g<9KV<({`0ksFYuZ4<*`mf&VT;ADGbAstt~*~N=g z^u!KKy!_3nf`xx-Kx7`f$cR74Y;jGFp=IantMlH-SG^-=sQG7DDTz3!V;SCMUg+)r zix&x{#&V1h3?*iw^#rytRMGd`dgofc#Awv&F!iD9RjCyB2}?u_cQR>s$~IvOG#ieE zil}5t`)KIl+l80K7h^YT(kP9P?-4%7tmW88ZihuClNUM@Q)d2N_K|g-$BlK_ZW*L7 zPz0YuH^XhN&-QKu$nN{v-28_&t;D+|7m%= zeGsrZZ!576q8Gm~)ZQ;OtF^u-`zHA{pHbj;rL@)B9@&%DnvFD@UgL}&~530RP*-Y?-{ss&^H>vTy4!i2Z>kDZcma)5b#uEy=vr2PD%YX(w=J4scdxki|d;VQIbRo z8-#5GqQ?f4_owez#j1_@R52SSC?86x>_MtTI~cxT@skPGqXhYqW`M6*{8h#rhU8$= z@x*RGq2TfC6X*`1Q=f`4cTXvLX2r;PR2JkGg1M-^8E{iZZLT9~<6KMoc;SzCFf<-a zrCXS-rX?Zi7v_yV!7=3QO0GGQfCR6JBh|BYQp&UEaYNcklU}z;5+fS0??2(mg2!lXctI(@!+U!fyn_YWBrI<|SmfTMdEFn#( zAcf69B$N!(Yv_@+?Ao-(wz3a~=J)NHJj@lL_-SgGW6$YC1AyZE{#3Da>xL)hM(9Vt z>|uCZjBPH^@fT%J#`)Yx`MmDuKv~U#l`?eI%^3^U8OnCN2_8SamJHVjyg-V_JE( zYcF^+lybOYY4M?m9fH1x2skhUlptr_N7SWxH@!T__|IbhYFW0>DTkJ|j>D%R zf6k@5Y{bnT60tk7V-C$kuy7qMV&J#IH;1htr^u@dQ^&*W56=Sr68z}cZcz+V>?1eV z`+e^h$n&_<*=ob(cl}3j(`)S&)o80#IQpFl2#XUcs#*5EeV6-3HP!Ou_I=1_(6p2* zXSN>xyRc8aGdbjt3f*+2G|fwrd z5dHe)`;~-K;sQGuQhgxj{gtv4Ss$C)N^~MEQRv5zhdyBI3fG!?04yS`*^==+GnQSe z972NQ;54H$eHpB-oII<0utG2mz$mQbPGR=Y-4Bp8%lx@ zuu&E*6;mH06fcmbIvIU}j=N#@lvvM02yh6i+O5AGzrUYyQ!q0v9oGcywPO*hk@Sq5|nQr=_8yVlrfzW0`ZAdzp8+ zxQJeX0RBy!@U{-&GupLDqUJa~B$+2Rz}63O$JTV$LmDeahn3acl&LL-6Ciy|tvpWD z&jQ}xakcqS7kI3*CoKLpMwp#o&{NX*T}WC?T2fku>zeai9>6&7k%ol-@>h zAJQ$}E!8d8eYab=Ta5%*dV`<-8gd@Ez-7`|ch%L!WM7;FxMhe57yK(oPg`!g21`S;dUg$LYp80+9 z`}I~cjftZTUf|(tvPf$ri)gW&)$N=&i!Gk7wv}&4UWuFEwg`ZtuA4!k`#BjCCw1z3 zlrs~rBc(#?L#5tiZM@_Il9R|Hdy&trZt8p*?cKu@kR$}tfx>jnkPB?L#X#XxP|Igl z%pyK^H|qTdcF$$&nf`<%H*9jMs?tfHKIygGw!Hd8@QL;lXFcGfowOpnp*Oex31EADL#9-pR`Q0OtMV2 ztgY=bln3bEznwElV_Ba)Nt1KLkm|haW5Q1i?y4@LT?b7fror4Vj$JIEC>T{*b=CWm zweQldYhVv>VJ#wXAHq+9eD4Hx zRHazwApy>5fWp_`s;z^X_xsT2)5_Dg;E~4Iz;5Dh@@}ebTGN667_i>N&Cm&$a~sM{ z^H0{4jo_nNO2V+l=PrHFSyt{Xd$#4x9S*V&D^UxnUXj0Qv6cnEfJeB(GO!F?#$P5} zR(0-`A^~iU@EJaT*ExJ=ZoW-yImdu1Q%1H=AsV8#S!1Ue#X=eo=k!2fB=9qB$22`^XuqU6C__F_5+WcqgkUk7G zzl{KU4{)bBMClG@>j4O^PxAZPx|_Dz2Q&yhsX5cv7b8RxDifpKAq7WkONy>P3b{c4J0MbYh}vTNM6r3-exs|r?R`wflKDXE5KNlH z%8vdx|A#fxi2Oq z-7Q31V#YhO2ETWyWK<1btFKryUJ{XOS*9gG-ZsU{V+1;Z8k6L}ndt;b2{)G9cxi`~ znYA&Z0YQS~i3*ls`q@ISrMoH{DTl0#6^X0NnmLHNR0WUjH1aCVB!wjTr=k97Kd8~< zg+`;W<2~JSqYw;>7ZwIAcS4iAB4mf&xm&5HmW)fQ6M(26OUgJE6B3qSW>Bf+3IL6GIh41A!a@ zbbNp${Cv;gujJ}ZPVJ~Q@M#W9wSk`KWbmM`JO2Ru*!?<(-_)4aJ2hj#iD`zTeGcw0 zU)6&#T#n)xK2;L`H0lJY_>m!R1vh9G`4;>kT6zE1m&{TNXuJdVyHm-q4}hm(Q8Mc> zr&oMqjygMH@=~eWjv5fr$wN=2+4R{gF9(2DnpWWG?xsVpF2H-pVCkO7@a1das_3Xj zb&R_ykZtb*MLC|dY%Ja^;G(ULp98(OxqPKWO7{NshD=ULgSi2KFH%>bgQbJ5!|Lw4 z1JLSK*M+UX9#X}}aC?Pbxgzc3{ocPLjAM=`h%v{Ov%!!%nh-c7k%pTyKyc;_=2v^^ zynHz$_bGk{W5;!nPR{EUA_C;+1PGzP5mgrVql>0B;SXhhJ;^N90Qg)ZLp>ia2e%#~ z6(>q&3Yqrg09@Wn*{kLTs9ou~;cC9>J7i^;NO)zqNJOO}B`)#*x|1c2&{mv9+@qeyZ|?I?yA2pDL3Ndl1xhzoIadk-9J0{8UDl-5 zWY$^&2f(}|ucXix2E@pg%V%RAxe+p0YG z-Cj%!#j(e7#qz}p6zrVv0Yg4gy63LW5%L=b-})ZMLrQG12}Y(>rH4xhyAz8)P@w4- zg_+SU+f9cXR^;qAeQkZEXqdb{VPA-8o7MSfYLDfL-Y|w(6Ix%fCbH%eXt0oTf-Une z3*tHfVB#qQf>#t-;45m|^ch!ONvi&lalkZ$Tdh|<3=#~>DM?PMV=3gWdYWj&ztwsPPAFx)=outlp9?Zl{P?YT% z!58KNVz|_pQhk5qc4xH;1u&z~=!9OWT^o6zn3T(ef}0 z`=PK5`K1?Y5kJn-_;v-mP7eSpF{*;m3UY@0clu4k`W^|@x+teemN_pOw2puMOuut| zN4_+y{A`5v5-okJt~`%~!rOg-!a(5p!sK6+VX-&`t|}}j9q$k9eZ5D9ornNXiqVW~ z8OK5~q6pU4UhF^Q9~pF1SMTbK55T*pN7YKCW!2HH7deLkV`}}6zcsYWbTo9xbT%Xy zygKN-gg>pBt&yo{XBp@)Jp%J89x5>u|^!sz5@VvuncI~^Bv+Y zbZgWD8b8`Xb{Emu9!b(BMrKz3#5o)m;if{GkFGf>L^s(PMvANCE(OTWPn$9+j8Qmz%cirQ8jh8ISM^^$PPU?5GTv3hs-S3aQTE$>z3-!4o-zQwl= zCttBVKr6Ue&(?vBa=Jcj%`G6YF;sp7F)b_jH`AP(j+u-WgdO?@&cIm-0z7{C^T=+8 zt9*QWwa)UJ45|So^R404&L`agB;A;#K%! zg!X=>J>MsQgUxOyLjW8AdRR^f2zWbPO`sAz{$gk@no`t|-j&TvU&glRFL_$H-fM5r zw2=Bv{GHT0xoOBW!F1Gky6%(Bg(_=7OYO0c1rRg%+{clK@>~-4FdSzeW0IGRU1F{r3~qe0~ZBc?*e%C4hwb@mfJ{?yg-RE9@z7s zqjzR`vm>aopERyc*vS*X4Q^t$9x=z`T3=mu10I7uc<%&o*UmrM3zPV zZaIwVKoUu#kW9a&p)zbcX*FDGO;rJW|&}DVA%L8FV73O zr4WrdmrTr%pUE6Py0i^8k{oh_GXjwWMMBv`|4c>*Jx`@SMZ^;fiEA&jt_nnW3Qb9K zS^WAriOgiC!Cjpzv^n{-HOP07^g;o=nDpgQvC2Pmw{9iKXhj&FsgwHvkIu0RWY&ix zIboHA7kD^)c{`xveD_@@EKGE|ONQywZftEzX57^eVM^lB$W1APtc>hESq<3-HF0?V z!dC}@CNM%XU*d0yHu$>5sHT$B?E^3_pgRlO@;eK=aIb}qmbFpE?IeK@-~~R9t5HTh z_Ujc)-N^f}?O2?9FkPKBlX+p@2DbPX`CZIrgQxhj{0N)Q3+zJe!tBEBBJ4gEs#13F zcHHdX2QOn)Fv^_j0We(_KpI*`N_j!=tKcl&am4HYaUeB)1;Sg%p4fwr;!q}O5)3G+ z(ggB>AA&z#cO0wK!+HaUAFaqa*xi%bBQ13hnwI8sR;aVBjk1u^B5JStCi=bVyJ&0G z1Ji7xSiM*S96m2?)&W&BgjUD9HKET`%IWpoIC4tyQHIi5C7aLqAc;6q_e zk*)i>5x1LdeSm0sK!*#sis}78RStl7LVya%JRg?PxwwMsJe>~0#G5oWDPNIew!UHJ z+umf&gN=4^?BhMMUH)Co-DkV8Lxl6IF@6T=rq_ZbhHwkNV03dv&52lTW6FxxIU^6AnVkiX)PSQDYOsCKRkrc% z`4Ix;)hUXqLW%0>h<>cr4rK6S2w{j}NP0#HA`{a$z>{AWN~wG-UQFa}X#Jun(Gz1Mm{X1JA#`tlX+CU(ziZ zUvHb!?C_}lnt zD@PT|`Tjg8Cv{Ey>bC&zp07vaHW3W~uDFMvd2ybYDc5}32CK)I$YsqRy2YL2rY%1$ zZnWXXTHuu6SL)Q*FPZON-@LwGGSm9BVc2PctPB+iyF~Q&SHMD%`Uardz*EBY?w0IF zMRyDSVRnK!FURPd-8RIf#6Bsf<$IgW!Fx~kwVWJ?ZPu^3tUgx=&~cJt!c4}s?hA_c zbmbS{b`Ukto@^9E(EIcFOZuybE87c)3#SMd3V#`VjlMGq(!ppWAu;|+pG3+eV^X}A zo^xH=?HO&92GT>)2sE57<$K$wDb}6gQyJreu@F_^34g0%GnUlX=_SqK@`H9AcAZ`* zFTE+L77?(d5?Mzzf#bCO25QTGebxc#@gr@x`>8&gG8fdO0XmipoH%B?6pwz!Q3jnN z#1%5S#Ig_ez&M&^#2)(BG!(3tF=8CONGs<@sV+gNf(wgb&q1eM`z0sci8oFEhu8VH z@_-*Z>d0!1pyJ8W-%b8ZqL5w1ub+ZQmGGaY0SsRzYwv01VgzwVRsworRl3@3i&t4x zzMl~X*2mS6NXMImhp!LNX3fgZovbl!e_9Y!;3TQ^N6PmT&68&*u_q-b-6xyH4s*BS z{>9m`*J86GZpJq20%JOSmLJp%b`Vr1u62Xd5K(HNJOZ)9+Di=w8*gHn^=wRn1&9xGz-pE1Nu9?|F~EW>g>p69ahu$P|SE>bwM-@>4hJ)r<-p zI+Wn;q(~lGAWwp@H&Shg=K%m7UYCO3gFAjZ2xHnX2TqI3#pAvC1J0g5%L@0?#=M*h z8f652XdXVSS9br5Hr{=^`)BvsaEd$bj&D$9kjVE5Ca{5~OA=`c@$22!bhzE^@MiEP z0HB!?5cAeU||`{V-%u$)im=RUli6+9 zmDy|9yEc?ImEaZcl^}w0N(c4uy=93#olY=`b(6b#Nn3*!&>;piMu94@yuzbY@C>&z zsc_8+aERA7mUBPg6ryU@Y9r?JCxJzQsRge^BW?xlUF+THJ?gzecJu(?ZK8*-erL?J z$^W(F0c8u|LbdEaz#sdHH)~`4Wu6IanLj51NC5FZz_A$~>Y~`Wx}7}xVx8yjJ9Bo62N@TGT?$LtLD>Zzc1W+(k$$^dxJ~opXLUTjEa8DlBcN9H6-h- zdP<-Tye_agR(Bg# zvzl_XkCE$A6(Fyr09VZxe@DxKCV6PVmzd5Uff}IpoT{w+eDC3Jf_p!_BM$CootKGf z;HJkv*k5QgJV8sM70}nv#%N}=`O(As`R0=$m&iNZEA_i}APl(aOepp=Y?54f>7e;4 z-Wz?AG(F;3L`2E%7PC`-fi9S4W2E#hS;@>doWo=E=9Uy!-L8Cye=486CzmuQbn!3s zqaNBOwDWHKZrL4MK47ze$+EVHg<>P(QLG3F5-LQ{U2z3fv2ziDOWU!DO5kUQu4wZ? zw^ik;<;Te*?dRImGG_)6H`@CU&dDwtcqd-y+Ulw1ugiRwu$OpRYx-D`4F;S}kXM`= zvQV@zEbhM1_l1l#5>T?bwNYReI3sX7r6qy`4y~PHZ)@Bd(v)g7dv3SLyKuhUPYG^u z*KUJUC2N-M%>G$mo;9D%%3r$Ee+oiO9U=_h4tWdS||V+_^&O@Ji@m@s}z$4*xkztkmpN<1`|c~Voe*Dl&o)gihv zmIqXvp93RTBB$M(^qDAJ)hpNmOdbq^yd8#(o2IUQ>~>ZJ1Hj`&6k$#c|Ls*nR+i_Q zu*I<+tzFH%XM3@GCG{I0fc~EWK){NRoFiD!g#4ZET99Twp#Y45XXFw%ciL}hLk@o` zc(_)Lxw#cj%GxRF%MI6b8<@mc{{u>8O=YeB?t*lZfwY~hagVy+LblKxlrQ9|IuQHk z@1_>=Qii#XCXM;S8rCKAPw8chkLKSrd53$aco$wbg#qae6qeTGaY!wdJK4I$fOj!* zVq1pwmyN*pKn~FFCI*n(gP@Un$HaBT-z1lL1#YWOyH~Q?y}P+fw#R>|#CjO~g5F!f zQR4e4#mOVm9wf;_0QQ9w$gSN7^t%u2hUo+LT12wy0fXA!xDNN^h4~VvM7-0l**~+_ z=8WHtpA>#BNr1u^pllxR`2j&ADj@6)8}QBpl1u<^+|FG*WW@zzqKaDxqghFa`?Koe z_WCc38QY6C?i{i-vf$Gj*;}%r@yxgyrv~sB@71jlt!&^dkq)sLBhZ}(-!pA95% z51mn61IqxsdRT!?+*mNd^vpf&1iWBTe68vqonw!X=j|zgiguO2Tr2xXN4bSWc*vc~+l0n8#jToyIDupJ7E8&7I9bM16Uf}?M#HNuXK zaQC95?8E51MeHF}X# zoA#PC3;(|zeNX13gqQ%1Ax2_I8(GD#ZTsIT|5b3-qWJzizj)PNn}ki7Cd z4`(a_v)d=T@AiV<%W+_ao>eZc-0gUMx9N>J;`wRc>?M`Lsqs!bHC}*35y0In30QuF z7!ocSygN(;sMVB2iRaS*gwdcT`nm#PeP&qWP5FZ?e<_OIqaIU|g_#cwE?ceH-?D8; zEfgU+ln`N4Y9NH!t4JAuF<15?AUN^$9&5}wdG$rrs90x%XHY~Zq7`d>xtlRTiaHU&gT`ax1;Vy}%kcn!&K zjQ}oY0fqv5C|Fz9xlutH{z|{}1iPGHM*Emj0z$m{K%?nqSb_jC&}{TC|4C&y9^Eiy z&yCEan7~6t*8)=HDCcydx9NPq8mZZ3CgD`soWkoz1l8J0e?KMkF9ut-PY!E-(gEN* z64p1F80-J3lMdkS5+A-@IjY;MP+y6K&ORR|LjKSS+Iw~doSzZB2iX2N;Y~6f1EEqZ z`su)l7a?@EiAv!_$X1l?Uy*$2QI}Ze(2-(;!ef#oJ3R0x$_0z-JvTumqV+RdBfrG)~w=tB|h6Og_Q!y7ZR` z1t11-q~Gwg7%kG|^)DuX>^2Tu!K%1IbJXgp5V*~W>c6$1F)DtjRA1ln?fc*m74Aq4 zxXiaod!x&rX$E6l{wKT%O-_H98%<7wjal>^MgmlZIxSF08ia8|C+?{FGtidH+{5h$ zINKR-K>A(Y)!NH;uif@98u-xca9CLwgM~3MC{=H;10#TU>NYz zK2nJzlwk=IGAIU4T0EdA4^|{UFz5@ZfPqabN^p0-J%I;sA>|4UHOdrFPa56=stDTM zgVSMrUQt761}SjJkFnhK3UnO^|DXZ+kA9mk@oXY(VD3VG@$tsrvWk9QAlify=;Koc zWZiGDnb7~uS{ODzQot@AD8mUnX)M2Nip34^5fb(e4R| zhQAm%p%D3>StkXM0n5Ho_wU^_M^b2w5}t_PdX6Mj0>(B8BhT7jF+oQU9>M?hY8}+_ zgmFOtiFf_)H3B5ZSHQNOi47l>xD@!{_Y5%rK`H&aQbYp~djxo-KRgO-lBYFf%mDau zNiDymLyq2VOeI8tsPeKzxDudHT=KckpDj(WXZ?yZ)Tc*16UTFu|5@PquyI@GKN%~t zfJhktJnlBxmH@h%G&!4Mc)r++`SKKS=!KTSRYhF5j;R7>tZXxoeh|hMc&Rt*e^aDD zLY<(=rH=t>RuyNG@q<{v^1tAgRRhQ@HiUe8_F-|~Z)PEP9_mvdH;I6H*ozZJEUvpN z#|_m7D8XVExrBdtjkLCCn8km3=1Gh(aZWBi{C*QKmI1oF@mNI>!WfzZink|NZ>Q35&au6kEDU#UD(kTX$(oW z!vf>%3h6#tAx|G=S4MDOVxj+yxScZ7q1W60mg{6=BLt3Vn0XAEu*NMU8{Id7K?^*z z)mY05Y$rL={DZIT8Ar8M?&7VOw^NXuI&i%q zG*qyJii)|s;XCiY5dfXdKEQ(0B+2zdUdab*w7^>}e1Ex%ETA;^rX*t%*U2UPz{Sc6 z7MqEcOn4!0SY=bhB5@Ody#ms39!ppQ zy?tgN1s{GU173WA&OftWb(Eq&k_Y`$PGqs2r&uwHJs*WDA$w?StL8Lhw>%gIye-04 z%_cG`!9sUlb>scB@l{}3{+uF?-Kx6rkv`Cz`J2G!ETS>1WQ|sEBWSS%$0q-jvwk-$ zwt2=o%9g4ZaUw1-U@kz6{G*M}KWCIbUm=b$-38LF{JV1fw514(Xcg|nYroa}_zypr z3z+gB_^4+*P<0sVVb;vE|12wJimByO#l2?9;{F=*wP^{1Z6AIOp0n_u-lVEn;qSwM z4;fe9{zusH)B@L%9kw6+bf&$;{WK9cX&j^ms-~!RV=%N%acFi+9kB$+KSnSS#FBpU z7&oUc?y>%7qd-dh!WK`K|1O<0t9getZD6dc_%n>6I{-{n>cwLw zuOC(wI09g5fi<*315zPi6l(;gcVCfUI=Pqp*34(67ELigzl|1EKTNqwb7jWMyfx)C zfI_@Y_Fwwk-?88mMcivF@G`K{MbK3l^@e7Hsh_7UR!qQBK6`(XEHaR^v7=KMEGxJy z&UwF!#nrD?d@sEZcJ(fzt{7~iek)e$C*JCb%^U4J$tzj5EdMHcYYr>#-lTM(*NY&i z5s*{tS;2nU2j2bSr9jpCbTK};g&uj&8T?<&fwv2p$UMfDs81e0ugS*RaZ{kI6o9DL zP0QYK2=GYE@Q(zR5p&qP8o$3|Yy6Teh*<6OFc!2cSgG|Z{ZATASHOHj?EkwmCu|oH z^Qw0gI+09f=zf7HTZF92q>wOtEnX&M!TTrM#9m*t)T;kDKiZlD>qj6Uu|tr^J8W%x zRJj_PjKLAQRNInb4*QC!`!m)rIh$f8wHH1+$~WA?IMkp48s}>U=?J103oJ6iS7i*i@$n}wlUPrA*p92 zPhkHtOPE7E*ukE?k5?-T+8GuP$7-!$3wN;__brNw53t?fEr_SG6BXWM{U8Rxzs>ny zefdj=N%g}fyril5nw(*K1C31&+gAWF*0UOd`+Q2j=d`u%KPS1v+IlOP?-B=idK~TS zieqw*H`jBGLl0vzIh zgO#)Oj^=L7?DZbL$Ty(-jxFZH{&JMcX}3m_3{SgmoNFENsivv266650xr$&y=sIo8 ze3knpB(Q`|@#1d9h7H%9_vsn_zoy>9pX&FGA3w{;$jDAPq(T{GmEssl86kzp-bpHZ zoDs?98&xk&r#JIV3B49_KjY`||#LzrV-t54i99y06!@?(4dq*GoC%J|A=O zsQ+Igs?*#1F75y9QW4t*rA?;{dCBbJ`A<~MNdr9QvnP$r1*pHH0_~2|;~6A?Cux)J zLh(gI{wFw3j89xODd~R%`Iy}A{{2IJrC7Z~4YOaM3LSA!28M1Z$FW#^nXr1k)C$yg zLI`A#$^W+!O_JZjY-653WL%)~3qWD@*UALyy0`yGXMkl>nEvPB^j6vtPF={v@~2A&1xV4y-=Qx2LB~n_Xtav>xZ`BPKwZfbjrEsDeZu+urjT{H76+WpwiLy;`6-9Z|D1Yb92 zBOTF6-to*Z@et}39ZrV5PzUuQ1`U3qGkerSS#$U*?X5P4pReJFHNzOdGv;{KSK(R+ zb6OI-&&kg93rOcqKy`(9&YZLJ=S!x)*f6|Z=fk0_)rE39@?tZ6^k@l?AAM%y>PkRs)T;iU}pa<)pIR})O~g(L*#|8nE>8z`nI_CL+4)Sd;`veTS` z4tB|L|AP~tWEq{4$26(5*Z0^qI}O>;hsCkSZ`lYNn3}{X>Uea^wz}UO*#cxo`75m8+=qyWcR;YPg zD0q!5!%Ks`*Wii&3;>tHqL=_&ie>Z9@%E%p2CxvY>I zaXF;<%d#IIun^-!8L~LRQWCocr%04H03ziSn)3fh=#!yL@`(J`AbGU`K@=KYVDjhu zM6JS|!vam?_r8yPO>BE#x}((r9e>PWS(;sEjC|R23%Mx8&8r%2-O3kQ%ix>@paD+f z`lQ_FkKH%5bWj!DaKgZrGu2Izmo@U=QZm|&r{*UfZ{_?#>HXf#7|4Y5*Y~VI>D+a9 z`nRIcp}rV5-zf%YD&&7`(b=RFJ_(qyj9s*l#615N{|4{+kA%-2N_M(QkTm)P&Muvb z@rvSWs9H9=dknll=VBm0TaCo4nZ}>(0BYt|rJPmt@bDzUw#%p=+akrN!={Ov^mpX-(Ie4fVfG6TqvqVSlXY+6Z`Y&&6w(2CwRf{V@UuYD=(|{zl}a6-J~wfQvVj`P(Wc(>Ik2{ z*_U`%QNp&YxCf=D%oYg7&&a8R8?;LmL|>-jbZ&Elgy0#f)#I)5P8!g!|6b>v!YTl; zRxE_hnQctCRL5kE7}ks2pqNI#X*MX)N^J+QU0UOm7fJ-lt6eBAEeKA0x50T;b$e0G zh}b15Y;p+#I;;h%acn?GP9y+I`wO{8FDg|@YbE|8EiZHmX)ulfQXSfjRJV>aiaSGYtBE=n+{9eI8-V z9c#!{B*-QOpa8!DXu$83q=!MkWDreaTiUx?I_Fp}SCaF^g*`95#>XSWn-uX`V&^c1 zKLOTaeH~qSk;c2E(qQ}cZ?6z>qyhu0%lqcD-M7@lZzz2&{}0CEyYl%#pf~zI$RU>R zT`jHi*|CeIDrpmBS4OT0+xHTsf(qKNxzYGC@6|(j#zx!96Kcg!*w+I|7CvaAOp;lG zE8D_dDR=#7#!F*FL?SCsSy0fK*V~>y*1n&%**?#s7xbYW<0+LjcC(hLYUyr7I=MyU zE(73?h=PTFBZz5or0f=@$7GURy{mf`hRW|yHk<~m-k#gX;V1&wBlT8poGHwCRRqNC z3TN~>#dWSZpR~{ZJ^#FvUhq5Z7)PnNu}$Te<3g3degR_Q`H{uE_*DD%hyh=t2V$Sc z_Hl;O7S7Q?GX3o!&o65~OOda>0o`63cW~<*{f^oiV3SDL{9ZKBwG?rRKIML!C6_!4 zIU{&`b1$qG=FBk0ReHnZ+v?ST9t-{(Ug^t%e9T|m=NgBuLVG=_ytU-o-^XDPc$7X$ zzDyk~EasW<*rOGDx#f!pW5|mU!>3q8sS>{^e(6!q8Ouz!#qwNPjJG4@hX696evg?NsSDnKyPK2>;D+pn?d zvOy8ACEG2cpTA^Eu;R$lDV;tB`aZTo(l5haWD8**hhk4r-d6X&4yz&nYl$?da$ZWY)-3Jh z1EYvyWI_J}b{k)+G_>psADTCDx=2J8Z&X->&Yo3r9q&_JMtD&PJTxM&xM+$7Z}p1S zQ2n=i0Konb-(7}Ee%>PSf{hnqh9m`50JNp~x#cK#X7pW@kl+;9?V_82GiVGzd%xl9 z+8B8G2luH8WA$j9Y?{Ci#aZWWp&OAj_rQO*Py%j zRirY?F`(E#cnzzAGiB)ZN{vb%#qj{mQp-qB73Kw>H<2)wbbA z>?!3x2B|Ah{y?t--xD{+2xO83>1)jiH6|6EvoATntUMqLQ^G$N?3^;|_S`s$PL`6T z*OY|Zx(&?eaLz^+cFO+a-ZuF5I$M*AojP%#v7nFYO`z#M6SSS||2x;^^E7{rPeKgj z`g5M2XMlMaN4T9r{6@_nadooBWC$Fc3*t?rQToKXxsr*(C6!bNI7I9tIerqg+AdOR*8>`11Jw!a`ypK(^-W`l%eZ>tUBK#$?f@qb4{Ua z;JM^&4%==zOAa6pvEhbyZCEziIz)7e%!PO+P(zhFR z6U4VA42riLoZx~X6NK+nV2I86>wB1~XpeJ;#HV*3&nzG*K#<`~rr>&2{|L~aey~Hz zJm?eDm6g|T_BH6@n<9s?Z1x1u-LrrSoV=z?Ok^`&*Q6-u7K`yQ6}z`Bj_4|woFS)s zk+g8z=m?~k4tPTQ|K{S%*kPstInGB3qz+_zC-mzvBIBLt zBN11T&z@V`u_}ESpH9RTiYQ403vkN0<1e#TGdS}(7wod}?RjXxis;48*UoTFXdH_& z8=yb`l<+L_NhA**3mR@R$$V&k)AuyK%BCL3Qng72Z&b5t=RgDeG^3lQf;A@}UL?PE z&Uy%&-v}21I6msTwSB2UyIhQq`AyUEc+*dj^VvwP{}x)QW|hr>3}Ya|VzvBcJ_W*% zt(->(UB6p70MX46TZ!?dUR|MF`n(}ET-M;pK-yPR`qZeUg!D`ii^dmm**n@{D-_zIN*p)zDNRH{nWKD@oRAa6{UYtHt1M%)wHx(_-E} zn;~C|u@$CKTI2YY2PldD^I-uAuk{L$CR1mrUxljnzZxxPy@sRdWqun&Mme=GKp!^>WgVU7wL zUChWwa{Xi%j}u@KFnDOJ0hYD`O{k1znLqA0ku-F<+w1gR81lCbrz>mS)A6 zfJtk>*;?NPd`b9}1yPgx4dDuk-4&8sMEeI^{p4qRox@lMO{jD?orpswi=H~(YBotf zvEGt34R`Uush;^PlD-b9UN$^^r2{#TU8ik^JNyBWa^1_{5n2=(ewts}N?47$J#aCS z@^G>4#;cPXJZv9tx^e)JJ0QljSjRb(C&!MNeV?g#yF=$9eG5+&p<4l3PJr1)862zQ zIkt^Qi^crgiYw^*Dm+D}S{CouPkmTMHJ0C1cWjs5@<9AcjmSeduK=Ko88pBx04RO} zooJ8*M$$EWv}^R@u~@pEu=eRy&<7Z+>VtAwqR-=X#Na}X5%l{QPSkAJ;?V$^mk11e zYA<=`a)rhkKDK4(Y1w(^X}L1&*DPf6W(uq7+x#IG-wOAXc?rI=Z=1HpYkoe+-5(HH z8yM!q+{FXnjmJu;vOH|zJ*)#+?BhQmJA8hihN;n4_vC($G@H zX=ZAOwa`z+MXT?o8)Z$JqLq3Zsr3+9iZ8VLf>8F1huo0LIDhs{+N@Lji5XxX0B0=h z*N^D|9<8T|oz{%*>#b91ZFz{ylaZzA~s9?gPT<(rKsdq-$3!yqsKa0-_ zE`NgvXz1f~3oTyim;}LU6`iz{hb=XvP0@gixs&2gjce5(lCy_I<7DLifMy5c6UEWT zkas8h#_rELdY_u#K=SSJAygaW>pS_RtT(M}>dS=>>2>6aW;rfgz`+x-Q`c_HD%L6cC#1bJgM`{ozi<;xYVVO#gqxtn4AMICxVw1A(`x8<~A|$ zb*Yx_3*TLKZsM*AVM$yn609Mtep{O{t5+3Bic6$B$!5;2gu;qLc{`Fr2f?)GxDb@J z^z9}*_ab;q9SiSNX9e%ksK(RBR|l7{if*+G@UB7(>gYpl9r055Hve;FW?soT7toWRTYIf8zn0?uD~j zTl8C)3{VJnn(T?72zx+p(OOFpZZBPsgaalaR|(m z6W3Kom0bicM+cYIGS!JfASOv0Q+IzXNxiW0`2-idx7ja1(0)yMhuP;0f32C$519AR zbD8LX8Od|~IFl%xkUOO&_yffDJ}hsWD@Bw|Z!t>OM4s7eE~1LZU|f0srb;A8HQeMg zVoc(%oCn%mr{;q@n}=T_bx8a#xgU@RUJpX`5=j)~NDzaVcYUFM&Eiv`|0z3BPDsu0 z6_2ghIok?g1I=!d_AKCF_gVWi8p5Y$dtAJV36FZ7zot|S5=Ih4Am#vYWq$r-uJE)U zHPSY9uDS#vdd~l`Ahrou9^6A>ZQZ#0rP%T2%)=0O@y3RxPSZoTE`mcrk3a^Z40{i& zHOT?im1Pv$A|a^00oVLzuZ(SG`h<$!}_FJ_5;-IoE8PyI3+1 zeG>PS7p_O5{_sYijBtTNxt=jqU&S>VpZ}BVQ+t(8c#;YSEdM?53V9-BKJc8oyo>yp zjttML_vI{)u7|^XhT`Y?G2UDmh(^*7$7KlRlNy_4txIJ{RJlQFwz!a4%;McXlAOvF zI(AhCqN>1?YYQptaouD3iR~-dXAAw)Iih|}sjukf(t8`iQZ!*BxC@qnQCYd)>33Z9 zb4;tP9yP}ChuibL6wsy@{k0!B5~}pzNG+tQU4&b|-XRp)aTDRTvTeMIHYHy_Jd#f& z4iQFV1Rt>1 zv&#Q#%$I(2KiWQ72p-^ps;z6iEX@k;uV~i)_HQNNnuL>L$KgMN4CtgxIBUFaU%+do zhzG*HM0p0crt)n)-^*iHMilJY2+7xNo0}yw5IQ45St&GZJKCvm4$q8>OIK=mmi+lL zpl_;l&^kY9meuiR@Srz0^) z>Ffp6nccWldJ&h;x0cExP-%Udhc9pTt`(kLEY8asI5J2+vwON@k0A1ikk!c0-5>hsF4Zj#oY-oupT&`hq>&Cn;XXr;3+IUpXo_LE>ty7oLmr#%aS6q#p5?*afF} z=Zj(3cGRhn=S`!(_%n*j-%#-pR;KUTj79uAi3^!=e2{nH7+H>dI3v@7ZAb$}!nN>$mft zE(PsqV(J98Gl{)%pjP-=WhW_q^|ScLV6zO zIz5Kjj!KCHgklYbP}YxJVg7UVfAHd$%(f9u{685(=>?xTZoHF)nvq`%JOo<(@M;Q) zvpWw%<$=jAq_RXp>Sv74JAqSjfHCn)1XW!;1NP?woYXJF)U5Wu%B-iw9Q%cS?x9c9 z?%AxTWPM;K>zRD;&oQ)l-o8TSm-zkCM5tdApsWDnlWIZS3asGvZRp+hSu}ZYD)}O| zjaIQfp~~-lz(7gGdDJp%@lnmn&k(sD-3J?Mu-2w<8WYnohh8iBZ9SZVXwR;=5+pG%%>?%Pw!?1+UGySlhpU{qzn zGqxSc^FmmYR7?AKXxTDNg1gTpkv!8>(Y{O1w`_h~>goh2+=r{yd|%hlz!0JQTXc1z ziu*QULd5Hz@upfw)rQLseFSP0u-B5K@_pua!$$PBa+33@mxAQy0>7r6I0)1^Ne#Zi zw9kN!nBhN_)`@Wo=&e$LMoL3-w}3k%AxkZ;-n=w3G!~P;Pbsw}R(GK9v+0Q}-c-@z zgd|PTrQ;bZeS|^Xz8qywOSC2>)0w;)qC>F>=PmyUg_}Wu4?3ao4fkZ+wR#LO>U%up*G?7!I%`iT{aKk>Bd|Sl6HWH8#@pK<>k{Ime5{>QA17$9V`kdd_28U){ zg)xEEN+=_QNLv{N7xb)KmmfRqsmJR)=-HvxI1pyHYLzyKI4_Hxy2|x|m%ngRK2&PG z*OrRDxf5TZTwBts&%)*p3}GrSR|^`0Xw%Yj^zYI94P*n;B$fp8sO(0@-Qe?RYJXnf z=@3u4Vee4)!qdQXa#h$MeX4je`cqn2-zblKavI^dA(`x#$W5Byc> zkQ=0-$2iS}K?E|L76j8P>armn1mv43O*sX^@GSx43tQ{F>6auYMuNLxC4srWET(a; zquZU80x$wEbADOm<5>2?;Eb%6GW?G2=BU!kS$E((QZ)wf z61jiggrEs8XAF9D{6{U#`+>8{d?;0&Z|V5sKY=d4wpBH$1-ZKc>MmO)?r9b&en$%Z z$9C@m@5f+S0(hWWO^pY*DFz6E@4N?H&(T z28HrbzoFR`_~!Gs9eea3S!F)Dfpd~jby`?QWxXU?rgvD# zNgMC8!;jVOp4jEW=K5L!XvUI0lnWIZeSJ>@BM`hL4J)dH z*+PSpMnEn~S+A4VYa`XZ3XBIJzIYwWw4&d<3kHEXy0@W$u-O)ufX;J%Uk1=4tKOFc zrM;sb%>Wl?VTolSK8q$Fok|mi3q-@H|w*rUo zP&kSJ;^=PJwJ_gI|2{-Zs{4F!l(-p1uzBTnFfIC>(d%u8WYmdWbKp?1h1_b`F9Bd& zl@EgnFs0C(ArI1CQL)!IUDTZ(T3S5c~B?z?Ow0STw6(#Edwxpd|jULUC|JcZe}HSH`dA(rM;V^ zT&#v)A!b59(ddtCg3#FkBv{*l*#yPkgt~k#Vsvr4-}y}wrt~^V>f{2S`piH%@g4Nw zDoMR0kcp@=D69j$NH0}yfI_J2Rfx~ajBsUXUZZ!GaP(*~2$VXKW0n~TQf)LZ_(Wsm z?^gwXrSc)|NB#2eM_ZSU^V@111(1hdLt3gnrfhlieY7ZC4&9J)B9YuNT=;#p!22ge zKrl{EkCQ58O`z?)TNioiGj``jTk=-MIS^CU6@%W2Lwtb4A^Oq3iq#M6 zl2c1W_rtMY$=p}_#ceU?u6#gm?w@Zb8ybNcS z2C5fWDxN)Kd-HAQ%*t=T4hWDhJyg^`>QK{oKLs@r1Mw*9$c*62j_3jrqRm3ym&5Z@ z&?aUH?ui27o7WtpTN?b;e#Yr_syVND;eJHoiUumU@%x1YtKTdtBm6LkcnysVD?R=y z{h&@*{63dl`SjNDc-2{abehc>vd%!>f%8?Sv)dQH)$pmkD>_p@RmjT~{PcyLzE%{w zxMrQ^(NF)(SzAm(jfDI8*}Tqyj*50N>^1pK=AM6d>0&Qatm}&O%|K7A?&u14JDG*?4~6&2pTHCZ zOlMz4+0zr{sH7|-a!ZW$cFVXViu#m8tgqdc}c2LBpV;9vD%6; zv)0mdFu?NY81zFs`@8n+Lr2St>oP@hXA4& zTk+EK^wF;tKxD)>wHd`s8v=*6HtwIa|MA5CF21zu6(AnG@;IQ`=xD-9fXUH;5k#w( zq=O8tAm772oPXvs;a2aMyx%Nadt{Wv5xSlKTS>aBqJGL~Z8z!z8qs1jx>Bz&%d&WS z;@&H;BI`UIjh!^a7j8LmF)K|G*->>Y+iGg`L|iGYes)*4<%EU*$Y1Bp^+RhP9-cRY ztd^jBM9ajGpX4K0 zebGoNpamm&2OF00Pu_-991vJa6r@iZgkvv?*aC0P&rGmBZQU+rmy4(%2PZA7H|gum zk!qO(q7C`T2`5LbX&q%~$UzK3$E|1i^u%8~PKngz`2)%?m6q1b7RkBo1AqORo6)s&n8hzV-BMJ=S?i z)_E`H%Bzf#%dp-&$a^VE3-%{~g*cA*OxroYU~0CVu&My(Y&TmMj`sw>G z0JYRD27&?sW_CHM zi@@Jyi=<`<4rT!pF>PFrOjs<^#|j_d9FC!Aeezn~T(rg_Mr3xqz?ho*`O3+ilKKhC z8>ctMS7*Icj|eAS2a_)TIVtGP?dp?b!k572B7qJTmBBnHIPfIPGb{GxBV|d>c?X&& zR@h3NtlzlzeI}`f-(FMG%Hp`)OmlD&uiVJxw)H1OBKfPl93UsJ_>X`1JK=cceOZ72ifOqo+azSAAmzz&2{rg5FGDnoWd-Y^K)MQZ`Ck z%UOVF`|)D!qE?TmS0*$g`z%*?^Y%fr_JO>p;rc0I5Lw;DXEaJ8lpYKV?}?sTXX< zp2y9i$WI~7E2W9`z!L(Iu=NHff?##4-h1GWPdYc(Xlvfb#4{+C zM9bW@>S(8RZARka*}z?K_^Qf}t}`+rooS8sI|mBJpT>O;4;n;o2tLT6M}G+H#EGxr zJO%UXx7>#_{uQ#nGIH;jy*|0w5{GFcJlpc@^m}#~hbY9S&AIt*i}SP~w9(PWb|nFx z=LH1z_sIb~2$+fiE#w}22PH)RYYOTwmet2ld58X(D@cs#n3?{4_qt}fQJi_z>X)ao zby0u=a$VXEr(^*(weZjEmZ{x^8y1HAk?ZBRlU^5YxxZ!MoqPRa2l$ZzldLlQop7#j zo2_8$xCsx0hKp+p{J#Ev@VhV8fq@~}EU69l8}1iOp6HHij6WRLY7|)|I$hSS2*YYf z6E+9(kH*jsw>q3Um+0Yln{NAk%Z_ER4~ore^z}>1zV(OnZQsf4w06^_A~t&1|z|(Qaty* zIjme+3ahIq`r!Ss4qZ0Ad^|u(T4iDMYM>Y&hpc;cy&5;lzi`7#4q)q~y9{N$?CK|9 zzJaUwSSvY9>{#RCcJe`7M0_f{h~B+N*Boy?dm$UU@VGH3E6AShSGcTqR!(?Ev6kKx z&WX01Q}Jx-ZAA%1B}EoRbluxRXTjG_3zCa=gKxBG1Y;{ zjf{B3tqKOuhF2@~_o+^nveY3|7pB?Xd9>tOiBM)PK4k9vx%;kTJL)C=p0NX^YtC#4 z+%$LD(V=zV>31FBg7p?aNTsN{cPJOO%6*8hl%?DSJuswNFZPzLZ%d>mvzTtb*~Hf- zp+C=;lYSXht>@15Iz=|9?s~ndUR(?wTg7l}z72c|I1`UIjg5uwuG+eU)^C}SZJC+T zIIYz$J_=t8kMimZw-V|LkKFgqSDO@ncd`cz7!0kgiB5A*8&q8_2rCaQk0_5Wk1LmLyz#Gls-eij zcI+Mn+RWvvb2OTDxZzy8qjcF=%0KaGOWazRbisfI>7^@R>HjlbH6cK#pr=DK!4NI9EA13{_=v9i{rotL}z&QegqM#VtW>X>4;-lkh#^x;_Le(h%d({vX^-;DK1 zvTUt>MMYVR@3lt3f5}iJB~m+8tYnCi9`qaU>XydemN@H(9LIZkm`qaN1twj5cQNXs zw9Uw$S$gaIhii&-~6;i$01+xCLo$d&o)bV5ZVI4 z@ESS}1MpLx`DvJm0{k8L5?qRr#@ABH>?^p^}v5xP=~V3)7{jKLJli zNWfQ*C*HLhF|r2Y6|wC_Gyd0E>57} zG$y3qGZ34Xy zYwr=A0|ha^m4M6NDumcuS;{D9^|A7(1hMf{zP5zX-_(l*w;3mH5D4p|(%ymUlG47H zsx7eo7Y&(_rP`;$#VP}~RQBuuq0bh9f-Z9GJOq~RyoN(yyu!DHv8*m2*5Z78N{%yY z>K)germpk6ikPZ#)7kU9E&2$H8W)y=(=E;@W3Qju9!@xGKI|^X&L;H#ZozwUY;n!Xz%j>0tJP_xHycBSykFp&)nlloU_>(;1-hdR4QL# z&Xo6w8>+t1(z~Hv;y1Tr*Zki;tSBri{e39SU7m1uDD&BSD0ncigSX{;YpX>&LWxR> zSxfnkC)L+{=TqQgW#r=Vh^SOB^dhVG1J)pbx*Xp@YhJ}IZKw@e&|48%=D25X zc!bP9PE}!rsl?)flvx;_utVAS!$B&v4EN`yrf&KwO?uFpND=6m=CpnfKmkI6J80;i zoT`~`Ec{)l@;OkpiP%84SF~?M-)g{(6D2@3fCvl(<-DaA1goC6%xgyJ_7%m20c`Nbgvwk H-}`?6FgXDy literal 0 HcmV?d00001 diff --git a/k9mail/src/main/res/mipmap-hdpi/ic_launcher.png b/k9mail/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..56e4fadfc1ec6db940cc18f04c76e2b5187eb24b GIT binary patch literal 3048 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 literal 0 HcmV?d00001 diff --git a/k9mail/src/main/res/values/colors.xml b/k9mail/src/main/res/values/colors.xml index 2b6a098414..da800d1f88 100644 --- a/k9mail/src/main/res/values/colors.xml +++ b/k9mail/src/main/res/values/colors.xml @@ -1,5 +1,9 @@ + #8BC34A + #7CB342 + #9C27B0 + #eeeeee #737373 #e4e4e4 diff --git a/k9mail/src/main/res/values/themes.xml b/k9mail/src/main/res/values/themes.xml index e866f3a8bf..596619f973 100644 --- a/k9mail/src/main/res/values/themes.xml +++ b/k9mail/src/main/res/values/themes.xml @@ -1,15 +1,20 @@ - - - diff --git a/k9mail/src/main/res/values/colors.xml b/k9mail/src/main/res/values/colors.xml index 6bc9e93857..74f52c54e6 100644 --- a/k9mail/src/main/res/values/colors.xml +++ b/k9mail/src/main/res/values/colors.xml @@ -9,6 +9,15 @@ #F15E2E + #2196F3 + #1976D2 + #BBDEFB + #2986E2 + #212121 + #757575 + #FFFFFF + #BDBDBD + #eeeeee #737373 #e4e4e4 @@ -22,5 +31,6 @@ #000000 #757575 - + + #DDDDDD diff --git a/k9mail/src/main/res/values/dimens.xml b/k9mail/src/main/res/values/dimens.xml new file mode 100644 index 0000000000..196635201b --- /dev/null +++ b/k9mail/src/main/res/values/dimens.xml @@ -0,0 +1,5 @@ + + + 24dp + + diff --git a/k9mail/src/main/res/values/dimensions.xml b/k9mail/src/main/res/values/dimensions.xml index cb523a18d6..491d0d7401 100644 --- a/k9mail/src/main/res/values/dimensions.xml +++ b/k9mail/src/main/res/values/dimensions.xml @@ -15,4 +15,15 @@ 14sp 16sp + 32dp + 32dp + 32sp + 100dp + 24dp + 8dp + + 8dp + 4dp + 60dp + diff --git a/k9mail/src/main/res/values/ids.xml b/k9mail/src/main/res/values/ids.xml index 0310331da4..7766cd3685 100644 --- a/k9mail/src/main/res/values/ids.xml +++ b/k9mail/src/main/res/values/ids.xml @@ -7,4 +7,8 @@ + + + + diff --git a/k9mail/src/main/res/values/strings.xml b/k9mail/src/main/res/values/strings.xml index 17604a0b2c..cbd4d734c3 100644 --- a/k9mail/src/main/res/values/strings.xml +++ b/k9mail/src/main/res/values/strings.xml @@ -376,6 +376,7 @@ Please submit bug reports, contribute new features and ask questions at Set up a new account Email address Password + Please click next Show password Manual setup @@ -388,7 +389,7 @@ Please submit bug reports, contribute new features and ask questions at Canceling\u2026 You\'re almost done! - Give this account a name (optional): + Give this account a name Type your name (displays on outgoing messages): Account type @@ -400,6 +401,7 @@ Please submit bug reports, contribute new features and ask questions at Normal password Password, transmitted insecurely Encrypted password + OAuth 2.0 Token Client certificate Incoming server settings @@ -450,12 +452,12 @@ Please submit bug reports, contribute new features and ask questions at Auto-expand folder OWA path - Optional + Optional Authentication path - Optional + Optional Mailbox alias - Optional + Optional Outgoing server settings SMTP server @@ -475,6 +477,7 @@ Please submit bug reports, contribute new features and ask questions at Clear messages (Warning!) Recreate data (Warning!) + Try to detect settings… Folder poll frequency Never Every minute @@ -522,8 +525,10 @@ Please submit bug reports, contribute new features and ask questions at Cannot copy or move a message that is not synchronized with the server Setup could not finish + Username or password incorrect Username or password incorrect.\n(%s) The server presented an invalid SSL certificate. Sometimes, this is because of a server misconfiguration. Sometimes it is because someone is trying to attack you or your mail server. If you\'re not sure what\'s up, click Reject and contact the folks who manage your mail server.\n\n(%s) + Cannot connect to server Cannot connect to server.\n(%s) Edit details Continue @@ -1144,6 +1149,7 @@ Please submit bug reports, contribute new features and ask questions at Use client certificate + Use OAuth 2.0 token No client certificate Remove client certificate selection "Failed to retrieve client certificate for alias \"%s\"" @@ -1283,6 +1289,24 @@ Please submit bug reports, contribute new features and ask questions at Got it Back Disable Encryption + + Incoming Settings + Account Names + Outgoing settings + Optional + Add email + Manual Setup + + Authentication cancelled + Unable to contact authentication server + Error contacting authentication server + Account doesn\'t exist + Incorrect auth info provided + No account provided + Gmail Authorization + Outlook Authorization + OAuth 2.0 is not supported for this email + OpenPGP Encryption Autocrypt mutual mode diff --git a/k9mail/src/main/res/values/styles.xml b/k9mail/src/main/res/values/styles.xml index f21f428b18..c3e30e9c6b 100644 --- a/k9mail/src/main/res/values/styles.xml +++ b/k9mail/src/main/res/values/styles.xml @@ -66,5 +66,16 @@ ?attr/tintColorBulletPointNegative + + + diff --git a/k9mail/src/main/res/values/themes.xml b/k9mail/src/main/res/values/themes.xml index a6c12cf6af..fa0f7711de 100644 --- a/k9mail/src/main/res/values/themes.xml +++ b/k9mail/src/main/res/values/themes.xml @@ -159,6 +159,146 @@ + + + + diff --git a/k9mail/src/test/java/io/eelo/mail/GlobalsHelper.java b/k9mail/src/test/java/io/eelo/mail/GlobalsHelper.java index 2714a7320d..b3dd72633a 100644 --- a/k9mail/src/test/java/io/eelo/mail/GlobalsHelper.java +++ b/k9mail/src/test/java/io/eelo/mail/GlobalsHelper.java @@ -3,9 +3,14 @@ package io.eelo.mail; import android.content.Context; +import io.eelo.mail.account.K9OAuth2TokenProvider; public class GlobalsHelper { public static void setContext(Context context) { Globals.setContext(context); } + + public static void setOAuth2TokenProvider(K9OAuth2TokenProvider provider) { + Globals.setOAuth2TokenProvider(provider); + } } diff --git a/k9mail/src/test/java/io/eelo/mail/activity/setup/AccountSetupPresenterTest.java b/k9mail/src/test/java/io/eelo/mail/activity/setup/AccountSetupPresenterTest.java new file mode 100644 index 0000000000..4552d0787c --- /dev/null +++ b/k9mail/src/test/java/io/eelo/mail/activity/setup/AccountSetupPresenterTest.java @@ -0,0 +1,460 @@ +package io.eelo.mail.activity.setup; + + +import java.lang.reflect.Field; +import java.net.URI; +import java.net.URISyntaxException; + +import android.content.Context; +import android.test.mock.MockContext; + +import io.eelo.mail.Account; +import io.eelo.mail.GlobalsHelper; +import io.eelo.mail.K9RobolectricTestRunner; +import io.eelo.mail.Preferences; +import io.eelo.mail.account.K9OAuth2TokenProvider; +import io.eelo.mail.activity.setup.AccountSetupPresenter.Stage; +import io.eelo.mail.controller.MessagingController; +import io.eelo.mail.mail.AuthType; +import io.eelo.mail.mail.ConnectionSecurity; +import io.eelo.mail.mail.ServerSettings.Type; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + + +@RunWith(K9RobolectricTestRunner.class) +public class AccountSetupPresenterTest { + private static final String DEFAULT_PORT_FOR_SMTP_SSL_TLS = "465"; + private static final String DEFAULT_PORT_FOR_SMTP_STARTTLS = "587"; + private static final String DEFAULT_PORT_FOR_IMAP_SSL_TLS = "993"; + private static final String DEFAULT_PORT_FOR_IMAP_STARTTLS = "143"; + private static final String DEFAULT_PORT_FOR_POP3_SSL_TLS = "995"; + private static final String DEFAULT_PORT_FOR_POP3_STARTTLS = "110"; + + private AccountSetupPresenter presenter; + private AccountSetupActivity view; + private Account account; + @SuppressWarnings("FieldCanBeLocal") + private Context context; + + @Before + public void setUp() { + view = mock(AccountSetupActivity.class); + context = mock(MockContext.class); + + Preferences preferences = mock(Preferences.class); + + GlobalsHelper.setOAuth2TokenProvider(new K9OAuth2TokenProvider(view)); + + presenter = new AccountSetupPresenter(context, preferences, view); + + account = mock(Account.class); + doNothing().when(account).save(Mockito.any(Preferences.class)); + presenter.setAccount(account); + + when(preferences.newAccount()).thenReturn(account); + } + + // region basics + + @Test + public void testOnNextButtonInBasicViewClicked() { + presenter.onNextButtonInBasicViewClicked("abc@test.com", "testpw"); + + verify(view).goToAutoConfiguration(); + } + + @Test + public void testOnInputChangeInBasics_withInvalidEmail() { + presenter.onInputChangedInBasics("bea@dfa", "test"); + + verify(view).setNextButtonInBasicsEnabled(false); + } + + @Test + public void testOnInputChangeInBasics_withValidEmailAndPassword() { + presenter.onInputChangedInBasics("bea@dfa.co", "test"); + + verify(view).setNextButtonInBasicsEnabled(true); + } + + // region checking + + @Test + public void testOnNegativeClickedInConfirmationDialog_incoming() { + presenter.onCheckingStart(Stage.INCOMING_CHECKING); + + presenter.onNegativeClickedInConfirmationDialog(); + + verify(view).goToOutgoing(); + } + + @Test + public void testOnNegativeClickedInConfirmationDialog_outgoing() { + presenter.onCheckingStart(Stage.OUTGOING_CHECKING); + + presenter.onNegativeClickedInConfirmationDialog(); + + verify(view).goToAccountNames(); + } + + @Test + public void testOnNegativeClickedInConfirmationDialog_editSettings() { + mockAccountUrisImap(); + presenter.onIncomingStart(true); + presenter.onCheckingStart(Stage.INCOMING_CHECKING); + + presenter.onNegativeClickedInConfirmationDialog(); + + verify(view).end(); + } + + @Test + public void testOnCertificatedRefused_incoming() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + presenter.onCheckingStart(Stage.INCOMING_CHECKING); + + presenter.onCertificateRefused(); + + verify(view).goToIncoming(); + } + + @Test + public void testOnCertificatedRefused_outgoing() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onCheckingStart(Stage.OUTGOING_CHECKING); + + presenter.onCertificateRefused(); + + verify(view).goToOutgoing(); + } + + // endregion checking + + @Test + public void testGetStatus() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + + presenter.onInputChangedInIncoming(null, "test.com", "", "testusername", "testpw", + AuthType.EXTERNAL, ConnectionSecurity.STARTTLS_REQUIRED); + + assertEquals(presenter.getStatus().getIncomingAuthType(), AuthType.EXTERNAL); + assertEquals(presenter.getStatus().getIncomingSecurityType(), ConnectionSecurity.STARTTLS_REQUIRED); + } + + // endregion basics + + // region account type + @Test + public void testOnImapOrPop3Selected() throws URISyntaxException { + mockAccountUrisPop3(); + presenter.onAccountTypeStart(); + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + final Object[] args = invocation.getArguments(); + URI storeUri = new URI((String) args[0]); + assertEquals("imap+ssl+", storeUri.getScheme()); + return null; + } + }).when(account).setStoreUri(Matchers.anyString()); + + presenter.onNextButtonInAccountTypeClicked(Type.IMAP); + + verify(view).goToIncomingSettings(); + } + + @Test + public void testOnWebdavSelected() throws URISyntaxException { + mockAccountUrisImap(); + presenter.onAccountTypeStart(); + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + final Object[] args = invocation.getArguments(); + URI storeUri = new URI((String) args[0]); + assertEquals("webdav+ssl+", storeUri.getScheme()); + assertEquals("daquexian566:denx+ajs", storeUri.getUserInfo()); + return null; + } + }).when(account).setStoreUri(Matchers.anyString()); + + presenter.onNextButtonInAccountTypeClicked(Type.WebDAV); + + verify(view).goToIncomingSettings(); + } + + // endregion account type + + // region incoming + + @Test + public void testOnInputChangedInIncoming_withValidInput() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + + presenter.onInputChangedInIncoming(null, "test.com", "123", "testusername", "testpw", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED); + + verify(view).setNextButtonInIncomingEnabled(true); + } + + @Test + public void testOnInputChangedInIncoming_withIllegalInput() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + + presenter.onInputChangedInIncoming(null, "test.com", "", "testusername", "testpw", + AuthType.PLAIN, ConnectionSecurity.NONE); + presenter.onInputChangedInIncoming(null, "test.com", "", "testusername", "testpw", + AuthType.EXTERNAL, ConnectionSecurity.NONE); + + assertEquals(AuthType.PLAIN, presenter.getStatus().getIncomingAuthType()); + } + + @Test + public void testOnInputChangedInIncoming_withPassword() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + + presenter.onInputChangedInIncoming(null, "mail.abc.com", "123", "test", "password", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED); + + verify(view).setNextButtonInIncomingEnabled(true); + } + + @Test + public void testOnInputChangedInIncoming_withCertificate() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + presenter.onInputChangedInIncoming("certificate", "mail.abc.com", "123", "test", null, AuthType.EXTERNAL, + ConnectionSecurity.SSL_TLS_REQUIRED); + verify(view).setNextButtonInIncomingEnabled(true); + } + + @Test + public void testOnInputChangedInIncoming_withInvalidPassword() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + presenter.onInputChangedInIncoming(null, "mail.abc.com", "123", "test", "", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED); + verify(view).setNextButtonInIncomingEnabled(false); + } + + @Test + public void testOnInputChangedInIncoming_withIncompleteServer() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + presenter.onInputChangedInIncoming(null, "mail.abc.", "123", "test", "password", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED); + verify(view).setNextButtonInIncomingEnabled(false); + } + + @Test + public void testOnInputChangedInIncoming_withInvalidPort() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + presenter.onInputChangedInIncoming(null, "mail.abc.com", "", "test", "password", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED); + verify(view).setNextButtonInIncomingEnabled(false); + } + + @Test + public void testOnInputChangeInIncoming_imap_updatePortFromSecurity() { + mockAccountUrisImap(); + presenter.onIncomingStart(); + presenter.onInputChangedInIncoming("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.SSL_TLS_REQUIRED); + + presenter.onInputChangedInIncoming("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.STARTTLS_REQUIRED); + + assertEquals(DEFAULT_PORT_FOR_IMAP_STARTTLS, presenter.getStatus().getIncomingPort()); + + presenter.onInputChangedInIncoming("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.SSL_TLS_REQUIRED); + + assertEquals(DEFAULT_PORT_FOR_IMAP_SSL_TLS, presenter.getStatus().getIncomingPort()); + } + + @Test + public void testOnInputChangeInIncoming_pop3_updatePortFromSecurity() { + mockAccountUrisPop3(); + presenter.onIncomingStart(); + presenter.onInputChangedInIncoming("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.SSL_TLS_REQUIRED); + + presenter.onInputChangedInIncoming("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.STARTTLS_REQUIRED); + + assertEquals(presenter.getStatus().getIncomingPort(), DEFAULT_PORT_FOR_POP3_STARTTLS); + + presenter.onInputChangedInIncoming("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.SSL_TLS_REQUIRED); + + assertEquals(DEFAULT_PORT_FOR_POP3_SSL_TLS, presenter.getStatus().getIncomingPort()); + } + + // endregion incoming + + // region outgoing + + @Test + public void testOnInputChangedInOutgoing_withPassword() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + + presenter.onInputChangedInOutgoing(null, "mail.abc.com", "123", "test", "password", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED, true); + + verify(view).setNextButtonInOutgoingEnabled(true); + } + + @Test + public void testOnInputChangedInOutgoing_withCertificate() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onInputChangedInOutgoing("certificate", "mail.abc.com", "123", "test", null, AuthType.EXTERNAL, + ConnectionSecurity.SSL_TLS_REQUIRED, true); + verify(view).setNextButtonInOutgoingEnabled(true); + } + + @Test + public void testOnInputChangedInOutgoing_withNotRequiredLogin() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onInputChangedInOutgoing(null, "mail.abc.com", "123", null, null, AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED, false); + verify(view).setNextButtonInOutgoingEnabled(true); + } + + @Test + public void testOnInputChangedInOutgoing_withInvalidPassword() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onInputChangedInOutgoing(null, "mail.abc.com", "123", "test", "", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED, true); + verify(view).setNextButtonInOutgoingEnabled(false); + } + + @Test + public void testOnInputChangedInOutgoing_withIncompleteServer() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onInputChangedInOutgoing(null, "mail.abc.", "123", "test", "password", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED, true); + verify(view).setNextButtonInOutgoingEnabled(false); + } + + @Test + public void testOnInputChangedInOutgoing_withInvalidPort() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onInputChangedInOutgoing(null, "mail.abc.com", "", "test", "password", AuthType.PLAIN, + ConnectionSecurity.SSL_TLS_REQUIRED, true); + verify(view).setNextButtonInOutgoingEnabled(false); + } + + @Test + public void testOnInputChangedInOutgoing_withCertificateChanged() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onInputChangedInOutgoing(null, "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.NONE, true); + + assertEquals(AuthType.PLAIN, presenter.getStatus().getOutgoingAuthType()); + } + + @Test + public void testOnInputChangedInOutgoing_withSecurityChanged() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onInputChangedInOutgoing("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.STARTTLS_REQUIRED, true); + + presenter.onInputChangedInOutgoing("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.NONE, true); + + assertEquals(ConnectionSecurity.STARTTLS_REQUIRED, presenter.getStatus().getOutgoingSecurityType()); + } + + @Test + public void testOnInputChangeInOutgoing_updatePortFromSecurity() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + presenter.onInputChangedInOutgoing("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.SSL_TLS_REQUIRED, true); + + presenter.onInputChangedInOutgoing("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.STARTTLS_REQUIRED, true); + + assertEquals(DEFAULT_PORT_FOR_SMTP_STARTTLS, presenter.getStatus().getOutgoingPort()); + + presenter.onInputChangedInOutgoing("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.SSL_TLS_REQUIRED, true); + + assertEquals(DEFAULT_PORT_FOR_SMTP_SSL_TLS, presenter.getStatus().getOutgoingPort()); + } + + @Test + public void testUpdateViewFromAuthType_outgoing() { + mockAccountUrisImap(); + presenter.onOutgoingStart(); + + verify(view).setViewNotExternalInOutgoing(); + + presenter.onInputChangedInOutgoing("certificate", "mail.abc.com", "123", "username", "password", + AuthType.EXTERNAL, ConnectionSecurity.STARTTLS_REQUIRED, true); + + verify(view).setViewExternalInOutgoing(); + } + + // endregion outgoing + + // region names + /* + @Test + public void testOnNextButtonInNamesClicked() { + mockAccountUrisImap(); + presenter.onNamesStart(); + + presenter.onNextButtonInNamesClicked("test_name", "test_description"); + + verify(account).setName("test_name"); + verify(account).setDescription("test_description"); + verify(view).goToListAccounts(); + } */ + // endregion names + + private void mockAccountUrisImap() { + String incomingUri = "imap+ssl+://PLAIN:daquexian566:denx+ajs@mail.gmail.com/1%7C"; + String outgoingUri = "smtp+ssl+://daquexian566:denx+ajs:PLAIN@mail.gmail.com"; + when(account.getStoreUri()).thenReturn(incomingUri); + when(account.getTransportUri()).thenReturn(outgoingUri); + when(account.getEmail()).thenReturn("daquexian566@gmail.com"); + } + + private void mockAccountUrisPop3() { + String incomingUri = "pop3+ssl+://PLAIN:daquexian566:denx+ajs@mail.gmail.com/1%7C"; + String outgoingUri = "smtp+ssl+://daquexian566:denx+ajs:PLAIN@mail.gmail.com"; + when(account.getStoreUri()).thenReturn(incomingUri); + when(account.getTransportUri()).thenReturn(outgoingUri); + when(account.getEmail()).thenReturn("daquexian566@gmail.com"); + } +} + diff --git a/k9mail/src/test/java/io/eelo/mail/controller/MessagingControllerTest.java b/k9mail/src/test/java/io/eelo/mail/controller/MessagingControllerTest.java index e26031e126..6cd16fab89 100644 --- a/k9mail/src/test/java/io/eelo/mail/controller/MessagingControllerTest.java +++ b/k9mail/src/test/java/io/eelo/mail/controller/MessagingControllerTest.java @@ -15,9 +15,12 @@ import android.content.Context; import io.eelo.mail.Account; import io.eelo.mail.AccountStats; +import io.eelo.mail.GlobalsHelper; import io.eelo.mail.K9; import io.eelo.mail.K9RobolectricTestRunner; import io.eelo.mail.Preferences; +import io.eelo.mail.account.K9OAuth2AuthorizationCodeFlowTokenProvider; +import io.eelo.mail.account.K9OAuth2TokenProvider; import io.eelo.mail.helper.Contacts; import io.eelo.mail.mail.AuthenticationFailedException; import io.eelo.mail.mail.CertificateValidationException; @@ -30,6 +33,8 @@ import io.eelo.mail.mail.MessagingException; import io.eelo.mail.mail.Store; import io.eelo.mail.mail.Transport; import io.eelo.mail.mail.TransportProvider; +import io.eelo.mail.mail.oauth.OAuth2AuthorizationCodeFlowTokenProvider; +import io.eelo.mail.mail.oauth.OAuth2TokenProvider; import io.eelo.mail.mailstore.LocalFolder; import io.eelo.mail.mailstore.LocalMessage; import io.eelo.mail.mailstore.LocalStore; @@ -142,6 +147,8 @@ public class MessagingControllerTest { ShadowLog.stream = System.out; MockitoAnnotations.initMocks(this); appContext = ShadowApplication.getInstance().getApplicationContext(); + GlobalsHelper.setContext(appContext); + GlobalsHelper.setOAuth2TokenProvider(new K9OAuth2TokenProvider(appContext)); controller = new MessagingController(appContext, notificationController, contacts, transportProvider); @@ -849,7 +856,7 @@ public class MessagingControllerTest { when(localStore.getFolder(SENT_FOLDER_NAME)).thenReturn(sentFolder); when(sentFolder.getDatabaseId()).thenReturn(1L); when(localFolder.exists()).thenReturn(true); - when(transportProvider.getTransport(appContext, account)).thenReturn(transport); + when(transportProvider.getTransport(any(Context.class), any(Account.class), any(OAuth2TokenProvider.class))).thenReturn(transport); when(localFolder.getMessages(null)).thenReturn(Collections.singletonList(localMessageToSend1)); when(localMessageToSend1.getUid()).thenReturn("localMessageToSend1"); when(localMessageToSend1.getHeader(K9.IDENTITY_HEADER)).thenReturn(new String[]{}); diff --git a/proguard.cfg b/proguard.cfg index c13bba26ef..88bef48541 100644 --- a/proguard.cfg +++ b/proguard.cfg @@ -40,3 +40,15 @@ -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } + +# ------ Retrofit ------ + +# Platform calls Class.forName on types which do not exist on Android to determine platform. +-dontnote retrofit2.Platform +# Platform used when running on Java 8 VMs. Will not be used at runtime. +-dontwarn retrofit2.Platform$Java8 +# Retain generic type information for use by reflection by converters and adapters. +-keepattributes Signature +# Retain declared checked exceptions for use by a Proxy instance. +-keepattributes Exceptions + -- GitLab From 64620b5b5aec0dd170863f0e9c89fc75b97e3431 Mon Sep 17 00:00:00 2001 From: Nihar Thakkar Date: Tue, 1 May 2018 08:59:25 +0530 Subject: [PATCH 093/248] Merged auto-config. --- .../io/eelo/mail/mail/store/StoreConfig.java | 2 -- k9mail/build.gradle | 1 + .../src/main/java/io/eelo/mail/Account.java | 14 ++++---- k9mail/src/main/java/io/eelo/mail/K9.java | 11 ++++++ .../java/io/eelo/mail/activity/Accounts.java | 5 +-- .../setup/AccountSetupComposition.java | 28 +++++++-------- .../mail/controller/MessagingController.java | 36 ++++++------------- .../main/res/layout/account_setup_basics.xml | 2 +- k9mail/src/main/res/values/colors.xml | 4 --- k9mail/src/main/res/values/themes.xml | 8 ++--- k9mail/src/main/res/xml/providers.xml | 24 +++++++++++++ 11 files changed, 76 insertions(+), 59 deletions(-) diff --git a/k9mail-library/src/main/java/io/eelo/mail/mail/store/StoreConfig.java b/k9mail-library/src/main/java/io/eelo/mail/mail/store/StoreConfig.java index 15068db054..7f0c30c633 100644 --- a/k9mail-library/src/main/java/io/eelo/mail/mail/store/StoreConfig.java +++ b/k9mail-library/src/main/java/io/eelo/mail/mail/store/StoreConfig.java @@ -39,6 +39,4 @@ public interface StoreConfig { int getDisplayCount(); int getIdleRefreshMinutes(); - - boolean shouldHideHostname(); } diff --git a/k9mail/build.gradle b/k9mail/build.gradle index b7491035b9..14232b10ae 100644 --- a/k9mail/build.gradle +++ b/k9mail/build.gradle @@ -32,6 +32,7 @@ dependencies { implementation 'me.zhanghai.android.materialprogressbar:library:1.4.1' implementation 'commons-io:commons-io:2.4' implementation "com.android.support:support-v4:${androidSupportLibraryVersion}" + implementation "com.android.support:design:${androidSupportLibraryVersion}" implementation 'org.jsoup:jsoup:1.11.2' implementation 'de.cketti.library.changelog:ckchangelog:1.2.1' implementation 'com.github.bumptech.glide:glide:3.6.1' diff --git a/k9mail/src/main/java/io/eelo/mail/Account.java b/k9mail/src/main/java/io/eelo/mail/Account.java index 8a9c4bab7b..037d329907 100644 --- a/k9mail/src/main/java/io/eelo/mail/Account.java +++ b/k9mail/src/main/java/io/eelo/mail/Account.java @@ -1160,7 +1160,8 @@ public class Account implements BaseAccount, StoreConfig { folderName.equals(getArchiveFolderName()) || folderName.equals(getSpamFolderName()) || folderName.equals(getOutboxFolderName()) || - folderName.equals(getSentFolderName()))); + folderName.equals(getSentFolderName()); + folderName.equals(getErrorFolderName()))); } public synchronized String getDraftsFolderName() { @@ -1171,6 +1172,10 @@ public class Account implements BaseAccount, StoreConfig { draftsFolderName = name; } + public synchronized String getErrorFolderName() { + return K9.ERROR_FOLDER_NAME; + } + /** * Checks if this account has a drafts folder set. * @return true if account has a drafts folder set. @@ -1563,11 +1568,6 @@ public class Account implements BaseAccount, StoreConfig { return idleRefreshMinutes; } - @Override - public boolean shouldHideHostname() { - return K9.hideHostnameWhenConnecting(); - } - public synchronized void setIdleRefreshMinutes(int idleRefreshMinutes) { this.idleRefreshMinutes = idleRefreshMinutes; } @@ -1897,6 +1897,8 @@ public class Account implements BaseAccount, StoreConfig { excludeSpecialFolder(search, getSpamFolderName()); excludeSpecialFolder(search, getOutboxFolderName()); excludeSpecialFolder(search, getSentFolderName()); + excludeSpecialFolder(search, getErrorFolderName()); + search.or(new SearchCondition(SearchField.FOLDER, Attribute.EQUALS, getInboxFolderName())); } diff --git a/k9mail/src/main/java/io/eelo/mail/K9.java b/k9mail/src/main/java/io/eelo/mail/K9.java index 67b7e33476..e72bcdb02b 100644 --- a/k9mail/src/main/java/io/eelo/mail/K9.java +++ b/k9mail/src/main/java/io/eelo/mail/K9.java @@ -4,6 +4,9 @@ package io.eelo.mail; import java.io.File; import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; + import java.util.HashMap; import java.util.List; import java.util.Map; @@ -151,6 +154,14 @@ public class K9 extends Application { */ public static boolean DEBUG_SENSITIVE = false; + /** + * Can create messages containing stack traces that can be forwarded + * to the development team. + * + * Feature is enabled when DEBUG == true + */ + public static final String ERROR_FOLDER_NAME = "K9mail-errors"; + /** * A reference to the {@link SharedPreferences} used for caching the last known database * version. diff --git a/k9mail/src/main/java/io/eelo/mail/activity/Accounts.java b/k9mail/src/main/java/io/eelo/mail/activity/Accounts.java index 305d1328ed..786ca6fb57 100644 --- a/k9mail/src/main/java/io/eelo/mail/activity/Accounts.java +++ b/k9mail/src/main/java/io/eelo/mail/activity/Accounts.java @@ -77,6 +77,7 @@ import io.eelo.mail.activity.misc.NonConfigurationInstance; import io.eelo.mail.activity.setup.AccountSettings; import io.eelo.mail.activity.setup.Prefs; import io.eelo.mail.activity.setup.WelcomeMessage; +import io.eelo.mail.activity.setup.WelcomeMessage; import io.eelo.mail.controller.MessagingController; import io.eelo.mail.helper.SizeFormatter; import io.eelo.mail.mail.AuthType; @@ -397,8 +398,8 @@ public class Accounts extends K9ListActivity implements OnItemClickListener { onImport(); } else if (accounts.size() < 1) { // Don't show the welcome message, proceed to account setup instead - // TODO Check if it's okay to disable this: WelcomeMessage.showWelcomeMessage(this); - AccountSetupBasics.actionNewAccount(this); + WelcomeMessage.showWelcomeMessage(this); + finish(); return; } diff --git a/k9mail/src/main/java/io/eelo/mail/activity/setup/AccountSetupComposition.java b/k9mail/src/main/java/io/eelo/mail/activity/setup/AccountSetupComposition.java index 11e995c553..f0ad403c0b 100644 --- a/k9mail/src/main/java/io/eelo/mail/activity/setup/AccountSetupComposition.java +++ b/k9mail/src/main/java/io/eelo/mail/activity/setup/AccountSetupComposition.java @@ -55,21 +55,21 @@ public class AccountSetupComposition extends K9Activity { account = Preferences.getPreferences(this).getAccount(accountUuid); } - mAccountName = (EditText)findViewById(R.id.account_name); - mAccountName.setText(mAccount.getName()); + accountName = (EditText)findViewById(R.id.account_name); + accountName.setText(account.getName()); - mAccountEmail = (EditText)findViewById(R.id.account_email); - mAccountEmail.setText(mAccount.getEmail()); + accountEmail = (EditText)findViewById(R.id.account_email); + accountEmail.setText(account.getEmail()); - mAccountAlwaysBcc = (EditText)findViewById(R.id.account_always_bcc); - mAccountAlwaysBcc.setText(mAccount.getAlwaysBcc()); + accountAlwaysBcc = (EditText)findViewById(R.id.account_always_bcc); + accountAlwaysBcc.setText(account.getAlwaysBcc()); - mAccountSignatureLayout = (LinearLayout)findViewById(R.id.account_signature_layout); + accountSignatureLayout = (LinearLayout)findViewById(R.id.account_signature_layout); - mAccountSignatureUse = (CheckBox)findViewById(R.id.account_signature_use); - boolean useSignature = mAccount.getSignatureUse(); - mAccountSignatureUse.setChecked(useSignature); - mAccountSignatureUse.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + accountSignatureUse = (CheckBox)findViewById(R.id.account_signature_use); + boolean useSignature = account.getSignatureUse(); + accountSignatureUse.setChecked(useSignature); + accountSignatureUse.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { accountSignatureLayout.setVisibility(View.VISIBLE); @@ -83,10 +83,10 @@ public class AccountSetupComposition extends K9Activity { } }); - mAccountSignature = (EditText)findViewById(R.id.account_signature); + accountSignature = (EditText)findViewById(R.id.account_signature); - mAccountSignatureBeforeLocation = (RadioButton)findViewById(R.id.account_signature_location_before_quoted_text); - mAccountSignatureAfterLocation = (RadioButton)findViewById(R.id.account_signature_location_after_quoted_text); + accountSignatureBeforeLocation = (RadioButton)findViewById(R.id.account_signature_location_before_quoted_text); + accountSignatureAfterLocation = (RadioButton)findViewById(R.id.account_signature_location_after_quoted_text); if (useSignature) { accountSignature.setText(account.getSignature()); diff --git a/k9mail/src/main/java/io/eelo/mail/controller/MessagingController.java b/k9mail/src/main/java/io/eelo/mail/controller/MessagingController.java index 58c4632262..fd678d4982 100644 --- a/k9mail/src/main/java/io/eelo/mail/controller/MessagingController.java +++ b/k9mail/src/main/java/io/eelo/mail/controller/MessagingController.java @@ -1,7 +1,8 @@ package io.eelo.mail.controller; - +import java.io.CharArrayWriter; import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -24,14 +25,17 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import android.annotation.SuppressLint; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageInfo; import android.database.Cursor; import android.net.Uri; +import android.os.Build; import android.os.PowerManager; import android.os.Process; import android.os.SystemClock; @@ -41,6 +45,8 @@ import android.support.annotation.VisibleForTesting; import io.eelo.mail.Account; import io.eelo.mail.Account.DeletePolicy; import io.eelo.mail.Account.Expunge; +import io.eelo.mail.Account.DeletePolicy; +import io.eelo.mail.Account.Expunge; import io.eelo.mail.AccountStats; import io.eelo.mail.BuildConfig; import io.eelo.mail.Globals; @@ -84,7 +90,10 @@ import io.eelo.mail.mail.Store; import io.eelo.mail.mail.Transport; import io.eelo.mail.mail.TransportProvider; import io.eelo.mail.mail.internet.MessageExtractor; +import io.eelo.mail.mail.internet.MimeMessage; +import io.eelo.mail.mail.internet.MimeMessageHelper; import io.eelo.mail.mail.internet.MimeUtility; +import io.eelo.mail.mail.internet.TextBody; import io.eelo.mail.mail.power.TracingPowerManager; import io.eelo.mail.mail.power.TracingPowerManager.TracingWakeLock; import io.eelo.mail.mail.store.pop3.Pop3Store; @@ -144,8 +153,6 @@ public class MessagingController { private final MemorizingMessagingListener memorizingMessagingListener = new MemorizingMessagingListener(); private final TransportProvider transportProvider; - private ImapMessageStore imapMessageStore; - private MessagingListener checkMailListener = null; private volatile boolean stopped = false; @@ -259,19 +266,6 @@ public class MessagingController { throw new Error(e); } - private RemoteMessageStore getRemoteMessageStore(Account account) { - return account.getStoreUri().startsWith("imap") ? getImapMessageStore() : null; - } - - private ImapMessageStore getImapMessageStore() { - if (imapMessageStore == null) { - imapMessageStore = new ImapMessageStore(notificationController, this, context); - } - - return imapMessageStore; - } - - public void addListener(MessagingListener listener) { listeners.add(listener); refreshListener(listener); @@ -739,16 +733,6 @@ public class MessagingController { @VisibleForTesting void synchronizeMailboxSynchronous(final Account account, final String folder, final MessagingListener listener, Folder providedRemoteFolder) { - RemoteMessageStore remoteMessageStore = getRemoteMessageStore(account); - if (remoteMessageStore != null) { - remoteMessageStore.sync(account, folder, listener, providedRemoteFolder); - } else { - synchronizeMailboxSynchronousLegacy(account, folder, listener); - } - } - - void synchronizeMailboxSynchronousLegacy(Account account, String folder, MessagingListener listener) { - Folder remoteFolder = null; LocalFolder tLocalFolder = null; diff --git a/k9mail/src/main/res/layout/account_setup_basics.xml b/k9mail/src/main/res/layout/account_setup_basics.xml index 562d0101fb..0046d01901 100644 --- a/k9mail/src/main/res/layout/account_setup_basics.xml +++ b/k9mail/src/main/res/layout/account_setup_basics.xml @@ -85,7 +85,7 @@