~singpolyma/cheogram-android

cb2b6a9f17a69cd9fa8fa3c3f4ec15218b2e11a4 — Stephen Paul Weber a month ago 4548ef7 + 3274bae
Merge branch 'master' of github.com:iNPUTmice/Conversations

* 'master' of github.com:iNPUTmice/Conversations:
  pulled translations from transifex
  Revert "flush stanzas in batches"
  fix NPE during bookmark creation
  bump agp
  null check axolotl service when getting trust
  check domain name against DNSName to avoid rare crashes
  work around platform bug when getting restrict background
  pulled translations from transifex
M build.gradle => build.gradle +1 -1
@@ 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'
    }
}


M src/main/java/eu/siacs/conversations/entities/Message.java => src/main/java/eu/siacs/conversations/entities/Message.java +3 -1
@@ 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();
    }


M src/main/java/eu/siacs/conversations/services/XmppConnectionService.java => src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +3 -1
@@ 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()) {

M src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java => src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +1 -0
@@ 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) {

M src/main/java/eu/siacs/conversations/ui/XmppActivity.java => src/main/java/eu/siacs/conversations/ui/XmppActivity.java +12 -1
@@ 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);
    }

M src/main/java/eu/siacs/conversations/utils/Resolver.java => src/main/java/eu/siacs/conversations/utils/Resolver.java +5 -0
@@ 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);

M src/main/java/eu/siacs/conversations/xml/TagWriter.java => src/main/java/eu/siacs/conversations/xml/TagWriter.java +4 -18
@@ 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<AbstractStanza> writeQueue = new LinkedBlockingQueue<AbstractStanza>();


@@ 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;
                }
            }

M src/main/res/values-de/strings.xml => src/main/res/values-de/strings.xml +2 -1
@@ 463,8 463,9 @@
    <string name="invalid_username">Ungültiger Benutzername</string>
    <string name="download_failed_server_not_found">Download fehlgeschlagen: Server nicht gefunden</string>
    <string name="download_failed_file_not_found">Download fehlgeschlagen: Datei nicht gefunden</string>
    <string name="download_failed_could_not_connect">Download fehlgeschlagen: keine Verbindung zum Host</string>
    <string name="download_failed_could_not_connect">Download fehlgeschlagen: Keine Verbindung zum Host</string>
    <string name="download_failed_could_not_write_file">Download fehlgeschlagen: Datei konnte nicht gespeichert werden</string>
    <string name="download_failed_invalid_file">Download fehlgeschlagen: Ungültige Datei</string>
    <string name="account_status_tor_unavailable">Tor-Netzwerk nicht verfügbar</string>
    <string name="account_status_bind_failure">Verbindungsfehler</string>
    <string name="account_status_host_unknown">Der Server ist nicht für diese Domain verantwortlich</string>

M src/main/res/values-gl/strings.xml => src/main/res/values-gl/strings.xml +23 -22
@@ 37,7 37,7 @@

    </plurals>
    <string name="sending">enviando…</string>
    <string name="message_decrypting">Descifrando a mensaxe. Por favor agarde...</string>
    <string name="message_decrypting">Descifrando a mensaxe. Agarda por favor...</string>
    <string name="pgp_message">Mensaxe cifrado con OpenPGP</string>
    <string name="nick_in_use">O alcume xa está en uso</string>
    <string name="invalid_muc_nick">Alcume non válido</string>


@@ 84,7 84,7 @@
    <string name="send_failed">Erro ao enviar</string>
    <string name="preparing_image">Preparándose para enviar a imaxe</string>
    <string name="preparing_images">Preparándose para enviar imaxes</string>
    <string name="sharing_files_please_wait">Compartindo ficheiros. Por favor agarde...</string>
    <string name="sharing_files_please_wait">Compartindo ficheiros. Agarda por favor...</string>
    <string name="action_clear_history">Baleirar historial</string>
    <string name="clear_conversation_history">Eliminar historial da conversa</string>
    <string name="clear_histor_msg">¿Queres eliminar as mensaxes desta conversa?\n\n<b>Aviso:</b> Esto non lle afecta as mensaxes gardadas noutros dispositivos ou servidores. </string>


@@ 105,7 105,7 @@
    <string name="openkeychain_required_long"><![CDATA[%1$s utiliza <b>OpenKeychain</b> para cifrar e descifrar as mensaxes e xestionar a túas chaves públicas.<br><br>Está baixo licenza  GPLv3+ e dispoñible en F-Droid e Google Play.<br><br><small>(Reinicia %1$s após a instalación.)</small>]]></string>
    <string name="restart">Reiniciar</string>
    <string name="install">Instalar</string>
    <string name="openkeychain_not_installed">Por favor instale OpenKeychain</string>
    <string name="openkeychain_not_installed">Instala OpenKeychain por favor</string>
    <string name="offering">ofrecendo…</string>
    <string name="waiting">agardando...</string>
    <string name="no_pgp_key">Clave OpenPGP non atopada</string>


@@ 151,7 151,7 @@
    <string name="error_compressing_image">Non se puido converter o ficheiro de imaxe</string>
    <string name="error_file_not_found">Arquivo non atopado</string>
    <string name="error_io_exception">Erro xeral de I/O. ¿Quedaches sen espazo no disco?</string>
    <string name="error_security_exception_during_image_copy">A app utilizada para seleccionar esta imaxe non deu permisos suficientes para ler o ficheiro.\n\n<small>Usa un xestor de ficheiros diferente para elexir a imaxe</small></string>
    <string name="error_security_exception_during_image_copy">A app utilizada para seleccionar esta imaxe non deu permisos suficientes para ler o ficheiro.\n\n<small>Usa un xestor de ficheiros diferente para escoller a imaxe</small></string>
    <string name="error_security_exception">A app que usaches para compartir este ficheiro non concedeu os permisos suficientes.</string>
    <string name="account_status_unknown">Descoñecido</string>
    <string name="account_status_disabled">Desactivado temporalmente</string>


@@ 254,12 254,12 @@
    <string name="leave">Saír</string>
    <string name="contact_added_you">Contacto engadido a túa lista de contactos</string>
    <string name="add_back">Volver a engadir</string>
    <string name="contact_has_read_up_to_this_point">%s leu ata este punto</string>
    <string name="contacts_have_read_up_to_this_point">%s leu ate este punto</string>
    <string name="contacts_and_n_more_have_read_up_to_this_point">%1$s + %2$d outras leron ata este punto</string>
    <string name="everyone_has_read_up_to_this_point">Todas leron ate este punto</string>
    <string name="contact_has_read_up_to_this_point">%s leu até aquí</string>
    <string name="contacts_have_read_up_to_this_point">%s leron até aquí</string>
    <string name="contacts_and_n_more_have_read_up_to_this_point">%1$s + %2$d outras leron até aquí</string>
    <string name="everyone_has_read_up_to_this_point">Todas leron até aquí</string>
    <string name="publish">Publicar</string>
    <string name="touch_to_choose_picture">Toca no avatar para escoller a imaxe na galería</string>
    <string name="touch_to_choose_picture">Toca no avatar para elixir a imaxe na galería</string>
    <string name="publishing">Publicando...</string>
    <string name="error_publish_avatar_server_reject">O servidor rexeitou a túa publicación</string>
    <string name="error_publish_avatar_converting">Non se puido converter a imaxe</string>


@@ 453,23 453,24 @@
    <string name="pref_quick_action">Acción rápida</string>
    <string name="none">Ningunha</string>
    <string name="recently_used">Utilizadas recentemente</string>
    <string name="choose_quick_action">Escolle a acción rápida</string>
    <string name="choose_quick_action">Elixe a acción rápida</string>
    <string name="search_contacts">Buscar contactos</string>
    <string name="search_bookmarks">Buscar marcadores</string>
    <string name="send_private_message">Enviar mensaxe privada</string>
    <string name="user_has_left_conference">%1$s deixou a conversa en grupo</string>
    <string name="username">Identificador</string>
    <string name="username_hint">Nome de usuaria</string>
    <string name="username_hint">Identificador</string>
    <string name="invalid_username">Este non é un identificador válido</string>
    <string name="download_failed_server_not_found">Fallou a descarga: non se atopou o servidor</string>
    <string name="download_failed_file_not_found">Fallou a descarga: non se atopou o ficheiro</string>
    <string name="download_failed_could_not_connect">Fallou a descarga: Non se puido conectar ao servidor</string>
    <string name="download_failed_could_not_write_file">Fallou a descarga: non se escribeu o ficheiro</string>
    <string name="download_failed_invalid_file">Fallou a descarga: ficheiro non válido</string>
    <string name="account_status_tor_unavailable">Sen acceso a rede Tor</string>
    <string name="account_status_bind_failure">Fallou a ligazón</string>
    <string name="account_status_host_unknown">O servidor non corresponde a este dominio</string>
    <string name="server_info_broken">Roto</string>
    <string name="pref_presence_settings">Disponibilidade</string>
    <string name="pref_presence_settings">Dispoñibilidade</string>
    <string name="pref_away_when_screen_off">Ausente cando o dispositivo está bloqueado</string>
    <string name="pref_away_when_screen_off_summary">Mostrar como Ausente cando o dispositivo está bloqueado</string>
    <string name="pref_dnd_on_silent_mode">En modolo silencioso, Ocupado</string>


@@ 544,8 545,8 @@
    <string name="your_full_jid_will_be">O teu enderezo XMPP completo será: %s</string>
    <string name="create_account">Crear conta</string>
    <string name="use_own_provider">Utilizar o meu propio proveedor</string>
    <string name="pick_your_username">Elixe un identificador</string>
    <string name="pref_manually_change_presence">Xestionar a disponibilidade manualmente</string>
    <string name="pick_your_username">Elixe un nome de usuaria</string>
    <string name="pref_manually_change_presence">Xestionar a dispoñibilidade manualmente</string>
    <string name="pref_manually_change_presence_summary">Configura a túa dispoñibilidade ao editar a mensaxe de estado.</string>
    <string name="status_message">Mensaxe de estado</string>
    <string name="presence_chat">Dispoñible para conversar</string>


@@ 568,7 569,7 @@
    <string name="pref_broadcast_last_activity_summary">Permitelle aos teus contactos saber cando estás a usar Conversations</string>
    <string name="pref_privacy">Privacidade</string>
    <string name="pref_theme_options">Decorado</string>
    <string name="pref_theme_options_summary">Escolle a gama de cores</string>
    <string name="pref_theme_options_summary">Elixe a gama de cores</string>
    <string name="pref_theme_automatic">Automático</string>
    <string name="pref_theme_light">Claro</string>
    <string name="pref_theme_dark">Escuro</string>


@@ 743,7 744,7 @@
    <string name="copy_jabber_id">Copiar enderezo XMPP</string>
    <string name="p1_s3_filetransfer">Compartición de ficheiro HTTP para S3</string>
    <string name="pref_start_search">Busca directa</string>
    <string name="pref_start_search_summary">Na pantalla \'Iniciar Conversa\' abrir teclado e por o cursor no campo de busca</string>
    <string name="pref_start_search_summary">Na pantalla \'Iniciar Conversa\' abrir teclado e pór o cursor no campo de busca</string>
    <string name="group_chat_avatar">Avatar da conversa de grupo</string>
    <string name="host_does_not_support_group_chat_avatars">O servidor non soporta o avatar na conversa de grupo</string>
    <string name="only_the_owner_can_change_group_chat_avatar">Só o dono pode cambiar o avatar da conversa de grupo</string>


@@ 794,13 795,13 @@
    <string name="verify_x">Validar %s</string>
    <string name="we_have_sent_you_an_sms_to_x"><![CDATA[Enviámosche un SMS a <b>%s</b>.]]></string>
    <string name="we_have_sent_you_another_sms">Enviamosche outro SMS cun código de 6 díxitos.</string>
    <string name="please_enter_pin_below">Por favor, introduza o pin de 6 díxitos inferior.</string>
    <string name="please_enter_pin_below">Escribe o PIN de 6 díxitos.</string>
    <string name="resend_sms">Reenviar SMS</string>
    <string name="resend_sms_in">Reenviar SMS (%s)</string>
    <string name="wait_x">Agarde por favor (%s)</string>
    <string name="wait_x">Agarda por favor (%s)</string>
    <string name="back">atrás</string>
    <string name="possible_pin">Copiado automático desde o portapapeis.</string>
    <string name="please_enter_pin">Por favor, introduza o pin de 6 díxitos.</string>
    <string name="please_enter_pin">Por favor, escribe o pin de 6 díxitos.</string>
    <string name="abort_registration_procedure">Seguro que quere cancelar o proceso de rexistro?</string>
    <string name="yes">Si</string>
    <string name="no">Non</string>


@@ 836,7 837,7 @@
    <string name="video_original">Orixinal (non comprimido)</string>
    <string name="open_with">Abrir con...</string>
    <string name="set_profile_picture">Imaxe de perfil en Conversations</string>
    <string name="choose_account">Elexir conta</string>
    <string name="choose_account">Elixir conta</string>
    <string name="restore_backup">Restablecer copia de apoio</string>
    <string name="restore">Restablecer</string>
    <string name="enter_password_to_restore">Escribe o contrasinal da conta %s para restablecer a copia.</string>


@@ 852,8 853,8 @@
    <string name="create_dialog_channel_name">Nome da canle</string>
    <string name="xmpp_address">Enderezo XMPP</string>
    <string name="please_enter_name">Por favor, escribe un nome para a canle</string>
    <string name="please_enter_xmpp_address">Por favor, proporcione un enderezo XMPP</string>
    <string name="this_is_an_xmpp_address">Esto é un enderezo XMPP. Por favor, proporcione un nome.</string>
    <string name="please_enter_xmpp_address">Por favor, escribe un enderezo XMPP</string>
    <string name="this_is_an_xmpp_address">Esto é un enderezo XMPP. Por favor, escribe un nome.</string>
    <string name="creating_channel">Creando canle pública...</string>
    <string name="channel_already_exists">Esta canle xa existe</string>
    <string name="joined_an_existing_channel">Entraches nunha canle existente</string>

M src/main/res/values-ja/strings.xml => src/main/res/values-ja/strings.xml +6 -1
@@ 615,6 615,8 @@
    <string name="pref_clean_private_storage_summary">ファイルが保存されているプライベートストレージを消去します (サーバーから再ダウンロードできます)</string>
    <string name="i_followed_this_link_from_a_trusted_source">信頼できるソースからこのリンクをたどりました</string>
    <string name="verifying_omemo_keys_trusted_source">リンクをクリックした後、%1$s の OMEMO 鍵を検証しようとしています。 これは、%2$s がこのリンクを公開した、信頼できるソースからこのリンクをたどった場合にのみ安全です。</string>
    <string name="verifying_omemo_keys_trusted_source_account">あなたが所有するアカウントの OMEMO 鍵を検証しようとしています。 これは、あなたがこのリンクを公開した、信頼できるソースからこのリンクをたどった場合にのみ安全です。</string>
    <string name="continue_btn">続行</string>
    <string name="verify_omemo_keys">OMEMO 鍵を検証</string>
    <string name="show_inactive_devices">非アクティブを表示</string>
    <string name="hide_inactive_devices">非アクティブを非表示</string>


@@ 950,4 952,7 @@
    <string name="backup_started_message">バックアップを開始しました。 バックアップが完了すると通知が届きます。</string>
    <string name="unable_to_enable_video">映像を有効化できません。</string>
    <string name="plain_text_document">プレーンテキスト文書</string>
    </resources>
    <string name="account_registrations_are_not_supported">アカウント登録はサポートされていません</string>
    <string name="no_xmpp_adddress_found">XMPPアドレスがみつかりません</string>

</resources>

M src/main/res/values-pl/strings.xml => src/main/res/values-pl/strings.xml +1 -0
@@ 473,6 473,7 @@
    <string name="download_failed_file_not_found">Pobieranie nieudane: Nie odnaleziono pliku</string>
    <string name="download_failed_could_not_connect">Pobieranie nieudane: Nie można połączyć z hostem</string>
    <string name="download_failed_could_not_write_file">Pobieranie niepowiodło się: brak możliwości zapisu pliku</string>
    <string name="download_failed_invalid_file">Pobieranie nieudane: Nieprawidłowy plik</string>
    <string name="account_status_tor_unavailable">Sieć TOR jest niedostepna</string>
    <string name="account_status_bind_failure">Błąd połączenia (zasób)</string>
    <string name="account_status_host_unknown">Serwer nie odpowiada domenie</string>

M src/main/res/values-pt-rBR/strings.xml => src/main/res/values-pt-rBR/strings.xml +1 -0
@@ 465,6 465,7 @@
    <string name="download_failed_file_not_found">Não foi possível fazer o download: arquivo não encontrado</string>
    <string name="download_failed_could_not_connect">Não foi possível fazer o download: não foi possível conectar ao host</string>
    <string name="download_failed_could_not_write_file">Falha no download: não foi possível salvar o arquivo</string>
    <string name="download_failed_invalid_file">Falha no download: arquivo inválido</string>
    <string name="account_status_tor_unavailable">Rede Tor não disponível</string>
    <string name="account_status_bind_failure">Falha na associação</string>
    <string name="account_status_host_unknown">O servidor não responde por esse domínio</string>

M src/main/res/values-ro-rRO/strings.xml => src/main/res/values-ro-rRO/strings.xml +1 -0
@@ 469,6 469,7 @@
    <string name="download_failed_file_not_found">Descărcare eșuată: Fișierul nu a fost găsit</string>
    <string name="download_failed_could_not_connect">Descărcare eșuată: Nu s-a putut realiza conexiunea cu gazda.</string>
    <string name="download_failed_could_not_write_file">Descărcare eșuată: Nu s-a putut scrie fișierul</string>
    <string name="download_failed_invalid_file">Descărcarea a eșuat: Fișier invalid</string>
    <string name="account_status_tor_unavailable">Rețeaua Tor nu este disponibilă</string>
    <string name="account_status_bind_failure">Eroare de conexiune</string>
    <string name="account_status_host_unknown">Serverul nu este responsabil pentru acest domeniu</string>

M src/main/res/values-ru/strings.xml => src/main/res/values-ru/strings.xml +1 -1
@@ 420,7 420,7 @@
    <string name="pref_display_enter_key">Показывать клавишу ввода</string>
    <string name="pref_display_enter_key_summary">Поменять кнопку смайликов на кнопку ввода</string>
    <string name="audio">аудио</string>
    <string name="video">звук</string>
    <string name="video">видео</string>
    <string name="image">изображение</string>
    <string name="vector_graphic">векторная графика</string>
    <string name="pdf_document">PDF-документ</string>

M src/main/res/values-tr-rTR/strings.xml => src/main/res/values-tr-rTR/strings.xml +10 -1
@@ 465,6 465,7 @@
    <string name="download_failed_file_not_found">İndirme başarısız: Dosya bulunamadı</string>
    <string name="download_failed_could_not_connect">İndirme başarısız: Sunucuya bağlanılamadı</string>
    <string name="download_failed_could_not_write_file">İndirme başarısız: Dosya yazılamıyor</string>
    <string name="download_failed_invalid_file">İndirme başarısız: Geçersiz dosya</string>
    <string name="account_status_tor_unavailable">Tor ağına erişilemiyor</string>
    <string name="account_status_bind_failure">Bağlantı başarısız</string>
    <string name="account_status_host_unknown">Sunucu bu alan adı için sorumlu değil</string>


@@ 622,6 623,8 @@
    <string name="pref_clean_private_storage_summary">Dosyaların tutulduğu özel depolama alanını temizle (Sunucu üzerinden tekrar indirilebilir)</string>
    <string name="i_followed_this_link_from_a_trusted_source">Bu bağlantıyı güvenilir bir kaynaktan takip ettim</string>
    <string name="verifying_omemo_keys_trusted_source">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.</string>
    <string name="verifying_omemo_keys_trusted_source_account">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. </string>
    <string name="continue_btn">Devam et</string>
    <string name="verify_omemo_keys">OMEMO anahtarlarını doğrula</string>
    <string name="show_inactive_devices">Aktif olmayanları göster</string>
    <string name="hide_inactive_devices">Aktif olmayanları sakla</string>


@@ 904,6 907,7 @@
    <string name="rtp_state_incoming_video_call">Gelen görüntülü arama</string>
    <string name="rtp_state_connecting">Bağlanıyor</string>
    <string name="rtp_state_connected">Bağlandı</string>
    <string name="rtp_state_reconnecting">Tekrar bağlanılıyor</string>
    <string name="rtp_state_accepting_call">Arama kabül ediliyor</string>
    <string name="rtp_state_ending_call">Arama sonlandırılıyor</string>
    <string name="answer_call">Cevapla</string>


@@ 919,6 923,8 @@
    <string name="hang_up">Çağrıyı sonlandır</string>
    <string name="ongoing_call">Devam eden arama</string>
    <string name="ongoing_video_call">Deaam eden görüntülü arama</string>
    <string name="reconnecting_call">Aramaya tekrar bağlanıyılor</string>
    <string name="reconnecting_video_call">Görüntülü aramaya tekrar bağlanılıyor</string>
    <string name="disable_tor_to_make_call">Arama yapmak için Tor\'u devre dışı bırak</string>
    <string name="incoming_call">Gelen arama</string>
    <string name="incoming_call_duration">Gelen arama. %s</string>


@@ 968,4 974,7 @@
    <string name="backup_started_message">Yedekleme başlatıldı. Tamamlandığı zaman bir bildirim alacaksınız.</string>
    <string name="unable_to_enable_video">Video etkinleştirilemedi</string>
    <string name="plain_text_document">Düz metin dosyası</string>
    </resources>
    <string name="account_registrations_are_not_supported">Hesap kayıtları desteklenmemektedir.</string>
    <string name="no_xmpp_adddress_found">Herhangi bir XMPP adresi bulunamadı</string>

</resources>

M src/main/res/values-zh-rCN/strings.xml => src/main/res/values-zh-rCN/strings.xml +1 -0
@@ 461,6 461,7 @@
    <string name="download_failed_file_not_found">下载失败:未找到文件</string>
    <string name="download_failed_could_not_connect">下载失败:无法连接到服务器</string>
    <string name="download_failed_could_not_write_file">下载失败:不能写入文件</string>
    <string name="download_failed_invalid_file">下载失败:无效文件</string>
    <string name="account_status_tor_unavailable">Tor网络不可用</string>
    <string name="account_status_bind_failure">绑定失败</string>
    <string name="account_status_host_unknown">服务器不能为域名做出响应</string>

M src/quicksy/res/values-gl/strings.xml => src/quicksy/res/values-gl/strings.xml +1 -1
@@ 1,6 1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="pref_notification_grace_period_summary">O período de tempo que Quicksy permanece acalado tras ver actividade en outro dispositivo</string>
    <string name="pref_notification_grace_period_summary">O período de tempo que Quicksy permanece acalado tras ver actividade noutro dispositivo</string>
    <string name="pref_never_send_crash_summary">Enviando trazas do rexistro estás axudando ao desenvolvemento de Quicksy</string>
    <string name="pref_broadcast_last_activity_summary">Permitir a todos os teus contactos saber cando estás a utilizar Quicksy</string>
    <string name="huawei_protected_apps_summary">Para seguir recibindo notificacións, mesmo coa pantalla apagada, precisas engadir a Quicksy na lista de apps protexidas.</string>