diff --git a/build.gradle b/build.gradle index 52b2a476b9f00210c54bb819069c38c91d70f371..b7f56b1710106f7fd275a4eb874cd2543e198aaa 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.1.3' } } diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index 5e9bc0247458c66cf57fee6fb50493020d9d6342..5968babfb16764f8d64b10a9878b5ebc5c0347f6 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -22,6 +22,7 @@ import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import eu.siacs.conversations.Config; +import eu.siacs.conversations.crypto.axolotl.AxolotlService; import eu.siacs.conversations.crypto.axolotl.FingerprintStatus; import eu.siacs.conversations.http.URL; import eu.siacs.conversations.services.AvatarService; @@ -985,7 +986,8 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable } public boolean isTrusted() { - FingerprintStatus s = conversation.getAccount().getAxolotlService().getFingerprintTrust(axolotlFingerprint); + final AxolotlService axolotlService = conversation.getAccount().getAxolotlService(); + final FingerprintStatus s = axolotlService != null ? axolotlService.getFingerprintTrust(axolotlFingerprint) : null; return s != null && s.isTrusted(); } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 163a8ade3d4517c759908c9e26cca08a3e2412d7..33abf63974502ab763f01d8018056272af97b9a0 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -1832,7 +1832,9 @@ public class XmppConnectionService extends Service { public void createBookmark(final Account account, final Bookmark bookmark) { account.putBookmark(bookmark); final XmppConnection connection = account.getXmppConnection(); - if (connection.getFeatures().bookmarks2()) { + if (connection == null) { + Log.d(Config.LOGTAG, account.getJid().asBareJid()+": no connection. ignoring bookmark creation"); + } else if (connection.getFeatures().bookmarks2()) { final Element item = mIqGenerator.publishBookmarkItem(bookmark); pushNodeAndEnforcePublishOptions(account, Namespace.BOOKMARKS2, item, bookmark.getJid().asBareJid().toEscapedString(), PublishOptions.persistentWhitelistAccessMaxItems()); } else if (connection.getFeatures().bookmarksConversion()) { diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index 24406ced884beff80c7228741a7b314f36e009fc..b2d62e6ee0a7c11b3080764499dcc34b38c45363 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -208,6 +208,7 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat jid = Jid.ofEscaped(binding.accountJid.getText().toString(), getUserModeDomain(), null); } else { jid = Jid.ofEscaped(binding.accountJid.getText().toString()); + Resolver.checkDomain(jid); } } catch (final NullPointerException | IllegalArgumentException e) { if (mUsernameMode) { diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java index aa0e6abc36cb948740d6d25328d44d6397c5fa75..7db37a4f5acc24e0637f82a74c6b6002f3652d5b 100644 --- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java @@ -47,6 +47,7 @@ import android.widget.Toast; import androidx.annotation.BoolRes; import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog.Builder; @@ -448,12 +449,22 @@ public abstract class XmppActivity extends ActionBarActivity { final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return cm != null && cm.isActiveNetworkMetered() - && cm.getRestrictBackgroundStatus() == ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED; + && getRestrictBackgroundStatus(cm) == ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED; } else { return false; } } + @RequiresApi(api = Build.VERSION_CODES.N) + private static int getRestrictBackgroundStatus(@NonNull final ConnectivityManager connectivityManager) { + try { + return connectivityManager.getRestrictBackgroundStatus(); + } catch (final Exception e) { + Log.d(Config.LOGTAG,"platform bug detected. Unable to get restrict background status",e); + return -1; + } + } + private boolean usingEnterKey() { return getBooleanPreference("display_enter_key", R.bool.display_enter_key); } diff --git a/src/main/java/eu/siacs/conversations/utils/Resolver.java b/src/main/java/eu/siacs/conversations/utils/Resolver.java index a3796b253e2e669c8635b76a3ce0b85df3ced55c..463d6eb73b0c55fbb5c3c0797844f50bc99bced5 100644 --- a/src/main/java/eu/siacs/conversations/utils/Resolver.java +++ b/src/main/java/eu/siacs/conversations/utils/Resolver.java @@ -37,6 +37,7 @@ import de.measite.minidns.record.SRV; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.services.XmppConnectionService; +import eu.siacs.conversations.xmpp.Jid; public class Resolver { @@ -84,6 +85,10 @@ public class Resolver { return Collections.singletonList(result); } + public static void checkDomain(final Jid jid) { + DNSName.from(jid.getDomain()); + } + public static boolean invalidHostname(final String hostname) { try { DNSName.from(hostname); diff --git a/src/main/java/eu/siacs/conversations/xml/TagWriter.java b/src/main/java/eu/siacs/conversations/xml/TagWriter.java index 2c2b8ac2cc1f1f5c3dc286760aef5ea514083f33..4f429377a166b3cf7d31075cb58ed0937a0a9c0c 100644 --- a/src/main/java/eu/siacs/conversations/xml/TagWriter.java +++ b/src/main/java/eu/siacs/conversations/xml/TagWriter.java @@ -8,15 +8,12 @@ import java.io.OutputStreamWriter; import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; import eu.siacs.conversations.Config; import eu.siacs.conversations.xmpp.stanzas.AbstractStanza; public class TagWriter { - private static final int FLUSH_DELAY = 400; - private OutputStreamWriter outputStream; private boolean finished = false; private final LinkedBlockingQueue writeQueue = new LinkedBlockingQueue(); @@ -24,8 +21,6 @@ public class TagWriter { private final Thread asyncStanzaWriter = new Thread() { - private final AtomicInteger batchStanzaCount = new AtomicInteger(0); - @Override public void run() { stanzaWriterCountDownLatch = new CountDownLatch(1); @@ -34,21 +29,12 @@ public class TagWriter { break; } try { - final AbstractStanza stanza = writeQueue.poll(FLUSH_DELAY, TimeUnit.MILLISECONDS); - if (stanza != null) { - batchStanzaCount.incrementAndGet(); - outputStream.write(stanza.toString()); - } else { - final int batch = batchStanzaCount.getAndSet(0); - if (batch > 1) { - Log.d(Config.LOGTAG, "flushing " + batch + " stanzas"); - } + AbstractStanza output = writeQueue.take(); + outputStream.write(output.toString()); + if (writeQueue.size() == 0) { outputStream.flush(); - final AbstractStanza nextStanza = writeQueue.take(); - batchStanzaCount.incrementAndGet(); - outputStream.write(nextStanza.toString()); } - } catch (final Exception e) { + } catch (Exception e) { break; } } diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 028f51876feac3144d55207c33625377e94f7240..ec4af436fc895638393d1ed0deb9acd600677595 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -463,8 +463,9 @@ Ungültiger Benutzername Download fehlgeschlagen: Server nicht gefunden Download fehlgeschlagen: Datei nicht gefunden - Download fehlgeschlagen: keine Verbindung zum Host + Download fehlgeschlagen: Keine Verbindung zum Host Download fehlgeschlagen: Datei konnte nicht gespeichert werden + Download fehlgeschlagen: Ungültige Datei Tor-Netzwerk nicht verfügbar Verbindungsfehler Der Server ist nicht für diese Domain verantwortlich diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 847e27cf7a7d184e15e6d79b36ed1322c6d4cece..07f88f2352788591d7794e2eca5c888d2a805b7e 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -37,7 +37,7 @@ enviando… - Descifrando a mensaxe. Por favor agarde... + Descifrando a mensaxe. Agarda por favor... Mensaxe cifrado con OpenPGP O alcume xa está en uso Alcume non válido @@ -84,7 +84,7 @@ Erro ao enviar Preparándose para enviar a imaxe Preparándose para enviar imaxes - Compartindo ficheiros. Por favor agarde... + Compartindo ficheiros. Agarda por favor... Baleirar historial Eliminar historial da conversa ¿Queres eliminar as mensaxes desta conversa?\n\nAviso: Esto non lle afecta as mensaxes gardadas noutros dispositivos ou servidores. @@ -105,7 +105,7 @@ OpenKeychain para cifrar e descifrar as mensaxes e xestionar a túas chaves públicas.

Está baixo licenza GPLv3+ e dispoñible en F-Droid e Google Play.

(Reinicia %1$s após a instalación.)]]>
Reiniciar Instalar - Por favor instale OpenKeychain + Instala OpenKeychain por favor ofrecendo… agardando... Clave OpenPGP non atopada @@ -151,7 +151,7 @@ Non se puido converter o ficheiro de imaxe Arquivo non atopado Erro xeral de I/O. ¿Quedaches sen espazo no disco? - A app utilizada para seleccionar esta imaxe non deu permisos suficientes para ler o ficheiro.\n\nUsa un xestor de ficheiros diferente para elexir a imaxe + A app utilizada para seleccionar esta imaxe non deu permisos suficientes para ler o ficheiro.\n\nUsa un xestor de ficheiros diferente para escoller a imaxe A app que usaches para compartir este ficheiro non concedeu os permisos suficientes. Descoñecido Desactivado temporalmente @@ -254,12 +254,12 @@ Saír Contacto engadido a túa lista de contactos Volver a engadir - %s leu ata este punto - %s leu ate este punto - %1$s + %2$d outras leron ata este punto - Todas leron ate este punto + %s leu até aquí + %s leron até aquí + %1$s + %2$d outras leron até aquí + Todas leron até aquí Publicar - Toca no avatar para escoller a imaxe na galería + Toca no avatar para elixir a imaxe na galería Publicando... O servidor rexeitou a túa publicación Non se puido converter a imaxe @@ -453,23 +453,24 @@ Acción rápida Ningunha Utilizadas recentemente - Escolle a acción rápida + Elixe a acción rápida Buscar contactos Buscar marcadores Enviar mensaxe privada %1$s deixou a conversa en grupo Identificador - Nome de usuaria + Identificador Este non é un identificador válido Fallou a descarga: non se atopou o servidor Fallou a descarga: non se atopou o ficheiro Fallou a descarga: Non se puido conectar ao servidor Fallou a descarga: non se escribeu o ficheiro + Fallou a descarga: ficheiro non válido Sen acceso a rede Tor Fallou a ligazón O servidor non corresponde a este dominio Roto - Disponibilidade + Dispoñibilidade Ausente cando o dispositivo está bloqueado Mostrar como Ausente cando o dispositivo está bloqueado En modolo silencioso, Ocupado @@ -544,8 +545,8 @@ O teu enderezo XMPP completo será: %s Crear conta Utilizar o meu propio proveedor - Elixe un identificador - Xestionar a disponibilidade manualmente + Elixe un nome de usuaria + Xestionar a dispoñibilidade manualmente Configura a túa dispoñibilidade ao editar a mensaxe de estado. Mensaxe de estado Dispoñible para conversar @@ -568,7 +569,7 @@ Permitelle aos teus contactos saber cando estás a usar Conversations Privacidade Decorado - Escolle a gama de cores + Elixe a gama de cores Automático Claro Escuro @@ -743,7 +744,7 @@ Copiar enderezo XMPP Compartición de ficheiro HTTP para S3 Busca directa - Na pantalla \'Iniciar Conversa\' abrir teclado e por o cursor no campo de busca + Na pantalla \'Iniciar Conversa\' abrir teclado e pór o cursor no campo de busca Avatar da conversa de grupo O servidor non soporta o avatar na conversa de grupo Só o dono pode cambiar o avatar da conversa de grupo @@ -794,13 +795,13 @@ Validar %s %s.]]> Enviamosche outro SMS cun código de 6 díxitos. - Por favor, introduza o pin de 6 díxitos inferior. + Escribe o PIN de 6 díxitos. Reenviar SMS Reenviar SMS (%s) - Agarde por favor (%s) + Agarda por favor (%s) atrás Copiado automático desde o portapapeis. - Por favor, introduza o pin de 6 díxitos. + Por favor, escribe o pin de 6 díxitos. Seguro que quere cancelar o proceso de rexistro? Si Non @@ -836,7 +837,7 @@ Orixinal (non comprimido) Abrir con... Imaxe de perfil en Conversations - Elexir conta + Elixir conta Restablecer copia de apoio Restablecer Escribe o contrasinal da conta %s para restablecer a copia. @@ -852,8 +853,8 @@ Nome da canle Enderezo XMPP Por favor, escribe un nome para a canle - Por favor, proporcione un enderezo XMPP - Esto é un enderezo XMPP. Por favor, proporcione un nome. + Por favor, escribe un enderezo XMPP + Esto é un enderezo XMPP. Por favor, escribe un nome. Creando canle pública... Esta canle xa existe Entraches nunha canle existente diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index 0a2eca3c5bd8e0ed578554a06fcf64ae56f71376..6a27b001260ace2c13860b3d53d1b156e40b147f 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -615,6 +615,8 @@ ファイルが保存されているプライベートストレージを消去します (サーバーから再ダウンロードできます) 信頼できるソースからこのリンクをたどりました リンクをクリックした後、%1$s の OMEMO 鍵を検証しようとしています。 これは、%2$s がこのリンクを公開した、信頼できるソースからこのリンクをたどった場合にのみ安全です。 + あなたが所有するアカウントの OMEMO 鍵を検証しようとしています。 これは、あなたがこのリンクを公開した、信頼できるソースからこのリンクをたどった場合にのみ安全です。 + 続行 OMEMO 鍵を検証 非アクティブを表示 非アクティブを非表示 @@ -950,4 +952,7 @@ バックアップを開始しました。 バックアップが完了すると通知が届きます。 映像を有効化できません。 プレーンテキスト文書 - + アカウント登録はサポートされていません + XMPPアドレスがみつかりません + + diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 721e637f8984a0e1c33b0801bc90ea74508c2237..3139015774223ccb049b5ddd17a32954f3a2b32f 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -473,6 +473,7 @@ Pobieranie nieudane: Nie odnaleziono pliku Pobieranie nieudane: Nie można połączyć z hostem Pobieranie niepowiodło się: brak możliwości zapisu pliku + Pobieranie nieudane: Nieprawidłowy plik Sieć TOR jest niedostepna Błąd połączenia (zasób) Serwer nie odpowiada domenie diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index a69d6384dbbb5ee123d5118e11cd1de47409b23a..d222769cf9f47cc23f50c36f918031774330c43a 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -465,6 +465,7 @@ Não foi possível fazer o download: arquivo não encontrado Não foi possível fazer o download: não foi possível conectar ao host Falha no download: não foi possível salvar o arquivo + Falha no download: arquivo inválido Rede Tor não disponível Falha na associação O servidor não responde por esse domínio diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml index 8c1e34ed979804ea2f4a42907375a7d416ae3dde..30efcfb0c74ff76f8f761bd84c1d28170ffca028 100644 --- a/src/main/res/values-ro-rRO/strings.xml +++ b/src/main/res/values-ro-rRO/strings.xml @@ -469,6 +469,7 @@ Descărcare eșuată: Fișierul nu a fost găsit Descărcare eșuată: Nu s-a putut realiza conexiunea cu gazda. Descărcare eșuată: Nu s-a putut scrie fișierul + Descărcarea a eșuat: Fișier invalid Rețeaua Tor nu este disponibilă Eroare de conexiune Serverul nu este responsabil pentru acest domeniu diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index 060daea1c07148be25ed2fd3d018e4e9a30a8fab..e896c226305bf27435dad5175aa1fa01a89b5d0c 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -420,7 +420,7 @@ Показывать клавишу ввода Поменять кнопку смайликов на кнопку ввода аудио - звук + видео изображение векторная графика PDF-документ diff --git a/src/main/res/values-tr-rTR/strings.xml b/src/main/res/values-tr-rTR/strings.xml index 3e086a5cc306ca161151ed0ee29e14b200a90edc..d82a641c63608465757321bfb8edd93a3125ddea 100644 --- a/src/main/res/values-tr-rTR/strings.xml +++ b/src/main/res/values-tr-rTR/strings.xml @@ -465,6 +465,7 @@ İndirme başarısız: Dosya bulunamadı İndirme başarısız: Sunucuya bağlanılamadı İndirme başarısız: Dosya yazılamıyor + İndirme başarısız: Geçersiz dosya Tor ağına erişilemiyor Bağlantı başarısız Sunucu bu alan adı için sorumlu değil @@ -622,6 +623,8 @@ Dosyaların tutulduğu özel depolama alanını temizle (Sunucu üzerinden tekrar indirilebilir) Bu bağlantıyı güvenilir bir kaynaktan takip ettim Bir bağlantıyı tıkladıktan sonra %1$s in OMEMO anahtarını doğrulamış olacaksınız. Bu yalnızca bağlantının %2$s tarafından yayınladığından eminseniz güvenlidir. + Hesabınızın OMEMO anahtarını doğrulamış olacaksınız. Bu yalnızca bağlantıya yalnızca sizin yayınlayabileceğiniz bir kaynaktan eriştiyseniz güvenlidir. + Devam et OMEMO anahtarlarını doğrula Aktif olmayanları göster Aktif olmayanları sakla @@ -904,6 +907,7 @@ Gelen görüntülü arama Bağlanıyor Bağlandı + Tekrar bağlanılıyor Arama kabül ediliyor Arama sonlandırılıyor Cevapla @@ -919,6 +923,8 @@ Çağrıyı sonlandır Devam eden arama Deaam eden görüntülü arama + Aramaya tekrar bağlanıyılor + Görüntülü aramaya tekrar bağlanılıyor Arama yapmak için Tor\'u devre dışı bırak Gelen arama Gelen arama. %s @@ -968,4 +974,7 @@ Yedekleme başlatıldı. Tamamlandığı zaman bir bildirim alacaksınız. Video etkinleştirilemedi Düz metin dosyası - + Hesap kayıtları desteklenmemektedir. + Herhangi bir XMPP adresi bulunamadı + + diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index cf5fcb5d5266c8d79e4f356721e64af3744a9366..dbd3515002e31f1921f1fe03312bfb304c3fef93 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -461,6 +461,7 @@ 下载失败:未找到文件 下载失败:无法连接到服务器 下载失败:不能写入文件 + 下载失败:无效文件 Tor网络不可用 绑定失败 服务器不能为域名做出响应 diff --git a/src/quicksy/res/values-gl/strings.xml b/src/quicksy/res/values-gl/strings.xml index 0e02425a5ec8356325eaf859b7aba357d314229d..22b78d01b8948b26f33eec28946880beeeb93f38 100644 --- a/src/quicksy/res/values-gl/strings.xml +++ b/src/quicksy/res/values-gl/strings.xml @@ -1,6 +1,6 @@ - O período de tempo que Quicksy permanece acalado tras ver actividade en outro dispositivo + O período de tempo que Quicksy permanece acalado tras ver actividade noutro dispositivo Enviando trazas do rexistro estás axudando ao desenvolvemento de Quicksy Permitir a todos os teus contactos saber cando estás a utilizar Quicksy Para seguir recibindo notificacións, mesmo coa pantalla apagada, precisas engadir a Quicksy na lista de apps protexidas.