aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java9
-rw-r--r--src/main/java/eu/siacs/conversations/crypto/axolotl/CryptoFailedException.java5
-rw-r--r--src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java14
-rw-r--r--src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlSession.java58
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java8
-rw-r--r--src/main/res/values-bg/strings.xml12
-rw-r--r--src/main/res/values-de/strings.xml30
-rw-r--r--src/main/res/values-it/strings.xml12
-rw-r--r--src/main/res/values-ja/strings.xml12
-rw-r--r--src/main/res/values-pl/strings.xml14
-rw-r--r--src/main/res/values-pt-rBR/strings.xml4
-rw-r--r--src/main/res/values-ro-rRO/strings.xml12
-rw-r--r--src/main/res/values-tr-rTR/strings.xml12
13 files changed, 155 insertions, 47 deletions
diff --git a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
index 99533afb..6bde0fe7 100644
--- a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
+++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
@@ -1122,7 +1122,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
session.resetPreKeyId();
}
} catch (CryptoFailedException e) {
- Log.w(Config.LOGTAG, getLogprefix(account) + "Failed to decrypt message: " + e.getMessage());
+ Log.w(Config.LOGTAG, getLogprefix(account) + "Failed to decrypt message from "+message.getFrom()+": " + e.getMessage());
}
if (session.isFresh() && plaintextMessage != null) {
@@ -1136,7 +1136,12 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
XmppAxolotlMessage.XmppAxolotlKeyTransportMessage keyTransportMessage;
XmppAxolotlSession session = getReceivingSession(message);
- keyTransportMessage = message.getParameters(session, getOwnDeviceId());
+ try {
+ keyTransportMessage = message.getParameters(session, getOwnDeviceId());
+ } catch (CryptoFailedException e) {
+ Log.d(Config.LOGTAG,"could not decrypt keyTransport message "+e.getMessage());
+ keyTransportMessage = null;
+ }
if (session.isFresh() && keyTransportMessage != null) {
putFreshSession(session);
diff --git a/src/main/java/eu/siacs/conversations/crypto/axolotl/CryptoFailedException.java b/src/main/java/eu/siacs/conversations/crypto/axolotl/CryptoFailedException.java
index 5796ef30..e549598c 100644
--- a/src/main/java/eu/siacs/conversations/crypto/axolotl/CryptoFailedException.java
+++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/CryptoFailedException.java
@@ -1,6 +1,11 @@
package eu.siacs.conversations.crypto.axolotl;
public class CryptoFailedException extends Exception {
+
+ public CryptoFailedException(String msg) {
+ super(msg);
+ }
+
public CryptoFailedException(Exception e){
super(e);
}
diff --git a/src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java b/src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java
index e5e7b203..cac298e0 100644
--- a/src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java
+++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java
@@ -250,16 +250,16 @@ public class XmppAxolotlMessage {
return encryptionElement;
}
- private byte[] unpackKey(XmppAxolotlSession session, Integer sourceDeviceId) {
+ private byte[] unpackKey(XmppAxolotlSession session, Integer sourceDeviceId) throws CryptoFailedException {
XmppAxolotlSession.AxolotlKey encryptedKey = keys.get(sourceDeviceId);
- return (encryptedKey != null) ? session.processReceiving(encryptedKey) : null;
+ if (encryptedKey == null) {
+ throw new CryptoFailedException("Message was not encrypted for this device");
+ }
+ return session.processReceiving(encryptedKey);
}
- public XmppAxolotlKeyTransportMessage getParameters(XmppAxolotlSession session, Integer sourceDeviceId) {
- byte[] key = unpackKey(session, sourceDeviceId);
- return (key != null)
- ? new XmppAxolotlKeyTransportMessage(session.getFingerprint(), key, getIV())
- : null;
+ public XmppAxolotlKeyTransportMessage getParameters(XmppAxolotlSession session, Integer sourceDeviceId) throws CryptoFailedException {
+ return new XmppAxolotlKeyTransportMessage(session.getFingerprint(), unpackKey(session, sourceDeviceId), getIV());
}
public XmppAxolotlPlaintextMessage decrypt(XmppAxolotlSession session, Integer sourceDeviceId) throws CryptoFailedException {
diff --git a/src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlSession.java b/src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlSession.java
index 938c19a4..359cb7fd 100644
--- a/src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlSession.java
+++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlSession.java
@@ -4,6 +4,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
+import org.bouncycastle.math.ec.PreCompInfo;
import org.whispersystems.libaxolotl.AxolotlAddress;
import org.whispersystems.libaxolotl.DuplicateMessageException;
import org.whispersystems.libaxolotl.IdentityKey;
@@ -18,9 +19,11 @@ import org.whispersystems.libaxolotl.UntrustedIdentityException;
import org.whispersystems.libaxolotl.protocol.CiphertextMessage;
import org.whispersystems.libaxolotl.protocol.PreKeyWhisperMessage;
import org.whispersystems.libaxolotl.protocol.WhisperMessage;
+import org.whispersystems.libaxolotl.util.guava.Optional;
import eu.siacs.conversations.Config;
import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.utils.CryptoHelper;
public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> {
private final SessionCipher cipher;
@@ -82,44 +85,43 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> {
}
@Nullable
- public byte[] processReceiving(AxolotlKey encryptedKey) {
- byte[] plaintext = null;
+ public byte[] processReceiving(AxolotlKey encryptedKey) throws CryptoFailedException {
+ byte[] plaintext;
FingerprintStatus status = getTrust();
if (!status.isCompromised()) {
try {
+ CiphertextMessage ciphertextMessage;
try {
- PreKeyWhisperMessage message = new PreKeyWhisperMessage(encryptedKey.key);
- if (!message.getPreKeyId().isPresent()) {
- Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "PreKeyWhisperMessage did not contain a PreKeyId");
- return null;
+ ciphertextMessage = new PreKeyWhisperMessage(encryptedKey.key);
+ Optional<Integer> optionalPreKeyId = ((PreKeyWhisperMessage) ciphertextMessage).getPreKeyId();
+ IdentityKey identityKey = ((PreKeyWhisperMessage) ciphertextMessage).getIdentityKey();
+ if (!optionalPreKeyId.isPresent()) {
+ throw new CryptoFailedException("PreKeyWhisperMessage did not contain a PreKeyId");
}
- Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "PreKeyWhisperMessage received, new session ID:" + message.getSignedPreKeyId() + "/" + message.getPreKeyId());
- IdentityKey msgIdentityKey = message.getIdentityKey();
- if (this.identityKey != null && !this.identityKey.equals(msgIdentityKey)) {
- Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Had session with fingerprint " + this.getFingerprint() + ", received message with fingerprint " + msgIdentityKey.getFingerprint());
- } else {
- this.identityKey = msgIdentityKey;
- plaintext = cipher.decrypt(message);
- preKeyId = message.getPreKeyId().get();
+ preKeyId = optionalPreKeyId.get();
+ if (this.identityKey != null && !this.identityKey.equals(identityKey)) {
+ throw new CryptoFailedException("Received PreKeyWhisperMessage but preexisting identity key changed.");
}
- } catch (InvalidMessageException | InvalidVersionException e) {
- Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "WhisperMessage received");
- WhisperMessage message = new WhisperMessage(encryptedKey.key);
- plaintext = cipher.decrypt(message);
- } catch (InvalidKeyException | InvalidKeyIdException | UntrustedIdentityException e) {
- Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error decrypting axolotl header, " + e.getClass().getName() + ": " + e.getMessage());
+ this.identityKey = identityKey;
+ } catch (InvalidVersionException | InvalidMessageException e) {
+ ciphertextMessage = new WhisperMessage(encryptedKey.key);
}
- } catch (LegacyMessageException | InvalidMessageException | DuplicateMessageException | NoSessionException e) {
- Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error decrypting axolotl header, " + e.getClass().getName() + ": " + e.getMessage());
- }
-
- if (plaintext != null) {
- if (!status.isActive()) {
- setTrust(status.toActive());
+ if (ciphertextMessage instanceof PreKeyWhisperMessage) {
+ plaintext = cipher.decrypt((PreKeyWhisperMessage) ciphertextMessage);
+ } else {
+ plaintext = cipher.decrypt((WhisperMessage) ciphertextMessage);
}
+ } catch (InvalidKeyException | LegacyMessageException | InvalidMessageException | DuplicateMessageException | NoSessionException | InvalidKeyIdException | UntrustedIdentityException e) {
+ if (!(e instanceof DuplicateMessageException)) {
+ e.printStackTrace();
+ }
+ throw new CryptoFailedException("Error decrypting WhisperMessage " + e.getClass().getSimpleName() + ": " + e.getMessage());
+ }
+ if (!status.isActive()) {
+ setTrust(status.toActive());
}
} else {
- Log.d(Config.LOGTAG,account.getJid().toBareJid()+" not encrypting omemo message from fingerprint "+getFingerprint()+" because it was marked as compromised");
+ throw new CryptoFailedException("not encrypting omemo message from fingerprint "+getFingerprint()+" because it was marked as compromised");
}
return plaintext;
}
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
index ce56e30c..6188b629 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
@@ -88,6 +88,12 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
}
}
};
+ private static final Linkify.MatchFilter WEBURL_MATCH_FILTER = new Linkify.MatchFilter() {
+ @Override
+ public boolean acceptMatch(CharSequence charSequence, int start, int end) {
+ return start < 1 || charSequence.charAt(start-1) != '@';
+ }
+ };
private ConversationActivity activity;
@@ -442,8 +448,8 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
privateMarkerIndex + 1 + nick.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
- Linkify.addLinks(body, Patterns.AUTOLINK_WEB_URL, "http", null, WEBURL_TRANSFORM_FILTER);
Linkify.addLinks(body, XMPP_PATTERN, "xmpp");
+ Linkify.addLinks(body, Patterns.AUTOLINK_WEB_URL, "http", WEBURL_MATCH_FILTER, WEBURL_TRANSFORM_FILTER);
Linkify.addLinks(body, GeoHelper.GEO_URI, "geo");
viewHolder.messageBody.setAutoLinkMask(0);
viewHolder.messageBody.setText(body);
diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml
index ef86c4a3..471fd732 100644
--- a/src/main/res/values-bg/strings.xml
+++ b/src/main/res/values-bg/strings.xml
@@ -332,6 +332,7 @@
<string name="message_options">Настройки за съобщенята</string>
<string name="copy_text">Копиране на текста</string>
<string name="select_text">Избиране на текста</string>
+ <string name="quote">Цитат</string>
<string name="copy_original_url">Копиране на оригиналния адрес</string>
<string name="send_again">Повторно изпращане</string>
<string name="file_url">Адрес на файла</string>
@@ -679,4 +680,15 @@
<string name="blindly_trusted_omemo_keys">Приети на сляпо ключове OMEMO</string>
<string name="not_trusted">Неприети</string>
<string name="invalid_barcode">Грешен 2-измерен баркод</string>
+ <string name="pref_clean_cache_summary">Изчистване на папката с кеша (използвана от камерата)</string>
+ <string name="pref_clean_cache">Изчистване на кеша</string>
+ <string name="pref_clean_private_storage">Изчистване на личното място за съхранение</string>
+ <string name="pref_clean_private_storage_summary">Изчистване на мястото, където се съхраняват личните файлове. (Те могат да бъдат повторно изтеглени от сървъра.)</string>
+ <string name="i_followed_this_link_from_a_trusted_source">Последвах тази връзка от доверено място</string>
+ <string name="verifying_omemo_keys_trusted_source">На път сте да потвърдите ключовете OMEMO на %1$s, след като сте щракнали връзка. Това е безопасна операция, само ако сте последвали тази връзка от доверено място, където само %2$s би могъл да я публикува.</string>
+ <string name="verify_omemo_keys">Потвърждаване на ключове OMEMO</string>
+ <string name="show_inactive_devices">Показване на неактивните устройства</string>
+ <string name="hide_inactive_devices">Скриване на неактивните устройства</string>
+ <string name="distrust_omemo_key">Сваляне на доверието</string>
+ <string name="distrust_omemo_key_text">Наистина ли искате да заличите потвърждението на това устройство?\nТова устройство и съобщенията, идващи от него, ще бъдат отбелязани като „непроверени“.</string>
</resources>
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index b9c1dd7a..8cd814f2 100644
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -332,6 +332,7 @@
<string name="message_options">Nachrichtenoptionen</string>
<string name="copy_text">Text kopieren</string>
<string name="select_text">Text markieren</string>
+ <string name="quote">Zitat</string>
<string name="copy_original_url">Original-URL kopieren</string>
<string name="send_again">Erneut senden</string>
<string name="file_url">Datei-URL</string>
@@ -478,7 +479,7 @@
<string name="received_location">Standort empfangen</string>
<string name="title_undo_swipe_out_conversation">Unterhaltung beendet</string>
<string name="title_undo_swipe_out_muc">Konferenz verlassen</string>
- <string name="pref_dont_trust_system_cas_title">Zertifizierungsstellen misstrauen</string>
+ <string name="pref_dont_trust_system_cas_title">Zertifizierungsstellen nicht vertrauen</string>
<string name="pref_dont_trust_system_cas_summary">Alle Zertifikate müssen manuell bestätigt werden</string>
<string name="pref_remove_trusted_certificates_title">Zertifikate löschen</string>
<string name="pref_remove_trusted_certificates_summary">Als vertrauenswürdig bestätigte Zertifikate löschen</string>
@@ -496,9 +497,9 @@
</plurals>
<string name="pref_quick_action_summary">Ersetze Absende-Knopf durch Schnell-Tasten</string>
<string name="pref_quick_action">Schnell-Tasten</string>
- <string name="none">keine</string>
- <string name="recently_used">zuletzt verwendet</string>
- <string name="choose_quick_action">wähle Schnell-Taste</string>
+ <string name="none">Keine</string>
+ <string name="recently_used">Zuletzt verwendet</string>
+ <string name="choose_quick_action">Wähle Schnell-Taste</string>
<string name="search_for_contacts_or_groups">Nach Kontakten oder Konferenzen suchen</string>
<string name="send_private_message">Private Nachricht senden</string>
<string name="user_has_left_conference">%s hat die Konferenz verlassen!</string>
@@ -540,7 +541,7 @@
<string name="jid_does_not_match_certificate">Jabber-ID stimmt nicht dem Zertifikat überein</string>
<string name="action_renew_certificate">Zertifikat erneuern</string>
<string name="error_fetching_omemo_key">Kann OMEMO-Schlüssel nicht empfangen!</string>
- <string name="verified_omemo_key_with_certificate">OMEMO-Schlüssel mit Zertifikat bestätigt!</string>
+ <string name="verified_omemo_key_with_certificate">Überprüfter OMEMO-Schlüssel mit Zertifikat!</string>
<string name="device_does_not_support_certificates">Dein Gerät unterstützt das Auswählen von Client-Zertifikaten nicht!</string>
<string name="pref_connection_options">Verbindung</string>
<string name="pref_use_tor">Über Tor verbinden</string>
@@ -654,7 +655,7 @@
<string name="wrong_conference_configuration">Dies ist keine private, nicht-anonyme Konferenz.</string>
<string name="this_conference_has_no_members">Diese Konferenz enthält keine Teilnehmer.</string>
<string name="report_jid_as_spammer">Melde die JID als Sender unerwünschter Nachrichten.</string>
- <string name="pref_delete_omemo_identities">OMEMO Identitäten zurücksetzen</string>
+ <string name="pref_delete_omemo_identities">OMEMO-Identitäten zurücksetzen</string>
<string name="pref_delete_omemo_identities_summary">Regeneriere deine OMEMO-Schlüssel. Alle deine Kontakte müssen dich neu verifizieren. Nutze dies als letzten Ausweg.</string>
<string name="delete_selected_keys">Ausgewählte Schlüssel löschen</string>
<string name="error_publish_avatar_offline">Du musst verbunden sein um deinen Avatar zu veröffentlichen</string>
@@ -664,9 +665,9 @@
<string name="data_saver_enabled_explained">Dein Betriebssystem verbietet Conversations im Hintergrund den Zugang zum Internet. Um Benachrichtigungen erhalten zu können, solltest du Conversations den Zugang erlauben, wenn der Datensparmodus aktiv ist. Conversations wird dennoch versuchen, so viele Daten wie möglich einzusparen.</string>
<string name="device_does_not_support_data_saver">Dein Gerät unterstützt den Datensparmodus für Conversations nicht.</string>
<string name="error_unable_to_create_temporary_file">Temporäre Datei kann nicht erstellt werden</string>
- <string name="this_device_has_been_verified">Dieses Gerät wurde verifiziert</string>
+ <string name="this_device_has_been_verified">Dieses Gerät wurde überprüft</string>
<string name="copy_fingerprint">Fingerabdruck kopieren</string>
- <string name="all_omemo_keys_have_been_verified">Alle OMEMO-Schlüssel wurden verifiziert</string>
+ <string name="all_omemo_keys_have_been_verified">Alle OMEMO-Schlüssel wurden überprüft</string>
<string name="barcode_does_not_contain_fingerprints_for_this_conversation">Barcode enthält keine Fingerabdrücke für diese Unterhaltung.</string>
<string name="verified_fingerprints">Überprüfte Fingerabdrücke</string>
<string name="use_camera_icon_to_scan_barcode">Nutze Kamera, um Barcodes deiner Kontakte zu scannen</string>
@@ -675,8 +676,19 @@
<string name="share_as_uri">Als XMPP URI teilen</string>
<string name="share_as_http">Als HTTP Link teilen</string>
<string name="pref_blind_trust_before_verification">Blind vertrauen vor der Überprüfung</string>
- <string name="pref_blind_trust_before_verification_summary">Vertraue automatisch allen neuen Geräten von Kontakten, die noch nicht überprüft wurden und zeige eine Aufforderung zur manuellen Bestätigung an, wenn ein verifizierter Kontakt ein neues Gerät hinzufügt.</string>
+ <string name="pref_blind_trust_before_verification_summary">Vertraue automatisch allen neuen Geräten von Kontakten, die noch nicht überprüft wurden und zeige eine Aufforderung zur manuellen Bestätigung an, wenn ein bereits überprüfter Kontakt ein neues Gerät hinzufügt.</string>
<string name="blindly_trusted_omemo_keys">Blind vertraute OMEMO-Schlüssel</string>
<string name="not_trusted">Nicht vertraut</string>
<string name="invalid_barcode">Ungültiger Barcode</string>
+ <string name="pref_clean_cache_summary">Lösche Cache-Ordner (wurde von der Kamera benutzt)</string>
+ <string name="pref_clean_cache">Lösche Cache</string>
+ <string name="pref_clean_private_storage">Lösche privaten Speicher</string>
+ <string name="pref_clean_private_storage_summary">Lösche privaten Speicher, in dem die Dateien gespeichert werden (sie können erneut vom Server heruntergeladen werden)</string>
+ <string name="i_followed_this_link_from_a_trusted_source">Ich habe diesen Link aus einer vertrauenswürdigen Quelle erhalten</string>
+ <string name="verifying_omemo_keys_trusted_source">Du bist dabei, die OMEMO-Schlüssel von %1$s nach dem Klick auf diesen Link zu überprüfen. Dies ist nur sicher, wenn du diesen Link von einer vertrauenswürdigen Quelle erhalten hast, der nur von %2$s veröffentlicht werden konnte.</string>
+ <string name="verify_omemo_keys">Überprüfe OMEMO-Schlüssel</string>
+ <string name="show_inactive_devices">Inaktive Geräte anzeigen</string>
+ <string name="hide_inactive_devices">Inaktive Geräte nicht anzeigen</string>
+ <string name="distrust_omemo_key">Gerät nicht mehr vertrauen</string>
+ <string name="distrust_omemo_key_text">Möchtest du die vorhandene Überprüfung für dieses Gerät löschen?\nDas Gerät und gesendete Nachrichten von diesem Gerät werden als nicht vertrauenswürdig markiert.</string>
</resources>
diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml
index 4ff787cf..1adbaef0 100644
--- a/src/main/res/values-it/strings.xml
+++ b/src/main/res/values-it/strings.xml
@@ -332,6 +332,7 @@
<string name="message_options">Opzioni del messaggio</string>
<string name="copy_text">Copia testo</string>
<string name="select_text">Seleziona testo</string>
+ <string name="quote">Quota</string>
<string name="copy_original_url">Copia URL originale</string>
<string name="send_again">Invia di nuovo</string>
<string name="file_url">URL del file</string>
@@ -679,4 +680,15 @@
<string name="blindly_trusted_omemo_keys">Chiavi OMEMO fidate ciecamente</string>
<string name="not_trusted">Non fidato</string>
<string name="invalid_barcode">Codice a barre 2D non valido</string>
+ <string name="pref_clean_cache_summary">Svuota la cartella della cache (usata dall\'app fotocamera)</string>
+ <string name="pref_clean_cache">Svuota cache</string>
+ <string name="pref_clean_private_storage">Svuota archivio privato</string>
+ <string name="pref_clean_private_storage_summary">Svuota l\'archivio privato nella quale sono memorizzati i file (possono essere riscaricati dal server)</string>
+ <string name="i_followed_this_link_from_a_trusted_source">Ho seguito questo link da una fonte fidata</string>
+ <string name="verifying_omemo_keys_trusted_source">Stai per verificare le chiavi OMEMO di %1$s cliccando un link. Questo metodo è sicuro solo se hai seguito il link da una fonte fidata dove solo %2$s può averlo pubblicato.</string>
+ <string name="verify_omemo_keys">Verifica chiavi OMEMO</string>
+ <string name="show_inactive_devices">Mostra dispositivi inattivi</string>
+ <string name="hide_inactive_devices">Nascondi dispositivi inattivi</string>
+ <string name="distrust_omemo_key">Diffida il dispositvo</string>
+ <string name="distrust_omemo_key_text">Sei sicuro di volere rimuovere la verifica per questo dispositivo?\nIl dispositivo e i messaggi provenienti da esso verranno segnati come non fidati.</string>
</resources>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index 047f9b0e..5573dd32 100644
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -332,6 +332,7 @@
<string name="message_options">メッセージオプション</string>
<string name="copy_text">テキストをコピー</string>
<string name="select_text">テキストを選択</string>
+ <string name="quote">引用</string>
<string name="copy_original_url">元の URL をコピー</string>
<string name="send_again">再送</string>
<string name="file_url">ファイル URL</string>
@@ -676,4 +677,15 @@
<string name="blindly_trusted_omemo_keys">OMEMO 鍵を白紙信託しました</string>
<string name="not_trusted">信頼されていない</string>
<string name="invalid_barcode">不正な 2D バーコード</string>
+ <string name="pref_clean_cache_summary">キャッシュフォルダーをクリアします (カメラアプリケーションで使用)</string>
+ <string name="pref_clean_cache">キャッシュをクリア</string>
+ <string name="pref_clean_private_storage">プライベートストレージをクリア</string>
+ <string name="pref_clean_private_storage_summary">ファイルが保存されているプライベートストレージをクリアします (サーバーから再ダウンロードできます)</string>
+ <string name="i_followed_this_link_from_a_trusted_source">信頼できるソースからこのリンクをたどりました</string>
+ <string name="verifying_omemo_keys_trusted_source">リンクをクリックした後、%1$s の OMEMO 鍵を検証しようとしています。 これは、%2$s がこのリンクを公開した、信頼できるソースからこのリンクをたどった場合にのみ安全です。</string>
+ <string name="verify_omemo_keys">OMEMO 鍵を検証</string>
+ <string name="show_inactive_devices">非アクティブのデバイスを表示</string>
+ <string name="hide_inactive_devices">非アクティブのデバイスを非表示</string>
+ <string name="distrust_omemo_key">信頼できないデバイス</string>
+ <string name="distrust_omemo_key_text">このデバイスの検証を削除してもよろしいですか?\nこのデバイスと、そのデバイスからのメッセージは信頼できないとマークされます。</string>
</resources>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index 351dab9c..c6fc40a3 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -625,6 +625,9 @@
<string name="choose_participants">Wybierz członków</string>
<string name="creating_conference">Tworzenie konferencji...</string>
<string name="invite_again">Zaproś ponownie</string>
+ <string name="gp_short">Krótki</string>
+ <string name="gp_medium">Średni</string>
+ <string name="gp_long">Długi</string>
<string name="pref_broadcast_last_activity">Dziel się ostatnią interakcją.</string>
<string name="pref_broadcast_last_activity_summary">Powiadamiaj kontakty, że używasz Conversations</string>
<string name="pref_privacy">Prywatność</string>
@@ -681,4 +684,15 @@ Conversations będzie wciąż ograniczał transfer danych, kiedy tylko to jest m
<string name="blindly_trusted_omemo_keys">Ślepo ufaj kluczom OMEMO</string>
<string name="not_trusted">Niezaufane</string>
<string name="invalid_barcode">Nieprawidłowy kod kreskowy 2D</string>
+ <string name="pref_clean_cache_summary">Wyczyść cache (używane przez kamerę)</string>
+ <string name="pref_clean_cache">Wyczyść cache</string>
+ <string name="pref_clean_private_storage">Wyczyść prywatny magazyn</string>
+ <string name="pref_clean_private_storage_summary">Wyczyść prywatny magazyn gdzie trzymane są pliki (mogą zostać pobrane ponownie z serwera)</string>
+ <string name="i_followed_this_link_from_a_trusted_source">Trafiłem na ten link w zaufanym źródle</string>
+ <string name="verifying_omemo_keys_trusted_source">Zaraz zweryfikujesz klucz OMEMO %1$s klikając w link. Jest to bezpieczne jedynie, kiedy link pochodzi z zaufanego źródła gdzie tylko %2$s mógł go opublikować.</string>
+ <string name="verify_omemo_keys">Zweryfikuj klucze OMEMO</string>
+ <string name="show_inactive_devices">Pokaż nieaktywne urządzenia</string>
+ <string name="hide_inactive_devices">Ukryj nieaktywne urządzenia</string>
+ <string name="distrust_omemo_key">Przestań ufać urządzeniu</string>
+ <string name="distrust_omemo_key_text">Czy jesteś pewien, że chcesz cofnąć weryfikację tego urządzenia?\nUrządzenie to, i wiadomości z niego przychodzące będą oznaczane jako niezaufane.</string>
</resources>
diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml
index 577eb78e..896351d5 100644
--- a/src/main/res/values-pt-rBR/strings.xml
+++ b/src/main/res/values-pt-rBR/strings.xml
@@ -332,6 +332,7 @@
<string name="message_options">Opções da mensagem</string>
<string name="copy_text">Copiar o texto</string>
<string name="select_text">Selecionar o texto</string>
+ <string name="quote">Citar</string>
<string name="copy_original_url">Copiar a URL original</string>
<string name="send_again">Enviar novamente</string>
<string name="file_url">URL do arquivo</string>
@@ -679,4 +680,7 @@
<string name="blindly_trusted_omemo_keys">Chaves OMEMO aceitas cegamente</string>
<string name="not_trusted">Não confiável</string>
<string name="invalid_barcode">Código de barras 2D inválido</string>
+ <string name="pref_clean_cache_summary">Limpar a pasta de cache (usado pela aplicação de câmera)</string>
+ <string name="pref_clean_cache">Limpar o cache</string>
+ <string name="pref_clean_private_storage">Limpar o armazenamento privado</string>
</resources>
diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml
index e11811c6..cbe51e61 100644
--- a/src/main/res/values-ro-rRO/strings.xml
+++ b/src/main/res/values-ro-rRO/strings.xml
@@ -332,6 +332,7 @@
<string name="message_options">Optiuni mesaje</string>
<string name="copy_text">Copiaza text</string>
<string name="select_text">Selecteaza text</string>
+ <string name="quote">Citeaza</string>
<string name="copy_original_url">Copiaza URL original</string>
<string name="send_again">Trimite din nou</string>
<string name="file_url">URL fisier</string>
@@ -683,4 +684,15 @@ Emitent</string>
<string name="blindly_trusted_omemo_keys">Incredere oarba in aceste chei OMEMO</string>
<string name="not_trusted">De neincredere</string>
<string name="invalid_barcode">Cod de bare 2D invalid</string>
+ <string name="pref_clean_cache_summary">Locul unde sunt pozele temporar salvate (folosit de aplicatia camera foto)</string>
+ <string name="pref_clean_cache">Curata memoria temporara</string>
+ <string name="pref_clean_private_storage">Curata stocarea privata</string>
+ <string name="pref_clean_private_storage_summary">Locul unde sunt fisierele pastrate (pot fi descarcate de pe server din nou)</string>
+ <string name="i_followed_this_link_from_a_trusted_source">Am urmat aceasta legatura de la o sursa de incredere</string>
+ <string name="verifying_omemo_keys_trusted_source">Urmeaza sa verificati cheile OMEMO pentru %1$s dupa ce veti deschide legatura. Acest lucru se poate face in siguranta doar daca ati primit legatura de la o sursa de incredere unde doar %2$s putea publica.</string>
+ <string name="verify_omemo_keys">Verifica cheile OMEMO</string>
+ <string name="show_inactive_devices">Arata dispozitivele inactive</string>
+ <string name="hide_inactive_devices">Ascunde dispozitivele inactive</string>
+ <string name="distrust_omemo_key">Pierde increderea in acest dispozitiv</string>
+ <string name="distrust_omemo_key_text">Sigur doriti sa stergeti datele de verificare pentru acest dispozitiv?\nAcest dispozitiv precum si mesajele venind de la el vor fi marcate ca ne fiind de incredere.</string>
</resources>
diff --git a/src/main/res/values-tr-rTR/strings.xml b/src/main/res/values-tr-rTR/strings.xml
index 54958bde..5a4f8728 100644
--- a/src/main/res/values-tr-rTR/strings.xml
+++ b/src/main/res/values-tr-rTR/strings.xml
@@ -332,6 +332,7 @@
<string name="message_options">İleti seçenekleri</string>
<string name="copy_text">Metni kopyala</string>
<string name="select_text">Metni seç</string>
+ <string name="quote">Alıntı</string>
<string name="copy_original_url">Orijinal URL\'i kopyala</string>
<string name="send_again">Yeniden gönder</string>
<string name="file_url">Dosya URL</string>
@@ -676,4 +677,15 @@
<string name="blindly_trusted_omemo_keys">Körü körüne güvenilen OMEMO anahtarları</string>
<string name="not_trusted">Güvenilmeyen</string>
<string name="invalid_barcode">Geçersiz 2D barkod</string>
+ <string name="pref_clean_cache_summary">Önbellek dizinini temizle (Kamera uygulamasının kullandığı)</string>
+ <string name="pref_clean_cache">Önbelleği temizle</string>
+ <string name="pref_clean_private_storage">Özel depolama alanını temizle</string>
+ <string name="pref_clean_private_storage_summary">Dosyaların tutulduğu özel depolama alanını temizle (Sunucu üzerinden tekrar indirilebilir)</string>
+ <string name="i_followed_this_link_from_a_trusted_source">Bu bağlantıyı güvenilir bir kaynaktan takip ettim</string>
+ <string name="verifying_omemo_keys_trusted_source">Bir bağlantıyı tıkladıktan sonra %1$s in OMEMO anahtarını doğrulamış olacaksınız. Bu yalnızca bağlantının %2$s tarafından yayınladığından eminseniz güvenlidir.</string>
+ <string name="verify_omemo_keys">OMEMO anahtarlarını doğrula</string>
+ <string name="show_inactive_devices">Aktif olmayan cihazları göster</string>
+ <string name="hide_inactive_devices">Aktif olmayan cihazları gizle</string>
+ <string name="distrust_omemo_key">Güvensiz aygıt</string>
+ <string name="distrust_omemo_key_text">Bu cihazın doğrulamasını kaldırmak istediğinizden emin misiniz? \ Bu cihaz ve cihazdan gelen mesajlar güvenilmez olarak işaretlenecektir.</string>
</resources>