Merge branch 'master' of github.com:iNPUTmice/Conversations

Stephen Paul Weber created

* 'master' of github.com:iNPUTmice/Conversations:
  pulled translations from transifex
  catch security exception when importing backup
  pulled translations from transifex
  bump libraries
  show jid only for incoming calls during ringing
  version bump to 2.10.3-beta.2
  Enable WebRTC-BindUsingInterfaceName/Enabled/
  pulled translations from transifex
  be smarter about what files can be deleted
  use libwebrtc m99
  allow deletion of all files

Change summary

.github/workflows/android.yml                                              |  2 
build.gradle                                                               | 12 
src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java |  2 
src/main/java/eu/siacs/conversations/persistance/FileBackend.java          | 54 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java          |  2 
src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java            | 26 
src/main/res/layout/activity_rtp_session.xml                               |  9 
src/main/res/values-de/strings.xml                                         | 10 
src/main/res/values-gl/strings.xml                                         | 10 
src/main/res/values-it/strings.xml                                         | 10 
src/main/res/values-pl/strings.xml                                         | 10 
src/main/res/values-ro-rRO/strings.xml                                     | 10 
src/main/res/values-zh-rCN/strings.xml                                     | 10 
13 files changed, 131 insertions(+), 36 deletions(-)

Detailed changes

.github/workflows/android.yml 🔗

@@ -19,7 +19,7 @@ jobs:
         java-version: '11'
         distribution: 'adopt'
     - name: Download WebRTC
-      run: mkdir libs && wget -O libs/libwebrtc-m92.aar https://gultsch.de/files/libwebrtc-m92.aar
+      run: mkdir libs && wget -O libs/libwebrtc-m99.aar https://gultsch.de/files/libwebrtc-m99.aar
     - name: Grant execute permission for gradlew
       run: chmod +x gradlew
     - name: Build Quicksy

build.gradle 🔗

@@ -74,8 +74,8 @@ dependencies {
     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
     implementation 'com.google.android.material:material:1.4.0'
 
-    implementation "androidx.emoji2:emoji2:1.1.0-rc01"
-    freeImplementation "androidx.emoji2:emoji2-bundled:1.1.0-rc01"
+    implementation "androidx.emoji2:emoji2:1.1.0"
+    freeImplementation "androidx.emoji2:emoji2-bundled:1.1.0"
 
     implementation 'org.bouncycastle:bcmail-jdk15on:1.64'
     //zxing stopped supporting Java 7 so we have to stick with 3.3.3
@@ -88,8 +88,8 @@ dependencies {
     implementation "com.wefika:flowlayout:0.4.1"
     implementation 'com.otaliastudios:transcoder:0.10.4'
 
-    implementation 'org.jxmpp:jxmpp-jid:1.0.2'
-    implementation 'org.osmdroid:osmdroid-android:6.1.10'
+    implementation 'org.jxmpp:jxmpp-jid:1.0.3'
+    implementation 'org.osmdroid:osmdroid-android:6.1.11'
     implementation 'org.hsluv:hsluv:0.2'
     implementation 'org.conscrypt:conscrypt-android:2.5.2'
     implementation 'me.drakeet.support:toastcompat:1.1.0'
@@ -117,8 +117,8 @@ android {
     compileSdkVersion 31
 
     defaultConfig {
-        minSdkVersion 24
-        targetSdkVersion 29
+        minSdkVersion 21
+        targetSdkVersion 30
         versionCode 42024 + grgit.tag.list().size()
         versionName grgit.describe(tags: true, always: true)
         applicationId "eu.siacs.conversations"

src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java 🔗

@@ -134,6 +134,8 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo
         } catch (final IOException | IllegalArgumentException e) {
             Log.d(Config.LOGTAG, "unable to open backup file " + uri, e);
             Snackbar.make(binding.coordinator, R.string.not_a_backup_file, Snackbar.LENGTH_LONG).show();
+        } catch (final SecurityException e) {
+            Snackbar.make(binding.coordinator, R.string.sharing_application_not_grant_permission, Snackbar.LENGTH_LONG).show();
         }
     }
 

src/main/java/eu/siacs/conversations/persistance/FileBackend.java 🔗

@@ -37,6 +37,7 @@ import androidx.core.content.FileProvider;
 import androidx.exifinterface.media.ExifInterface;
 
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
 import com.google.common.io.ByteStreams;
 
 import java.io.ByteArrayOutputStream;
@@ -87,21 +88,38 @@ public class FileBackend {
     private static final float IGNORE_PADDING = 0.15f;
     private final XmppConnectionService mXmppConnectionService;
 
+    private static final List<String> STORAGE_TYPES;
+
+    static {
+        final ImmutableList.Builder<String> builder =
+                new ImmutableList.Builder<String>()
+                        .add(
+                                Environment.DIRECTORY_DOWNLOADS,
+                                Environment.DIRECTORY_PICTURES,
+                                Environment.DIRECTORY_MOVIES,
+                                Environment.DIRECTORY_DOCUMENTS);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+            builder.add(Environment.DIRECTORY_RECORDINGS);
+        }
+        STORAGE_TYPES = builder.build();
+    }
+
     public FileBackend(XmppConnectionService service) {
         this.mXmppConnectionService = service;
     }
 
     public static long getFileSize(Context context, Uri uri) {
-        try {
-            final Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
+        try (final Cursor cursor =
+                context.getContentResolver().query(uri, null, null, null, null)) {
             if (cursor != null && cursor.moveToFirst()) {
-                long size = cursor.getLong(cursor.getColumnIndex(OpenableColumns.SIZE));
-                cursor.close();
-                return size;
-            } else {
-                return -1;
+                final int index = cursor.getColumnIndex(OpenableColumns.SIZE);
+                if (index == -1) {
+                    return -1;
+                }
+                return cursor.getLong(index);
             }
-        } catch (Exception e) {
+            return -1;
+        } catch (final Exception ignored) {
             return -1;
         }
     }
@@ -366,8 +384,12 @@ public class FileBackend {
     }
 
     private static boolean weOwnFileLollipop(final Uri uri) {
+        final String path = uri.getPath();
+        if (path == null) {
+            return false;
+        }
         try {
-            File file = new File(uri.getPath());
+            File file = new File(path);
             FileDescriptor fd =
                     ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
                             .getFileDescriptor();
@@ -862,6 +884,20 @@ public class FileBackend {
         return new File(appDirectory, filename);
     }
 
+    public static boolean inConversationsDirectory(final Context context, String path) {
+        final File fileDirectory = new File(path).getParentFile();
+        for (final String type : STORAGE_TYPES) {
+            final File typeDirectory =
+                    new File(
+                            Environment.getExternalStoragePublicDirectory(type),
+                            context.getString(R.string.app_name));
+            if (typeDirectory.equals(fileDirectory)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public void setupRelativeFilePath(
             final Message message, final String filename, final String mime) {
         final File file = getStorageLocation(filename, mime);

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -1185,7 +1185,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
             }
             if (m.isFileOrImage() && !deleted && !cancelable) {
                 final String path = m.getRelativeFilePath();
-                if (path == null || !path.startsWith("/")) {
+                if (path == null || !path.startsWith("/") || FileBackend.inConversationsDirectory(requireActivity(), path)) {
                     deleteFile.setVisible(true);
                     deleteFile.setTitle(activity.getString(R.string.delete_x_file, UIHelper.getFileDescriptionString(activity, m)));
                 }

src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java 🔗

@@ -432,7 +432,7 @@ public class RtpSessionActivity extends XmppActivity
             }
         } else if (asList(ACTION_MAKE_VIDEO_CALL, ACTION_MAKE_VOICE_CALL).contains(action)) {
             proposeJingleRtpSession(account, with, actionToMedia(action));
-            setWith(account.getRoster().getContact(with));
+            setWith(account.getRoster().getContact(with), null);
         } else {
             throw new IllegalStateException("received onNewIntent without sessionId");
         }
@@ -456,7 +456,7 @@ public class RtpSessionActivity extends XmppActivity
             }
         } else if (asList(ACTION_MAKE_VIDEO_CALL, ACTION_MAKE_VOICE_CALL).contains(action)) {
             proposeJingleRtpSession(account, with, actionToMedia(action));
-            setWith(account.getRoster().getContact(with));
+            setWith(account.getRoster().getContact(with), null);
         } else if (Intent.ACTION_VIEW.equals(action)) {
             final String extraLastState = intent.getStringExtra(EXTRA_LAST_REPORTED_STATE);
             final RtpEndUserState state =
@@ -469,7 +469,7 @@ public class RtpSessionActivity extends XmppActivity
                 updateIncomingCallScreen(state);
                 invalidateOptionsMenu();
             }
-            setWith(account.getRoster().getContact(with));
+            setWith(account.getRoster().getContact(with), state);
             if (xmppConnectionService
                     .getJingleConnectionManager()
                     .fireJingleRtpConnectionStateUpdates()) {
@@ -486,13 +486,19 @@ public class RtpSessionActivity extends XmppActivity
         }
     }
 
-    private void setWith() {
-        setWith(getWith());
+    private void setWith(final RtpEndUserState state) {
+        setWith(getWith(), state);
     }
 
-    private void setWith(final Contact contact) {
+    private void setWith(final Contact contact, final RtpEndUserState state) {
         binding.with.setText(contact.getDisplayName());
-        binding.withJid.setText(contact.getJid().asBareJid().toEscapedString());
+        if (Arrays.asList(RtpEndUserState.INCOMING_CALL, RtpEndUserState.ACCEPTING_CALL)
+                .contains(state)) {
+            binding.withJid.setText(contact.getJid().asBareJid().toEscapedString());
+            binding.withJid.setVisibility(View.VISIBLE);
+        } else {
+            binding.withJid.setVisibility(View.GONE);
+        }
     }
 
     private void proposeJingleRtpSession(
@@ -698,7 +704,7 @@ public class RtpSessionActivity extends XmppActivity
                 requireRtpConnection().getState())) {
             putScreenInCallMode();
         }
-        setWith();
+        setWith(currentState);
         updateVideoViews(currentState);
         updateStateDisplay(currentState, media);
         updateVerifiedShield(verified && STATES_SHOWING_SWITCH_TO_CHAT.contains(currentState));
@@ -717,7 +723,7 @@ public class RtpSessionActivity extends XmppActivity
             finish();
             return;
         }
-        RtpEndUserState state = terminatedRtpSession.state;
+        final RtpEndUserState state = terminatedRtpSession.state;
         resetIntent(account, with, terminatedRtpSession.state, terminatedRtpSession.media);
         updateButtonConfiguration(state);
         updateStateDisplay(state);
@@ -725,7 +731,7 @@ public class RtpSessionActivity extends XmppActivity
         updateCallDuration();
         updateVerifiedShield(false);
         invalidateOptionsMenu();
-        setWith(account.getRoster().getContact(with));
+        setWith(account.getRoster().getContact(with), state);
     }
 
     private void reInitializeActivityWithRunningRtpSession(

src/main/res/layout/activity_rtp_session.xml 🔗

@@ -53,24 +53,27 @@
                 android:layout_height="wrap_content"
                 android:layout_below="@id/status"
                 android:layout_marginLeft="16dp"
-                android:layout_marginTop="0dp"
                 android:layout_marginRight="16dp"
-                android:layout_marginBottom="8dp"
                 android:textAppearance="@style/TextAppearance.Conversations.Display2"
                 android:textColor="@color/white"
                 tools:text="Juliet Capulet" />
             <TextView
+                android:visibility="visible"
                 android:id="@+id/with_jid"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/status"
+                android:layout_marginTop="8dp"
                 android:layout_marginLeft="16dp"
                 android:layout_marginRight="16dp"
-                android:layout_marginBottom="32dp"
                 android:textAppearance="@style/TextAppearance.Conversations.Body1"
                 android:textColor="@color/white"
                 tools:text="jcapulet@example.com" />
 
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="32dp"/>
+
         </com.google.android.material.appbar.AppBarLayout>
 
         <RelativeLayout

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

@@ -622,6 +622,8 @@
     <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="verifying_omemo_keys_trusted_source_account">Du bist dabei, die OMEMO-Schlüssel deines eigenen Kontos zu verifizieren. Dies ist nur sicher, wenn du diesem Link aus einer vertrauenswürdigen Quelle gefolgt bist, bei der nur du diesen Link veröffentlicht haben kannst.</string>
+    <string name="continue_btn">Weiter</string>
     <string name="verify_omemo_keys">Überprüfe OMEMO-Schlüssel</string>
     <string name="show_inactive_devices">Inaktive anzeigen</string>
     <string name="hide_inactive_devices">Inaktive ausblenden</string>
@@ -904,6 +906,7 @@
     <string name="rtp_state_incoming_video_call">Eingehender Videoanruf</string>
     <string name="rtp_state_connecting">Verbinden</string>
     <string name="rtp_state_connected">Verbunden</string>
+    <string name="rtp_state_reconnecting">Erneut verbinden</string>
     <string name="rtp_state_accepting_call">Anruf annehmen</string>
     <string name="rtp_state_ending_call">Anruf beenden</string>
     <string name="answer_call">Annehmen</string>
@@ -919,6 +922,8 @@
     <string name="hang_up">Auflegen</string>
     <string name="ongoing_call">Laufender Anruf</string>
     <string name="ongoing_video_call">Laufender Videoanruf</string>
+    <string name="reconnecting_call">Anruf erneut verbinden</string>
+    <string name="reconnecting_video_call">Videoanruf erneut verbinden</string>
     <string name="disable_tor_to_make_call">Deaktiviere Tor, um Anrufe zu tätigen</string>
     <string name="incoming_call">Eingehender Anruf</string>
     <string name="incoming_call_duration">Eingehender Anruf · %s</string>
@@ -968,4 +973,7 @@
     <string name="backup_started_message">Die Sicherung wurde gestartet. Du bekommst eine Benachrichtigung, sobald sie fertig ist.</string>
     <string name="unable_to_enable_video">Video kann nicht aktiviert werden.</string>
     <string name="plain_text_document">Textdokument</string>
-    </resources>
+    <string name="account_registrations_are_not_supported">Kontoregistrierungen werden nicht unterstützt</string>
+    <string name="no_xmpp_adddress_found">Keine XMPP-Adresse gefunden</string>
+
+</resources>

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

@@ -622,6 +622,8 @@
     <string name="pref_clean_private_storage_summary">Baleirar a almacenaxe privada onde se gardan os ficheiros (poderán volver a descargarse desde o servidor)</string>
     <string name="i_followed_this_link_from_a_trusted_source">Seguín esta ligazón desde unha fonte de confianza</string>
     <string name="verifying_omemo_keys_trusted_source">Vas verificar as chaves OMEMO de %1$s despois de premer na ligazón. Esto só é seguro se seguiches esta ligazón desde unha fonte de confianza onde só %2$s a podería ter publicado.</string>
+    <string name="verifying_omemo_keys_trusted_source_account">Vas verificar as chaves OMEMO da túa propia conta. Esto só é seguro se seguiches esta ligazón desde unha orixe segura onde só tí poderías ter publicado esta ligazón.</string>
+    <string name="continue_btn">Continuar</string>
     <string name="verify_omemo_keys">Validar chaves OMEMO</string>
     <string name="show_inactive_devices">Mostrar inactivos</string>
     <string name="hide_inactive_devices">Agochar inactivos</string>
@@ -904,6 +906,7 @@
     <string name="rtp_state_incoming_video_call">Videochamada entrante</string>
     <string name="rtp_state_connecting">Conectando</string>
     <string name="rtp_state_connected">Conectado</string>
+    <string name="rtp_state_reconnecting">Reconectando</string>
     <string name="rtp_state_accepting_call">Aceptando a chamada</string>
     <string name="rtp_state_ending_call">Rematando a chamada</string>
     <string name="answer_call">Responder</string>
@@ -919,6 +922,8 @@
     <string name="hang_up">Colgar</string>
     <string name="ongoing_call">Chamada en curso</string>
     <string name="ongoing_video_call">Videochamada en curso</string>
+    <string name="reconnecting_call">Reconectando a chamada</string>
+    <string name="reconnecting_video_call">Reconectando a videochamada</string>
     <string name="disable_tor_to_make_call">Desactivar Tor para facer chamadas</string>
     <string name="incoming_call">Chamada entrante</string>
     <string name="incoming_call_duration">Conversa de · %s</string>
@@ -968,4 +973,7 @@
     <string name="backup_started_message">Comezou a creación da copia de apoio. Recibirás unha notificación cando remate.</string>
     <string name="unable_to_enable_video">Non se puido activar o vídeo.</string>
     <string name="plain_text_document">Documento de texto plano</string>
-    </resources>
+    <string name="account_registrations_are_not_supported">Non está permitido o rexistro de novas contas</string>
+    <string name="no_xmpp_adddress_found">Non se atopa un enderezo XMPP</string>
+
+</resources>

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

@@ -622,6 +622,8 @@
     <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="verifying_omemo_keys_trusted_source_account">Stai per verificare le chiavi OMEMO del tuo stesso account. Questo metodo è sicuro solo se hai seguito il link da una fonte fidata dove solo tu puoi averlo pubblicato.</string>
+    <string name="continue_btn">Continua</string>
     <string name="verify_omemo_keys">Verifica chiavi OMEMO</string>
     <string name="show_inactive_devices">Mostra inattivi</string>
     <string name="hide_inactive_devices">Nascondi inattivi</string>
@@ -904,6 +906,7 @@
     <string name="rtp_state_incoming_video_call">Chiamata video in arrivo</string>
     <string name="rtp_state_connecting">Connessione</string>
     <string name="rtp_state_connected">Connesso</string>
+    <string name="rtp_state_reconnecting">Riconnessione</string>
     <string name="rtp_state_accepting_call">Accettazione chiamata</string>
     <string name="rtp_state_ending_call">Chiusura chiamata</string>
     <string name="answer_call">Rispondi</string>
@@ -919,6 +922,8 @@
     <string name="hang_up">Riaggancia</string>
     <string name="ongoing_call">Chiamata in corso</string>
     <string name="ongoing_video_call">Chiamata video in corso</string>
+    <string name="reconnecting_call">Riconnessione chiamata</string>
+    <string name="reconnecting_video_call">Riconnessione chiamata video</string>
     <string name="disable_tor_to_make_call">Disattiva Tor per le chiamate</string>
     <string name="incoming_call">Chiamata in arrivo</string>
     <string name="incoming_call_duration">Chiamata in arrivo · %s</string>
@@ -968,4 +973,7 @@
     <string name="backup_started_message">Il backup è iniziato. Riceverai una notifica una volta completato.</string>
     <string name="unable_to_enable_video">Impossibile attivare il video.</string>
     <string name="plain_text_document">Documento di testo</string>
-    </resources>
+    <string name="account_registrations_are_not_supported">Le registrazioni di profili non sono supportate</string>
+    <string name="no_xmpp_adddress_found">Nessun indirizzo XMPP trovato</string>
+
+</resources>

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

@@ -632,6 +632,8 @@
     <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="verifying_omemo_keys_trusted_source_account">Weryfikujesz właśnie klucze OMEMO własnego konta. To jest bezpieczne tylko jeśli kliknąłeś łącze w miejscu w którym jedynie ty mogłeś je zamieścić. </string>
+    <string name="continue_btn">Kontynuuj</string>
     <string name="verify_omemo_keys">Zweryfikuj klucze OMEMO</string>
     <string name="show_inactive_devices">Pokaż nieaktywne</string>
     <string name="hide_inactive_devices">Ukryj nieaktywne</string>
@@ -927,6 +929,7 @@ Administrator twojego serwera będzie mógł czytać twoje wiadomości, ale moż
     <string name="rtp_state_incoming_video_call">Wideorozmowa przychodząca</string>
     <string name="rtp_state_connecting">Łączenie</string>
     <string name="rtp_state_connected">Połączony</string>
+    <string name="rtp_state_reconnecting">Ponowne łączenie</string>
     <string name="rtp_state_accepting_call">Akceptowanie połączenia</string>
     <string name="rtp_state_ending_call">Kończenie połączenia</string>
     <string name="answer_call">Połącz</string>
@@ -942,6 +945,8 @@ Administrator twojego serwera będzie mógł czytać twoje wiadomości, ale moż
     <string name="hang_up">Rozłącz</string>
     <string name="ongoing_call">Połączenie wychodzące</string>
     <string name="ongoing_video_call">Wideorozmowa wychodząca</string>
+    <string name="reconnecting_call">Ponowne łączenie rozmowy</string>
+    <string name="reconnecting_video_call">Ponowne łączenie rozmowy wideo</string>
     <string name="disable_tor_to_make_call">Wyłącz Tor aby dzwonić</string>
     <string name="incoming_call">Połączenie przychodzące</string>
     <string name="incoming_call_duration">Połączenie przychodzące · %s</string>
@@ -995,4 +1000,7 @@ Administrator twojego serwera będzie mógł czytać twoje wiadomości, ale moż
     <string name="backup_started_message">Tworzenie kopii zapasowej się rozpoczęło. Dostaniesz powiadomienie kiedy się zakończy. </string>
     <string name="unable_to_enable_video">Nie można włączyć wideo. </string>
     <string name="plain_text_document">Dokument zwykłego tekstu</string>
-    </resources>
+    <string name="account_registrations_are_not_supported">Rejestracja kont nie jest wspierana</string>
+    <string name="no_xmpp_adddress_found">Nie znaleziono adresu XMPP</string>
+
+</resources>

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

@@ -627,6 +627,8 @@
     <string name="pref_clean_private_storage_summary">Locul unde sunt fișierele păstrate (pot fi descărcate de pe server din nou)</string>
     <string name="i_followed_this_link_from_a_trusted_source">Am urmat această legătură de la o sursă de încredere</string>
     <string name="verifying_omemo_keys_trusted_source">Urmează să verificați cheile OMEMO pentru %1$s după ce veți deschide legătura. Acest lucru se poate face în siguranță doar dacă ați primit legătura de la o sursă de încredere unde doar %2$s putea publica.</string>
+    <string name="verifying_omemo_keys_trusted_source_account">Urmează să verificați cheile OMEMO pentru contul dumneavoastră. Acest lucru se poate face în siguranță doar dacă ați primit legătura de la o sursă de încredere unde doar dumneavoastră ați fi putut publica.</string>
+    <string name="continue_btn">Continuă</string>
     <string name="verify_omemo_keys">Verificare chei OMEMO</string>
     <string name="show_inactive_devices">Arată inactive</string>
     <string name="hide_inactive_devices">Ascunde inactive</string>
@@ -915,6 +917,7 @@
     <string name="rtp_state_incoming_video_call">Apel video primit</string>
     <string name="rtp_state_connecting">Conectare</string>
     <string name="rtp_state_connected">Conectat</string>
+    <string name="rtp_state_reconnecting">Reconectare</string>
     <string name="rtp_state_accepting_call">Se acceptă apelul</string>
     <string name="rtp_state_ending_call">Se încheie apelul</string>
     <string name="answer_call">Răspunde</string>
@@ -930,6 +933,8 @@
     <string name="hang_up">Închide</string>
     <string name="ongoing_call">Apel în curs</string>
     <string name="ongoing_video_call">Apel video în curs</string>
+    <string name="reconnecting_call">Reconectare apel</string>
+    <string name="reconnecting_video_call">Reconectare apel video</string>
     <string name="disable_tor_to_make_call">Dezactivați Tor pentru a face apeluri</string>
     <string name="incoming_call">Apel primit</string>
     <string name="incoming_call_duration">Apel primit · %s</string>
@@ -981,4 +986,7 @@
     <string name="backup_started_message">Se creează copia de siguranță. Veți primi o notificare când acesta este completă.</string>
     <string name="unable_to_enable_video">Nu s-a putut activa camera video.</string>
     <string name="plain_text_document">Document text</string>
-    </resources>
+    <string name="account_registrations_are_not_supported">Nu este posibilă înregistrarea unui cont</string>
+    <string name="no_xmpp_adddress_found">Nu a fost găsită o adresă XMPP</string>
+
+</resources>

src/main/res/values-zh-rCN/strings.xml 🔗

@@ -617,6 +617,8 @@
     <string name="pref_clean_private_storage_summary">清除保存私密文件的存储 (可以从服务器上重新下载)</string>
     <string name="i_followed_this_link_from_a_trusted_source">此链接的源头是可信的</string>
     <string name="verifying_omemo_keys_trusted_source">点击链接后将会开始校验%1$s的OMEMO密钥。只有%2$s发布的链接才是安全的。</string>
+    <string name="verifying_omemo_keys_trusted_source_account">您将验证您自己帐户的 OMEMO 密钥。只有当您从可信的来源跟踪此链接时,这才是安全的。“可信”指的是此链接只可能是你在来源中发布的。</string>
+    <string name="continue_btn">继续</string>
     <string name="verify_omemo_keys">校验OMEMO密钥</string>
     <string name="show_inactive_devices">显示不活跃设备</string>
     <string name="hide_inactive_devices">隐藏不活跃设备</string>
@@ -893,6 +895,7 @@
     <string name="rtp_state_incoming_video_call">视频来电</string>
     <string name="rtp_state_connecting">正在连接</string>
     <string name="rtp_state_connected">已连接</string>
+    <string name="rtp_state_reconnecting">重新连接</string>
     <string name="rtp_state_accepting_call">正在接通来电</string>
     <string name="rtp_state_ending_call">正在结束来电</string>
     <string name="answer_call">应答</string>
@@ -908,6 +911,8 @@
     <string name="hang_up">挂断</string>
     <string name="ongoing_call">正在进行的通话</string>
     <string name="ongoing_video_call">正在进行的视频通话</string>
+    <string name="reconnecting_call">重连通话</string>
+    <string name="reconnecting_video_call">重连视频通话</string>
     <string name="disable_tor_to_make_call">禁用Tor以拨打电话</string>
     <string name="incoming_call">来电</string>
     <string name="incoming_call_duration">来电 · %s</string>
@@ -955,4 +960,7 @@
     <string name="backup_started_message">已启动备份。一旦完成,你会收到通知。</string>
     <string name="unable_to_enable_video">无法启用视频</string>
     <string name="plain_text_document">纯文本文档</string>
-    </resources>
+    <string name="account_registrations_are_not_supported">不支持注册账户</string>
+    <string name="no_xmpp_adddress_found">未找到 XMPP 地址</string>
+
+</resources>