From fbbd2edd94c9397b72bc4d2a4cdf07fec4a3360c Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 14 Mar 2022 08:59:29 +0100 Subject: [PATCH 01/31] version bump to 2.10.3 + changelog --- CHANGELOG.md | 1 + build.gradle | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7ef6c6fa..b54d2c479 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * Store files in location appropriate for Android 11 * Attempt to reconnect call after network switch +* Show caller JID and account JID in incoming call screen ### Version 2.10.2 diff --git a/build.gradle b/build.gradle index 118dab5f2..f81d87512 100644 --- a/build.gradle +++ b/build.gradle @@ -90,8 +90,8 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 30 - versionCode 42025 - versionName "2.10.3-beta.2" + versionCode 42026 + versionName "2.10.3" archivesBaseName += "-$versionName" applicationId "eu.siacs.conversations" resValue "string", "applicationId", applicationId From 89428b0ad353e7ffd5ab71e0993b80c6f5c5ddbd Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 14 Mar 2022 09:08:27 +0100 Subject: [PATCH 02/31] pulled translations from transifex --- src/main/res/values-el/strings.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index 16a2a8742..d6a8cd209 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -132,6 +132,8 @@ Στέλνοντας ίχνη στοίβας βοηθάτε την συνεχόμενη ανάπτυξη Επιβεβαίωση μηνυμάτων Επιτρέψτε στις επαφές σας να γνωρίζουν όταν έχετε λάβει και διαβάσει τα μηνύματά τους + Αποτροπή στιγμιοτύπων οθόνης + Απόκρυψη περιεχομένων εφαρμογής στην εναλλαγή εφαρμογών και αποκλεισμός στιγμιοτύπων οθόνης Διεπαφή χρήστη Το OpenKeychain ανέφερε κάποιο σφάλμα. Σφάλμα στο κλειδί κρυπτογράφησης. @@ -414,6 +416,7 @@ ήχος βίντεο εικόνα + διανυσματικά γραφικά έγγραφο PDF Εφαρμογή Android Επαφή @@ -619,6 +622,8 @@ Καθαρισμός ιδιωτικού χώρου όπου αποθηκεύονται αρχεία (Μπορούν να μεταφορτωθούν ξανά από τον διακομιστή) Ακολούθησα αυτόν τον σύνδεσμο από μια έμπιστη πηγή Πρόκειται να επαληθεύσετε τα κλειδιά OMEMO της επαφής %1$s ακολουθώντας έναν σύνδεσμο. Αυτό είναι ασφαλές μόνο αν ακολουθήσατε τον σύνδεσμο από μια έμπιστη πηγή όπου μόνο η επαφή %2$s μπορεί να τον δημοσίευσε. + Πρόκειται να επαληθεύσετε τα κλειδιά OMEMO του δικού σας λογαριασμού. Αυτό είναι ασφαλές μόνο αν ακολουθήσατε τον σύνδεσμο από έμπιστη πηγή, όπου μόνο εσείς μπορεί να δημοσιεύσατε τον σύνδεσμο. + Συνέχεια Επιβεβαίωση κλειδιών OMEMO Εμφάνιση ανενεργών Απόκρυψη ανενεργών @@ -901,6 +906,7 @@ Εισερχόμενη βιντεοκλήση Γίνεται σύνδεση Συνδέθηκε + Επανασύνδεση Αποδοχή κλήσης Τερματισμός κλήσης Απάντηση @@ -912,9 +918,12 @@ Απώλεια σύνδεσης Αποσυρμένη κλήση Αποτυχία εφαρμογής + Πρόβλημα επαλήθευσης Τερματισμός κλήσης Κλήση σε εξέλιξη Βιντεοκλήση σε εξέλιξη + Επανασύνδεση κλήσης + Επανασύνδεση βίντεοκλήσης Απενεργοποίηστε το Tor για να κάνετε κλήσεις Εισερχόμενη κλήση Εισερχόμενη κλήση · %s @@ -963,4 +972,8 @@ Κανένας από τους ενεργούς λογαριασμούς δεν υποστηρίζει αυτό το χαρακτηριστικό Το αντίγραφο ασφαλείας δημιουργείται. Θα λάβετε ειδοποίηση όταν ολοκληρωθεί. Αδυναμία ενεργοποίησης βίντεο. - + Έγγραφο απλού κειμένου + Δεν υποστηρίζονται εγγραφές λογαριασμών + Δεν βρέθηκε διεύθυνση XMPP + + From 7c6ab7febca12cf629bca44fa929271d7accfa42 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 22 Mar 2022 11:45:43 +0100 Subject: [PATCH 03/31] fix ability to use GoogleMaps ShareLocationPlugin --- build.gradle | 2 +- src/main/AndroidManifest.xml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f81d87512..a8c58a5d5 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ configurations { dependencies { implementation 'androidx.viewpager:viewpager:1.0.0' - playstoreImplementation('com.google.firebase:firebase-messaging:23.0.0') { + playstoreImplementation('com.google.firebase:firebase-messaging:23.0.2') { exclude group: 'com.google.firebase', module: 'firebase-core' exclude group: 'com.google.firebase', module: 'firebase-analytics' exclude group: 'com.google.firebase', module: 'firebase-measurement-connector' diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index f3922675d..2d0c6b2ff 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -52,6 +52,12 @@ + + + + + + From 38450896d19b72bf198c7b2ff044bbbe0646c2b5 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 22 Mar 2022 09:14:52 -0500 Subject: [PATCH 04/31] Fix NPE when answering a call that has already gone away --- .../cheogram/android/ConnectionService.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/cheogram/java/com/cheogram/android/ConnectionService.java b/src/cheogram/java/com/cheogram/android/ConnectionService.java index 13b3041da..c6a706d65 100644 --- a/src/cheogram/java/com/cheogram/android/ConnectionService.java +++ b/src/cheogram/java/com/cheogram/android/ConnectionService.java @@ -220,7 +220,7 @@ public class ConnectionService extends android.telecom.ConnectionService { if (sessionId == null || !sessionId.equals(this.sessionId)) return; if (rtpConnection == null) { this.with = with; // Store full JID of connection - rtpConnection = xmppConnectionService.getJingleConnectionManager().findJingleRtpConnection(account, with, sessionId); + findRtpConnection(); } setStatusHints(new StatusHints(null, gatewayIcon, null)); @@ -269,15 +269,20 @@ public class ConnectionService extends android.telecom.ConnectionService { public void onAnswer() { // For incoming calls, a connection update may not have been triggered before answering // so we have to acquire the rtp connection object here - this.rtpConnection = xmppConnectionService.getJingleConnectionManager().findJingleRtpConnection(account, with, sessionId); - - rtpConnection.get().acceptCall(); + findRtpConnection(); + if (rtpConnection == null || rtpConnection.get() == null) { + close(new DisconnectCause(DisconnectCause.CANCELED)); + } else { + rtpConnection.get().acceptCall(); + } } @Override public void onReject() { - this.rtpConnection = xmppConnectionService.getJingleConnectionManager().findJingleRtpConnection(account, with, sessionId); - rtpConnection.get().rejectCall(); + findRtpConnection(); + if (rtpConnection != null && rtpConnection.get() != null) { + rtpConnection.get().rejectCall(); + } close(new DisconnectCause(DisconnectCause.LOCAL)); } @@ -316,6 +321,12 @@ public class ConnectionService extends android.telecom.ConnectionService { if (c) postDial(); } + protected void findRtpConnection() { + if (rtpConnection != null) return; + + rtpConnection = xmppConnectionService.getJingleConnectionManager().findJingleRtpConnection(account, with, sessionId); + } + protected void sleep(int ms) { try { Thread.sleep(ms); From fcadbeee996ac9467c203aa91eb6c973ccf2d374 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 23 Mar 2022 12:35:08 -0500 Subject: [PATCH 05/31] Icon for f-droid --- fastlane/metadata/android/en-US/images/icon.png | Bin 0 -> 22617 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 fastlane/metadata/android/en-US/images/icon.png diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b35467abe79ffad93f701cea31e1edf8e3a29575 GIT binary patch literal 22617 zcmYhicRbbq|33aajyRlB@vYtM^uLfr9{?2 zWma~wclJKkamMfdwZ0MTO8UaC9WWjAc)j{(><05f}x>* zM1|phUKXb_5#$(t|DK)J-VVdLVmYhpd>HmLsqZq5&%O`JNiX?*X7%dRe$Swo5|b<1yM_)%;DT+CDaDpVa$!K=egG?tEUG zUmoGeOwyay8RH|2thd>3*}TCSzrcZnbuF?peOjQl7RoH0O-VIF{;ku;VKl zYM4cg%GD5EYy9-NTqeo z1te)U5hIG*7eaQ#i_ud=CNhL*5^eT89mGhu6mzSLEWh@=aO)Llwym;X)(BKeE)k^N zAv&@3F_EvSDgnw^ueln;VtgMqvY6!}0Do0r^VI{Dv6}wRI6g?`*oO3j{B#kTI3$~8)uku!jV;`I6~uZP zUZLXMn2L*WlMLp9@Nf7^1%dnQfA^&f7f@{B?UQB}A7OMEZL2xI6w_W^VZ+nJ+#>T0 z5h5$@^ujHrk(I=UL@6X9NR>0d;9rvF9r*9A=E%$bHdD$yOpNimh!$cRrv{rJLO0=! zVB)ot?0Mm$$iv({cDzqH`hWL|l0LbLBXWT{!gjOgj3fGq8xWsEd^Kb$j^`r@Z|yn9 z5Q#rnL+!$n&`Z<_wXYaG@@1(&~V}db;JTA85EVD$a9k-Bg1>IGpVplQ+9}+`^ zX~i@V(sf~c_fK*DzfnGQ8EselYDB{yz0*ZDSsYmz=pRewJ2L_&kgv(oK(G0mDnK`uK;zSHKzNhUmVp>BCIlz31xc2YsNo~Uj_VOpC zmeS6hl%nZyCxe+&Pk6t47lH(KEn0vSLb=&bv}2^jBpD-ivp%In2t!^@H(i-l!{ze* zRRrU0KOmWh-~}a!c3!c(u!Qp69bmuyCs7Aq9JPHn`YrZeRTzrjs=7zP7VIB5{y7{pT&t zTF(%f&?6yFZ{v`QGZCu(3c<%;Q

fyFy$prn(^MDdZAtkvU{!qIOci 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 mJ)q)DP=MUnTCEP Date: Thu, 24 Mar 2022 17:53:18 +0100 Subject: [PATCH 06/31] remove hint about yearly fee for server --- .../siacs/conversations/ui/MagicCreateActivity.java | 2 -- .../res/layout/activity_pick_server.xml | 12 ------------ src/conversations/res/layout/magic_create.xml | 13 ------------- src/conversations/res/values/strings.xml | 2 +- src/main/res/values-w360dp/fineprint.xml | 4 ---- src/main/res/values/fineprint.xml | 4 ---- 6 files changed, 1 insertion(+), 36 deletions(-) delete mode 100644 src/main/res/values-w360dp/fineprint.xml delete mode 100644 src/main/res/values/fineprint.xml diff --git a/src/conversations/java/eu/siacs/conversations/ui/MagicCreateActivity.java b/src/conversations/java/eu/siacs/conversations/ui/MagicCreateActivity.java index 3419d8fc9..6f0386672 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/MagicCreateActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/MagicCreateActivity.java @@ -66,13 +66,11 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher { if (username != null && domain != null) { binding.title.setText(R.string.your_server_invitation); binding.instructions.setText(getString(R.string.magic_create_text_fixed, domain)); - binding.finePrint.setVisibility(View.INVISIBLE); binding.username.setEnabled(false); binding.username.setText(this.username); updateFullJidInformation(this.username); } else if (domain != null) { binding.instructions.setText(getString(R.string.magic_create_text_on_x, domain)); - binding.finePrint.setVisibility(View.INVISIBLE); } binding.createAccount.setOnClickListener(v -> { try { diff --git a/src/conversations/res/layout/activity_pick_server.xml b/src/conversations/res/layout/activity_pick_server.xml index 16be52ec4..d55ea78cc 100644 --- a/src/conversations/res/layout/activity_pick_server.xml +++ b/src/conversations/res/layout/activity_pick_server.xml @@ -84,18 +84,6 @@ android:padding="8dp" android:src="@drawable/main_logo" /> - - diff --git a/src/conversations/res/layout/magic_create.xml b/src/conversations/res/layout/magic_create.xml index cc0337062..f6e0436a5 100644 --- a/src/conversations/res/layout/magic_create.xml +++ b/src/conversations/res/layout/magic_create.xml @@ -95,19 +95,6 @@ android:padding="8dp" android:src="@drawable/main_logo" /> - - diff --git a/src/conversations/res/values/strings.xml b/src/conversations/res/values/strings.xml index f9aaec9ee..fffee31d6 100644 --- a/src/conversations/res/values/strings.xml +++ b/src/conversations/res/values/strings.xml @@ -4,7 +4,7 @@ Use conversations.im Create new account Do you already have an XMPP account? This might be the case if you are already using a different XMPP client or have used Conversations before. If not you can create a new XMPP account right now.\nHint: Some email providers also provide XMPP accounts. - XMPP is a provider independent instant messaging network. You can use this client with what ever XMPP server you choose.\nHowever for your convenience we made it easy to create an account on conversations.im¹; a provider specially suited for the use with Conversations. + XMPP is a provider independent instant messaging network. You can use this client with what ever XMPP server you choose.\nHowever for your convenience we made it easy to create an account on conversations.im; a provider specially suited for the use with Conversations. You have been invited to %1$s. We will guide you through the process of creating an account.\nWhen picking %1$s as a provider you will be able to communicate with users of other providers by giving them your full XMPP address. You have been invited to %1$s. A username has already been picked for you. We will guide you through the process of creating an account.\nYou will be able to communicate with users of other providers by giving them your full XMPP address. Your server invitation diff --git a/src/main/res/values-w360dp/fineprint.xml b/src/main/res/values-w360dp/fineprint.xml deleted file mode 100644 index fa28fbed4..000000000 --- a/src/main/res/values-w360dp/fineprint.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - ¹ Optional conversations.im account €8/year. First 6 month free. - \ No newline at end of file diff --git a/src/main/res/values/fineprint.xml b/src/main/res/values/fineprint.xml deleted file mode 100644 index 55eeccb6d..000000000 --- a/src/main/res/values/fineprint.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - ¹ Optional conversations.im account €8/year. 6 month free. - \ No newline at end of file From 8834bc5084a8fb42ecfa813b166d6c7e23f58a7b Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 24 Mar 2022 17:53:32 +0100 Subject: [PATCH 07/31] pulled translations from transifex --- src/main/res/values-fr/strings.xml | 8 +++++++- src/main/res/values-gl/strings.xml | 14 +++++++------- src/main/res/values-pt-rBR/strings.xml | 12 ++++++++++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 256baacab..8e177693e 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -132,6 +132,7 @@ En envoyant des rapports de crash vous aidez le développement de Conversations Confirmation de lecture Informer vos contacts quand vous avez reçu et lu leurs messages + Interdire les captures d’écran Interface OpenKeychain a signalé une erreur. Mauvaise clé pour le chiffrement. @@ -615,6 +616,7 @@ Vide le stockage privé, où les fichiers sont conservés (ils peuvent être re-téléchargés depuis le serveur) J\'ai obtenu ce lien d\'une source de confiance Vous êtes sur le point de vérifier les clés OMEMO de %1$s en cliquant sur un lien. Cette procédure n\'est sécurisée que si le lien en question n\'a pu être publié que par %2$s et que vous l\'avez obtenu d\'une source digne de confiance. + Continuer Vérifier les clés OMEMO Afficher les comptes inactifs Cacher les comptes inactifs @@ -955,4 +957,8 @@ Aucune application trouvée Inviter à Conversations Impossible de lire l\'invitation - + Impossible d’activer la vidéo. + La création de nouveaux comptes n’est pas prise en charge + Aucune adresse XMPP trouvée + + diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index a5ea07ed0..234d5807e 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -186,7 +186,7 @@ Habilitar Seguro? Ao eliminar a conta eliminas todo o historial de conversas - Grabar audio + Gravar audio Enderezo XMPP Bloquear enderezo XMPP usuaria@exemplo.com @@ -205,8 +205,8 @@ XEP-0163: PEP (Avatars / OMEMO) XEP-0363: HTTP File Upload XEP-0357: Push - dispoñible - non dispoñible + Dispoñible + Fallo Anuncios de chave pública non notificados acaba de estar dispoñible visto hai un minuto @@ -697,8 +697,8 @@ O escaner de código QR necesita acceso á cámara. Desprazarse ata a parte inferior Desprazarse cara abaixo logo de enviar unha mensaxe - Editar a Menxase de Estado - Editar a menxase de estado + Editar a Mensaxe de Estado + Editar a mensaxe de estado Desactivar a encriptación %1$s non pode enviar mensaxes cifradas a %2$s. Podería deberse a que o teu contacto utiliza un servidor sen actualizar ou un cliente que non pode xestionar OMEMO. Non se obtivo a lista de dispositivos @@ -719,7 +719,7 @@ Pequena Mediana Grande - A menxase non foi encriptada para este disposivivo + A mensaxe non foi encriptada para este disposivivo Fallo ao descifrar a mensaxe OMEMO desfacer Compartir Localización está desactivado @@ -815,7 +815,7 @@ Non se atopou o servidor. Algo fallou ao xestionar a túa solicitude. Entrada da usuaria non válida - Non dispoñible temporalmente. Inténteo máis tarde. + Non dispoñible temporalmente. Inténtao máis tarde. Se conexión a rede. Inténteo de novo en %s Taxa de transferencia limitada diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 9efea8ca8..2fbbc4809 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -621,7 +621,9 @@ Limpar o armazenamento privado Limpar o armazenamento privado onde os arquivos são mantidos (eles podem ser baixados do servidor novamente) Eu segui este link a partir de uma fonte segura - Você está prestes a verificar as chaves OMEMO de %1$s após ter clicado em um link. Isso só é seguro se você acesso esse link a partir de uma fonte segura, onde somente %2$s poderia tê-lo publicado. + Você está prestes a verificar as chaves OMEMO de %1$s após ter clicado em um link. Isso só é seguro se você acessou esse link a partir de uma fonte segura, onde somente %2$s poderia tê-lo publicado. + Você está prestes a verificar as chaves OMEMO de sua própria conta. Isso só é seguro se você acessou esse link a partir de uma fonte segura, onde somente você poderia tê-lo publicado. + Continuar Verificar chaves OMEMO Exibir os inativos Ocultar os inativos @@ -904,6 +906,7 @@ Recebendo chamada de vídeo Conectando Conectado + Reconectando Atendendo chamada Encerrando chamada Atender @@ -919,6 +922,8 @@ Desligar Chamada em andamento Chamada de vídeo em andamento + Reconectando a chamada + Reconectando a vídeo-chamada Desabilitar o Tor para fazer chamadas Chamada recebida Chamada recebida · %s @@ -968,4 +973,7 @@ O backup foi iniciado. Você receberá uma notificação assim que ele for concluído. Não foi possível habilitar o vídeo. Documento em texto puro - + O registro de contas não está ativo + Não foi encontrado nenhum endereço XMPP + + From 5943f1ad3ee9101738339d26fac7b865e2f64f50 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 25 Mar 2022 08:03:18 +0100 Subject: [PATCH 08/31] version bump to 2.10.4 + changelog --- CHANGELOG.md | 5 +++++ build.gradle | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b54d2c479..b445c52ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +### Version 2.10.4 + +* Fix interaction with Google Maps Share Location Plugin +* Remove footnote with regards to server fee + ### Version 2.10.3 * Store files in location appropriate for Android 11 diff --git a/build.gradle b/build.gradle index a8c58a5d5..f1b134848 100644 --- a/build.gradle +++ b/build.gradle @@ -90,8 +90,8 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 30 - versionCode 42026 - versionName "2.10.3" + versionCode 42027 + versionName "2.10.4" archivesBaseName += "-$versionName" applicationId "eu.siacs.conversations" resValue "string", "applicationId", applicationId From 36756fbd410d72e64b2e579eb383befaa806a407 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 26 Mar 2022 08:25:45 +0100 Subject: [PATCH 09/31] catch two rare exceptions to fix crash --- .../eu/siacs/conversations/persistance/FileBackend.java | 2 +- .../siacs/conversations/services/MessageArchiveService.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 404f521f4..821899eb7 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -722,7 +722,7 @@ public class FileBackend { if (cursor != null && cursor.moveToFirst()) { filename = cursor.getString(0); } - } catch (final SecurityException | IllegalArgumentException e) { + } catch (final Exception e) { filename = null; } if (filename == null) { diff --git a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java index b382022b9..79cad9520 100644 --- a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java +++ b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java @@ -256,7 +256,11 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { //do nothing } else { Log.d(Config.LOGTAG, a.getJid().asBareJid().toString() + ": error executing mam: " + p.toString()); - finalizeQuery(query, true); + try { + finalizeQuery(query, true); + } catch (final IllegalStateException e) { + //ignored + } } }); } else { From de7eb2b5c7b28e538c05a0729109395504df7ecf Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 26 Mar 2022 08:43:25 +0100 Subject: [PATCH 10/31] remove footnote hint in translations --- src/conversations/res/values-bg/strings.xml | 2 +- src/conversations/res/values-bn-rIN/strings.xml | 2 +- src/conversations/res/values-ca/strings.xml | 2 +- src/conversations/res/values-da-rDK/strings.xml | 2 +- src/conversations/res/values-de/strings.xml | 2 +- src/conversations/res/values-el/strings.xml | 2 +- src/conversations/res/values-es/strings.xml | 2 +- src/conversations/res/values-eu/strings.xml | 2 +- src/conversations/res/values-fr/strings.xml | 2 +- src/conversations/res/values-gl/strings.xml | 2 +- src/conversations/res/values-hu/strings.xml | 2 +- src/conversations/res/values-id/strings.xml | 2 +- src/conversations/res/values-ja/strings.xml | 2 +- src/conversations/res/values-nl/strings.xml | 2 +- src/conversations/res/values-pl/strings.xml | 2 +- src/conversations/res/values-pt-rBR/strings.xml | 2 +- src/conversations/res/values-ro-rRO/strings.xml | 2 +- src/conversations/res/values-sk/strings.xml | 2 +- src/conversations/res/values-sr/strings.xml | 2 +- src/conversations/res/values-tr-rTR/strings.xml | 2 +- src/conversations/res/values-uk/strings.xml | 2 +- src/conversations/res/values-vi/strings.xml | 2 +- src/conversations/res/values-zh-rCN/strings.xml | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/conversations/res/values-bg/strings.xml b/src/conversations/res/values-bg/strings.xml index 7ef32e025..92667523d 100644 --- a/src/conversations/res/values-bg/strings.xml +++ b/src/conversations/res/values-bg/strings.xml @@ -5,7 +5,7 @@ Създаване не нов профил Имате ли вече XMPP профил? Може да имате, ако вече използвате друг клиент на XMPP или сте използвали Conversations и преди. Ако не, можете да създадете нов XMPP профил сега.\nСъвет: някои доставчици на е-поща също предоставят XMPP профили.   - XMPP е мрежа за общуване чрез мигновени съобщения, която не е обвързана с конкретен доставчик. Можете да използвате клиента с всеки сървър, който работи с XMPP.\nЗа Ваше удобство, обаче, ние предоставяме лесен начин да си създадете профил в conversations.im¹ — сървър, пригоден да работи най-добре с Conversations. + XMPP е мрежа за общуване чрез мигновени съобщения, която не е обвързана с конкретен доставчик. Можете да използвате клиента с всеки сървър, който работи с XMPP.\nЗа Ваше удобство, обаче, ние предоставяме лесен начин да си създадете профил в conversations.im — сървър, пригоден да работи най-добре с Conversations. Получихте покана за %1$s. Ще Ви преведем през процеса на създаване на профил.\nИзбирайки %1$s за доставчик, Вие ще можете да общувате и с потребители на други доставчици, като им предоставите своя пълен XMPP адрес. Получихте покана за %1$s. Вече Ви избрахме потребителско име. Ще Ви преведем през процеса на създаване на профил.\nЩе можете да общувате и с потребители на други доставчици, като им предоставите своя пълен XMPP адрес. Вашата покана за сървъра diff --git a/src/conversations/res/values-bn-rIN/strings.xml b/src/conversations/res/values-bn-rIN/strings.xml index c99df7cfe..382343a37 100644 --- a/src/conversations/res/values-bn-rIN/strings.xml +++ b/src/conversations/res/values-bn-rIN/strings.xml @@ -4,7 +4,7 @@ conversations.im-ই ব্যবহার করা যাক নতুন অ্যকাউন্ট তৈরী করা যাক আপনার কি একটা XMPP অ্যকাউন্ট ইতিমধ্যে করা আছে? সেরকমটা হতেই পারে যদি এর আগে আপনি কোনো অন্য XMPP প্রোগ্রাম বা অ্যাপ ব্যবহার করে থাকেন। এই মুহুর্তে আরেকটা অ্যকাউন্ট তৈরী করা সম্ভব না।‌\nHint: মাঝে মাঝে ইমেল অ্যকাউন্ট খুললেও এরকম অ্যকাউন্ট নিজে থেকেই তৈরী হয়ে যায়। - XMPP কোনো একটি নির্দিষ্ট সংস্থার উপরে নির্ভরশীল নয়। এই অ্যপটি আপনি যেকোনো সংস্থার XMPP সার্ভারের সাথে ব্যবহার করতে পারেন।\nমনে রাখবেন, সুধুমাত্র আপনার সুবিধার্থেই conversations.im¹ -এ আপনার জন্যে একটি অ্যকাউন্ট তৈরী করে দেওয়া হয়েছে। Conversations অ্যপটি এই সার্ভারের সাথে সবথেকে বেশী কার্যকারী। + XMPP কোনো একটি নির্দিষ্ট সংস্থার উপরে নির্ভরশীল নয়। এই অ্যপটি আপনি যেকোনো সংস্থার XMPP সার্ভারের সাথে ব্যবহার করতে পারেন।\nমনে রাখবেন, সুধুমাত্র আপনার সুবিধার্থেই conversations.im -এ আপনার জন্যে একটি অ্যকাউন্ট তৈরী করে দেওয়া হয়েছে। Conversations অ্যপটি এই সার্ভারের সাথে সবথেকে বেশী কার্যকারী। আপনাকে %1$s-এ আমন্ত্রিত করা হয়েছে। অ্যকাউন্ট তৈরী করার সময় আপনাকে সাহায্য করা হবে।\n%1$s ব্যবহার করলেও, অন্য সেবা-প্রদানকারী সংস্থার ব্যবহারকারীদের সাথে আপনি কথা বলতে পারবেন, আপনার সম্পূর্ণ XMPP অ্যড্রেস তাদেরকে বলে দিয়ে। আপনাকে %1$s-এ নিমন্ত্রণ করা হয়েছে। একটি username-ও আপনার জন্যে নির্দিষ্ট করে রাখা হয়েছে। অ্যকাউন্ট তৈরী করার সময় আপনাকে সাহায্য করা হবে।\nঅন্য XMPP সেবা প্রদানকারী সংস্থার ব্যবহারকারীদের সাথে আপনিও কথা বলতে পারবেন, আপনার সম্পূর্ণ XMPP অ্যড্রেস তাদেরকে বলে দিয়ে। আপনার নিমন্ত্রণপত্র, সার্ভার থেকে diff --git a/src/conversations/res/values-ca/strings.xml b/src/conversations/res/values-ca/strings.xml index be3d17103..7606e4708 100644 --- a/src/conversations/res/values-ca/strings.xml +++ b/src/conversations/res/values-ca/strings.xml @@ -5,7 +5,7 @@ Fer servir conversations.im Crear un compte nou Ja tens un compte XMPP? Aquest podria ser el cas si ja estàs usant un client XMPP diferent o has usat Converses abans. Si no, pots crear un nou compte XMPP ara mateix.\nPista: Alguns proveïdors de correu electrònic també proporcionen comptes XMPP. - XMPP és una xarxa de missatgeria instantània independent del proveïdor. Pots usar aquest client amb qualsevol servidor XMPP que triïs. No obstant això, per a la teva conveniència, hem fet fàcil la creació d\'un compte en Conversaciones.im¹; un proveïdor especialment adequat per a l\'ús amb Conversations. + XMPP és una xarxa de missatgeria instantània independent del proveïdor. Pots usar aquest client amb qualsevol servidor XMPP que triïs. No obstant això, per a la teva conveniència, hem fet fàcil la creació d\'un compte en Conversaciones.im; un proveïdor especialment adequat per a l\'ús amb Conversations. Has estat convidat a %1$s. Et guiarem a través del procés de creació d\'un compte.\nEn triar%1$s com a proveïdor podràs comunicar-se amb els usuaris d\'altres proveïdors donant-los la seva adreça XMPP completa. Has estat convidat a %1$s . Ja s\'ha triat un nom d\'usuari per a tu. Et guiarem en el procés de creació d\'un compte. Podràs comunicar-te amb usuaris d\'altres proveïdors donant-los la teva adreça XMPP completa. La teva invitació al servidor diff --git a/src/conversations/res/values-da-rDK/strings.xml b/src/conversations/res/values-da-rDK/strings.xml index a55288db9..fb5992a1b 100644 --- a/src/conversations/res/values-da-rDK/strings.xml +++ b/src/conversations/res/values-da-rDK/strings.xml @@ -4,7 +4,7 @@ Brug conversations.im Opret ny konto Har du allerede en XMPP-konto? Dette kan være tilfældet, hvis du allerede bruger en anden XMPP-klient eller har brugt Conversations før. Hvis ikke, kan du lige nu oprette en ny XMPP-konto.\nTip: Nogle e-mail-udbydere leverer også XMPP-konti. - XMPP er et udbyderuafhængigt onlinemeddelelsesnetværk. Du kan bruge denne klient med hvilken XMPP-server du end vælger.\nMen for din nemhedsskyld har vi gjort vi det let at oprette en konto på conversations.im¹; en udbyder, der er specielt velegnet til brug med Conversations. + XMPP er et udbyderuafhængigt onlinemeddelelsesnetværk. Du kan bruge denne klient med hvilken XMPP-server du end vælger.\nMen for din nemhedsskyld har vi gjort vi det let at oprette en konto på conversations.im; en udbyder, der er specielt velegnet til brug med Conversations. Du er blevet inviteret til %1$s. Vi guider dig gennem processen med at oprette en konto.\nNår du vælger %1$s som udbyder, kan du kommunikere med brugere fra andre udbydere ved at give dem din fulde XMPP-adresse. Du er blevet inviteret til %1$s. Der er allerede valgt et brugernavn til dig. Vi guider dig gennem processen med at oprette en konto.\nDu vil være i stand til at kommunikere med brugere fra andre udbydere ved at give dem din fulde XMPP-adresse. Din server invitation diff --git a/src/conversations/res/values-de/strings.xml b/src/conversations/res/values-de/strings.xml index e1f217512..2fd0319a9 100644 --- a/src/conversations/res/values-de/strings.xml +++ b/src/conversations/res/values-de/strings.xml @@ -4,7 +4,7 @@ Benutze conversations.im Neues Konto erstellen Hast du bereits ein XMPP-Konto? Dies kann der Fall sein, wenn du bereits einen anderen XMPP-Client verwendest oder bereits Conversations verwendet hast. Wenn nicht, kannst du jetzt ein neues XMPP-Konto erstellen.\nTipp: Einige E-Mail-Anbieter bieten auch XMPP-Konten an. - XMPP ist ein anbieterunabhängiges Instant Messaging Netzwerk. Du kannst diesen Client mit jedem beliebigen XMPP-Server nutzen.\nUm es dir leicht zu machen, haben wir die Möglichkeit geschaffen, ein Konto auf conversations.im¹ anzulegen; ein Anbieter, der speziell für die Verwendung mit Conversations geeignet ist. + XMPP ist ein anbieterunabhängiges Instant Messaging Netzwerk. Du kannst diesen Client mit jedem beliebigen XMPP-Server nutzen.\nUm es dir leicht zu machen, haben wir die Möglichkeit geschaffen, ein Konto auf conversations.im anzulegen; ein Anbieter, der speziell für die Verwendung mit Conversations geeignet ist. Du wurdest zu %1$s eingeladen. Wir führen dich durch den Prozess der Kontoerstellung.\nWenn du %1$s als Provider wählst, kannst du mit Nutzern anderer Anbieter kommunizieren, indem du ihnen deine vollständige XMPP-Adresse gibst. Du wurdest zu %1$seingeladen. Ein Benutzername ist bereits für dich ausgewählt worden. Wir führen dich durch den Prozess der Kontoerstellung.\nDu kannst mit Nutzern anderer Anbieter kommunizieren, indem du ihnen deine vollständige XMPP-Adresse gibst. Deine Einladung für den Server diff --git a/src/conversations/res/values-el/strings.xml b/src/conversations/res/values-el/strings.xml index 7c87e66a3..bb7bcadf0 100644 --- a/src/conversations/res/values-el/strings.xml +++ b/src/conversations/res/values-el/strings.xml @@ -4,7 +4,7 @@ Χρήση του conversations.im Δημιουργία νέου λογαριασμού Έχετε ήδη λογαριασμό XMPP; Αυτό μπορεί να συμβαίνει αν ήδη χρησιμοποιείτε ένα άλλο πρόγραμμα XMPP ή έχετε χρησιμοποιήσει το Conversations παλιότερα. Αν όχι, μπορείτε να δημιουργήσετε ένα νέο λογαριασμό XMPP τώρα.\nΧρήσιμη πληροφορία: Κάποιοι πάροχοι e-mail παρέχουν επίσης και λογαριασμούς XMPP. - Το XMPP είναι ένα δίκτυο άμεσης ανταλλαγής μηνυμάτων ανεξάρτητο παρόχου. Μπορείτε να χρησιμοποιήσετε αυτό το πρόγραμμα με όποιον διακομιστή XMPP επιθυμείτε.\nΓια διευκόλυνση πάντως μπορείτε να δημιουργήσετε έναν λογαριασμό στο conversations.im¹, έναν πάροχο ειδικά σχεδιασμένο για χρήση με το Conversations. + Το XMPP είναι ένα δίκτυο άμεσης ανταλλαγής μηνυμάτων ανεξάρτητο παρόχου. Μπορείτε να χρησιμοποιήσετε αυτό το πρόγραμμα με όποιον διακομιστή XMPP επιθυμείτε.\nΓια διευκόλυνση πάντως μπορείτε να δημιουργήσετε έναν λογαριασμό στο conversations.im, έναν πάροχο ειδικά σχεδιασμένο για χρήση με το Conversations. Έχετε προσκληθεί στο %1$s. Θα σας καθοδηγήσουμε στη διαδικασία δημιουργίας λογαριασμού.\nΕπιλέγοντας τον %1$s ως πάροχο θα μπορείτε να επικοινωνείτε με χρήστες άλλων παρόχων δίνοντάς τους την πλήρη διεύθυνση XMPP σας. Έχετε προσκληθεί στο %1$s. Ένα όνομα χρήστη έχει ήδη επιλεγεί για εσάς. Θα σας καθοδηγήσουμε στη διαδικασία δημιουργίας λογαριασμού.\nΘα μπορείτε να επικοινωνείτε με χρήστες άλλων παρόχων δίνοντάς τους την πλήρη διεύθυνση XMPP σας. Η πρόσκλησή σας στον διακομιστή diff --git a/src/conversations/res/values-es/strings.xml b/src/conversations/res/values-es/strings.xml index 690bd8f5a..b5ca254b5 100644 --- a/src/conversations/res/values-es/strings.xml +++ b/src/conversations/res/values-es/strings.xml @@ -4,7 +4,7 @@ Usa conversations.im Crear nueva cuenta ¿Ya tienes una cuenta XMPP? Este puede ser el caso si ya estás usando un cliente XMPP diferente o has usado Conversations anteriormente. Si no es así, puedes crear una nueva cuenta XMPP ahora mismo.\nConsejo: Algunos proveedores de email también ofrecen una cuenta XMPP. - XMPP es una red de mensajería instantánea independiente del proveedor. Puedes usar este cliente con cualquier servidor XMPP que elijas.\nSin embargo, para tu conveniencia, hacemos de forma sencilla la creación de una cuenta en conversations.im¹; un proveedor especializado para el uso con Conversations + XMPP es una red de mensajería instantánea independiente del proveedor. Puedes usar este cliente con cualquier servidor XMPP que elijas.\nSin embargo, para tu conveniencia, hacemos de forma sencilla la creación de una cuenta en conversations.im; un proveedor especializado para el uso con Conversations Has sido invitado a %1$s. Te guiaremos durante el proceso de creación de la cuenta.\nCuando selecciones %1$s como proveedor podrás comunicarte con usuarios de otros servidores proporcionándoles tu dirección XMPP completa. Has sido invitado a %1$s. Un nombre de usuario ya ha sido escogido para ti. Te guiaremos durante el proceso de creación de la cuenta.\nPodrás comunicarte con otros usuarios de otros servidores proporcionándoles tu dirección XMPP completa. Tu invitación al servidor diff --git a/src/conversations/res/values-eu/strings.xml b/src/conversations/res/values-eu/strings.xml index 4ab74b6ab..bf9555311 100644 --- a/src/conversations/res/values-eu/strings.xml +++ b/src/conversations/res/values-eu/strings.xml @@ -4,5 +4,5 @@ Erabili conversations.im Kontu berria sortu XMPP kontu bat badaukazu dagoeneko? Horrela izan daiteke beste XMPP aplikazio bat erabiltzen baduzu edo Conversations lehenago erabili baduzu. Bestela XMPP kontu berri bat sortu dezakezu oraintxe bertan.\nIradokizuna: email hornitzaile batzuek XMPP kontuak hornitzen dituzte ere. - XMPP hornitzailez independientea den bat-bateko mezularitza sare bat da. Aplikazio hau nahi duzun XMPP zerbitzariarekin erabili dezakezu.\nHala ere zure erosotasunerako conversations.im¹-en, Conversationsekin bereziki erabiltzeko egokia den hornitzaile batean, kontu bat sortzea erraz egin dugu. + XMPP hornitzailez independientea den bat-bateko mezularitza sare bat da. Aplikazio hau nahi duzun XMPP zerbitzariarekin erabili dezakezu.\nHala ere zure erosotasunerako conversations.im-en, Conversationsekin bereziki erabiltzeko egokia den hornitzaile batean, kontu bat sortzea erraz egin dugu. \ No newline at end of file diff --git a/src/conversations/res/values-fr/strings.xml b/src/conversations/res/values-fr/strings.xml index 3d7d1c4a8..47badf219 100644 --- a/src/conversations/res/values-fr/strings.xml +++ b/src/conversations/res/values-fr/strings.xml @@ -4,7 +4,7 @@ Utiliser conversations.im Créer un nouveau compte Avez-vous déjà un compte XMPP ? Cela peut être le cas si vous utilisez déjà un autre client XMPP ou si vous avez déjà utilisé Conversations auparavant. Sinon, vous pouvez créer un nouveau compte XMPP dès maintenant.\nRemarque : Certains fournisseurs de messagerie proposent également des comptes XMPP. - XMPP est un réseau de messagerie instantanée indépendant du fournisseur. Vous pouvez utiliser ce client avec n’importe quel serveur XMPP de votre choix.\nToutefois, pour votre commodité, nous avons facilité la création d’un compte sur conversations.im¹ ; un fournisseur spécialement conçu pour Conversations. + XMPP est un réseau de messagerie instantanée indépendant du fournisseur. Vous pouvez utiliser ce client avec n’importe quel serveur XMPP de votre choix.\nToutefois, pour votre commodité, nous avons facilité la création d’un compte sur conversations.im ; un fournisseur spécialement conçu pour Conversations. Vous avez été invité à %1$s. Nous allons vous guider à travers le processus de création d’un compte.\nEn choisissant %1$s comme fournisseur, vous pourrez communiquer avec les utilisateurs des autres fournisseurs en leur donnant votre adresse XMPP complète. Vous avez été invité à %1$s. Un nom d’utilisateur a déjà été choisi pour vous. Nous allons vous guider à travers le processus de création d’un compte.\nVous pourrez communiquer avec les utilisateurs des autres fournisseurs en leur donnant votre adresse XMPP complète. Votre invitation au serveur diff --git a/src/conversations/res/values-gl/strings.xml b/src/conversations/res/values-gl/strings.xml index 98d151721..ed3299863 100644 --- a/src/conversations/res/values-gl/strings.xml +++ b/src/conversations/res/values-gl/strings.xml @@ -4,7 +4,7 @@ Utilizar conversations.im Crear nova conta Xa posúes unha conta XMPP? Este pode ser o caso se xa estás a utilizar outro cliente XMPP ou utilizaches Conversations previamente. Se non é así podes crear unha nova conta agora mesmo.\nTruco: Algúns provedores de correo tamén proporcionan contas XMPP. - XMPP é unha rede de mensaxería independente do provedor. Podes utilizar este cliente con calquera provedor XMPP da túa elección.\nMais para a tua conveniencia fixemos que fose doado crear unha conta en conversations.im¹; un provedor especialmente axeitado para utilizar con Conversations. + XMPP é unha rede de mensaxería independente do provedor. Podes utilizar este cliente con calquera provedor XMPP da túa elección.\nMais para a tua conveniencia fixemos que fose doado crear unha conta en conversations.im; un provedor especialmente axeitado para utilizar con Conversations. Convidáronte a %1$s. Guiarémoste no proceso para crear unha conta.\nAo elexir %1$s como provedor poderás comunicarte con usuarias doutros provedores cando lles deas o teu enderezo XMPP completo. Convidáronte a %1$s. Xa eleximos un nome de usuaria para ti. Guiarémoste no proceso de crear unha conta.\nPoderás comunicarte con usuarias doutros provedores cando lles digas o teu enderezo XMPP completo. O convite do teu servidor diff --git a/src/conversations/res/values-hu/strings.xml b/src/conversations/res/values-hu/strings.xml index 8e405d0e1..f4c180889 100644 --- a/src/conversations/res/values-hu/strings.xml +++ b/src/conversations/res/values-hu/strings.xml @@ -4,7 +4,7 @@ A conversations.im használata Új fiók létrehozása Már rendelkezik XMPP-fiókkal? Ez az eset állhat fenn, ha már egy másik XMPP-klienst használ, vagy ha már korábban használta a Conversations alkalmazást. Ha nem, akkor most létrehozhat egy új XMPP-fiókot.\nTipp: egyes e-mail szolgáltatók is biztosítanak XMPP-fiókokat. - Az XMPP egy szolgáltatófüggetlen, azonnali üzenetküldő hálózat. Ezt a kliensprogramot bármely XMPP-kiszolgálóhoz használhatja.\nAzonban a kényelem érdekében megkönnyítettük a conversations.im¹ szolgáltatón való fióklétrehozást, ami kifejezetten a Conversations alkalmazással történő használatra lett tervezve. + Az XMPP egy szolgáltatófüggetlen, azonnali üzenetküldő hálózat. Ezt a kliensprogramot bármely XMPP-kiszolgálóhoz használhatja.\nAzonban a kényelem érdekében megkönnyítettük a conversations.im szolgáltatón való fióklétrehozást, ami kifejezetten a Conversations alkalmazással történő használatra lett tervezve. Meghívást kapott a(z) %1$s kiszolgálóra. Végig fogjuk vezetni egy fiók létrehozásának folyamatán.\nHa a(z) %1$s kiszolgálót választja szolgáltatóként, akkor képes lesz más szolgáltatók felhasználóival is kommunikálni, ha megadja nekik a teljes XMPP-címét. Meghívást kapott a(z) %1$s kiszolgálóra. Már kiválasztottak Önnek egy felhasználónevet. Végig fogjuk vezetni egy fiók létrehozásának folyamatán.\nKépes lesz más szolgáltatók felhasználóival is kommunikálni, ha megadja nekik a teljes XMPP-címét. Az Ön kiszolgálómeghívása diff --git a/src/conversations/res/values-id/strings.xml b/src/conversations/res/values-id/strings.xml index fb4121cc3..16a58436c 100644 --- a/src/conversations/res/values-id/strings.xml +++ b/src/conversations/res/values-id/strings.xml @@ -4,7 +4,7 @@ Gunakan conversations.im Buat akun baru Anda sudah memiliki akun XMPP? Ini mungkin terjadi jika Anda sudah menggunakan aplikasi XMPP yang berbeda atau pernah menggunakan Conversations sebelumnya. Jika tidak, Anda dapat membuat akun XMPP baru. \ NPetunjuk: Beberapa penyedia layanan email juga menyediakan akun XMPP. - XMPP adalah jaringan penyedia pesan instan independen. Anda dapat menggunakan aplikasi ini dengan server XMPP pilihan Anda. \ NNamun demi kenyamanan Anda, kami permudah untuk membuat akun di Conversations.im¹; provider yang sangat cocok digunakan dengan Conversations. + XMPP adalah jaringan penyedia pesan instan independen. Anda dapat menggunakan aplikasi ini dengan server XMPP pilihan Anda. \ NNamun demi kenyamanan Anda, kami permudah untuk membuat akun di Conversations.im; provider yang sangat cocok digunakan dengan Conversations. Anda telah diundang ke %1$s. Kami akan memandu Anda melalui proses pembuatan akun. \nSaat memilih %1$s sebagai penyedia, Anda akan dapat berkomunikasi dengan pengguna provider lain dengan memberikan alamat XMPP lengkap Anda kepada mereka. Anda telah diundang ke%1$s. Username telah dipilihkan untuk Anda. Kami akan memandu Anda melalui proses pembuatan akun. \nAnda dapat berkomunikasi dengan pengguna provider lain dengan memberi mereka alamat XMPP lengkap Anda. Undangan server Anda diff --git a/src/conversations/res/values-ja/strings.xml b/src/conversations/res/values-ja/strings.xml index a36b4a119..2d240bedc 100644 --- a/src/conversations/res/values-ja/strings.xml +++ b/src/conversations/res/values-ja/strings.xml @@ -4,7 +4,7 @@ conversations.im を利用する 新規アカウントを作成 XMPP アカウントをお持ちですか?既にほかの XMPP クライアントを利用しているか、 Conversations を利用したことがある場合はこちら。初めての方は、今すぐ新規 XMPP アカウントを作成できます。\nヒント: e メールのプロバイダーが XMPP アカウントも提供している場合があります。 - XMPP は、プロバイダーに依存しないインスタントメッセージのプロトコルです。 XMPP サーバーならどこでも、このクライアントを使用することができます。\nよろしければ、 Conversations に最適化されたプロバイダー conversations.im¹ で簡単にアカウントを作成することもできます。 + XMPP は、プロバイダーに依存しないインスタントメッセージのプロトコルです。 XMPP サーバーならどこでも、このクライアントを使用することができます。\nよろしければ、 Conversations に最適化されたプロバイダー conversations.im で簡単にアカウントを作成することもできます。 %1$s へ招待されました。アカウント作成手順をご案内します。 \n%1$s をプロバイダーに選択してほかのプロバイダーのユーザーと会話するには、 XMPP のフルアドレスを相手にお知らせください。 %1$s へ招待されました。ユーザー名は既に選択されています。アカウント作成手順をご案内します。 \nほかのプロバイダーのユーザーと会話するには、 XMPP のフルアドレスを相手にお知らせください。 サーバーの招待 diff --git a/src/conversations/res/values-nl/strings.xml b/src/conversations/res/values-nl/strings.xml index a92dca5b2..968a276d1 100644 --- a/src/conversations/res/values-nl/strings.xml +++ b/src/conversations/res/values-nl/strings.xml @@ -4,7 +4,7 @@ Conversations.im gebruiken Nieuwe account registreren Heb je al een XMPP-account? Als je al een andere XMPP-cliënt gebruikt, of Conversations vroeger al eens hebt gebruikt, is dit waarschijnlijk het geval. Zo niet, kan je nu een nieuwe XMPP-account aanmaken.\nTip: sommige e-mailproviders bieden ook XMPP-accounts aan. - XMPP is een provider-onafhankelijk berichtennetwerk. Je kan deze cliënt gebruiken met eender welke XMPP-server.\nOm het je gemakkelijker te maken kun je simpelweg een account aanmaken op conversations.im¹; een provider speciaal geschikt voor Conversations. + XMPP is een provider-onafhankelijk berichtennetwerk. Je kan deze cliënt gebruiken met eender welke XMPP-server.\nOm het je gemakkelijker te maken kun je simpelweg een account aanmaken op conversations.im; een provider speciaal geschikt voor Conversations. Je ontving een uitnodiging voor %1$s. We zullen je helpen een account aan te maken.\nWanneer je %1$s als je provider kiest kan je met gebruikers van andere providers communiceren door hen je volledige XMPP-adres te geven. Je ontving een uitnodiging voor %1$s. Er werd reeds een gebruikersnaam voor jou gekozen. We zullen je helpen een account aan te maken.\nJe zal met gebruikers van andere providers communiceren door hen je volledige XMPP-adres te geven. Je server uitnodiging diff --git a/src/conversations/res/values-pl/strings.xml b/src/conversations/res/values-pl/strings.xml index 4e8b5d619..ac746f8e6 100644 --- a/src/conversations/res/values-pl/strings.xml +++ b/src/conversations/res/values-pl/strings.xml @@ -4,7 +4,7 @@ Użyj conversations.im Stwórz nowe konto Czy masz już konto XMPP? Tak może być jeśli używasz już innego klienta XMPP lub używałeś już Conversations. Jeśli nie możesz stworzyć nowe konto XMPP teraz.\nPodpowiedź: Niektórzy dostawcy poczty oferują również konta XMPP. - XMPP to niezależna od dostawcy sieć komunikacji błyskawicznej. Możesz użyć tego klienta z dowolnym serwerem XMPP.\nDla twojej wygody jednak ułatwiliśmy stworzenie konta na conversations.im¹; dostawcy specjalnie dostosowanego do pracy z Conversations. + XMPP to niezależna od dostawcy sieć komunikacji błyskawicznej. Możesz użyć tego klienta z dowolnym serwerem XMPP.\nDla twojej wygody jednak ułatwiliśmy stworzenie konta na conversations.im; dostawcy specjalnie dostosowanego do pracy z Conversations. Zostałeś zaproszony do %1$s. Poprowadzimy ciebie przez proces tworzenia konta.\nWybierając %1$s jako dostawcę będziesz mógł komunikować się z innymi użytkownikami podając swój pełny adres XMPP. Zostałeś zaproszony do %1$s. Nazwa użytkownika została już dla ciebie wybrana. Poprowadzimy ciebie przez proces tworzenia konta.\nBęziesz mógł komunikować się z innymi użytkownikami podając swój adres XMPP. Zaproszenie twojego serwera diff --git a/src/conversations/res/values-pt-rBR/strings.xml b/src/conversations/res/values-pt-rBR/strings.xml index 1d51c86b6..0a4b54191 100644 --- a/src/conversations/res/values-pt-rBR/strings.xml +++ b/src/conversations/res/values-pt-rBR/strings.xml @@ -4,7 +4,7 @@ Usar o conversations.im Criar uma nova conta Você já possui uma conta XMPP? Esse pode ser o seu caso caso já esteja usando um outro cliente XMPP ou tenha usado o Conversations antes. Caso contrário, você pode criar uma nova conta XMPP agora.\nDica: alguns provedores de e-mail também fornecem contas XMPP. - O XMPP é uma rede de mensageria instantânea independente de provedor. Você pode usar esse cliente com qualquer servidor XMPP que você escolher.\nEntretanto, para sua conveniência, nós simplificamos o processo de criação de uma conta em conversations.im¹, um provedor especialmente configurado para se usar com o Conversations. + O XMPP é uma rede de mensageria instantânea independente de provedor. Você pode usar esse cliente com qualquer servidor XMPP que você escolher.\nEntretanto, para sua conveniência, nós simplificamos o processo de criação de uma conta em conversations.im, um provedor especialmente configurado para se usar com o Conversations. Você foi convidado para %1$s. Nós iremos guiá-lo ao longo do processo de criação de uma conta.\nAo escolher %1$s como um provedor você conseguirá se comunicar com usuários de outros provedores dando a eles seu endereço XMPP completo. Você foi convidado para %1$s. Um nome de usuário já foi escolhido para você. Nós iremos guiá-lo ao longo do processo de criação de uma conta.\nVocê conseguirá se comunicar com usuários de outros provedores dando a eles seu endereço XMPP completo. Seu convite do servidor diff --git a/src/conversations/res/values-ro-rRO/strings.xml b/src/conversations/res/values-ro-rRO/strings.xml index 232b7d9f1..baefb00c6 100644 --- a/src/conversations/res/values-ro-rRO/strings.xml +++ b/src/conversations/res/values-ro-rRO/strings.xml @@ -4,7 +4,7 @@ Folosește conversations.im Creează un cont nou Aveți deja un cont XMPP? S-ar putea să fie așa dacă deja utilizați un alt client XMPP sau dacă ați folosit Conversations în trecut. Dacă nu, puteți crea un cont nou XMPP chiar acum.\nIdee: Unii furnizori de e-mail oferă de asemenea și conturi XMPP. - XMPP este o rețea de mesagerie instant ce nu depinde de un anumit furnizor. Aveți posibilitatea să utilizați acest client cu orice server XMPP doriți.\nTotuși, pentru confortul dumneavoastră, am facilitat crearea unui cont pe conversations.im¹; un furnizor potrivit pentru utilizarea cu aplicația Conversations. + XMPP este o rețea de mesagerie instant ce nu depinde de un anumit furnizor. Aveți posibilitatea să utilizați acest client cu orice server XMPP doriți.\nTotuși, pentru confortul dumneavoastră, am facilitat crearea unui cont pe conversations.im; un furnizor potrivit pentru utilizarea cu aplicația Conversations. Ați fost invitați la %1$s. Vă vom ghida prin procesul de creare al unui cont.\nCând alegeți %1$s ca furnizor veți putea comunica cu utilizatorii altor furnizori oferindu-le adresa dumneavoastră completă XMPP. Ați fost invitați la %1$s. Un nume de utilizator a fost deja ales pentru dumneavoastră. Vă vom ghida prin procesul de creare al unui cont.\nVeți putea comunica cu utilizatorii altor furnizori oferindu-le adresa dumneavoastră completă XMPP. Invitația serverului dumneavoastră diff --git a/src/conversations/res/values-sk/strings.xml b/src/conversations/res/values-sk/strings.xml index 4897be11a..ed58bbefb 100644 --- a/src/conversations/res/values-sk/strings.xml +++ b/src/conversations/res/values-sk/strings.xml @@ -4,7 +4,7 @@ Použiť conversations.im Vytvoriť nové konto Máte už svoje XMPP konto? Môže to tak byť v prípade, že už používate iného klienta XMPP alebo ste predtým používali Conversations. Ak nie, môžete si vytvoriť nové XMPP konto práve teraz.\nHint: Niektorí poskytovatelia emailu zároveň poskytujú aj XMPP kontá. - XMPP je sieť pre okamžité správy nezávislá od poskytovateľa. Tohto klienta môžete používať s akýmkoľvek XMPP serverom, ktorý si vyberiete..\nAvšak pre vaše pohodlie sme zjednodušili vytvorenie konta na conversations.im¹; poskytovateľ špeciálne vhodný na používanie s Conversations. + XMPP je sieť pre okamžité správy nezávislá od poskytovateľa. Tohto klienta môžete používať s akýmkoľvek XMPP serverom, ktorý si vyberiete..\nAvšak pre vaše pohodlie sme zjednodušili vytvorenie konta na conversations.im; poskytovateľ špeciálne vhodný na používanie s Conversations. Boli ste pozvaný do %1$s. Prevedieme vás procesom vytvorenia konta..\nPo výbere %1$s ako poskytovateľa, budete môcť komunikovať s užívateľmi iných poskytovateľov tak, že im dáte vašu úplnú XMPP adresu. Boli ste pozvaný do %1$s . Užívateľské meno vám už bolo vopred vybrané. Prevedieme vás procesom vytvorenia konta..\nBudete môcť komunikovať s užívateľmi iných poskytovateľov tak, že im dáte vašu úplnú XMPP adresu. Ťuknite na tlačidlo zdieľať na odoslanie pozvánky do %1$s vášmu kontaktu. diff --git a/src/conversations/res/values-sr/strings.xml b/src/conversations/res/values-sr/strings.xml index b9e417ed4..e668ed7e6 100644 --- a/src/conversations/res/values-sr/strings.xml +++ b/src/conversations/res/values-sr/strings.xml @@ -4,6 +4,6 @@ Користи conversations.im Направи нови налог Да ли већ имате ИксМПП налог? Извесно је да га имате ако користите неки ИксМПП клијент или сте раније користили Конверзацију. Ако немате, сада можете направити нови ИксМПП налог.\nСавет: неки поштански провајдери такође омогућавају и ИксМПП налоге. - ИксМПП је мрежа брзих порука, независна од провајдера. Овај клијент можете користити уз било који сервер по вашем избору.\nДа бисмо вам олакшали, омогућили смо креирање налога на conversations.im¹; провајдеру специјално прилаг.ођеном за коришћење уз Конверзацију + ИксМПП је мрежа брзих порука, независна од провајдера. Овај клијент можете користити уз било који сервер по вашем избору.\nДа бисмо вам олакшали, омогућили смо креирање налога на conversations.im; провајдеру специјално прилаг.ођеном за коришћење уз Конверзацију Ваша серверска позивница \ No newline at end of file diff --git a/src/conversations/res/values-tr-rTR/strings.xml b/src/conversations/res/values-tr-rTR/strings.xml index 43b327ef1..6fb383cf7 100644 --- a/src/conversations/res/values-tr-rTR/strings.xml +++ b/src/conversations/res/values-tr-rTR/strings.xml @@ -4,7 +4,7 @@ conversations.im kullan Yeni hesap oluştur Zaten bir XMPP hesabınız var mı? Bunun sebebi, zaten başka bir XMPP istemcisi kullanıyor oluşunuz veya Conversations\'ı önceden kullanmış olmanız olabilir. Eğer durum bu değilse şimdi yeni bir XMPP hesabı oluşturabilirsiniz.\nİpucu: Bağzı e-posta sağlayıcıları da XMPP hesapları kullanabilir. - XMPP; anlık yazışmalar için bağımsız bir sağlayıcıdır. Bu istemciyi istediğiniz herhangi bir XMPP sunucusu ile birlikte kullanabilirsiniz.\nAncak kullanım rahatlığı adına sizin için conversations.im¹; Conversations için özellikle tasarlanmış bir sağlayıcıda hesap açmanızı kolaylaştırdık. + XMPP; anlık yazışmalar için bağımsız bir sağlayıcıdır. Bu istemciyi istediğiniz herhangi bir XMPP sunucusu ile birlikte kullanabilirsiniz.\nAncak kullanım rahatlığı adına sizin için conversations.im; Conversations için özellikle tasarlanmış bir sağlayıcıda hesap açmanızı kolaylaştırdık. %1$s sağlayıcısına davet edildiniz. Sizi hesap oluşturulması konusunda yönlendireceğiz.\n%1$s bir sağlayıcı olark seçildiğinde, başka sağlayıcılar kullanan kullanıcılarla, onlara tam XMPP adresinizi vererek iletişim kurabileceksiniz. %1$s sağlayıcısına davet edildiniz. Sizin için zaten bir kullanıcı adı seçildi. Sizi hesap oluşturulması konusunda yönlendireceğiz.\nBaşka sağlayıcılar kullanan kullanıcılarla, onlara tam XMPP adresinizi vererek iletişim kurabileceksiniz. Sunucu davetiyeniz diff --git a/src/conversations/res/values-uk/strings.xml b/src/conversations/res/values-uk/strings.xml index f618c0cea..3b855ab5c 100644 --- a/src/conversations/res/values-uk/strings.xml +++ b/src/conversations/res/values-uk/strings.xml @@ -4,7 +4,7 @@ Скористатися conversations.im Створити новий обліковий запис Вже маєте обліковий запис XMPP? Можливо, користуєтеся іншою програмою XMPP або користувалися цією програмою раніше. Якщо ні, можете створити новий обліковий запис XMPP просто зараз.\nЗверніть увагу, що деякі постачальники електронної пошти у той же час надають облікові записи XMPP. - XMPP — це мережа обміну повідомленнями, незалежна від постачальників. Можете використовувати цю програму з будь-яким XMPP сервером, який оберете.\nПроте, для зручності, ми спростили створення облікового запису на conversations.im¹ — у постачальника, який спеціально налаштований на роботу з цією програмою. + XMPP — це мережа обміну повідомленнями, незалежна від постачальників. Можете використовувати цю програму з будь-яким XMPP сервером, який оберете.\nПроте, для зручності, ми спростили створення облікового запису на conversations.im — у постачальника, який спеціально налаштований на роботу з цією програмою. Вас запросили до %1$s. Ми проведемо вас крок за кроком, щоб створити обліковий запис.\nОбираючи %1$s в якості свого постачальника, ви зможете спілкуватися з користувачами інших постачальників, для цього повідомте їм свою повну адресу XMPP. Вас запросили до %1$s. Для вас створено ім\'я користувача. Ми проведемо вас крок за кроком, щоб створити обліковий запис.\nВи зможете спілкуватися з користувачами інших постачальників, для цього повідомите їм свою повну адресу XMPP. Ваше запрошення до сервера diff --git a/src/conversations/res/values-vi/strings.xml b/src/conversations/res/values-vi/strings.xml index ff010bd3e..f80ceacf8 100644 --- a/src/conversations/res/values-vi/strings.xml +++ b/src/conversations/res/values-vi/strings.xml @@ -4,7 +4,7 @@ Sử dụng conversations.im Tạo tài khoản mới Bạn đã có tài khoản XMPP chưa? Điều này có thể đúng nếu bạn đang dùng một ứng dụng khách cho XMPP khác hoặc đã sử dụng Conversations trước đó. Nếu không, bạn có thể tạo tài khoản XMPP mới ngay bây giờ.\nGợi ý: Một số nhà cung cấp email cũng cung cấp tài khoản XMPP. - XMPP là một mạng nhắn tin ngay lập tức không phụ thuộc vào nhà cung cấp. Bạn có thể sử dụng ứng dụng khách này với bất kỳ máy chủ XMPP nào mà bạn chọn.\nTuy nhiên, vì sự thuận tiện của bạn, chúng tôi đã làm cho việc tạo tài khoản trên conversations.im¹ được dễ dàng; một nhà cung cấp đặc biệt phù hợp với việc sử dụng Conversations. + XMPP là một mạng nhắn tin ngay lập tức không phụ thuộc vào nhà cung cấp. Bạn có thể sử dụng ứng dụng khách này với bất kỳ máy chủ XMPP nào mà bạn chọn.\nTuy nhiên, vì sự thuận tiện của bạn, chúng tôi đã làm cho việc tạo tài khoản trên conversations.im được dễ dàng; một nhà cung cấp đặc biệt phù hợp với việc sử dụng Conversations. Bạn đã được mời vào %1$s. Chúng tôi sẽ hướng dẫn bạn trong quá trình tạo tài khoản.\nKhi chọn %1$s là nhà cung cấp, bạn sẽ có thể giao tiếp với những người dùng của các nhà cung cấp khác bằng cách đưa cho họ địa chỉ XMPP đầy đủ của bạn. Bạn đã được mời vào %1$s. Một tên người dùng đã được chọn sẵn cho bạn. Chúng tôi sẽ hướng dẫn bạn trong quá trình tạo tài khoản.\nBạn sẽ có thể giao tiếp với những người dùng của các nhà cung cấp khác bằng cách đưa cho họ địa chỉ XMPP đầy đủ của bạn. Lời mời vào máy chủ của bạn diff --git a/src/conversations/res/values-zh-rCN/strings.xml b/src/conversations/res/values-zh-rCN/strings.xml index 8fc58fe8f..39254955a 100644 --- a/src/conversations/res/values-zh-rCN/strings.xml +++ b/src/conversations/res/values-zh-rCN/strings.xml @@ -4,7 +4,7 @@ 使用conversations.im 创建新账户 您已经拥有一个XMPP账户了吗?如果您之前使用过其他的XMPP客户端的话,那么您已经拥有这种账户了。如果没有账户的话,您可以现在创建一个。\n提示:有些电子邮件服务也提供XMPP账户。 - XMPP是独立于提供程序的即时消息网络。 您可以将此客户端与所选的任何XMPP服务器一起使用。\ n不过,为了您的方便,我们很容易在对话中创建帐户。im¹; 特别适合与“对话”配合使用的提供商。 + XMPP是独立于提供程序的即时消息网络。 您可以将此客户端与所选的任何XMPP服务器一起使用。\ n不过,为了您的方便,我们很容易在对话中创建帐户。im; 特别适合与“对话”配合使用的提供商。 您已受邀参加%1$s。 我们将指导您完成创建帐户的过程。\n选择%1$s作为提供者后,您可以通过提供其他人的完整XMPP地址与其他提供者的用户进行交流。 您已受邀参加%1$s。 已经为您选择了一个用户名。 我们将指导您完成创建帐户的过程。\n您可以通过向其他提供商的用户提供完整的XMPP地址来与他们进行交流。 你的服务器邀请 From 93c591634684b31660d852a92b5ee576a52ca9eb Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 28 Mar 2022 10:12:58 +0200 Subject: [PATCH 11/31] bump version code --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f1b134848..b15db6067 100644 --- a/build.gradle +++ b/build.gradle @@ -90,7 +90,7 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 30 - versionCode 42027 + versionCode 42028 versionName "2.10.4" archivesBaseName += "-$versionName" applicationId "eu.siacs.conversations" From 0ba3cbb99c9c8ed60f633762d5cb30bc5a2cf91e Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 28 Mar 2022 18:06:38 -0500 Subject: [PATCH 12/31] PhoneNumberUtilWrapper can also throw IllegalArgumentException on bad tel --- src/cheogram/java/com/cheogram/android/ConnectionService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cheogram/java/com/cheogram/android/ConnectionService.java b/src/cheogram/java/com/cheogram/android/ConnectionService.java index c6a706d65..edeccad11 100644 --- a/src/cheogram/java/com/cheogram/android/ConnectionService.java +++ b/src/cheogram/java/com/cheogram/android/ConnectionService.java @@ -99,7 +99,7 @@ public class ConnectionService extends android.telecom.ConnectionService { String tel = PhoneNumberUtils.extractNetworkPortion(rawTel); try { tel = PhoneNumberUtilWrapper.normalize(this, tel); - } catch (NumberParseException e) { + } catch (IllegalArgumentException | NumberParseException e) { return Connection.createFailedConnection( new DisconnectCause(DisconnectCause.ERROR) ); From e0e088479c4b3e09ed22bc579f8c5a3cf342a872 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 28 Mar 2022 18:09:48 -0500 Subject: [PATCH 13/31] Solve NPE --- src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java b/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java index 7c4e31416..81790fd03 100644 --- a/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java +++ b/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java @@ -453,6 +453,7 @@ public class EnterJidDialog extends DialogFragment implements OnBackendConnected binding.jidLayout.setHint(this.gateways.get(i-1).second); String type = getType(i); + if (type == null) type = ""; if (type.equals("pstn") || type.equals("sms")) { binding.jid.setInputType(InputType.TYPE_CLASS_PHONE); } else if (type.equals("email") || type.equals("sip")) { From 541c90c5979a67c2de399a3344f330c0ac2b1942 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 28 Mar 2022 18:14:02 -0500 Subject: [PATCH 14/31] Fix NPE --- .../java/com/cheogram/android/ConnectionService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cheogram/java/com/cheogram/android/ConnectionService.java b/src/cheogram/java/com/cheogram/android/ConnectionService.java index edeccad11..0d7f5ec7b 100644 --- a/src/cheogram/java/com/cheogram/android/ConnectionService.java +++ b/src/cheogram/java/com/cheogram/android/ConnectionService.java @@ -112,6 +112,12 @@ public class ConnectionService extends android.telecom.ConnectionService { } Account account = xmppConnectionService.findAccountByJid(Jid.of(gateway[0])); + if (account == null) { + return Connection.createFailedConnection( + new DisconnectCause(DisconnectCause.ERROR) + ); + } + Jid with = Jid.ofLocalAndDomain(tel, gateway[1]); CheogramConnection connection = new CheogramConnection(account, with, postDial); From 7e762eb799abe0d4f172d04eb714b97e838a8b1f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 30 Mar 2022 09:03:19 +0200 Subject: [PATCH 15/31] ensure downloaded file does not exceed Content-Length reported by HEAD --- .../http/HttpDownloadConnection.java | 23 ++++++++++++++++--- src/main/res/values/strings.xml | 1 + 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java index 5623c0be7..31ba810a4 100644 --- a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java +++ b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java @@ -102,11 +102,15 @@ public class HttpDownloadConnection implements Transferable { if (this.message.getEncryption() == Message.ENCRYPTION_AXOLOTL && this.file.getKey() == null) { this.message.setEncryption(Message.ENCRYPTION_NONE); } - //TODO add auth tag size to knownFileSize final Long knownFileSize = message.getFileParams().size; Log.d(Config.LOGTAG,"knownFileSize: "+knownFileSize+", body="+message.getBody()); if (knownFileSize != null && interactive) { - this.file.setExpectedSize(knownFileSize); + if (message.getEncryption() == Message.ENCRYPTION_AXOLOTL + && this.file.getKey() != null) { + this.file.setExpectedSize(knownFileSize + 16); + } else { + this.file.setExpectedSize(knownFileSize); + } download(true); } else { checkFileSize(interactive); @@ -216,6 +220,8 @@ public class HttpDownloadConnection implements Transferable { mXmppConnectionService.showErrorToastInUi(R.string.download_failed_could_not_connect); } else if (e instanceof FileWriterException) { mXmppConnectionService.showErrorToastInUi(R.string.download_failed_could_not_write_file); + } else if (e instanceof InvalidFileException) { + mXmppConnectionService.showErrorToastInUi(R.string.download_failed_invalid_file); } else { mXmppConnectionService.showErrorToastInUi(R.string.download_failed_file_not_found); } @@ -428,9 +434,12 @@ public class HttpDownloadConnection implements Transferable { transmitted += count; try { outputStream.write(buffer, 0, count); - } catch (IOException e) { + } catch (final IOException e) { throw new FileWriterException(file); } + if (transmitted > expected) { + throw new InvalidFileException(String.format("File exceeds expected size of %d", expected)); + } updateProgress(Math.round(((double) transmitted / expected) * 100)); } outputStream.flush(); @@ -458,4 +467,12 @@ public class HttpDownloadConnection implements Transferable { throw new IOException(String.format(Locale.ENGLISH, "HTTP Status code was %d", code)); } } + + private static class InvalidFileException extends IOException { + + private InvalidFileException(final String message) { + super(message); + } + + } } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 8b5e67eb2..20c7cbef8 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -463,6 +463,7 @@ Download failed: File not found Download failed: Could not connect to host Download failed: Could not write file + Download failed: Invalid file Tor network unavailable Bind failure The server is not responsible for this domain From 09cf5feefa3a8a1ab21c84cb2208075ef216fc4a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 30 Mar 2022 09:25:05 +0200 Subject: [PATCH 16/31] limit posh files to 10k --- .../services/MemorizingTrustManager.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java b/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java index b51b8de41..520348943 100644 --- a/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java +++ b/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java @@ -43,6 +43,7 @@ import androidx.appcompat.app.AppCompatActivity; import com.google.common.base.Charsets; import com.google.common.base.Joiner; +import com.google.common.io.ByteStreams; import com.google.common.io.CharStreams; import org.json.JSONArray; @@ -77,6 +78,7 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; +import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.crypto.XmppDomainVerifier; import eu.siacs.conversations.entities.MTMDecision; @@ -391,13 +393,13 @@ public class MemorizingTrustManager { final List fingerprints = getPoshFingerprints(domain); if (hash != null && fingerprints.size() > 0) { if (fingerprints.contains(hash)) { - Log.d("mtm", "trusted cert fingerprint of " + domain + " via posh"); + Log.d(Config.LOGTAG, "trusted cert fingerprint of " + domain + " via posh"); return; } else { - Log.d("mtm", "fingerprint " + hash + " not found in " + fingerprints); + Log.d(Config.LOGTAG, "fingerprint " + hash + " not found in " + fingerprints); } if (getPoshCacheFile(domain).delete()) { - Log.d("mtm", "deleted posh file for " + domain + " after not being able to verify"); + Log.d(Config.LOGTAG, "deleted posh file for " + domain + " after not being able to verify"); } } } @@ -410,7 +412,7 @@ public class MemorizingTrustManager { } } - private List getPoshFingerprints(String domain) { + private List getPoshFingerprints(final String domain) { final List cached = getPoshFingerprintsFromCache(domain); if (cached == null) { return getPoshFingerprintsFromServer(domain); @@ -424,13 +426,13 @@ public class MemorizingTrustManager { } private List getPoshFingerprintsFromServer(String domain, String url, int maxTtl, boolean followUrl) { - Log.d("mtm", "downloading json for " + domain + " from " + url); + Log.d(Config.LOGTAG, "downloading json for " + domain + " from " + url); final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(master); final boolean useTor = QuickConversationsService.isConversations() && preferences.getBoolean("use_tor", master.getResources().getBoolean(R.bool.use_tor)); try { final List results = new ArrayList<>(); final InputStream inputStream = HttpConnectionManager.open(url, useTor); - final String body = CharStreams.toString(new InputStreamReader(inputStream, Charsets.UTF_8)); + final String body = CharStreams.toString(new InputStreamReader(ByteStreams.limit(inputStream,10_000), Charsets.UTF_8)); final JSONObject jsonObject = new JSONObject(body); int expires = jsonObject.getInt("expires"); if (expires <= 0) { @@ -457,7 +459,7 @@ public class MemorizingTrustManager { writeFingerprintsToCache(domain, results, 1000L * expires + System.currentTimeMillis()); return results; } catch (final Exception e) { - Log.d("mtm", "error fetching posh " + e.getMessage()); + Log.d(Config.LOGTAG, "error fetching posh",e); return new ArrayList<>(); } } @@ -495,7 +497,7 @@ public class MemorizingTrustManager { file.delete(); return null; } else { - Log.d("mtm", "posh fingerprints expire in " + (expiresIn / 1000) + "s"); + Log.d(Config.LOGTAG, "posh fingerprints expire in " + (expiresIn / 1000) + "s"); } final List result = new ArrayList<>(); final JSONArray jsonArray = jsonObject.getJSONArray("fingerprints"); @@ -512,7 +514,6 @@ public class MemorizingTrustManager { } private X509Certificate[] getAcceptedIssuers() { - LOGGER.log(Level.FINE, "getAcceptedIssuers()"); return defaultTrustManager == null ? new X509Certificate[0] : defaultTrustManager.getAcceptedIssuers(); } From eadb1e127b81005b8d83a86197e6c71ce0115fcc Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 30 Mar 2022 09:59:42 +0200 Subject: [PATCH 17/31] disable knownFileSize on re-download for pgp encrypted files --- .../siacs/conversations/http/HttpDownloadConnection.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java index 31ba810a4..032496842 100644 --- a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java +++ b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java @@ -102,7 +102,12 @@ public class HttpDownloadConnection implements Transferable { if (this.message.getEncryption() == Message.ENCRYPTION_AXOLOTL && this.file.getKey() == null) { this.message.setEncryption(Message.ENCRYPTION_NONE); } - final Long knownFileSize = message.getFileParams().size; + final Long knownFileSize; + if (message.getEncryption() == Message.ENCRYPTION_PGP || message.getEncryption() == Message.ENCRYPTION_DECRYPTED) { + knownFileSize = null; + } else { + knownFileSize = message.getFileParams().size; + } Log.d(Config.LOGTAG,"knownFileSize: "+knownFileSize+", body="+message.getBody()); if (knownFileSize != null && interactive) { if (message.getEncryption() == Message.ENCRYPTION_AXOLOTL From 95e3a6769d6cdc08ff86d70fb8cb561974346501 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 30 Mar 2022 18:45:18 +0200 Subject: [PATCH 18/31] retrieve uncompressed file size in HEAD request --- .../siacs/conversations/http/HttpDownloadConnection.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java index 032496842..850c0683d 100644 --- a/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java +++ b/src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java @@ -322,6 +322,7 @@ public class HttpDownloadConnection implements Transferable { ); final Request request = new Request.Builder() .url(URL.stripFragment(mUrl)) + .addHeader("Accept-Encoding", "identity") .head() .build(); mostRecentCall = client.newCall(request); @@ -347,11 +348,11 @@ public class HttpDownloadConnection implements Transferable { throw new IOException("Server reported negative file size"); } return size; - } catch (IOException e) { + } catch (final IOException e) { Log.d(Config.LOGTAG, "io exception during HEAD " + e.getMessage()); throw e; - } catch (NumberFormatException e) { - throw new IOException(); + } catch (final NumberFormatException e) { + throw new IOException(e); } } From 5e8a492044eb82311ecd43cf50285f56a893d359 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 30 Mar 2022 19:25:09 -0500 Subject: [PATCH 19/31] Remove dead string --- .../siacs/conversations/ui/MagicCreateActivity.java | 2 -- src/cheogram/res/layout/activity_pick_server.xml | 12 ------------ src/cheogram/res/layout/magic_create.xml | 13 ------------- 3 files changed, 27 deletions(-) diff --git a/src/cheogram/java/eu/siacs/conversations/ui/MagicCreateActivity.java b/src/cheogram/java/eu/siacs/conversations/ui/MagicCreateActivity.java index 3419d8fc9..6f0386672 100644 --- a/src/cheogram/java/eu/siacs/conversations/ui/MagicCreateActivity.java +++ b/src/cheogram/java/eu/siacs/conversations/ui/MagicCreateActivity.java @@ -66,13 +66,11 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher { if (username != null && domain != null) { binding.title.setText(R.string.your_server_invitation); binding.instructions.setText(getString(R.string.magic_create_text_fixed, domain)); - binding.finePrint.setVisibility(View.INVISIBLE); binding.username.setEnabled(false); binding.username.setText(this.username); updateFullJidInformation(this.username); } else if (domain != null) { binding.instructions.setText(getString(R.string.magic_create_text_on_x, domain)); - binding.finePrint.setVisibility(View.INVISIBLE); } binding.createAccount.setOnClickListener(v -> { try { diff --git a/src/cheogram/res/layout/activity_pick_server.xml b/src/cheogram/res/layout/activity_pick_server.xml index 16be52ec4..d55ea78cc 100644 --- a/src/cheogram/res/layout/activity_pick_server.xml +++ b/src/cheogram/res/layout/activity_pick_server.xml @@ -84,18 +84,6 @@ android:padding="8dp" android:src="@drawable/main_logo" /> - - diff --git a/src/cheogram/res/layout/magic_create.xml b/src/cheogram/res/layout/magic_create.xml index cc0337062..f6e0436a5 100644 --- a/src/cheogram/res/layout/magic_create.xml +++ b/src/cheogram/res/layout/magic_create.xml @@ -95,19 +95,6 @@ android:padding="8dp" android:src="@drawable/main_logo" /> - - From 4af1fe39c79d4cf05e16776876ac386ceee288dd Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 31 Mar 2022 09:41:55 +0200 Subject: [PATCH 20/31] version bump to 2.10.5 + changelog --- CHANGELOG.md | 5 +++++ build.gradle | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b445c52ce..81c2d9e1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +### Version 2.10.5 + +* Security: Stop downloading files that exceed advertised file size +* Security: Limit POSH files to 10K + ### Version 2.10.4 * Fix interaction with Google Maps Share Location Plugin diff --git a/build.gradle b/build.gradle index b15db6067..766ac5e94 100644 --- a/build.gradle +++ b/build.gradle @@ -90,8 +90,8 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 30 - versionCode 42028 - versionName "2.10.4" + versionCode 42031 + versionName "2.10.5" archivesBaseName += "-$versionName" applicationId "eu.siacs.conversations" resValue "string", "applicationId", applicationId From ed216fe0d9efeb834a00a1e341faa87db75af419 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 4 Apr 2022 14:03:23 -0500 Subject: [PATCH 21/31] Fix crash on Android < 23 where there is not dialler stuff --- .../eu/siacs/conversations/ui/ManageAccountActivity.java | 3 +++ src/main/java/eu/siacs/conversations/entities/Contact.java | 5 +++++ .../eu/siacs/conversations/services/NotificationService.java | 2 ++ 3 files changed, 10 insertions(+) diff --git a/src/cheogram/java/eu/siacs/conversations/ui/ManageAccountActivity.java b/src/cheogram/java/eu/siacs/conversations/ui/ManageAccountActivity.java index 0fc4757cd..3d08ac4bd 100644 --- a/src/cheogram/java/eu/siacs/conversations/ui/ManageAccountActivity.java +++ b/src/cheogram/java/eu/siacs/conversations/ui/ManageAccountActivity.java @@ -3,6 +3,7 @@ package eu.siacs.conversations.ui; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.security.KeyChain; import android.security.KeyChainAliasCallback; @@ -86,6 +87,8 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda startActivity(new Intent(android.telecom.TelecomManager.ACTION_CHANGE_PHONE_ACCOUNTS)); }); + if (Build.VERSION.SDK_INT < 23) return; + outer: for (Account account : xmppConnectionService.getAccounts()) { for (Contact contact : account.getRoster().getContacts()) { diff --git a/src/main/java/eu/siacs/conversations/entities/Contact.java b/src/main/java/eu/siacs/conversations/entities/Contact.java index bc1c809e4..ffdd73cf3 100644 --- a/src/main/java/eu/siacs/conversations/entities/Contact.java +++ b/src/main/java/eu/siacs/conversations/entities/Contact.java @@ -6,6 +6,7 @@ import android.content.Context; import android.database.Cursor; import android.graphics.drawable.Icon; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; @@ -609,6 +610,8 @@ public class Contact implements ListItem, Blockable { // This Contact is a gateway to use for voice calls, register it with OS public void registerAsPhoneAccount(XmppConnectionService ctx) { + if (Build.VERSION.SDK_INT < 23) return; + TelecomManager telecomManager = ctx.getSystemService(TelecomManager.class); PhoneAccount phoneAccount = PhoneAccount.builder( @@ -631,6 +634,8 @@ public class Contact implements ListItem, Blockable { // Unregister any associated PSTN gateway integration public void unregisterAsPhoneAccount(Context ctx) { + if (Build.VERSION.SDK_INT < 23) return; + TelecomManager telecomManager = ctx.getSystemService(TelecomManager.class); telecomManager.unregisterPhoneAccount(phoneAccountHandle()); } diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 0fdba2675..6ea28d5f9 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -429,6 +429,8 @@ public class NotificationService { } private synchronized boolean tryRingingWithDialerUI(final AbstractJingleConnection.Id id, final Set media) { + if (Build.VERSION.SDK_INT < 23) return false; + if (mXmppConnectionService.checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { // We cannot request audio permission in Dialer UI // when Dialer is shown over keyguard, the user cannot even necessarily From 617ceb24291318732082654f37216c7da4adfb48 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 6 Apr 2022 08:29:39 -0500 Subject: [PATCH 22/31] Fix NPE --- src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java b/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java index 81790fd03..a358e6012 100644 --- a/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java +++ b/src/main/java/eu/siacs/conversations/ui/EnterJidDialog.java @@ -159,10 +159,11 @@ public class EnterJidDialog extends DialogFragment implements OnBackendConnected @Override public void onItemSelected(AdapterView accountSpinner, View view, int position, long id) { XmppActivity context = (XmppActivity) getActivity(); - if (context.xmppConnectionService == null || accountJid() == null) return; + if (context == null || context.xmppConnectionService == null || accountJid() == null) return; gatewayListAdapter.clear(); final Account account = context.xmppConnectionService.findAccountByJid(accountJid()); + if (account == null) return; for (final Contact contact : account.getRoster().getContacts()) { if (contact.showInRoster() && (contact.getPresences().anyIdentity("gateway", null) || contact.getPresences().anySupport("jabber:iq:gateway"))) { From e5a83b9697445f63c3badeaa08962317e25e7f0e Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 6 Apr 2022 08:51:42 -0500 Subject: [PATCH 23/31] Allow extended settings and tor in any build flavour Trust the setting, don't override it by flavour. --- .../siacs/conversations/services/MemorizingTrustManager.java | 2 +- .../siacs/conversations/services/XmppConnectionService.java | 4 ++-- .../java/eu/siacs/conversations/ui/EditAccountActivity.java | 4 ++-- src/main/java/eu/siacs/conversations/ui/LocationActivity.java | 2 +- src/main/java/eu/siacs/conversations/ui/XmppActivity.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java b/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java index 520348943..64283e1a0 100644 --- a/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java +++ b/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java @@ -428,7 +428,7 @@ public class MemorizingTrustManager { private List getPoshFingerprintsFromServer(String domain, String url, int maxTtl, boolean followUrl) { Log.d(Config.LOGTAG, "downloading json for " + domain + " from " + url); final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(master); - final boolean useTor = QuickConversationsService.isConversations() && preferences.getBoolean("use_tor", master.getResources().getBoolean(R.bool.use_tor)); + final boolean useTor = preferences.getBoolean("use_tor", master.getResources().getBoolean(R.bool.use_tor)); try { final List results = new ArrayList<>(); final InputStream inputStream = HttpConnectionManager.open(url, useTor); diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 6c976bf53..5e907effb 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -4125,11 +4125,11 @@ public class XmppConnectionService extends Service { } public boolean useTorToConnect() { - return QuickConversationsService.isConversations() && getBooleanPreference("use_tor", R.bool.use_tor); + return getBooleanPreference("use_tor", R.bool.use_tor); } public boolean showExtendedConnectionOptions() { - return QuickConversationsService.isConversations() && getBooleanPreference("show_connection_options", R.bool.show_connection_options); + return getBooleanPreference("show_connection_options", R.bool.show_connection_options); } public boolean broadcastLastActivity() { diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index 1960d4c6d..24406ced8 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -736,8 +736,8 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat } } SharedPreferences preferences = getPreferences(); - mUseTor = QuickConversationsService.isConversations() && preferences.getBoolean("use_tor", getResources().getBoolean(R.bool.use_tor)); - this.mShowOptions = mUseTor || (QuickConversationsService.isConversations() && preferences.getBoolean("show_connection_options", getResources().getBoolean(R.bool.show_connection_options))); + mUseTor = preferences.getBoolean("use_tor", getResources().getBoolean(R.bool.use_tor)); + this.mShowOptions = mUseTor || preferences.getBoolean("show_connection_options", getResources().getBoolean(R.bool.show_connection_options)); this.binding.namePort.setVisibility(mShowOptions ? View.VISIBLE : View.GONE); if (mForceRegister != null) { this.binding.accountRegisterNew.setVisibility(View.GONE); diff --git a/src/main/java/eu/siacs/conversations/ui/LocationActivity.java b/src/main/java/eu/siacs/conversations/ui/LocationActivity.java index 2627e0e59..d14efd5c9 100644 --- a/src/main/java/eu/siacs/conversations/ui/LocationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/LocationActivity.java @@ -97,7 +97,7 @@ public abstract class LocationActivity extends ActionBarActivity implements Loca final IConfigurationProvider config = Configuration.getInstance(); config.load(ctx, getPreferences()); config.setUserAgentValue(BuildConfig.APPLICATION_ID + "/" + BuildConfig.VERSION_CODE); - if (QuickConversationsService.isConversations() && getBooleanPreference("use_tor", R.bool.use_tor)) { + if (getBooleanPreference("use_tor", R.bool.use_tor)) { config.setHttpProxy(HttpConnectionManager.getProxy()); } } diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java index 613ccbbce..aa0e6abc3 100644 --- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java @@ -459,7 +459,7 @@ public abstract class XmppActivity extends ActionBarActivity { } private boolean useTor() { - return QuickConversationsService.isConversations() && getBooleanPreference("use_tor", R.bool.use_tor); + return getBooleanPreference("use_tor", R.bool.use_tor); } protected SharedPreferences getPreferences() { From abde1336e861826696ad63fe25e4bc7a30707064 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 12 Apr 2022 08:24:24 -0500 Subject: [PATCH 24/31] Stop fearmongering about encryption While standard TLS encryption is not E2E, it is hardly "unencrypted" and so we should not be scaring people quite so strongly about it. --- .../java/eu/siacs/conversations/ui/ConversationFragment.java | 2 +- .../conversations/ui/util/ConversationMenuConfigurator.java | 4 +--- src/main/java/eu/siacs/conversations/utils/UIHelper.java | 2 +- src/main/res/values-ar/strings.xml | 2 +- src/main/res/values-bg/strings.xml | 2 +- src/main/res/values-ca/strings.xml | 2 +- src/main/res/values-cs/strings.xml | 2 +- src/main/res/values-da-rDK/strings.xml | 2 +- src/main/res/values-de/strings.xml | 2 +- src/main/res/values-el/strings.xml | 2 +- src/main/res/values-es/strings.xml | 2 +- src/main/res/values-eu/strings.xml | 2 +- src/main/res/values-fa-rIR/strings.xml | 2 +- src/main/res/values-fi/strings.xml | 2 +- src/main/res/values-fr/strings.xml | 2 +- src/main/res/values-gl/strings.xml | 2 +- src/main/res/values-hu/strings.xml | 2 +- src/main/res/values-id/strings.xml | 2 +- src/main/res/values-it/strings.xml | 2 +- src/main/res/values-iw/strings.xml | 2 +- src/main/res/values-ja/strings.xml | 2 +- src/main/res/values-ko/strings.xml | 2 +- src/main/res/values-ml/strings.xml | 2 +- src/main/res/values-nb-rNO/strings.xml | 2 +- src/main/res/values-nl/strings.xml | 2 +- src/main/res/values-pl/strings.xml | 2 +- src/main/res/values-pt-rBR/strings.xml | 2 +- src/main/res/values-pt/strings.xml | 2 +- src/main/res/values-ro-rRO/strings.xml | 2 +- src/main/res/values-ru/strings.xml | 2 +- src/main/res/values-sk/strings.xml | 2 +- src/main/res/values-sr/strings.xml | 2 +- src/main/res/values-sv/strings.xml | 2 +- src/main/res/values-tr-rTR/strings.xml | 2 +- src/main/res/values-uk/strings.xml | 2 +- src/main/res/values-vi/strings.xml | 2 +- src/main/res/values-zh-rCN/strings.xml | 2 +- src/main/res/values-zh-rTW/strings.xml | 2 +- src/main/res/values/strings.xml | 2 +- 39 files changed, 39 insertions(+), 41 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 7bcd9d8a5..8d14c03bd 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -793,7 +793,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke this.binding.textInputHint.setVisibility(View.GONE); this.binding.textinput.setHint(R.string.send_corrected_message); } else if (multi && conversation.getNextCounterpart() != null) { - this.binding.textinput.setHint(R.string.send_unencrypted_message); + this.binding.textinput.setHint(R.string.send_message); this.binding.textInputHint.setVisibility(View.VISIBLE); this.binding.textInputHint.setText(getString( R.string.send_private_message_to, diff --git a/src/main/java/eu/siacs/conversations/ui/util/ConversationMenuConfigurator.java b/src/main/java/eu/siacs/conversations/ui/util/ConversationMenuConfigurator.java index 900246591..8703af89e 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/ConversationMenuConfigurator.java +++ b/src/main/java/eu/siacs/conversations/ui/util/ConversationMenuConfigurator.java @@ -102,9 +102,7 @@ public class ConversationMenuConfigurator { return; } - if (conversation.getNextEncryption() != Message.ENCRYPTION_NONE) { - menuSecure.setIcon(R.drawable.ic_lock_white_24dp); - } + menuSecure.setIcon(R.drawable.ic_lock_white_24dp); pgp.setVisible(Config.supportOpenPgp()); none.setVisible(Config.supportUnencrypted() || conversation.getMode() == Conversation.MODE_MULTI); diff --git a/src/main/java/eu/siacs/conversations/utils/UIHelper.java b/src/main/java/eu/siacs/conversations/utils/UIHelper.java index 26732b501..f7befe66f 100644 --- a/src/main/java/eu/siacs/conversations/utils/UIHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/UIHelper.java @@ -544,7 +544,7 @@ public class UIHelper { switch (conversation.getNextEncryption()) { case Message.ENCRYPTION_NONE: if (Config.multipleEncryptionChoices()) { - return context.getString(R.string.send_unencrypted_message); + return context.getString(R.string.send_message); } else { return context.getString(R.string.send_message_to_x, conversation.getName()); } diff --git a/src/main/res/values-ar/strings.xml b/src/main/res/values-ar/strings.xml index 197b23a26..9306280a2 100644 --- a/src/main/res/values-ar/strings.xml +++ b/src/main/res/values-ar/strings.xml @@ -140,7 +140,7 @@ لا يتوافق مع السيرفر خطأ في التدفق خطأ عند فتح التدفق - غير مشفر + TLS رسالة مشفرة عبر OTR رسالة مشفرة عبر OpenPGP أوميمو OMEMO diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index d4603cc3c..2ccedd236 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -172,7 +172,7 @@ Несъвместим сървър Поточна грешка Проблем при отварянето на потока - Нешифровано + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index 452c1423d..53091f165 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -164,7 +164,7 @@ Servidor incompatible Error de transmissió Error d\'obertura de la transmissió - Sense xifrar + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index d0ddfa604..b5c2b3429 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -176,7 +176,7 @@ Nekompatibilní server Chyba přenosu Chyba při otevírání proudu - Nešifrováno + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-da-rDK/strings.xml b/src/main/res/values-da-rDK/strings.xml index 22f4bce2d..7287b2d47 100644 --- a/src/main/res/values-da-rDK/strings.xml +++ b/src/main/res/values-da-rDK/strings.xml @@ -172,7 +172,7 @@ Inkompatibel server Strømfejl Fejl ved streamåbning - Ukrypteret + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index aba514c43..028f51876 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -172,7 +172,7 @@ Inkompatibler Server Stream-Fehler Fehler beim Öffnen des Streams - Unverschlüsselt + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index d6a8cd209..7d56c4d80 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -172,7 +172,7 @@ Μη συμβατός διακομιστής Σφάλμα μετάδοσης Σφάλμα στην εκκίνηση μετάδοσης - Μη κρυπτογραφημένο + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index c958b30b2..6c962997c 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -172,7 +172,7 @@ Servidor incompatible Error de flujo Error al abrir la secuencia - Sin cifrado + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index 4d2fde773..94a700ca4 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -135,7 +135,7 @@ Zerbitzari ez bateragarria Akatsa korrontean Akatsa korrontea irekitzerakoan - Enkriptatu gabe + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-fa-rIR/strings.xml b/src/main/res/values-fa-rIR/strings.xml index 9ba3e4d45..9c10dc123 100644 --- a/src/main/res/values-fa-rIR/strings.xml +++ b/src/main/res/values-fa-rIR/strings.xml @@ -108,7 +108,7 @@ نقض سیاست سرور ناسازگار خطا در ارتباط - رمز نشده + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-fi/strings.xml b/src/main/res/values-fi/strings.xml index 9a03e5808..d9c2a616c 100644 --- a/src/main/res/values-fi/strings.xml +++ b/src/main/res/values-fi/strings.xml @@ -167,7 +167,7 @@ TLS-kättely epäonnistui Verkkotunnuksen varmentaminen epäonnistui Yhteensopimaton palvelin - Salaamaton + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 8e177693e..295ac6c48 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -171,7 +171,7 @@ Serveur incompatible Erreur de flux Erreur d\'ouverture du flux - Non chiffré + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 234d5807e..847e27cf7 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -172,7 +172,7 @@ Servidor incompatible Erro de fluxo Fallo ao abrir o fluxo - Non cifrado + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-hu/strings.xml b/src/main/res/values-hu/strings.xml index 162212928..64ccccc5c 100644 --- a/src/main/res/values-hu/strings.xml +++ b/src/main/res/values-hu/strings.xml @@ -172,7 +172,7 @@ Nem kompatibilis kiszolgáló Adatfolyamhiba Adatfolyam megnyitási hiba - Titkosítatlan + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-id/strings.xml b/src/main/res/values-id/strings.xml index f2a621876..4677feb00 100644 --- a/src/main/res/values-id/strings.xml +++ b/src/main/res/values-id/strings.xml @@ -161,7 +161,7 @@ Server tidak cocok Kesalahan stream Kesalahan pembukaan stream - Tidak terenkripsi + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 6fb2bc823..7021f865a 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -172,7 +172,7 @@ Server non compatibile Errore di stream Errore apertura flusso - Non cifrato + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-iw/strings.xml b/src/main/res/values-iw/strings.xml index 8488cce22..d79130bd4 100644 --- a/src/main/res/values-iw/strings.xml +++ b/src/main/res/values-iw/strings.xml @@ -97,7 +97,7 @@ שם משתמש כבר בשימוש הרשמה הושלמה שרת לא מתאים - לא מוצפן + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index f94eb51e4..0a2eca3c5 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -169,7 +169,7 @@ 互換性のないサーバー ストリーム エラー ストリームを開く際にエラー - 暗号化されていない + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index f6589435a..e64aa6a2d 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -114,7 +114,7 @@ 정책 위반 호환되지 않는 서버 스트림 오류 - 암호화되지 않음 + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-ml/strings.xml b/src/main/res/values-ml/strings.xml index 7adca9d89..2d0bca638 100644 --- a/src/main/res/values-ml/strings.xml +++ b/src/main/res/values-ml/strings.xml @@ -112,7 +112,7 @@ ഉപയോക്തൃനാമം ഇതിനകം നിലവിലുണ്ട് രജിസ്ട്രേഷൻ പൂർത്തിയായി നയ ലംഘനം - സുരക്ഷിതമല്ലാത്ത + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-nb-rNO/strings.xml b/src/main/res/values-nb-rNO/strings.xml index fdbb541d8..87c19035c 100644 --- a/src/main/res/values-nb-rNO/strings.xml +++ b/src/main/res/values-nb-rNO/strings.xml @@ -122,7 +122,7 @@ Praksisbrudd Ukompatibel tjener Strømmingsfeil - Ukryptert + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index 32915d274..fed3428b3 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -145,7 +145,7 @@ Incompatibele server Fout bij stream Fout bij openen van stream - Onversleuteld + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index b1c0db084..721e637f8 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -178,7 +178,7 @@ Serwer niekompatybilny Błąd strumienia Błąd otwierania strumienia - Bez szyfrowania + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 2fbbc4809..a69d6384d 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -172,7 +172,7 @@ Servidor incompatível Erro de fluxo Erro na abertura do fluxo - Descriptografada + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml index 1d7ea055f..786ee19e9 100644 --- a/src/main/res/values-pt/strings.xml +++ b/src/main/res/values-pt/strings.xml @@ -118,7 +118,7 @@ O nome de utilizador já está em uso Registo efetuado com sucesso Servidor incompatível - Não cifrado + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml index 253c97ad1..8c1e34ed9 100644 --- a/src/main/res/values-ro-rRO/strings.xml +++ b/src/main/res/values-ro-rRO/strings.xml @@ -175,7 +175,7 @@ Server incompatibil Eroare de date Eroare deschidere flux de date - Necriptat + TLS OTR OpenGPG OMEMO diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index d9d728049..060daea1c 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -178,7 +178,7 @@ Несовместимый сервер Ошибка потока Ошибка открытия потока - Без шифра + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index 25e10cd61..72663f6b0 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -174,7 +174,7 @@ Doména sa nedá overiť Porušenie pravidiel Nekompatibilný server - Nezašifrovaný + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index cd39b9369..95db80c9e 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -171,7 +171,7 @@ Некомпатибилан сервер Грешка тока Грешка при отварању тока - Нешифровано + TLS ОТР ОпенПГП ОМЕМО diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index d73433c36..0cda9fb71 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -172,7 +172,7 @@ Inkompatibel server Strömningsfel Fel vid öppning av ström - Okrypterat + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-tr-rTR/strings.xml b/src/main/res/values-tr-rTR/strings.xml index f3e135b6b..3e086a5cc 100644 --- a/src/main/res/values-tr-rTR/strings.xml +++ b/src/main/res/values-tr-rTR/strings.xml @@ -172,7 +172,7 @@ Sunucu uyuşmazlığı Akış hatası Akış açılım hatası - Şifrelenmemiş + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 4a96a344e..1702a3ace 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -156,7 +156,7 @@ Несумісний сервер Помилка потоку Не вдалося відкрити мережевий потік - Без шифрування + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml index 76eb33c37..a025dbf6f 100644 --- a/src/main/res/values-vi/strings.xml +++ b/src/main/res/values-vi/strings.xml @@ -169,7 +169,7 @@ Máy chủ không tương thích Lỗi truyền phát Lỗi khi mở luồng truyền - Không mã hoá + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index fe11961a4..cf5fcb5d5 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -169,7 +169,7 @@ 服务器不兼容 流错误 流打开错误 - 未加密 + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index c2ca60d1a..ca4b696fc 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -115,7 +115,7 @@ 違反政策 伺服器不相容 流錯誤 - 未加密 + TLS OTR OpenPGP OMEMO diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 47fb59b6e..3d15606ea 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -171,7 +171,7 @@ Incompatible server Stream error Stream opening error - Unencrypted + TLS OTR OpenPGP OMEMO From af12ac91d02e8e95c127bae4641a724a6f94ea94 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 19 Apr 2022 08:34:17 -0500 Subject: [PATCH 25/31] Check for gateway/pstn after caps has been fetched Previously we would check for the identity at contact presence change, but the first time the contact comes online (say, during onboarding or first app use) the contact has never had service discovery done and so the identity is not known. Move the identity check to after the service discovery has certainly been done in order to be sure it works first time. --- .../services/XmppConnectionService.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 5e907effb..3cec4a495 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -237,10 +237,6 @@ public class XmppConnectionService extends Service { } } } - - if (contact.getPresences().anyIdentity("gateway", "pstn")) { - contact.registerAsPhoneAccount(this); - } }; private final PresenceGenerator mPresenceGenerator = new PresenceGenerator(this); private List accounts; @@ -4677,12 +4673,16 @@ public class XmppConnectionService extends Service { public void fetchCaps(Account account, final Jid jid, final Presence presence) { final Pair key = new Pair<>(presence.getHash(), presence.getVer()); final ServiceDiscoveryResult disco = getCachedServiceDiscoveryResult(key); + if (disco != null) { presence.setServiceDiscoveryResult(disco); final Contact contact = account.getRoster().getContact(jid); if (contact.refreshRtpCapability()) { syncRoster(account); } + if (disco.hasIdentity("gateway", "pstn")) { + contact.registerAsPhoneAccount(this); + } } else { final IqPacket request = new IqPacket(IqPacket.TYPE.GET); request.setTo(jid); @@ -4699,6 +4699,10 @@ public class XmppConnectionService extends Service { if (presence.getVer().equals(discoveryResult.getVer())) { databaseBackend.insertDiscoveryResult(discoveryResult); injectServiceDiscoveryResult(a.getRoster(), presence.getHash(), presence.getVer(), discoveryResult); + if (discoveryResult.hasIdentity("gateway", "pstn")) { + final Contact contact = account.getRoster().getContact(jid); + contact.registerAsPhoneAccount(this); + } } else { Log.d(Config.LOGTAG, a.getJid().asBareJid() + ": mismatch in caps for contact " + jid + " " + presence.getVer() + " vs " + discoveryResult.getVer()); } From 7671d5e42e746cc03e42e08e36c2afe70f861601 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 19 Apr 2022 08:52:11 -0500 Subject: [PATCH 26/31] Remove all PhoneAccount when an Account is removed --- .../siacs/conversations/services/XmppConnectionService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 3cec4a495..dc644833a 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -2468,6 +2468,11 @@ public class XmppConnectionService extends Service { mNotificationService.clear(conversation); } } + new Thread(() -> { + for (final Contact contact : account.getRoster().getContacts()) { + contact.unregisterAsPhoneAccount(this); + } + }).start(); if (account.getXmppConnection() != null) { new Thread(() -> disconnect(account, !connected)).start(); } From 1ab4ee326e1ebca467d3cba9fafc263a0964d5e3 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 19 Apr 2022 16:05:57 -0500 Subject: [PATCH 27/31] Add Obsidian theme --- art/message_bubble_received_obsidian.svg | 182 ++++++++++++++++++ src/cheogram/res/values/themes.xml | 40 ++++ .../conversations/utils/ThemeHelper.java | 9 +- .../message_bubble_received_obsidian.9.png | Bin 0 -> 586 bytes .../message_bubble_received_obsidian.9.png | Bin 0 -> 905 bytes .../message_bubble_received_obsidian.9.png | Bin 0 -> 1268 bytes .../message_bubble_received_obsidian.9.png | Bin 0 -> 1650 bytes src/main/res/values-v29/theme-settings.xml | 2 + src/main/res/values/strings.xml | 1 + src/main/res/values/theme-settings.xml | 2 + 10 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 art/message_bubble_received_obsidian.svg create mode 100644 src/main/res/drawable-mdpi/message_bubble_received_obsidian.9.png create mode 100644 src/main/res/drawable-xhdpi/message_bubble_received_obsidian.9.png create mode 100644 src/main/res/drawable-xxhdpi/message_bubble_received_obsidian.9.png create mode 100644 src/main/res/drawable-xxxhdpi/message_bubble_received_obsidian.9.png diff --git a/art/message_bubble_received_obsidian.svg b/art/message_bubble_received_obsidian.svg new file mode 100644 index 000000000..a1e743733 --- /dev/null +++ b/art/message_bubble_received_obsidian.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/cheogram/res/values/themes.xml b/src/cheogram/res/values/themes.xml index 052fd01d3..1eac1a82c 100644 --- a/src/cheogram/res/values/themes.xml +++ b/src/cheogram/res/values/themes.xml @@ -304,6 +304,22 @@ + + + + + +