Merge branch 'master' of https://codeberg.org/iNPUTmice/Conversations

Stephen Paul Weber created

* 'master' of https://codeberg.org/iNPUTmice/Conversations: (23 commits)
  Translated using Weblate (Esperanto)
  Translated using Weblate (Esperanto)
  Translated using Weblate (Ukrainian)
  Translated using Weblate (Galician)
  Translated using Weblate (Portuguese (Brazil))
  Translated using Weblate (Italian)
  Translated using Weblate (Russian)
  Translated using Weblate (Italian)
  Translated using Weblate (Galician)
  Translated using Weblate (German)
  Translated using Weblate (Portuguese (Brazil))
  Translated using Weblate (Portuguese (Brazil))
  Translated using Weblate (Portuguese (Brazil))
  Translated using Weblate (Polish)
  Translated using Weblate (Galician)
  Translated using Weblate (Polish)
  Translated using Weblate (Galician)
  fix rare issue with CSI triggering pep notification dedup
  send delivery receipt when strict discovery timeout is used
  add timeout when device call gets no ringing response
  ...

Change summary

build.gradle                                                                  |   2 
fastlane/metadata/android/de-DE/changelogs/4211704.txt                        |   3 
fastlane/metadata/android/gl-ES/changelogs/4211704.txt                        |   3 
fastlane/metadata/android/it-IT/changelogs/4211704.txt                        |   3 
fastlane/metadata/android/pl-PL/changelogs/4211704.txt                        |   3 
fastlane/metadata/android/uk/changelogs/4211704.txt                           |   3 
src/conversations/res/values-eo/strings.xml                                   |   4 
src/conversations/res/values-gl/strings.xml                                   |   2 
src/conversations/res/values-pt-rBR/strings.xml                               |   5 
src/main/java/eu/siacs/conversations/Config.java                              |   4 
src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java       |  16 
src/main/java/eu/siacs/conversations/parser/MessageParser.java                |  12 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java |  73 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java     |  48 
src/main/res/values-eo/strings.xml                                            |  16 
src/main/res/values-gl/strings.xml                                            | 124 
src/main/res/values-it/strings.xml                                            |   3 
src/main/res/values-pl/strings.xml                                            |   1 
src/main/res/values-pt-rBR/strings.xml                                        | 259 
src/main/res/values-ro-rRO/strings.xml                                        |   3 
src/main/res/values-ru/strings.xml                                            |  16 
src/quicksy/res/values-pt-rBR/strings.xml                                     |   8 
22 files changed, 398 insertions(+), 213 deletions(-)

Detailed changes

build.gradle 🔗

@@ -6,7 +6,7 @@ buildscript {
         mavenCentral()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:8.3.2'
+        classpath 'com.android.tools.build:gradle:8.5.2'
     }
 }
 

fastlane/metadata/android/uk/changelogs/4211704.txt 🔗

@@ -0,0 +1,3 @@
+* Вищі значення для автоматичного приймання файлів
+* У розділі «Інформація про сервер» надається більше інформації
+* Виправлення різних помилок

src/conversations/res/values-eo/strings.xml 🔗

@@ -9,8 +9,8 @@
     <string name="if_contact_is_nearby_use_qr">Se via kontakto estas proksime, ili ankaŭ povas skani la suban kodon por akcepti vian inviton.</string>
     <string name="pick_a_server">Elekti vian XMPP-provizanton</string>
     <string name="share_invite_with">Kunhavigi inviton kun…</string>
-    <string name="server_select_text">XMPP estas provizanta sendependa tujmesaĝa reto. Vi povas uzi ĉi tiun klienton per kia ajn XMPP-servilo, kiun vi elektas.
-\nTamen por via komforto ni faciligis krei konton ĉe conversations.im; provizanto speciale taŭga por la uzo kun Conversations.</string>
+    <string name="server_select_text">XMPP tujmesaĝa reto malcentra de serviloj. Oni povas uzi ĉi tiun programon per ajna XMPP-servilo, kiun oni elektas.
+\nTamen por via placô ni faciligis krei konton ĉe conversations.im; servilo krome taŭga por la uzo kun Conversations.</string>
     <string name="magic_create_text_fixed">Vi estis invitita al %1$s. Uzantnomo jam estas elektita por vi. Ni gvidos vin tra la procezo de kreado de konto.
 \nVi povos komuniki kun uzantoj de aliaj provizantoj donante al ili vian plenan XMPP-adreson.</string>
     <string name="improperly_formatted_provisioning">Nedece formatita provizokodo</string>

src/conversations/res/values-gl/strings.xml 🔗

@@ -12,6 +12,6 @@
     <string name="improperly_formatted_provisioning">Código de aprovisionamento con formato non válido</string>
     <string name="tap_share_button_send_invite">Toca no botón compartir para convidar ao teu contacto a %1$s.</string>
     <string name="if_contact_is_nearby_use_qr">Se o contacto está preto de ti, pode escanear o código inferior para aceptar o teu convite.</string>
-    <string name="easy_invite_share_text">Únete a %1$s e conversa conmigo: %2$s</string>
+    <string name="easy_invite_share_text">Únete a %1$s e conversa comigo: %2$s</string>
     <string name="share_invite_with">Enviar convite a…</string>
 </resources>

src/conversations/res/values-pt-rBR/strings.xml 🔗

@@ -3,7 +3,8 @@
     <string name="pick_a_server">Selecione o seu provedor XMPP</string>
     <string name="use_conversations.im">Usar o conversations.im</string>
     <string name="create_new_account">Criar uma nova conta</string>
-    <string name="do_you_have_an_account">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.</string>
+    <string name="do_you_have_an_account">Você já possui uma conta XMPP? Esse pode ser o seu caso se já estava 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.</string>
     <string name="server_select_text">XMPP é uma rede de mensagens instantâneas independente de provedor. Você pode usar este aplicativo com qualquer servidor XMPP de sua escolha.
 \nNo entanto, para sua comodidade, facilitamos criar uma conta em conversas.im; um provedor especificamente adequado para uso com Conversations.</string>
     <string name="magic_create_text_on_x">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.</string>
@@ -13,5 +14,5 @@
     <string name="tap_share_button_send_invite">Toque no botão compartilhar para enviar, para seu contato, um convite para %1$s.</string>
     <string name="if_contact_is_nearby_use_qr">Se seu contato estiver por perto, ele também pode escanear o código abaixo para aceitar seu convite.</string>
     <string name="easy_invite_share_text">Junte-se a %1$s e converse comigo: %2$s</string>
-    <string name="share_invite_with">Compartilhe o convite com...</string>
+    <string name="share_invite_with">Compartilhe o convite com…</string>
 </resources>

src/main/java/eu/siacs/conversations/Config.java 🔗

@@ -122,7 +122,6 @@ public final class Config {
     public static final boolean USE_DIRECT_JINGLE_CANDIDATES = true;
     public static final boolean USE_JINGLE_MESSAGE_INIT = true;
 
-    public static final boolean JINGLE_MESSAGE_INIT_STRICT_OFFLINE_CHECK = false;
     public static final boolean DISABLE_HTTP_UPLOAD = false;
     public static final boolean EXTENDED_SM_LOGGING = true; // log stanza counts
     public static final boolean BACKGROUND_STANZA_LOGGING =
@@ -136,6 +135,9 @@ public final class Config {
             false; // use x509 certificates to verify OMEMO keys
     public static final boolean REQUIRE_RTP_VERIFICATION =
             false; // require a/v calls to be verified with OMEMO
+    public static final boolean JINGLE_MESSAGE_INIT_STRICT_OFFLINE_CHECK = false;
+    public static final boolean JINGLE_MESSAGE_INIT_STRICT_DEVICE_TIMEOUT = false;
+    public static final long DEVICE_DISCOVERY_TIMEOUT = 6000; // in milliseconds
 
     public static final boolean ONLY_INTERNAL_STORAGE =
             false; // use internal storage instead of sdcard to save attachments

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java 🔗

@@ -12,6 +12,7 @@ import androidx.annotation.Nullable;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
@@ -314,7 +315,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
         if (me) {
             deviceIds.remove(getOwnDeviceId());
         }
-        Set<Integer> expiredDevices = new HashSet<>(axolotlStore.getSubDeviceSessions(jid.asBareJid().toString()));
+        final Set<Integer> expiredDevices = new HashSet<>(axolotlStore.getSubDeviceSessions(jid.asBareJid().toString()));
         expiredDevices.removeAll(deviceIds);
         for (Integer deviceId : expiredDevices) {
             SignalProtocolAddress address = new SignalProtocolAddress(jid.asBareJid().toString(), deviceId);
@@ -325,8 +326,8 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
                 }
             }
         }
-        Set<Integer> newDevices = new HashSet<>(deviceIds);
-        for (Integer deviceId : newDevices) {
+        final Set<Integer> newDevices = ImmutableSet.copyOf(deviceIds);
+        for (final Integer deviceId : newDevices) {
             SignalProtocolAddress address = new SignalProtocolAddress(jid.asBareJid().toString(), deviceId);
             XmppAxolotlSession session = sessions.get(address);
             if (session != null && session.getFingerprint() != null) {
@@ -341,7 +342,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
                 needsPublishing |= deviceIds.removeAll(getExpiredDevices());
             }
             needsPublishing |= this.changeAccessMode.get();
-            for (Integer deviceId : deviceIds) {
+            for (final Integer deviceId : deviceIds) {
                 SignalProtocolAddress ownDeviceAddress = new SignalProtocolAddress(jid.asBareJid().toString(), deviceId);
                 if (sessions.get(ownDeviceAddress) == null) {
                     FetchStatus status = fetchStatusMap.get(ownDeviceAddress);
@@ -352,6 +353,9 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
                 }
             }
             if (needsPublishing) {
+                // do not run next device list update notification through de-duplication (might get
+                // skipped by CSI)
+                this.lastDeviceListNotificationHash = 0;
                 publishOwnDeviceId(deviceIds);
             }
         }
@@ -426,8 +430,8 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
         return devices;
     }
 
-    private void publishOwnDeviceId(Set<Integer> deviceIds) {
-        Set<Integer> deviceIdsCopy = new HashSet<>(deviceIds);
+    private void publishOwnDeviceId(final Set<Integer> deviceIds) {
+        final Set<Integer> deviceIdsCopy = new HashSet<>(deviceIds);
         Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "publishing own device ids");
         if (deviceIdsCopy.isEmpty()) {
             if (numPublishTriesOnEmptyPep >= publishTriesThreshold) {

src/main/java/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -1096,10 +1096,14 @@ public class MessageParser extends AbstractParser implements Consumer<im.convers
                                             serverMsgId,
                                             timestamp);
                             final Contact contact = account.getRoster().getContact(from);
-                            if (mXmppConnectionService.confirmMessages()
-                                    && !contact.isSelf()
-                                    && remoteMsgId != null
-                                    && contact.showInContactList()) {
+                            // this is the same condition that is found in JingleRtpConnection for
+                            // the 'ringing' response. Responding with delivery receipts predates
+                            // the 'ringing' spec'd
+                            final boolean sendReceipts =
+                                    (mXmppConnectionService.confirmMessages()
+                                                    && contact.showInContactList())
+                                            || Config.JINGLE_MESSAGE_INIT_STRICT_OFFLINE_CHECK;
+                            if (remoteMsgId != null && !contact.isSelf() && sendReceipts) {
                                 processMessageReceipts(account, packet, remoteMsgId, null);
                             }
                         } else if ((query != null && query.isCatchup()) || !offlineMessagesRetrieved) {

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java 🔗

@@ -39,11 +39,13 @@ import eu.siacs.conversations.xmpp.jingle.stanzas.Reason;
 import eu.siacs.conversations.xmpp.jingle.stanzas.RtpDescription;
 import eu.siacs.conversations.xmpp.jingle.transports.InbandBytestreamsTransport;
 import eu.siacs.conversations.xmpp.jingle.transports.Transport;
+
 import im.conversations.android.xmpp.model.jingle.Jingle;
 import im.conversations.android.xmpp.model.stanza.Iq;
 
 import java.lang.ref.WeakReference;
 import java.security.SecureRandom;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -78,7 +80,8 @@ public class JingleConnectionManager extends AbstractConnectionManager {
 
     public void deliverPacket(final Account account, final Iq packet) {
         final var jingle = packet.getExtension(Jingle.class);
-        Preconditions.checkNotNull(jingle,"Passed iq packet w/o jingle extension to Connection Manager");
+        Preconditions.checkNotNull(
+                jingle, "Passed iq packet w/o jingle extension to Connection Manager");
         final String sessionId = jingle.getSessionId();
         final Jingle.Action action = jingle.getAction();
         if (sessionId == null) {
@@ -89,7 +92,8 @@ public class JingleConnectionManager extends AbstractConnectionManager {
             respondWithJingleError(account, packet, null, "bad-request", "cancel");
             return;
         }
-        final AbstractJingleConnection.Id id = AbstractJingleConnection.Id.of(account, packet, jingle);
+        final AbstractJingleConnection.Id id =
+                AbstractJingleConnection.Id.of(account, packet, jingle);
         final AbstractJingleConnection existingJingleConnection = connections.get(id);
         if (existingJingleConnection != null) {
             existingJingleConnection.deliverPacket(packet);
@@ -171,7 +175,8 @@ public class JingleConnectionManager extends AbstractConnectionManager {
                 account, request.generateResponse(Iq.Type.RESULT), null);
         final var iq = new Iq(Iq.Type.SET);
         iq.setTo(id.with);
-        final var sessionTermination = iq.addExtension(new Jingle(Jingle.Action.SESSION_TERMINATE, id.sessionId));
+        final var sessionTermination =
+                iq.addExtension(new Jingle(Jingle.Action.SESSION_TERMINATE, id.sessionId));
         sessionTermination.setReason(Reason.BUSY, null);
         mXmppConnectionService.sendIqPacket(account, iq, null);
     }
@@ -499,7 +504,8 @@ public class JingleConnectionManager extends AbstractConnectionManager {
                             new im.conversations.android.xmpp.model.stanza.Message();
                     errorMessage.setTo(from);
                     errorMessage.setId(remoteMsgId);
-                    errorMessage.setType(im.conversations.android.xmpp.model.stanza.Message.Type.ERROR);
+                    errorMessage.setType(
+                            im.conversations.android.xmpp.model.stanza.Message.Type.ERROR);
                     final Element error = errorMessage.addChild("error");
                     error.setAttribute("code", "404");
                     error.setAttribute("type", "cancel");
@@ -795,11 +801,58 @@ public class JingleConnectionManager extends AbstractConnectionManager {
                     account, proposal.with, proposal.sessionId, RtpEndUserState.FINDING_DEVICE);
             final var messagePacket =
                     mXmppConnectionService.getMessageGenerator().sessionProposal(proposal);
+            // in privacy preserving environments 'propose' is only ACKed when we have presence
+            // subscription (to not leak presence). Therefor a timeout is only appropriate for
+            // contacts where we can expect the 'ringing' response
+            final boolean triggerTimeout =
+                    Config.JINGLE_MESSAGE_INIT_STRICT_DEVICE_TIMEOUT
+                            || contact.mutualPresenceSubscription();
+            SCHEDULED_EXECUTOR_SERVICE.schedule(
+                    () -> {
+                        final var currentProposalState = rtpSessionProposals.get(proposal);
+                        Log.d(
+                                Config.LOGTAG,
+                                "proposal state after timeout " + currentProposalState);
+                        if (triggerTimeout
+                                && Arrays.asList(
+                                                DeviceDiscoveryState.SEARCHING,
+                                                DeviceDiscoveryState.SEARCHING_ACKNOWLEDGED)
+                                        .contains(currentProposalState)) {
+                            deviceDiscoveryTimeout(account, proposal);
+                        }
+                    },
+                    Config.DEVICE_DISCOVERY_TIMEOUT,
+                    TimeUnit.MILLISECONDS);
             mXmppConnectionService.sendMessagePacket(account, messagePacket);
             return proposal;
         }
     }
 
+    private void deviceDiscoveryTimeout(final Account account, final RtpSessionProposal proposal) {
+        // 'endUserState' is what we display in the UI. There is an argument to use 'BUSY' here
+        // instead
+        // we may or may not want to match this with the tone we are playing (see
+        // callIntegration.error() or callIntegration.busy())
+        final var endUserState = RtpEndUserState.CONNECTIVITY_ERROR;
+        Log.d(Config.LOGTAG, "call proposal still in device discovery state after timeout");
+        setTerminalSessionState(proposal, endUserState);
+
+        rtpSessionProposals.remove(proposal);
+        // error and busy would probably be both appropriate tones to play
+        // playing the error tone is probably more in line with what happens on a technical level
+        // and would be a similar UX to what happens when you call a user that doesn't exist
+        // playing the busy tone might be more in line with what some telephony networks play
+        proposal.callIntegration.error();
+        writeLogMissedOutgoing(
+                account, proposal.with, proposal.sessionId, null, System.currentTimeMillis());
+        mXmppConnectionService.notifyJingleRtpConnectionUpdate(
+                account, proposal.with, proposal.sessionId, endUserState);
+
+        final var retraction =
+                mXmppConnectionService.getMessageGenerator().sessionRetract(proposal);
+        mXmppConnectionService.sendMessagePacket(account, retraction);
+    }
+
     public void sendJingleMessageFinish(
             final Contact contact, final String sessionId, final Reason reason) {
         final var account = contact.getAccount();
@@ -870,8 +923,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
             Log.d(
                     Config.LOGTAG,
                     account.getJid().asBareJid() + ": unable to deliver ibb packet. missing sid");
-            account.getXmppConnection()
-                    .sendIqPacket(packet.generateResponse(Iq.Type.ERROR), null);
+            account.getXmppConnection().sendIqPacket(packet.generateResponse(Iq.Type.ERROR), null);
             return;
         }
         for (final AbstractJingleConnection connection : this.connections.values()) {
@@ -881,12 +933,10 @@ public class JingleConnectionManager extends AbstractConnectionManager {
                     if (sid.equals(inBandTransport.getStreamId())) {
                         if (inBandTransport.deliverPacket(packetType, packet.getFrom(), payload)) {
                             account.getXmppConnection()
-                                    .sendIqPacket(
-                                            packet.generateResponse(Iq.Type.RESULT), null);
+                                    .sendIqPacket(packet.generateResponse(Iq.Type.RESULT), null);
                         } else {
                             account.getXmppConnection()
-                                    .sendIqPacket(
-                                            packet.generateResponse(Iq.Type.ERROR), null);
+                                    .sendIqPacket(packet.generateResponse(Iq.Type.ERROR), null);
                         }
                         return;
                     }
@@ -896,8 +946,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
         Log.d(
                 Config.LOGTAG,
                 account.getJid().asBareJid() + ": unable to deliver ibb packet with sid=" + sid);
-        account.getXmppConnection()
-                .sendIqPacket(packet.generateResponse(Iq.Type.ERROR), null);
+        account.getXmppConnection().sendIqPacket(packet.generateResponse(Iq.Type.ERROR), null);
     }
 
     public void notifyRebound(final Account account) {

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java 🔗

@@ -266,8 +266,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
         }
     }
 
-    private void receiveTransportInfo(
-            final Iq jinglePacket, final RtpContentMap contentMap) {
+    private void receiveTransportInfo(final Iq jinglePacket, final RtpContentMap contentMap) {
         final Set<Map.Entry<String, DescriptionTransport<RtpDescription, IceUdpTransportInfo>>>
                 candidates = contentMap.contents.entrySet();
         final RtpContentMap remote = getRemoteContentMap();
@@ -355,8 +354,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
         }
     }
 
-    private void receiveContentAdd(
-            final Iq jinglePacket, final RtpContentMap modification) {
+    private void receiveContentAdd(final Iq jinglePacket, final RtpContentMap modification) {
         final RtpContentMap remote = getRemoteContentMap();
         if (!Collections.disjoint(modification.getNames(), remote.getNames())) {
             respondOk(jinglePacket);
@@ -900,8 +898,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
     }
 
     private void sendContentAccept(final RtpContentMap contentAcceptMap) {
-        final Iq iq =
-                contentAcceptMap.toJinglePacket(Jingle.Action.CONTENT_ACCEPT, id.sessionId);
+        final Iq iq = contentAcceptMap.toJinglePacket(Jingle.Action.CONTENT_ACCEPT, id.sessionId);
         send(iq);
     }
 
@@ -917,9 +914,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
 
     private void rejectContentAdd(final RtpContentMap contentMap) {
         final Iq iq =
-                contentMap
-                        .toStub()
-                        .toJinglePacket(Jingle.Action.CONTENT_REJECT, id.sessionId);
+                contentMap.toStub().toJinglePacket(Jingle.Action.CONTENT_REJECT, id.sessionId);
         Log.d(
                 Config.LOGTAG,
                 id.getAccount().getJid().asBareJid()
@@ -928,8 +923,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
         send(iq);
     }
 
-    private boolean checkForIceRestart(
-            final Iq jinglePacket, final RtpContentMap rtpContentMap) {
+    private boolean checkForIceRestart(final Iq jinglePacket, final RtpContentMap rtpContentMap) {
         final RtpContentMap existing = getRemoteContentMap();
         final Set<IceUdpTransportInfo.Credentials> existingCredentials;
         final IceUdpTransportInfo.Credentials newCredentials;
@@ -1008,9 +1002,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
     }
 
     private boolean applyIceRestart(
-            final Iq jinglePacket,
-            final RtpContentMap restartContentMap,
-            final boolean isOffer)
+            final Iq jinglePacket, final RtpContentMap restartContentMap, final boolean isOffer)
             throws ExecutionException, InterruptedException {
         final SessionDescription sessionDescription =
                 SessionDescription.of(restartContentMap, isResponder());
@@ -1175,8 +1167,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
                 MoreExecutors.directExecutor());
     }
 
-    private void receiveSessionInitiate(
-            final Iq jinglePacket, final RtpContentMap contentMap) {
+    private void receiveSessionInitiate(final Iq jinglePacket, final RtpContentMap contentMap) {
         try {
             contentMap.requireContentDescriptions();
             contentMap.requireDTLSFingerprint(true);
@@ -1266,8 +1257,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
                 MoreExecutors.directExecutor());
     }
 
-    private void receiveSessionAccept(
-            final Iq jinglePacket, final RtpContentMap contentMap) {
+    private void receiveSessionAccept(final Iq jinglePacket, final RtpContentMap contentMap) {
         try {
             contentMap.requireContentDescriptions();
             contentMap.requireDTLSFingerprint();
@@ -1411,8 +1401,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
         sendSessionTerminate(Reason.ofThrowable(rootCause), rootCause.getMessage());
     }
 
-    private void failureToPerformAction(
-            final Jingle.Action action, final Throwable throwable) {
+    private void failureToPerformAction(final Jingle.Action action, final Throwable throwable) {
         if (isTerminated()) {
             return;
         }
@@ -1686,7 +1675,11 @@ public class JingleRtpConnection extends AbstractJingleConnection
             }
             this.message.setTime(timestamp);
             startRinging();
-            if (xmppConnectionService.confirmMessages() && id.getContact().showInContactList()) {
+            // in environments where we always use discovery timeouts we always want to respond with
+            // 'ringing'
+            if (Config.JINGLE_MESSAGE_INIT_STRICT_DEVICE_TIMEOUT
+                    || (xmppConnectionService.confirmMessages()
+                            && id.getContact().showInContactList())) {
                 sendJingleMessage("ringing");
             }
         } else {
@@ -2023,8 +2016,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
                             + contentName);
             return;
         }
-        final Iq iq =
-                transportInfo.toJinglePacket(Jingle.Action.TRANSPORT_INFO, id.sessionId);
+        final Iq iq = transportInfo.toJinglePacket(Jingle.Action.TRANSPORT_INFO, id.sessionId);
         send(iq);
     }
 
@@ -2380,7 +2372,9 @@ public class JingleRtpConnection extends AbstractJingleConnection
 
     private void sendJingleMessage(final String action, final Jid to) {
         final var messagePacket = new im.conversations.android.xmpp.model.stanza.Message();
-        messagePacket.setType(im.conversations.android.xmpp.model.stanza.Message.Type.CHAT); // we want to carbon copy those
+        messagePacket.setType(
+                im.conversations.android.xmpp.model.stanza.Message.Type
+                        .CHAT); // we want to carbon copy those
         messagePacket.setTo(to);
         final Element intent =
                 messagePacket
@@ -2560,8 +2554,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
 
     private void initiateIceRestart(final RtpContentMap rtpContentMap) {
         final RtpContentMap transportInfo = rtpContentMap.transportInfo();
-        final Iq iq =
-                transportInfo.toJinglePacket(Jingle.Action.TRANSPORT_INFO, id.sessionId);
+        final Iq iq = transportInfo.toJinglePacket(Jingle.Action.TRANSPORT_INFO, id.sessionId);
         Log.d(Config.LOGTAG, "initiating ice restart: " + iq);
         iq.setTo(id.with);
         xmppConnectionService.sendIqPacket(
@@ -2616,8 +2609,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
 
     private void sendContentAdd(final RtpContentMap contentAdd) {
 
-        final Iq iq =
-                contentAdd.toJinglePacket(Jingle.Action.CONTENT_ADD, id.sessionId);
+        final Iq iq = contentAdd.toJinglePacket(Jingle.Action.CONTENT_ADD, id.sessionId);
         iq.setTo(id.with);
         xmppConnectionService.sendIqPacket(
                 id.account,

src/main/res/values-eo/strings.xml 🔗

@@ -1,2 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<resources></resources>
+<resources>
+    <string name="action_account">Agordi konton</string>
+    <string name="action_contact_details">Detaloj de konato</string>
+    <string name="action_muc_details">Detaloj de anaro</string>
+    <string name="channel_details">Detaloj de komunikilo</string>
+    <string name="action_add_account">Aldoni konton</string>
+    <string name="action_edit_contact">Alinomi</string>
+    <string name="action_block_contact">Bari konaton</string>
+    <string name="action_unblock_contact">Malbari konaton</string>
+    <string name="action_settings">Agordoj</string>
+    <string name="action_accounts">Agordi kontojn</string>
+    <string name="action_archive_chat">kestigi parolujon</string>
+    <string name="action_block_participant">Bari kunsidanton</string>
+    <string name="action_unblock_participant">Malbari kunsidanton</string>
+</resources>

src/main/res/values-gl/strings.xml 🔗

@@ -4,7 +4,7 @@
     <string name="action_accounts">Xestionar contas</string>
     <string name="action_account">Xestionar conta</string>
     <string name="action_contact_details">Detalles do contacto</string>
-    <string name="action_muc_details">Detalles do chat en grupo</string>
+    <string name="action_muc_details">Detalles da parola en grupo</string>
     <string name="channel_details">Detalles da canle</string>
     <string name="action_add_account">Engadir conta</string>
     <string name="action_edit_contact">Editar contacto</string>
@@ -26,8 +26,8 @@
     <string name="minute_ago">Hai 1 min</string>
     <string name="minutes_ago">hai %d minutos</string>
     <plurals name="x_unread_conversations">
-        <item quantity="one">%d chat sen ler</item>
-        <item quantity="other">%d chats sen ler</item>
+        <item quantity="one">%d conversa sen ler</item>
+        <item quantity="other">%d conversas sen ler</item>
     </plurals>
     <string name="sending">enviando…</string>
     <string name="message_decrypting">Descifrando a mensaxe. Agarda por favor…</string>
@@ -39,7 +39,7 @@
     <string name="moderator">Moderador</string>
     <string name="participant">Participante</string>
     <string name="visitor">Visitante</string>
-    <string name="remove_contact_text">Desexas eliminar a %s da túa lista de contactos? O chat con este contacto non se eliminará.</string>
+    <string name="remove_contact_text">Desexas eliminar a %s da túa lista de contactos? A conversa con este contacto non se eliminará.</string>
     <string name="block_contact_text">Queres evitar que %s che envíe mensaxes?</string>
     <string name="unblock_contact_text">Queres desbloquear a %s e permitirlle que che envíe mensaxes?</string>
     <string name="block_domain_text">Bloquear todos os contactos desde 1%s?</string>
@@ -77,9 +77,9 @@
     <string name="preparing_images">Preparándose para enviar imaxes</string>
     <string name="sharing_files_please_wait">Compartindo ficheiros. Agarda…</string>
     <string name="action_clear_history">Baleirar historial</string>
-    <string name="clear_conversation_history">Limpar historial do chat</string>
-    <string name="clear_histor_msg">¿Queres eliminar tódalas mensaxes deste chat?
-\n
+    <string name="clear_conversation_history">Limpar historial da charla</string>
+    <string name="clear_histor_msg">¿Queres eliminar tódalas mensaxes desta conversa? 
+\n 
 \n<b>Aviso:</b> Esto non lle afecta ás mensaxes gardadas noutros dispositivos ou servidores.</string>
     <string name="delete_file_dialog">Eliminar ficheiro</string>
     <string name="delete_file_dialog_msg">Tes a certeza de querer eliminar este ficheiro\?
@@ -178,7 +178,7 @@
     <string name="unpublish_pgp_message">Tes a certeza de que queres eliminar a túa chave pública OpenPGP do  anuncio de presenza? \nOs teus contactos non poderán enviarche mensaxes cifradas con OpenPGP.</string>
     <string name="openpgp_has_been_published">Publicada a chave pública OpenPGP.</string>
     <string name="mgmt_account_enable">Activar conta</string>
-    <string name="mgmt_account_delete_confirm_text">Tes a certeza de querer eliminar a túa conta? Ao eliminar a conta eliminas todo o historial de chat</string>
+    <string name="mgmt_account_delete_confirm_text">Tes a certeza de querer eliminar a túa conta? Ao eliminar a conta eliminas todo o historial de conversas</string>
     <string name="attach_record_voice">Gravar audio</string>
     <string name="account_settings_jabber_id">Enderezo XMPP</string>
     <string name="block_jabber_id">Bloquear enderezo XMPP</string>
@@ -234,17 +234,17 @@
     <string name="channel_bare_jid_example">canle@sala.exemplo.com</string>
     <string name="save_as_bookmark">Gardar como marcador</string>
     <string name="delete_bookmark">Eliminar marcador</string>
-    <string name="destroy_room">Destruír o chat en grupo</string>
+    <string name="destroy_room">Destruír a parola do grupo</string>
     <string name="destroy_channel">Eliminar canle</string>
-    <string name="destroy_room_dialog">Tes a certeza de querer destruír esta conversa en grupo?
-\n
-\n<b>Aviso:</b> O chat en grupo será totalmente eliminado do servidor.</string>
+    <string name="destroy_room_dialog">Tes a certeza de querer destruír esta conversa en grupo? 
+\n 
+\n<b>Aviso:</b> O parola en grupo será totalmente eliminado do servidor.</string>
     <string name="destroy_channel_dialog">Tes a certeza de querer eliminar a canle?\n\n<b>Aviso:</b> A canle será eliminada completamente do servidor.</string>
-    <string name="could_not_destroy_room">Non se puido eliminar o chat en grupo</string>
+    <string name="could_not_destroy_room">Non se puido eliminar a parola</string>
     <string name="could_not_destroy_channel">Non se puido eliminar a canle</string>
-    <string name="action_edit_subject">Editar o tema do chat en grupo</string>
+    <string name="action_edit_subject">Editar o tema do conversa</string>
     <string name="topic">Tema</string>
-    <string name="joining_conference">Entrando no chat en grupo…</string>
+    <string name="joining_conference">Entrando na conversa do grupo…</string>
     <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>
@@ -270,9 +270,11 @@
     <string name="skip">Omitir</string>
     <string name="disable_notifications">Desactivar notificacións</string>
     <string name="enable">Activar</string>
-    <string name="conference_requires_password">O chat en grupo require contrasinal</string>
+    <string name="conference_requires_password">Precisas un contrasinal para entrar</string>
     <string name="enter_password">Introducir contrasinal</string>
-    <string name="request_presence_updates">Primeiro solicita actualizacións de presenza aos contactos.\n\n<small>Esto utilizarase para determinar que aplicación de chat está a utilizar o contacto</small>.</string>
+    <string name="request_presence_updates">Primeiro solicita actualizacións de presenza aos contactos.
+\n
+\n<small>Esto utilizarase para determinar que aplicación de charla está a utilizar o contacto</small>.</string>
     <string name="request_now">Solicitar agora</string>
     <string name="ignore">Ignorar</string>
     <string name="without_mutual_presence_updates"><b>Aviso:</b> Ao enviar esto sen mutuas actualizacións de presenza podería dar problemas.\n\n<small>Vaite a \"Detalles do contacto\" para verificar as subscricións de presenza.</small></string>
@@ -292,12 +294,12 @@
     <string name="pref_autojoin_summary">Poñer marca de \"autojoin\" ao entrar ou deixar unha MUC e reaccionar ás modificacións feitas desde outros clientes.</string>
     <string name="toast_message_omemo_fingerprint">Copiouse a impresión dixital OMEMO ao portapapeis</string>
     <string name="conference_banned">Non podes acceder a esta conversa en grupo</string>
-    <string name="conference_members_only">Este chat en grupo é so para membros</string>
+    <string name="conference_members_only">Este parola en grupo é so para membros</string>
     <string name="conference_resource_constraint">Restrición do recurso</string>
     <string name="conference_kicked">Expulsáronte de esta conversa en grupo</string>
-    <string name="conference_shutdown">Pechouse o chat en grupo</string>
-    <string name="conference_unknown_error">Xa non estás neste chat en grupo</string>
-    <string name="conference_technical_problems">Saíches de este chat en grupo por razóns técnicas</string>
+    <string name="conference_shutdown">Pechouse a parola do grupo</string>
+    <string name="conference_unknown_error">Xa non estás nesta parola en grupo</string>
+    <string name="conference_technical_problems">Saíches desta parola en grupo por razóns técnicas</string>
     <string name="using_account">utilizando a conta %s</string>
     <string name="hosted_on">hospedado en %s</string>
     <string name="checking_x">Comprobando %s no servidor HTTP</string>
@@ -349,8 +351,8 @@
     <string name="pref_show_dynamic_tags">Etiquetas dinámicas</string>
     <string name="pref_show_dynamic_tags_summary">Mostra o estado debaixo do nome do contacto</string>
     <string name="enable_notifications">Activar notificacións</string>
-    <string name="no_conference_server_found">Non se atopou ningún servidor de chat en grupo</string>
-    <string name="conference_creation_failed">Non se puido crear o chat en grupo</string>
+    <string name="no_conference_server_found">Non se atopou servidor para a parola en grupo</string>
+    <string name="conference_creation_failed">Non se puido crear a parola en grupo</string>
     <string name="account_image_description">Avatar da conta</string>
     <string name="copy_omemo_clipboard_description">Copiar impresión OMEMO ao portapapeis</string>
     <string name="regenerate_omemo_key">Rexenerar a chave OMEMO</string>
@@ -382,22 +384,22 @@
     <string name="remove_admin_privileges">Revocar privilexios de administración</string>
     <string name="grant_owner_privileges">Conceder privilexios de propiedade</string>
     <string name="remove_owner_privileges">Retirar privilexios de propiedade</string>
-    <string name="remove_from_room">Eliminar o chat en grupo</string>
+    <string name="remove_from_room">Eliminar a parola en grupo</string>
     <string name="remove_from_channel">Retirar da canle</string>
     <string name="could_not_change_affiliation">Non se puido mudar a afiliación de %s</string>
-    <string name="ban_from_conference">Vetar no chat en grupo</string>
+    <string name="ban_from_conference">Vetar na parola en grupo</string>
     <string name="ban_from_channel">Vetar na canle</string>
     <string name="removing_from_public_conference">Estás a intentar eliminar a %s dunha canle pública. O único xeito de facelo é prohibíndolle o acceso para sempre.</string>
     <string name="ban_now">Rexeitar agora</string>
     <string name="could_not_change_role">Non se puido mudar o rol de %s</string>
-    <string name="conference_options">Configuración do chat privado en grupo</string>
+    <string name="conference_options">Configuración do grupo privado de conversa</string>
     <string name="channel_options">Configuración da canle pública</string>
     <string name="members_only">Privada, só para membros</string>
     <string name="non_anonymous">Facer os enderezos XMPP visibles para calquera</string>
     <string name="moderated">Establecer canle como moderada</string>
     <string name="you_are_not_participating">Non estás a participar</string>
-    <string name="modified_conference_options">Opcións do chat en grupo modificadas!</string>
-    <string name="could_not_modify_conference_options">Non se puideron modificar as opcións do chat en grupo</string>
+    <string name="modified_conference_options">Cambiáronse as opcións da parola en grupo!</string>
+    <string name="could_not_modify_conference_options">Non se puideron modificar as opcións da parola en grupo</string>
     <string name="never">Nunca</string>
     <string name="until_further_notice">Ate novo aviso</string>
     <string name="snooze">Pospor</string>
@@ -430,7 +432,7 @@
     <string name="show_location">Mostrar localización</string>
     <string name="no_application_found_to_display_location">Non se atopou unha app para mostrar a localización</string>
     <string name="location">Localización</string>
-    <string name="title_undo_swipe_out_group_chat">Saír do chat en grupo privado</string>
+    <string name="title_undo_swipe_out_group_chat">Saír da parola en grupo privada</string>
     <string name="title_undo_swipe_out_channel">Deixar a canle pública</string>
     <string name="pref_dont_trust_system_cas_title">Non confiar nas CAs do sistema</string>
     <string name="pref_dont_trust_system_cas_summary">Todos os certificados deberán ser aprobados manualmente</string>
@@ -450,7 +452,7 @@
     <string name="choose_quick_action">Elixe a acción rápida</string>
     <string name="search_contacts">Buscar contactos</string>
     <string name="send_private_message">Enviar mensaxe privada</string>
-    <string name="user_has_left_conference">%1$s saíu do chat en grupo</string>
+    <string name="user_has_left_conference">%1$s saíu da conversa</string>
     <string name="username">Identificador</string>
     <string name="username_hint">Identificador</string>
     <string name="invalid_username">Este non é un identificador válido</string>
@@ -528,7 +530,7 @@
     <string name="this_field_is_required">Este campo é requerido</string>
     <string name="correct_message">Correxir mensaxe</string>
     <string name="send_corrected_message">Enviar mensaxe correxida</string>
-    <string name="no_keys_just_confirm">Xa confiaches na impresión dixital destas persoas. Ao escoller \"Feito\" estás simplemente confirmando que %s é parte deste chat en grupo.</string>
+    <string name="no_keys_just_confirm">Xa confiaches na impresión dixital destas persoas. Ao escoller \"Feito\" estás simplemente confirmando que %s é parte da parola en grupo.</string>
     <string name="this_account_is_disabled">Desactivou esta conta</string>
     <string name="security_error_invalid_file_access">Fallo de seguridade: Acceso non válido ao ficheiro!</string>
     <string name="no_application_to_share_uri">Non se atopou unha app para compartir URI</string>
@@ -553,7 +555,7 @@
     <string name="registration_please_wait">Fallo no rexistro: inténteo de novo</string>
     <string name="registration_password_too_weak">Fallo no rexistro: contrasinal moi feble</string>
     <string name="choose_participants">Escoller participantes</string>
-    <string name="creating_conference">Creando chat en grupo…</string>
+    <string name="creating_conference">Creando parola en grupo…</string>
     <string name="invite_again">Convidar de novo</string>
     <string name="gp_disable">Desactivar</string>
     <string name="gp_short">Breve</string>
@@ -693,14 +695,14 @@
     <string name="error_trustkey_device_list">Non se obtivo a lista de dispositivos</string>
     <string name="error_trustkey_bundle">Non se obtiveron as chaves da cifraxe</string>
     <string name="error_trustkey_hint_mutual">Suxestión: Nalgúns casos, isto pode solucionarse engadíndovos mutuamente as vosas listas de contactos.</string>
-    <string name="disable_encryption_message">Tes a certeza de querer desactivar a cifraxe OMEMO para este chat?
+    <string name="disable_encryption_message">Tes a certeza de querer desactivar a cifraxe OMEMO para esta conversa?
 \nIsto permitirá á administración do teu servidor ler as túas mensaxes, pero pode ser a única forma de comunicarse con persoas que usan clientes obsoletos.</string>
     <string name="disable_now">Desactivar agora</string>
     <string name="draft">Borrador:</string>
     <string name="pref_omemo_setting">Cifraxe OMEMO</string>
-    <string name="pref_omemo_setting_summary_always">Vaise usar sempre OMEMO para chats de grupo privados e conversas personais.</string>
-    <string name="pref_omemo_setting_summary_default_on">OMEMO utilizarase por defecto para os novos chats.</string>
-    <string name="pref_omemo_setting_summary_default_off">OMEMO deberá ser activado explícitamente para os novos chats.</string>
+    <string name="pref_omemo_setting_summary_always">Vaise usar sempre OMEMO para parolas de grupo privadas e conversas personais.</string>
+    <string name="pref_omemo_setting_summary_default_on">OMEMO actívase de xeito predeterminado para as novas conversas.</string>
+    <string name="pref_omemo_setting_summary_default_off">OMEMO deberá activarse explícitamente para as novas conversas.</string>
     <string name="create_shortcut">Crear acceso directo</string>
     <string name="default_on">Activado por defecto</string>
     <string name="default_off">Desactivado por defecto</string>
@@ -721,23 +723,23 @@
     <string name="no_microphone_permission">Permitir que %1$s acceda ao micrófono</string>
     <string name="search_messages">Buscar mensaxes</string>
     <string name="gif">GIF</string>
-    <string name="view_conversation">Ver chat</string>
+    <string name="view_conversation">Ver conversa</string>
     <string name="pref_use_share_location_plugin">Complemento para Compartir Localización</string>
     <string name="pref_use_share_location_plugin_summary">Utiliza o Complemento para Compartir Localización no lugar do mapa incluído</string>
     <string name="copy_link">Copiar a dirección web</string>
     <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 \'Novo chat\' abrir teclado e pór o cursor no campo de busca</string>
-    <string name="group_chat_avatar">Avatar do chat en grupo</string>
-    <string name="host_does_not_support_group_chat_avatars">O servidor non ten soporte para avatar do chat en grupo</string>
-    <string name="only_the_owner_can_change_group_chat_avatar">Só a propietaria pode cambiar o avatar do chat</string>
+    <string name="pref_start_search_summary">Na pantalla \'Nova conversa\' abrir teclado e pór o cursor no campo de busca</string>
+    <string name="group_chat_avatar">Avatar da parola en grupo</string>
+    <string name="host_does_not_support_group_chat_avatars">O servidor non ten soporte para avatar da parola en grupo</string>
+    <string name="only_the_owner_can_change_group_chat_avatar">Só a propietaria pode cambiar o avatar da parola</string>
     <string name="contact_name">Nome do contacto</string>
     <string name="nickname">Alcume</string>
     <string name="group_chat_name">Nome</string>
     <string name="providing_a_name_is_optional">Proporcionar un nome é optativo</string>
-    <string name="create_dialog_group_chat_name">Nome do chat en grupo</string>
-    <string name="conference_destroyed">Este chat en grupo foi destruído</string>
+    <string name="create_dialog_group_chat_name">Nome da parola en grupo</string>
+    <string name="conference_destroyed">A parola en grupo foi eliminada</string>
     <string name="unable_to_save_recording">Non se gardou a gravación</string>
     <string name="foreground_service_channel_name">Servizo en segundo plano</string>
     <string name="foreground_service_channel_description">Esta categoría de notificacións utilízase para mostrar unha notificación permanente indicando que %1$s está a funcionar.</string>
@@ -831,9 +833,9 @@
     <string name="unable_to_decrypt_backup">Non se puido descifrar a copia. É correcto o contrasinal?</string>
     <string name="backup_channel_name">Respaldar &amp; Restaurar</string>
     <string name="enter_jabber_id">Introducir enderezo XMPP</string>
-    <string name="create_group_chat">Crear chat en grupo</string>
+    <string name="create_group_chat">Crear parola en grupo</string>
     <string name="join_public_channel">Unirse a canle pública</string>
-    <string name="create_private_group_chat">Crear chat privado en grupo</string>
+    <string name="create_private_group_chat">Crear parola en grupo privada</string>
     <string name="create_public_channel">Crear canle pública</string>
     <string name="create_dialog_channel_name">Nome da canle</string>
     <string name="xmpp_address">Enderezo XMPP</string>
@@ -878,7 +880,7 @@
     <string name="unable_to_perform_this_action">Non se puido completar a acción</string>
     <string name="open_join_dialog">Unirse a canle pública…</string>
     <string name="sharing_application_not_grant_permission">A aplicación que comparte non proporciona permiso para acceder ao ficheiro.</string>
-    <string name="group_chats_and_channels">Chats en grupo e Canles</string>
+    <string name="group_chats_and_channels">Parolas en grupo e Canles</string>
     <string name="jabber_network">jabber.network</string>
     <string name="local_server">Servidor local</string>
     <string name="pref_channel_discovery_summary">A maioría das usuarias debería escoller \'jabber.network\' para obter mellores suxestións desde o ecosistema público XMPP.</string>
@@ -939,8 +941,8 @@
     <string name="remove_from_favorites">Non fixar enriba</string>
     <string name="gpx_track">Ruta GPX</string>
     <string name="could_not_correct_message">No se pode correxir a mensaxe</string>
-    <string name="search_all_conversations">Todos os chats</string>
-    <string name="search_this_conversation">Este chat</string>
+    <string name="search_all_conversations">Todos as conversas</string>
+    <string name="search_this_conversation">Esta conversa</string>
     <string name="your_avatar">O teu avatar</string>
     <string name="avatar_for_x">Avatar para %s</string>
     <string name="encrypted_with_omemo">Cifrada con OMEMO</string>
@@ -950,7 +952,7 @@
     <string name="record_voice_mail">Gravar correo de voz</string>
     <string name="play_audio">Reproducir audio</string>
     <string name="pause_audio">Pausar audio</string>
-    <string name="add_contact_or_create_or_join_group_chat">Engade un contacto, crea o únete a un chat en grupo ou descubre canles</string>
+    <string name="add_contact_or_create_or_join_group_chat">Engade un contacto, crea o únete a unha parola en grupo ou descubre canles</string>
     <plurals name="view_users">
         <item quantity="one">Ver %1$d Participante</item>
         <item quantity="other">Ver %1$d Participantes</item>
@@ -987,8 +989,8 @@
     <string name="outgoing_call_timestamp">Chamada saínte · %s</string>
     <string name="delete_from_server">Eliminar a conta no servidor</string>
     <string name="could_not_delete_account_from_server">Non se puido eliminar a conta no servidor</string>
-    <string name="search_group_chats">Buscar chats en grupo</string>
-    <string name="group_chats">Chats en grupo</string>
+    <string name="search_group_chats">Buscar parolas en grupo</string>
+    <string name="group_chats">Parolas en grupo</string>
     <string name="restore_warning_continued">Non intentes restablecer unha copia de apoio que non tiveses creado ti!</string>
     <string name="outdated_backup_file_format">Estás intentando importar un ficheiro de apoio co formato antigo</string>
     <string name="audiobook">Audiolibro</string>
@@ -1009,25 +1011,25 @@
     <string name="no_permission_to_place_call">Sen permiso para chamar por teléfono</string>
     <string name="call_integration_not_available">Non está dispoñible o servizo de chamadas!</string>
     <string name="rtp_state_contact_offline">O contacto non está dispoñible</string>
-    <string name="remove_bookmark_and_close">Queres eliminar o marcador para %s e arquivar o chat?</string>
+    <string name="remove_bookmark_and_close">Queres eliminar o marcador para %s e arquivar a conversa?</string>
     <string name="remove_bookmark">Queres eliminar o marcador para %s?</string>
-    <string name="delete_and_close">Eliminar e Arquivar o chat</string>
+    <string name="delete_and_close">Eliminar e Arquivar a conversa</string>
     <string name="pref_use_colorful_bubbles_summary">Cor de fondo diferente para as mensaxes enviadas e as recibidas</string>
-    <string name="pref_use_colorful_bubbles">Burbullas coloridas nos chats</string>
+    <string name="pref_use_colorful_bubbles">Burbullas coloridas nas conversas</string>
     <string name="pref_dynamic_colors">Cores dinámicas</string>
     <string name="pref_dynamic_colors_summary">Cores do sistema (Material You)</string>
     <string name="title_activity_share_with">Compartir con…</string>
     <string name="action_archive_chat">Arquivar conversa</string>
-    <string name="title_activity_new_chat">Novo chat</string>
-    <string name="start_chat">Inciar chat</string>
-    <string name="archive_this_chat">Eliminar o chat</string>
+    <string name="title_activity_new_chat">Nova conversa</string>
+    <string name="start_chat">Conversar</string>
+    <string name="archive_this_chat">E despois eliminar a charla</string>
     <string name="welcome_header">Únete á Conversa</string>
-    <string name="switch_to_chat">Cambiar ao chat</string>
+    <string name="switch_to_chat">Cambiar á conversa</string>
     <string name="no_certificate_selected">Sen certificado cliente seleccionado!</string>
     <string name="channel_discover_opt_in_message">O descubrimento de canles usa un servizo alleo chamado &lt;a href=https://search.jabber.network&gt;search.jabber.network&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Ao usar esta ferramenta vas enviar o teu enderezo IP e termos de busca a ese servizo. Le a súa &lt;a href=https://search.jabber.network/privacy&gt;Política de Privacidade&lt;/a&gt; para saber máis.</string>
-    <string name="barcode_does_not_contain_fingerprints_for_this_chat">O código de barras non contén impresións dixitais para este chat.</string>
-    <string name="corresponding_chats_closed">Arquiváronse os chats correspondentes.</string>
-    <string name="title_undo_swipe_out_chat">Chat arquivado</string>
+    <string name="barcode_does_not_contain_fingerprints_for_this_chat">O código de barras non contén impresións dixitais para esta conversa.</string>
+    <string name="corresponding_chats_closed">Arquiváronse as conversas correspondentes.</string>
+    <string name="title_undo_swipe_out_chat">Arquivouse a conversa</string>
     <string name="pref_summary_appearance">Decorado, Cores, Capturas, Escritura</string>
     <string name="pref_title_security">Seguridade</string>
     <string name="notifications">Notificacións</string>

src/main/res/values-it/strings.xml 🔗

@@ -1100,4 +1100,7 @@
     <string name="video_is_enabled_tap_to_disable">Il video è attivo. Tocca per disattivarlo.</string>
     <string name="video_is_disabled_tap_to_enable">Il video è disattivato. Tocca per attivarlo.</string>
     <string name="flip_camera">Cambia fotocamera</string>
+    <string name="server_info_login_mechanism">Meccanismo di accesso</string>
+    <string name="server_info_bind2">XEP-0386: Bind 2</string>
+    <string name="server_info_sasl2">XEP-0388: Profilo SASL estensibile</string>
 </resources>

src/main/res/values-pl/strings.xml 🔗

@@ -1118,4 +1118,5 @@
     <string name="your_avatar_tap_to_select_new_avatar">Twój awatar. Dotknij aby wybrać nowy awatar z galerii.</string>
     <string name="server_info_sasl2">XEP-0388: rozszerzalny profil SASL</string>
     <string name="server_info_bind2">XEP-0386: uproszczone nawiązywanie połączenia</string>
+    <string name="server_info_login_mechanism">Mechanizm logowania</string>
 </resources>

src/main/res/values-pt-rBR/strings.xml 🔗

@@ -30,8 +30,8 @@
         <item quantity="many">%d conversas não lidas</item>
         <item quantity="other">%d conversas não lidas</item>
     </plurals>
-    <string name="sending">enviando...</string>
-    <string name="message_decrypting">Descriptografando a mensagem. Por favor, aguarde...</string>
+    <string name="sending">enviando…</string>
+    <string name="message_decrypting">Descriptografando a mensagem. Por favor, aguarde…</string>
     <string name="pgp_message">Mensagem criptografada via OpenPGP</string>
     <string name="nick_in_use">Este apelido já está em uso</string>
     <string name="invalid_muc_nick">Apelido inválido</string>
@@ -49,7 +49,7 @@
     <string name="blocked">Bloqueado</string>
     <string name="register_account">Registrar uma nova conta no servidor</string>
     <string name="change_password_on_server">Alterar a senha no servidor</string>
-    <string name="share_with">Compartilhar com...</string>
+    <string name="share_with">Compartilhar com…</string>
     <string name="invite_contact">Convidar contato</string>
     <string name="invite">Convidar</string>
     <string name="contacts">Contatos</string>
@@ -76,14 +76,16 @@
     <string name="send_failed">não foi entregue</string>
     <string name="preparing_image">Preparando para enviar a imagem</string>
     <string name="preparing_images">Preparando para enviar as imagens</string>
-    <string name="sharing_files_please_wait">Compartilhando arquivos. Por favor, aguarde...</string>
+    <string name="sharing_files_please_wait">Compartilhando arquivos. Por favor, aguarde…</string>
     <string name="action_clear_history">Limpar o histórico</string>
     <string name="clear_conversation_history">Limpar histórico do chat</string>
     <string name="clear_histor_msg">Deseja excluir todas as mensagens dessa conversa?
 \n
 \n<b>Atenção:</b> Isso não afetará mensagens armazenadas em outros dispositivos ou servidores.</string>
     <string name="delete_file_dialog">Excluir arquivo</string>
-    <string name="delete_file_dialog_msg">Deseja realmente excluir este arquivo?\n\n<b>Atenção:</b> Isso não excluirá cópias deste arquivo armazenadas em outros dispositivos ou servidores.</string>
+    <string name="delete_file_dialog_msg">Deseja realmente excluir este arquivo?
+\n
+\n<b>Atenção:</b> Isso não excluirá cópias deste arquivo armazenadas em outros dispositivos ou servidores. </string>
     <string name="choose_presence">Selecione o dispositivo</string>
     <string name="send_unencrypted_message">Enviar mensagem de texto não criptografada</string>
     <string name="send_message">Enviar mensagem</string>
@@ -97,21 +99,21 @@
     <string name="restart">Reiniciar</string>
     <string name="install">Instalar</string>
     <string name="openkeychain_not_installed">Por favor, instale o OpenKeychain</string>
-    <string name="offering">oferecendo...</string>
-    <string name="waiting">aguardando...</string>
+    <string name="offering">oferecendo…</string>
+    <string name="waiting">aguardando…</string>
     <string name="no_pgp_key">Não foi encontrada nenhuma chave OpenPGP</string>
     <string name="contact_has_no_pgp_key">Não foi possível criptografar suas mensagens porque o seu contatos não estão anunciando a chave pública dele.\n\n<small>Por favor, solicite ao seu contatos que configure o OpenPGP.</small></string>
     <string name="no_pgp_keys">Não foi encontrada nenhuma chave OpenPGP</string>
     <string name="contacts_have_no_pgp_keys">Não foi possível criptografar sua mensagem porque os seus contatos não estão anunciando a chave pública deles.\n\n<small>Por favor, solicite aos seus contatos que configurem o OpenPGP.</small></string>
     <string name="pref_general">Geral</string>
     <string name="pref_accept_files">Aceitar arquivos</string>
-    <string name="pref_accept_files_summary">Aceita automaticamente arquivos menores que...</string>
+    <string name="pref_accept_files_summary">Aceita automaticamente arquivos menores que…</string>
     <string name="pref_attachments">Anexos</string>
     <string name="pref_notification_settings">Notificação</string>
     <string name="pref_vibrate">Vibração</string>
-    <string name="pref_vibrate_summary">Vibra ao receber uma nova mensagem.</string>
+    <string name="pref_vibrate_summary">Vibrar ao receber uma nova mensagem</string>
     <string name="pref_led">Notificação via LED</string>
-    <string name="pref_led_summary">Pisca a luz de notificação ao receber uma nova mensagem.</string>
+    <string name="pref_led_summary">Piscar a luz de notificação ao receber uma nova mensagem</string>
     <string name="pref_ringtone">Toque</string>
     <string name="pref_notification_sound">Som de notificação</string>
     <string name="pref_notification_sound_summary">Som de notificação para novas mensagens</string>
@@ -121,12 +123,12 @@
     <string name="pref_advanced_options">Avançado</string>
     <string name="pref_never_send_crash_summary">Ao enviar os stack traces você está colaborando com o desenvolvimento</string>
     <string name="pref_confirm_messages">Confirmação de mensagens</string>
-    <string name="pref_confirm_messages_summary">Permite que seus contatos saibam quando você recebeu e leu as mensagens deles.</string>
+    <string name="pref_confirm_messages_summary">Permita que seus contatos saibam quando você recebeu e leu as mensagens deles</string>
     <string name="pref_prevent_screenshots">Impedir capturas de tela</string>
     <string name="pref_prevent_screenshots_summary">Esconde o conteúdo do app no alternador de apps e bloqueia capturas de tela</string>
     <string name="pref_ui_options">IU</string>
     <string name="openpgp_error">O OpenKeychain produziu um erro.</string>
-    <string name="bad_key_for_encryption">Chave ruim para a criptografia</string>
+    <string name="bad_key_for_encryption">Chave ruim para criptografia.</string>
     <string name="accept">Aceitar</string>
     <string name="error">Ocorreu um erro</string>
     <string name="recording_error">Erro</string>
@@ -141,7 +143,9 @@
     <string name="error_compressing_image">Não foi possível converter o arquivo de imagem</string>
     <string name="error_file_not_found">Arquivo não encontrado</string>
     <string name="error_io_exception">Ocorreu um erro genérico de E/S. Você tem espaço de armazenamento suficiente no seu aparelho?</string>
-    <string name="error_security_exception_during_image_copy">O aplicativo que você usou para selecionar esta imagem não nos forneceu permissões suficientes para ler o arquivo.\n\n<small>Utilize um gerenciador de arquivos diferente para selecionar a imagem.</small></string>
+    <string name="error_security_exception_during_image_copy">O app que você usou para selecionar esta imagem não nos forneceu permissões suficientes para ler o arquivo.
+\n
+\n<small>Utilize um gerenciador de arquivos diferente para selecionar a imagem</small>.</string>
     <string name="error_security_exception">O app que você usou para compartilhar esse arquivo não forneceu permissões suficientes.</string>
     <string name="account_status_unknown">Desconhecido</string>
     <string name="account_status_disabled">Temporariamente desabilitado</string>
@@ -182,7 +186,7 @@
     <string name="account_settings_example_jabber_id">nomedeusuario@exemplo.com</string>
     <string name="password">Senha</string>
     <string name="invalid_jid">Esse não é um endereço XMPP válido</string>
-    <string name="error_out_of_memory">Memória insuficiente. A imagem é muito grande.</string>
+    <string name="error_out_of_memory">Memória insuficiente. A imagem é muito grande</string>
     <string name="add_phone_book_text">Deseja adicionar %s ao seu livro de endereços?</string>
     <string name="server_info_show_more">Informações do servidor</string>
     <string name="server_info_mam">XEP-0313: MAM</string>
@@ -214,7 +218,7 @@
     <string name="omemo_fingerprint_x509_selected_message">v\\Impressão digital OMEMO (origem da mensagem)</string>
     <string name="other_devices">Outros dispositivos</string>
     <string name="trust_omemo_fingerprints">Confiar nas impressões digitais OMEMO</string>
-    <string name="fetching_keys">Buscando as chaves...</string>
+    <string name="fetching_keys">Buscando as chaves…</string>
     <string name="done">Concluído</string>
     <string name="decrypt">Descriptografar</string>
     <string name="search">Pesquisar</string>
@@ -239,7 +243,7 @@
     <string name="could_not_destroy_channel">Não foi possível destruir o canal</string>
     <string name="action_edit_subject">Editar o assunto da conversa em grupo</string>
     <string name="topic">Tópico</string>
-    <string name="joining_conference">Entrando na conversa em grupo...</string>
+    <string name="joining_conference">Entrando na conversa em grupo…</string>
     <string name="leave">Sair</string>
     <string name="contact_added_you">O contato foi adicionado à sua lista de contatos</string>
     <string name="add_back">Adicionar novamente</string>
@@ -249,7 +253,7 @@
     <string name="everyone_has_read_up_to_this_point">Todos leram até esse ponto</string>
     <string name="publish">Publicar</string>
     <string name="touch_to_choose_picture">Toque o avatar para selecionar uma imagem da galeria</string>
-    <string name="publishing">Publicando...</string>
+    <string name="publishing">Publicando…</string>
     <string name="error_publish_avatar_server_reject">O servidor rejeitou sua publicação</string>
     <string name="error_publish_avatar_converting">Não foi possível converter a sua imagem</string>
     <string name="error_saving_avatar">Não foi possível salvar o avatar no disco</string>
@@ -267,21 +271,23 @@
     <string name="enable">Habilitar</string>
     <string name="conference_requires_password">Essa conversa em grupo exige uma senha</string>
     <string name="enter_password">Digite a senha</string>
-    <string name="request_presence_updates">Por favor, primeiro solicite atualizações de presença do seu contato.\n\n<small>Isso determinará qual cliente de conversas o seu contato está usando.</small></string>
+    <string name="request_presence_updates">Por favor, primeiro solicite atualizações de presença do seu contato.
+\n
+\n<small>Isso determinará qual cliente de chat o seu contato está usando</small>.</string>
     <string name="request_now">Solicitar agora</string>
     <string name="ignore">Ignorar</string>
     <string name="without_mutual_presence_updates"><b>Aviso:</b> Enviar isso sem atualizações mútuas de presença pode provocar problemas inesperados.\n\n<small>Verifique nos detalhes do contato suas inscrições de presença.</small></string>
     <string name="pref_security_settings">Segurança</string>
-    <string name="pref_allow_message_correction">Permitir a correção da mensagem</string>
-    <string name="pref_allow_message_correction_summary">Permite que seus contatos editem suas mensagens retroativamente.</string>
+    <string name="pref_allow_message_correction">Correção de mensagem</string>
+    <string name="pref_allow_message_correction_summary">Permita que seus contatos editem suas mensagens retroativamente.</string>
     <string name="pref_expert_options">Configurações avançadas</string>
-    <string name="pref_expert_options_summary">Por favor, use com cuidado.</string>
+    <string name="pref_expert_options_summary">Por favor, tenha cuidado com isso</string>
     <string name="title_activity_about_x">Sobre o %s</string>
     <string name="title_pref_quiet_hours">Horário de sossego</string>
     <string name="title_pref_quiet_hours_start_time">Início</string>
     <string name="title_pref_quiet_hours_end_time">Fim</string>
     <string name="title_pref_enable_quiet_hours">Habilitar horário de sossego</string>
-    <string name="pref_quiet_hours_summary">As notificações serão silenciadas no horário de sossego.</string>
+    <string name="pref_quiet_hours_summary">As notificações serão silenciadas no horário de sossego</string>
     <string name="pref_expert_options_other">Outras</string>
     <string name="pref_autojoin">Sincronizar favoritos</string>
     <string name="pref_autojoin_summary">Define a flag \"autojoin\" ao entrar ou sair de uma sala e reage a modificações feitas por outros clientes.</string>
@@ -296,7 +302,7 @@
     <string name="using_account">usando a conta %s</string>
     <string name="hosted_on">hospedado em %s</string>
     <string name="checking_x">Verificando %s no host HTTP</string>
-    <string name="not_connected_try_again">Você não está conectado. Tente novamente mais tarde.</string>
+    <string name="not_connected_try_again">Você não está conectado. Tente novamente mais tarde</string>
     <string name="check_x_filesize">Verificar o tamanho de %s</string>
     <string name="check_x_filesize_on_host">Verifique o tamanho de %1$s em %2$s</string>
     <string name="message_options">Opções da mensagem</string>
@@ -309,14 +315,14 @@
     <string name="jabber_id_copied_to_clipboard">O endereço XMPP foi copiado para a área de transferência</string>
     <string name="error_message_copied_to_clipboard">A mensagem de erro foi copiada para a área de transferência</string>
     <string name="web_address">endereço web</string>
-    <string name="scan_qr_code">Capturar código de barras 2D</string>
-    <string name="show_qr_code">Exibir código de barras 2D</string>
+    <string name="scan_qr_code">Escanear código QR</string>
+    <string name="show_qr_code">Exibir código QR</string>
     <string name="show_block_list">Exibir a lista de bloqueios</string>
     <string name="account_details">Detalhes da conta</string>
     <string name="confirm">Confirmar</string>
     <string name="try_again">Tentar novamente</string>
     <string name="pref_keep_foreground_service">Serviço ativo</string>
-    <string name="pref_keep_foreground_service_summary">Impede que o sistema operacional encerre sua conexão.</string>
+    <string name="pref_keep_foreground_service_summary">Impede que o sistema operacional encerre sua conexão</string>
     <string name="pref_create_backup">Criar backup</string>
     <string name="pref_create_backup_summary">Os arquivos de backup serão armazenados em %s</string>
     <string name="notification_create_backup_title">Criando arquivos de backup</string>
@@ -341,8 +347,8 @@
     <string name="no_application_found_to_open_file">Não foi encontrado nenhum aplicativo para abrir o arquivo</string>
     <string name="no_application_found_to_open_link">Não foi encontrado nenhum aplicativo para abrir o link</string>
     <string name="no_application_found_to_view_contact">Não foi encontrado nenhum aplicativo para visualizar contatos</string>
-    <string name="pref_show_dynamic_tags">Etiquetas dinâmicas</string>
-    <string name="pref_show_dynamic_tags_summary">Exibe etiquetas de somente-leitura abaixo dos contatos.</string>
+    <string name="pref_show_dynamic_tags">Rótulos dinâmicos</string>
+    <string name="pref_show_dynamic_tags_summary">Exibe rótulos de somente-leitura abaixo dos contatos</string>
     <string name="enable_notifications">Habilitar notificações</string>
     <string name="no_conference_server_found">Não foi encontrado nenhum servidor de conversas em grupo</string>
     <string name="conference_creation_failed">Não foi possível criar a conversa em grupo</string>
@@ -356,7 +362,7 @@
     <string name="error_trustkeys_title">Alguma coisa deu errado</string>
     <string name="fetching_history_from_server">Obtendo histórico do servidor</string>
     <string name="no_more_history_on_server">Nenhum outro histórico do servidor</string>
-    <string name="updating">Atualizando...</string>
+    <string name="updating">Atualizando…</string>
     <string name="password_changed">A senha foi alterada!</string>
     <string name="could_not_change_password">Não foi possível alterar a senha</string>
     <string name="change_password">Alterar a senha</string>
@@ -402,7 +408,7 @@
     <string name="pref_enter_is_send">Enter envia</string>
     <string name="pref_enter_is_send_summary">Use a tecla Enter para enviar mensagens. Você sempre pode usar Ctrl+Enter para enviar mensagens, mesmo se essa opção estiver desabilitada.</string>
     <string name="pref_display_enter_key">Exibir o botão Enter</string>
-    <string name="pref_display_enter_key_summary">Altera o botão de emoticons para um botão Enter.</string>
+    <string name="pref_display_enter_key_summary">Alterar o botão de emoticons para um botão Enter</string>
     <string name="audio">áudio</string>
     <string name="video">vídeo</string>
     <string name="image">imagem</string>
@@ -411,16 +417,16 @@
     <string name="pdf_document">Documento PDF</string>
     <string name="apk">Aplicativo Android</string>
     <string name="vcard">Contato</string>
-    <string name="avatar_has_been_published">O avatar foi publicado.</string>
+    <string name="avatar_has_been_published">O avatar foi publicado!</string>
     <string name="sending_x_file">Enviando %s</string>
     <string name="offering_x_file">Oferecendo %s</string>
     <string name="hide_offline">Ocultar desconectados</string>
-    <string name="contact_is_typing">%s está digitando...</string>
+    <string name="contact_is_typing">%s está digitando…</string>
     <string name="contact_has_stopped_typing">%s parou de digitar</string>
-    <string name="contacts_are_typing">%s estão digitando...</string>
+    <string name="contacts_are_typing">%s estão digitando…</string>
     <string name="contacts_have_stopped_typing">%s pararam de digitar</string>
     <string name="pref_chat_states">Notificações de digitação</string>
-    <string name="pref_chat_states_summary">Permite que os seus usuários saibam quando você está escrevendo mensagens para eles.</string>
+    <string name="pref_chat_states_summary">Permita que os seus contatos saibam quando você está escrevendo mensagens para eles</string>
     <string name="send_location">Enviar localização</string>
     <string name="show_location">Exibir localização</string>
     <string name="no_application_found_to_display_location">Não foi encontrado nenhum aplicativo para exibir a localização</string>
@@ -428,9 +434,9 @@
     <string name="title_undo_swipe_out_group_chat">Deixar a conversa em grupo privada</string>
     <string name="title_undo_swipe_out_channel">Deixar o canal público</string>
     <string name="pref_dont_trust_system_cas_title">Não confiar nas CAs do sistema</string>
-    <string name="pref_dont_trust_system_cas_summary">Todos os certificados devem ser aprovados manualmente.</string>
+    <string name="pref_dont_trust_system_cas_summary">Todos os certificados devem ser aprovados manualmente</string>
     <string name="pref_remove_trusted_certificates_title">Remover certificados</string>
-    <string name="pref_remove_trusted_certificates_summary">Exclui os certificados aprovados manualmente.</string>
+    <string name="pref_remove_trusted_certificates_summary">Excluir certificados aprovados manualmente</string>
     <string name="toast_no_trusted_certs">Nenhum certificado aprovado manualmente</string>
     <string name="dialog_manage_certs_title">Remover certificados</string>
     <string name="dialog_manage_certs_positivebutton">Excluir a seleção</string>
@@ -459,21 +465,21 @@
     <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>
     <string name="server_info_broken">Quebrado</string>
-    <string name="pref_presence_settings">Disponibilidade</string>
+    <string name="pref_presence_settings">Dispôr</string>
     <string name="pref_away_when_screen_off">\"Afastado\" quando o dispositivo estiver travado</string>
     <string name="pref_away_when_screen_off_summary">Exibe como Afastado quando o dispositivo estiver travado</string>
     <string name="pref_dnd_on_silent_mode">\"Ocupado\" no modo silencioso</string>
     <string name="pref_dnd_on_silent_mode_summary">Exibe como Ocupado quando o dispositivo estiver em modo silencioso</string>
     <string name="pref_treat_vibrate_as_silent">Considerar o modo de vibração como silencioso</string>
     <string name="pref_treat_vibrate_as_dnd_summary">Exibe como Ocupado quando o dispositivo estiver em vibratório</string>
-    <string name="pref_show_connection_options">Configurações detalhadas da conexão</string>
-    <string name="pref_show_connection_options_summary">Exibe o nome de host e configurações da porta ao configurar uma conta.</string>
+    <string name="pref_show_connection_options">Host &amp; Porta</string>
+    <string name="pref_show_connection_options_summary">Exibir configurações de conexão entendidas ao configurar uma conta</string>
     <string name="hostname_example">xmpp.example.com</string>
     <string name="action_add_account_with_certificate">Autenticar com certificado</string>
     <string name="unable_to_parse_certificate">Não foi possível analisar o certificado</string>
     <string name="mam_prefs">Preferências de arquivamento</string>
     <string name="server_side_mam_prefs">Preferências de arquivamento no servidor</string>
-    <string name="fetching_mam_prefs">Obtendo as preferências de arquivamento. Por favor aguarde...</string>
+    <string name="fetching_mam_prefs">Obtendo as preferências de arquivamento. Por favor aguarde…</string>
     <string name="unable_to_fetch_mam_prefs">Não foi possível obter as preferências de arquivamento</string>
     <string name="captcha_required">CAPTCHA obrigatório</string>
     <string name="captcha_hint">Digite o texto da imagem acima</string>
@@ -481,11 +487,11 @@
     <string name="jid_does_not_match_certificate">O endereço XMPP não corresponde ao certificado</string>
     <string name="action_renew_certificate">Renovar o certificado</string>
     <string name="error_fetching_omemo_key">Ocorreu um erro na obtenção da chave OMEMO!</string>
-    <string name="verified_omemo_key_with_certificate">A chave OMEMO foi verificada com o certificado.</string>
-    <string name="device_does_not_support_certificates">O seu dispositivo não suporta a seleção de certificados de clientes.</string>
+    <string name="verified_omemo_key_with_certificate">A chave OMEMO foi verificada com o certificado!</string>
+    <string name="device_does_not_support_certificates">O seu dispositivo não suporta a seleção de certificados de clientes!</string>
     <string name="pref_connection_options">Conexão</string>
     <string name="pref_use_tor">Conectar via Tor</string>
-    <string name="pref_use_tor_summary">Faz o tunelamento de todas as conexões através de redes Tor. Necessita do Orbot.</string>
+    <string name="pref_use_tor_summary">Fazer o tunelamento de todas as conexões através de redes Tor. Necessita do Orbot</string>
     <string name="account_settings_hostname">Nome do host</string>
     <string name="account_settings_port">Porta</string>
     <string name="hostname_or_onion">Server- ou .onion-Address</string>
@@ -504,10 +510,10 @@
     <string name="shared_text_with_x">Texto compartilhado com %s</string>
     <string name="no_storage_permission">Permita o acesso do %1$s ao armazenamento externo</string>
     <string name="no_camera_permission">Permita o acesso do %1$s à câmera</string>
-    <string name="sync_with_contacts">Sincronizar com os contatos</string>
-    <string name="sync_with_contacts_long">%1$s gostaria de obter a permissão para acessar seu livro de endereços e fazer a correspondência entre ele e a sua lista de contatos do XMPP. Isso permitirá exibir os nomes completos e avatares dos seus contatos.
+    <string name="sync_with_contacts">Integração com a lista de contatos</string>
+    <string name="sync_with_contacts_long">O %1$s processa sua lista de contatos localmente, no seu dispositivo, para te mostrar nomes e fotos de perfil para contatos correspondentes no XMPP.
 \n
-\n%1$s fará a leitura e a correspondência do seu livro de endereços localmente, sem enviar os seus contatos para o servidor em uso.</string>
+\nNenhum dado da sua lista de contato sai do seu dispositivo!</string>
     <string name="notify_on_all_messages">Notificar em todas as mensagens</string>
     <string name="notify_only_when_highlighted">Notificar somente quando for mencionado</string>
     <string name="notify_never">Notificações desabilitadas</string>
@@ -518,26 +524,29 @@
     <string name="large_images_only">Apenas imagens grandes</string>
     <string name="battery_optimizations_enabled">Otimizações de bateria habilitadas</string>
     <string name="battery_optimizations_enabled_explained">O seu dispositivo está empregando uma otimização intensa de bateria para o %1$s, o que pode levar a atrasos nas notificações ou mesmo perda de mensagens.\nÉ recomendável desabilitar essa otimização.</string>
-    <string name="battery_optimizations_enabled_dialog">O seu dispositivo está empregando uma otimização intensa de bateria para o %1$s, o que pode levar a atrasos nas notificações ou mesmo perda de mensagens.\nVocê será consultado agora para desabilitar essa otimização.</string>
+    <string name="battery_optimizations_enabled_dialog">O seu dispositivo está empregando uma otimização intensa de bateria para o %1$s, o que pode levar a atrasos nas notificações ou mesmo perda de mensagens.
+\n
+\nVocê será pedido agora para desabilitar essa otimização.</string>
     <string name="disable">Desabilitar</string>
     <string name="selection_too_large">A área selecionada é muito grande</string>
     <string name="no_accounts">(Nenhuma conta ativa)</string>
     <string name="this_field_is_required">Este campo é necessário</string>
-    <string name="correct_message">Corrigir a mensagem</string>
+    <string name="correct_message">Corrigir</string>
     <string name="send_corrected_message">Enviar a mensagem corrigida</string>
-    <string name="no_keys_just_confirm">Você já validou as impressões digitais desse contato e confirma sua confiabilidade. Ao selecionar \"Concluído\" você está apenas confirmando que %s é parte desta conversa em grupo.</string>
+    <string name="no_keys_just_confirm">Você já confiou na impressão digital desse contato. Ao selecionar \"Concluído\" você está apenas confirmando que %s é parte deste chat em grupo.</string>
     <string name="this_account_is_disabled">Você desabilitou essa conta</string>
     <string name="security_error_invalid_file_access">Erro de segurança: Acesso inválido ao arquivo!</string>
     <string name="no_application_to_share_uri">Não foi encontrado nenhum aplicativo para compartilhar a URI</string>
-    <string name="share_uri_with">Compartilhar a URI com...</string>
+    <string name="share_uri_with">Compartilhar a URI com…</string>
     <string name="agree_and_continue">Concordar e continuar</string>
-    <string name="magic_create_text">Você será guiado ao longo do processo de criação de conta no conversations.im.¹\nAo usar o conversations.im você também poderá se comunicar com usuários de outros provedores. Basta fornecer a eles o sua endereço XMPP completo.</string>
+    <string name="magic_create_text">Você será guiado ao longo do processo de criação de conta no conversations.im.
+\nAo usar o conversations.im você também poderá se comunicar com usuários de outros provedores. Basta fornecer a eles o sua endereço XMPP completo.</string>
     <string name="your_full_jid_will_be">Seu endereço XMPP completo será: %s</string>
     <string name="create_account">Criar conta</string>
     <string name="use_own_provider">Usar meu próprio provedor</string>
     <string name="pick_your_username">Selecione seu nome de usuário</string>
-    <string name="pref_manually_change_presence">Gerenciar a disponibilidade manualmente</string>
-    <string name="pref_manually_change_presence_summary">Defina sua disponibilidade ao editar a sua mensagem de status</string>
+    <string name="pref_manually_change_presence">Gerenciar o dispôr a dedo</string>
+    <string name="pref_manually_change_presence_summary">Defina seu dispôr ao editar a sua mensagem de estado.</string>
     <string name="status_message">Mensagem de status</string>
     <string name="presence_chat">Livre para conversar</string>
     <string name="presence_online">Conectado</string>
@@ -549,14 +558,14 @@
     <string name="registration_please_wait">Não foi possível efetuar o registro. Por favor, tente novamente mais tarde</string>
     <string name="registration_password_too_weak">Falha no registro: Senha muito fraca</string>
     <string name="choose_participants">Selecione os participantes</string>
-    <string name="creating_conference">Criando a conversa em grupo...</string>
+    <string name="creating_conference">Criando a conversa em grupo…</string>
     <string name="invite_again">Convidar novamente</string>
     <string name="gp_disable">Desabilitar</string>
     <string name="gp_short">Curto</string>
     <string name="gp_medium">Médio</string>
     <string name="gp_long">Longo</string>
-    <string name="pref_broadcast_last_activity">Uso do anúncio</string>
-    <string name="pref_broadcast_last_activity_summary">Permite que os seus contatos saibam quando você usa o Conversations</string>
+    <string name="pref_broadcast_last_activity">Visto por último</string>
+    <string name="pref_broadcast_last_activity_summary">Permita que os seus contatos vejam quando você usou o app</string>
     <string name="pref_privacy">Privacidade</string>
     <string name="pref_theme_options">Tema</string>
     <string name="pref_theme_options_summary">Selecione a paleta de cores</string>
@@ -603,7 +612,7 @@
     <string name="pref_blind_trust_before_verification_summary">Confiar em novos dispositivos de contatos não verificados, mas solicitar confirmação manual de novos dispositivos para contatos verificados.</string>
     <string name="blindly_trusted_omemo_keys">Chaves OMEMO confiadas cegamente, o que significa que poderiam ser outras pessoas ou alguém poderia tê-las aproveitado.</string>
     <string name="not_trusted">Não confiável</string>
-    <string name="invalid_barcode">Código de barras 2D inválido</string>
+    <string name="invalid_barcode">Código QR inválido</string>
     <string name="pref_clean_cache_summary">Limpar a pasta de cache (usada pela aplicativo da câmera)</string>
     <string name="pref_clean_cache">Limpar o cache</string>
     <string name="pref_clean_private_storage">Limpar o armazenamento privado</string>
@@ -674,7 +683,7 @@
     <string name="certificate_does_not_contain_jid">O certificado não contém um endereço XMPP</string>
     <string name="server_info_partial">parcial</string>
     <string name="attach_record_video">Gravar vídeo</string>
-    <string name="copy_to_clipboard">Copiar para a área de transferência</string>
+    <string name="copy_to_clipboard">Copiar</string>
     <string name="message_copied_to_clipboard">A mensagem foi copiada para a área de transferência</string>
     <string name="message">Mensagem</string>
     <string name="private_messages_are_disabled">As mensagens privadas estão desabilitadas</string>
@@ -695,14 +704,14 @@
     <string name="error_trustkey_device_list">Não foi possível obter a lista de dispositivos</string>
     <string name="error_trustkey_bundle">Não foi possível obter as chaves de criptografia</string>
     <string name="error_trustkey_hint_mutual">Dica: Em alguns casos isso pode ser resolvido adicionando-se um ao outro na lista de contatos.</string>
-    <string name="disable_encryption_message">Tem certeza que deseja desabilitar a criptografia OMEMO nesta conversa?
+    <string name="disable_encryption_message">Tem certeza que deseja desabilitar a criptografia OMEMO neste chat?
 \nIsso permitirá que o administrador do seu servidor seja capaz de ler suas mensagens. Por outro lado, pode ser a única forma de se comunicar com pessoas usando clientes desatualizados.</string>
     <string name="disable_now">Desabilitar agora</string>
     <string name="draft">Rascunho:</string>
     <string name="pref_omemo_setting">Criptografia OMEMO</string>
     <string name="pref_omemo_setting_summary_always">OMEMO será sempre utilizado em conversas um-para-um e de grupos privados.</string>
-    <string name="pref_omemo_setting_summary_default_on">OMEMO será utilizado por padrão em novas conversas.</string>
-    <string name="pref_omemo_setting_summary_default_off">OMEMO deverá ser explicitamente ativado para novas conversas.</string>
+    <string name="pref_omemo_setting_summary_default_on">OMEMO será utilizado por padrão em novos chats.</string>
+    <string name="pref_omemo_setting_summary_default_off">OMEMO deverá ser explicitamente ativado para novos chats.</string>
     <string name="create_shortcut">Criar atalho</string>
     <string name="default_on">Ligado por padrão</string>
     <string name="default_off">Desligado por padrão</string>
@@ -719,18 +728,18 @@
     <string name="title_activity_show_location">Exibir localização</string>
     <string name="share">Compartilhar</string>
     <string name="unable_to_start_recording">Não foi possível iniciar a gravação</string>
-    <string name="please_wait">Por favor, aguarde...</string>
+    <string name="please_wait">Por favor, aguarde…</string>
     <string name="no_microphone_permission">Permita o acesso do %1$s ao microfone</string>
     <string name="search_messages">Pesquisar mensagens</string>
     <string name="gif">GIF</string>
-    <string name="view_conversation">Ver conversa</string>
+    <string name="view_conversation">Visualizar chat</string>
     <string name="pref_use_share_location_plugin">Plugin de Compartilhamento de Localização</string>
-    <string name="pref_use_share_location_plugin_summary">Use o Plugin de Compartilhamento de Localização ao invés do mapa nativo.</string>
+    <string name="pref_use_share_location_plugin_summary">Usar o Plugin de Compartilhamento de Localização ao invés do mapa integrado</string>
     <string name="copy_link">Copiar endereço web</string>
     <string name="copy_jabber_id">Copiar endereço XMPP</string>
     <string name="p1_s3_filetransfer">Compartilhamento de arquivos via HTTP para S3</string>
     <string name="pref_start_search">Pesquisa direta</string>
-    <string name="pref_start_search_summary">Na tela \"Conversar\", abra o teclado e coloque o cursor no campo de pesquisa</string>
+    <string name="pref_start_search_summary">Na tela \"Novo chat\", abra o teclado e coloque o cursor no campo de pesquisa</string>
     <string name="group_chat_avatar">Avatar de conversa em grupo</string>
     <string name="host_does_not_support_group_chat_avatars">O host não suporta avatares de conversa em grupo</string>
     <string name="only_the_owner_can_change_group_chat_avatar">Somente o proprietário pode alterar o avatar da conversa em grupo</string>
@@ -757,14 +766,14 @@
     <string name="delivery_failed_channel_name">Entregas não efetuadas</string>
     <string name="pref_message_notification_settings">Configurações das notificações de mensagens</string>
     <string name="pref_incoming_call_notification_settings">configurações das notificações de chamadas recebidas</string>
-    <string name="pref_more_notification_settings_summary">Importância, som, vibração.</string>
+    <string name="pref_more_notification_settings_summary">Importância, Som, Vibrar</string>
     <string name="video_compression_channel_name">Compressão de vídeo</string>
     <string name="view_media">Ver mídia</string>
     <string name="group_chat_members">Participantes</string>
     <string name="media_browser">Navegador de mídia</string>
-    <string name="security_violation_not_attaching_file">Arquivo omitido devido a violação de segurança</string>
+    <string name="security_violation_not_attaching_file">Arquivo omitido devido à uma violação de segurança.</string>
     <string name="pref_video_compression">Qualidade do vídeo</string>
-    <string name="pref_video_compression_summary">Qualidade baixa significa arquivos menores.</string>
+    <string name="pref_video_compression_summary">Qualidade baixa significa arquivos menores</string>
     <string name="video_360p">Média (360p)</string>
     <string name="video_720p">Alta (720p)</string>
     <string name="cancelled">cancelado</string>
@@ -782,20 +791,20 @@
     <string name="verify_x">Verificar %s</string>
     <string name="we_have_sent_you_an_sms_to_x"><![CDATA[Nós enviamos um SMS para <b>%s</b>.]]></string>
     <string name="we_have_sent_you_another_sms">Nós enviamos outro SMS com um código de 6 dígitos.</string>
-    <string name="please_enter_pin_below">Por favor, digite o código de 6 dígitos abaixo.</string>
+    <string name="please_enter_pin_below">Por favor, digite o PIN de 6 dígitos abaixo.</string>
     <string name="resend_sms">Reenviar o SMS</string>
     <string name="resend_sms_in">Reenviar o SMS (%s)</string>
     <string name="wait_x">Por favor, espere (%s)</string>
-    <string name="back">voltar</string>
-    <string name="possible_pin">Copiar automaticamente o código da área de transferência.</string>
-    <string name="please_enter_pin">Por favor, digite o seu código de 6 dígitos.</string>
+    <string name="back">Voltar</string>
+    <string name="possible_pin">A área de transferência foi automaticamente lida para um possível PIN.</string>
+    <string name="please_enter_pin">Por favor, digite o seu PIN de 6 dígitos.</string>
     <string name="abort_registration_procedure">Deseja realmente cancelar o procedimento de registro?</string>
     <string name="yes">Sim</string>
     <string name="no">Não</string>
-    <string name="verifying">Verificando...</string>
-    <string name="requesting_sms">Solicitando o SMS...</string>
-    <string name="incorrect_pin">O código que você digitou está incorreto.</string>
-    <string name="pin_expired">O código que enviamos para você expirou.</string>
+    <string name="verifying">Verificando…</string>
+    <string name="requesting_sms">Solicitando o SMS…</string>
+    <string name="incorrect_pin">O PIN que você digitou está incorreto.</string>
+    <string name="pin_expired">O PIN que enviamos para você expirou.</string>
     <string name="unknown_api_error_network">Erro desconhecido na rede.</string>
     <string name="unknown_api_error_response">Resposta desconhecida do servidor.</string>
     <string name="unable_to_connect_to_server">Não foi possível conectar ao servidor.</string>
@@ -822,7 +831,7 @@
     <string name="group_chat_will_make_your_jabber_id_public">Este canal tornará público o seu endereço XMPP</string>
     <string name="ebook">e-book</string>
     <string name="video_original">Original (não comprimido)</string>
-    <string name="open_with">Abrir com...</string>
+    <string name="open_with">Abrir com…</string>
     <string name="set_profile_picture">Imagem de perfil do Conversations</string>
     <string name="choose_account">Selecione a conta</string>
     <string name="restore_backup">Restaurar o backup</string>
@@ -842,13 +851,13 @@
     <string name="please_enter_name">Por favor, forneça um nome para o canal</string>
     <string name="please_enter_xmpp_address">Por favor, forneça um endereço XMPP</string>
     <string name="this_is_an_xmpp_address">Esse é um endereço XMPP. Por favor, forneça um nome.</string>
-    <string name="creating_channel">Criando o canal público...</string>
+    <string name="creating_channel">Criando o canal público…</string>
     <string name="channel_already_exists">Este canal já existe</string>
     <string name="joined_an_existing_channel">Você entrou em um canal existente</string>
     <string name="unable_to_set_channel_configuration">Não foi possível salvar a configuração do canal</string>
     <string name="allow_participants_to_edit_subject">Permitir que qualquer um edite o tópico</string>
     <string name="allow_participants_to_invite_others">Permitir que qualquer um convide outras pessoas</string>
-    <string name="anyone_can_edit_subject">Qualquer um pode editar o tópico</string>
+    <string name="anyone_can_edit_subject">Qualquer um pode editar o tópico.</string>
     <string name="owners_can_edit_subject">Proprietários podem editar o tópico.</string>
     <string name="admins_can_edit_subject">Administradores podem editar o tópico.</string>
     <string name="owners_can_invite_others">Proprietários podem convidar outras pessoas.</string>
@@ -864,7 +873,7 @@
     <string name="discover_channels">Descobrir canais</string>
     <string name="search_channels">Pesquisar canais</string>
     <string name="channel_discovery_opt_in_title">Provável violação de privacidade!</string>
-    <string name="i_already_have_an_account">Eu já tenho uma conta.</string>
+    <string name="i_already_have_an_account">Eu já tenho uma conta</string>
     <string name="add_existing_account">Adicionar uma conta já existente</string>
     <string name="register_new_account">Registrar uma nova conta</string>
     <string name="this_looks_like_a_domain">Isso se parece com um endereço de domínio</string>
@@ -878,7 +887,7 @@
     <string name="account_already_setup">Esta conta já foi configurada</string>
     <string name="please_enter_password">Por favor, digite a senha para esta conta</string>
     <string name="unable_to_perform_this_action">Não foi possível executar essa ação</string>
-    <string name="open_join_dialog">Entrar no canal público...</string>
+    <string name="open_join_dialog">Entrar no canal público…</string>
     <string name="sharing_application_not_grant_permission">O aplicativo de compartilhamento não permitiu o acesso a esse arquivo.</string>
     <string name="group_chats_and_channels"><![CDATA[Conversas em Grupo & Canais]]></string>
     <string name="jabber_network">jabber.network</string>
@@ -937,15 +946,15 @@
     <string name="video_call">Chamada de vídeo</string>
     <string name="help">Ajuda</string>
     <string name="microphone_unavailable">Seu microfone não está disponível</string>
-    <string name="only_one_call_at_a_time">Você só pode fazer uma chamada por vez</string>
+    <string name="only_one_call_at_a_time">Você só pode fazer uma chamada por vez.</string>
     <string name="return_to_ongoing_call">Retornar para a chamada em andamento</string>
     <string name="could_not_switch_camera">Não foi possível trocar a câmera</string>
     <string name="add_to_favorites">Fixar no topo</string>
     <string name="remove_from_favorites">Desafixar do topo</string>
     <string name="gpx_track">Trilha GPX</string>
     <string name="could_not_correct_message">Não foi possível corrigir a mensagem</string>
-    <string name="search_all_conversations">Todas as conversas</string>
-    <string name="search_this_conversation">Essa conversa</string>
+    <string name="search_all_conversations">Todos os chats</string>
+    <string name="search_this_conversation">Este chat</string>
     <string name="your_avatar">Seu avatar</string>
     <string name="avatar_for_x">Avatar para %s</string>
     <string name="encrypted_with_omemo">Criptografada com OMEMO</string>
@@ -984,16 +993,16 @@
     <string name="switch_to_video">Mudar para vídeo</string>
     <string name="reject_switch_to_video">Recusar requisição de mudança para vídeo</string>
     <string name="pref_send_crash_reports">Enviar relatórios de erro</string>
-    <string name="remove_bookmark_and_close">Gostaria de remover o favorito de %s e arquivar chat?</string>
+    <string name="remove_bookmark_and_close">Gostaria de remover o favorito de %s e arquivar a conversa?</string>
     <string name="archive_this_chat">Exclua o chat depois</string>
     <string name="title_activity_share_with">Compartilhar com…</string>
-    <string name="action_archive_chat">Arquivar chat</string>
+    <string name="action_archive_chat">Arquivar conversa</string>
     <string name="title_activity_new_chat">Novo chat</string>
     <string name="send_encrypted_message">Enviar mensagem criptografada</string>
     <string name="account_state_logged_out">Desconectado</string>
     <string name="remove_bookmark">Gostaria de remover o favorito de %s?</string>
     <string name="unsupported_operation">Operação não suportada</string>
-    <string name="delete_and_close">Deletar e arquivar chat</string>
+    <string name="delete_and_close">Excluir e arquivar a conversa</string>
     <string name="contact_uses_unverified_keys">Seu contato tem dispositivos não verificados. Escaneie o Código QR dele para fazer uma verificação e impedir ataques MITM.</string>
     <string name="log_out">Sair</string>
     <string name="unverified_devices">Você está usando dispositivos não verificados. Escaneie o Código QR em outro dispositivo para fazer a verificação, e impedir ataques MITM.</string>
@@ -1022,4 +1031,80 @@
     <string name="appearance">Aparência</string>
     <string name="pref_category_server_connection">Conexão com o servidor</string>
     <string name="pref_category_operating_system">Sistema Operacional</string>
+    <string name="welcome_header">Entre na Conversa</string>
+    <string name="welcome_header_quicksy">Bem-vindo ao Quicksy!</string>
+    <string name="decline">Rejeitar</string>
+    <string name="delete_from_server">Remover conta do servidor</string>
+    <string name="could_not_delete_account_from_server">Não pôde excluir conta do servidor</string>
+    <string name="unified_push_summary">Transmissor de notificações para apps de terceiros compatíveis com o UnifiedPush</string>
+    <string name="pref_category_e2ee">Criptografia de ponta-a-ponta</string>
+    <string name="pref_title_trust_system_ca_store">Autoridades de certificação</string>
+    <string name="hide_notification">Esconder notificação</string>
+    <string name="pref_up_long_summary">Ao atuar como um distribuidor UnifiedPush, a conexão persistente, estável, e amigável à bateria do XMPP será usada para alertar outros apps compatíveis com o UnifiedPush, como o Tusky, Ltt.RS, FluffyChat, e mais.</string>
+    <string name="corresponding_chats_closed">Chats correspondentes arquivados.</string>
+    <string name="restore_warning_continued">Não tente restaurar backups que você não criou!</string>
+    <string name="rtp_state_contact_offline">O contato não está disponível</string>
+    <string name="video_is_enabled_tap_to_disable">O vídeo está ativado. Toque para desativar.</string>
+    <string name="channel_discover_opt_in_message">A descoberta de canais usa um serviço de terceiros chamado &lt;a href=https://search.jabber.network&gt;search.jabber.network&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Usar esta funcionalidade transmitirá seu endereço de IP e termos de pesquisa ao serviço. Leia sua &lt;a href=https://search.jabber.network/privacy&gt;Política de Privacidade&lt;/a&gt; para mais informações.</string>
+    <string name="call_is_using_earpiece_tap_to_switch_to_speaker">A chamada está usando o falante de ouvido. Toque para alterar para o alto-falante.</string>
+    <string name="call_is_using_speaker_tap_to_switch_to_earpiece">Chamada está usando alto-falante. Toque para alterar para o falante de ouvido.</string>
+    <string name="pref_backup_summary">Criar um único, agendamento</string>
+    <string name="pref_create_backup_one_off_summary">Criar um único backup</string>
+    <string name="audiobook">Audiobook</string>
+    <string name="this_account_is_logged_out">Você desconectou desta conta</string>
+    <string name="pref_use_colorful_bubbles">Bolhas de chat coloridas</string>
+    <string name="pref_use_colorful_bubbles_summary">Cores de fundo distintas para mensagens enviadas e recebidas</string>
+    <string name="pref_accept_invites_from_strangers">Convites de estranhos</string>
+    <string name="pref_accept_invites_from_strangers_summary">Aceitar convites de estranhos para chat em grupo</string>
+    <string name="title_undo_swipe_out_chat">Chat arquivado</string>
+    <string name="pref_large_font">Texto grande</string>
+    <string name="pref_large_font_summary">Aumentar o tamanho do texto em bolhas de mensagem</string>
+    <string name="your_avatar_tap_to_select_new_avatar">Seu avatar. Toque para selecionar um novo avatar da galeria.</string>
+    <string name="could_not_disable_video">Não pôde desativar vídeo.</string>
+    <string name="unified_push_distributor">Distribuidor UnifiedPush</string>
+    <string name="call_is_using_wired_headset">Chamada está usando fone de ouvido com fio</string>
+    <string name="video_is_disabled_tap_to_enable">O vídeo está desativado. Toque para ativar.</string>
+    <string name="server_info_bind2">XEP-0386: Vinculação 2</string>
+    <string name="server_info_sasl2">XEP-0388: Perfil SASL extensível</string>
+    <string name="group_chats">Chats em grupo</string>
+    <string name="search_group_chats">Pesquisar chats em grupo</string>
+    <string name="quicksy_wants_your_consent">O Quicksy pede seu consentimento ao usar seus dados</string>
+    <string name="reconnect_on_other_host">Reconectar em outro host</string>
+    <string name="no_permission_to_place_call">Sem permissão para fazer uma ligação</string>
+    <string name="barcode_does_not_contain_fingerprints_for_this_chat">Este código de barras não contém impressões digitais para este chat.</string>
+    <string name="pref_dynamic_colors">Cores dinâmicas</string>
+    <string name="pref_dynamic_colors_summary">Cores do sistema (Material You)</string>
+    <string name="outdated_backup_file_format">Você está tentando importar um backup com um formato desatualizado</string>
+    <string name="incoming_call_duration_timestamp">Chamada recebida (%s) · %s</string>
+    <string name="outgoing_call_duration_timestamp">Chamada enviada (%s) · %s</string>
+    <string name="outgoing_call_timestamp">Chamada enviada · %s</string>
+    <string name="pref_up_push_account_title">Conta XMPP</string>
+    <string name="pref_up_push_account_summary">A conta pela qual mensagens push serão recebidas.</string>
+    <string name="pref_up_push_server_title">Servidor Push</string>
+    <string name="no_account_deactivated">Nenhuma (desativado)</string>
+    <string name="pref_category_interaction">Interação</string>
+    <string name="pref_category_on_this_device">No dispositivo</string>
+    <string name="pref_backup_recurring">Backup recorrente</string>
+    <string name="pref_fullscreen_notification">Notificações em tela cheia</string>
+    <string name="pref_fullscreen_notification_summary">Permitir que este app mostre notificações para chamadas recebidas que utilizam a tela inteira quando o dispositivo está bloqueado.</string>
+    <string name="edit_nick">Editar nome de usuário</string>
+    <string name="delete_pgp_key">Excluir chave OpenPGP</string>
+    <string name="edit_name_and_topic">Editar nome e tópico</string>
+    <string name="edit_configuration">Alterar configuração</string>
+    <string name="change_notification_settings">Alterar configurações de notificação</string>
+    <string name="call_is_using_earpiece">A chamada está usando o falante de ouvido.</string>
+    <string name="call_is_using_speaker">A chamada está usando o alto-falante.</string>
+    <string name="call_is_using_bluetooth">A chamada está usando o Bluetooth.</string>
+    <string name="flip_camera">Virar câmera</string>
+    <string name="server_info_login_mechanism">Mecanismo de login</string>
+    <string name="pref_notifications_summary">Período de espera, Toque, Vibração, Estranhos</string>
+    <string name="pref_allow_screenshots_summary">Mostrar o conteúdo do app no alternador de apps e permitir que a tela seja capturada</string>
+    <string name="detect_mim">Exigir vínculo do canal</string>
+    <string name="detect_mim_summary">A vinculação de canal pode detectar alguns ataques de máquina-no-meio</string>
+    <string name="pref_privacy_summary">Notificações de digitação, Visto por último, Dispôr</string>
+    <string name="pref_connection_summary">Nome do host e porta, Tor</string>
+    <string name="pref_connection_summary_w_cd">Nome do host e porta, Tor, Descoberta de Canais</string>
+    <string name="pref_keyboard_options">Teclado</string>
+    <string name="pref_category_engagement_notifications">Notificações de engajamento</string>
+    <string name="pref_category_application">Aplicação</string>
 </resources>

src/main/res/values-ro-rRO/strings.xml 🔗

@@ -1103,4 +1103,7 @@
     <string name="call_is_using_earpiece">Apelul folosește receptorul.</string>
     <string name="call_is_using_speaker_tap_to_switch_to_earpiece">Apelul folosește difuzorul. Atingeți pentru a trece la receptor.</string>
     <string name="call_is_using_earpiece_tap_to_switch_to_speaker">Apelul folosește receptorul. Atingeți pentru a trece la difuzor.</string>
+    <string name="server_info_bind2">XEP-0386: Bind 2</string>
+    <string name="server_info_sasl2">XEP-0388: Profil SASL extensibil</string>
+    <string name="server_info_login_mechanism">Mecanism autentificare</string>
 </resources>

src/main/res/values-ru/strings.xml 🔗

@@ -88,7 +88,7 @@
 \n
 \n<b>Предупреждение:</b> Данная операция не удалит копии этого файла, хранящиеся на других устройствах или серверах. </string>
     <string name="choose_presence">Выберите устройство</string>
-    <string name="send_unencrypted_message">Отправить сообщение чистым текстом</string>
+    <string name="send_unencrypted_message">Отправить сообщение без шифрования</string>
     <string name="send_message">Сообщение</string>
     <string name="send_message_to_x">Сообщение для %s</string>
     <string name="send_omemo_x509_message">v\\OMEMO-зашифр. сообщение</string>
@@ -464,7 +464,7 @@
     <string name="pref_dnd_on_silent_mode_summary">Устанавливает статус \"Не беспокоить\", когда устройство в беззвучном режиме</string>
     <string name="pref_treat_vibrate_as_silent">Не доступен в режиме вибрации</string>
     <string name="pref_treat_vibrate_as_dnd_summary">Устанавливает статус \"Не беспокоить\", когда устройство в режиме вибрации</string>
-    <string name="pref_show_connection_options">Имя хоста и Порт</string>
+    <string name="pref_show_connection_options">Имя хоста и порт</string>
     <string name="pref_show_connection_options_summary">Показывать расширенные настройки соединения при настройке аккаунта</string>
     <string name="hostname_example">xmpp.example.com</string>
     <string name="action_add_account_with_certificate">Авторизироваться с помощью сертификата</string>
@@ -557,7 +557,7 @@
     <string name="gp_short">Короткий</string>
     <string name="gp_medium">Средний</string>
     <string name="gp_long">Длинный</string>
-    <string name="pref_broadcast_last_activity">Оповещать других об использовании</string>
+    <string name="pref_broadcast_last_activity">Последняя активность</string>
     <string name="pref_broadcast_last_activity_summary">Позволяет вашим контактам видеть, когда вы в последний раз использовали приложение</string>
     <string name="pref_privacy">Приватность</string>
     <string name="pref_theme_options">Тема</string>
@@ -1096,4 +1096,14 @@
     <string name="pref_category_server_connection">Соединение с сервером</string>
     <string name="pref_accept_invites_from_strangers">Приглашения от незнакомцев</string>
     <string name="pref_category_engagement_notifications">Уведомления о взаимодействии</string>
+    <string name="server_info_login_mechanism">Способ входа</string>
+    <string name="call_is_using_earpiece_tap_to_switch_to_speaker">Звонок через наушники. Нажмите для переключения на динамик.</string>
+    <string name="call_is_using_speaker_tap_to_switch_to_earpiece">Звонок через динамик. Нажмите для переключения на наушники.</string>
+    <string name="video_is_disabled_tap_to_enable">Видео не активно. Нажмите для включения.</string>
+    <string name="call_is_using_earpiece">Звонок через наушники.</string>
+    <string name="call_is_using_wired_headset">Звонок через проводные наушники</string>
+    <string name="call_is_using_speaker">Звонок через динамик.</string>
+    <string name="call_is_using_bluetooth">Звонок через Bluetooth.</string>
+    <string name="flip_camera">Сменить камеру</string>
+    <string name="video_is_enabled_tap_to_disable">Видео активно. Нажмите для выключения.</string>
 </resources>

src/quicksy/res/values-pt-rBR/strings.xml 🔗

@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <string name="pref_notification_grace_period_summary">Espaço de tempo em que o Quicksy ficará sem notificações, após alguma atividade em outro dispositivo.</string>
-    <string name="pref_never_send_crash_summary">Ao enviar os stack traces você está colaborando com o desenvolvimento do Quicksy.</string>
-    <string name="pref_broadcast_last_activity_summary">Permite que todos os seus contatos saibam quando você usa o Quicksy.</string>
+    <string name="pref_notification_grace_period_summary">Espaço de tempo em que o Quicksy ficará sem notificações, após notar alguma atividade em outro dispositivo</string>
+    <string name="pref_never_send_crash_summary">Ao enviar stack traces você ajuda com o desenvolvimento do Quicksy</string>
+    <string name="pref_broadcast_last_activity_summary">Faça com que todos os seus contatos saibam quando você usa o Quicksy</string>
     <string name="huawei_protected_apps_summary">Para continuar recebendo notificações, mesmo com a tela apagada, você precisa adicionar o Quicksy à lista de apps protegidos.</string>
     <string name="set_profile_picture">Imagem de perfil do Quicksy</string>
     <string name="not_available_in_your_country">Quicksy agora está disponível no seu país.</string>
     <string name="unable_to_verify_server_identity">Não foi possível verificar a identidade do servidor.</string>
     <string name="unknown_security_error">Erro de segurança desconhecido.</string>
     <string name="timeout_while_connecting_to_server">Tempo esgotado ao tentar conectar ao servidor.</string>
-</resources>
+</resources>