From 088b870e7f00cb91868c506be8b903679e848b40 Mon Sep 17 00:00:00 2001 From: Outbreak2096 Date: Mon, 6 May 2024 04:37:52 +0000 Subject: [PATCH 01/29] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/zh_Hans/ --- src/main/res/values-zh-rCN/strings.xml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index e698e52d351d2f8897395310a727ffd071b24334..5b56baf80f7df09a96ac14c6e1a8850ca7eb0f1a 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -530,9 +530,9 @@ 始终 仅限大图片 电池优化已启用 - 您的设备正在为 %1$s 使用重度电池优化,可能会导致通知延迟甚至消息丢失。 + 您的设备正在对 %1$s 使用重度电池优化,可能会导致通知延迟甚至消息丢失。 \n建议禁用此设置。 - 您的设备正在为 %1$s 使用重度电池优化,可能会导致通知延迟甚至消息丢失。 + 您的设备正在对 %1$s 使用重度电池优化,可能会导致通知延迟甚至消息丢失。 \n \n现在将要求您禁用此设置。 禁用 @@ -562,7 +562,7 @@ 没空 忙碌 已生成安全密码 - 设备不支持退出电池优化 + 您的设备不支持选择退出电池优化 注册失败:稍后再试 注册失败:密码太弱 选择参与者 @@ -1072,4 +1072,10 @@ 增加消息气泡中的字体大小 来自陌生人的邀请 接受来自陌生人的群聊邀请 + 创建一次性备份 + 定期备份 + 全屏通知 + 当设备锁定时,允许此应用显示占据全屏的来电通知。 + 不支持的操作 + 创建一次性、计划定期备份 \ No newline at end of file From d39f30ee8f5d1fc94c7ec26ac773ab4cf8ec18ab Mon Sep 17 00:00:00 2001 From: ghose Date: Mon, 6 May 2024 06:51:31 +0000 Subject: [PATCH 02/29] Translated using Weblate (Galician) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/gl/ --- src/main/res/values-gl/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index ddcdbc354e478141f4eaebe6da0d16f3acaab093..9ffc9dd30ed3fcbca73c9ce22cd516e717872b0e 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -1068,4 +1068,10 @@ Aumentar o tamaño da letra das mensaxes Convites de descoñecidas Aceptar convites de persoas descoñecidas para grupos + Copia de apoio regular + Operación sen soporte + Notificacións en pantalla completa + Permitir que a app mostre a notificación de chamada entrante a pantalla completa cando o dispositivo está bloqueado. + Crear única, Programar recurrentes + Crear unha copia de apoio \ No newline at end of file From a5d52c6779d56d3ac9815eb4428d6fe6060ab59f Mon Sep 17 00:00:00 2001 From: SomeTr Date: Mon, 6 May 2024 11:30:32 +0000 Subject: [PATCH 03/29] Translated using Weblate (Ukrainian) Currently translated at 99.8% (1020 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/uk/ --- src/main/res/values-uk/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 9d6cecfd5ec395acb682513793cf7060a5b1dd0c..001761e69ae9aa4e57356adc852ae95fc02fecc6 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -1114,4 +1114,8 @@ Збільшити розмір шрифту повідомлень Запрошення від незнайомців Приймати запрошення до групових чатів від незнайомців + Повноекранні сповіщення + Регулярне резервне копіювання + Операція не підтримується + Показувати сповіщення про вхідні виклики на весь екран, коли пристрій заблоковано. \ No newline at end of file From 567fe9224a1f151b2ee32a77de6272210fd2f303 Mon Sep 17 00:00:00 2001 From: licaon-kter Date: Mon, 6 May 2024 08:25:38 +0000 Subject: [PATCH 04/29] Translated using Weblate (Romanian) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/ro/ --- src/main/res/values-ro-rRO/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml index 75a662053b851d410ee9eba9f812e7fffbbf59c6..19d28e717b511b86e52031eec4f164ed494e4403 100644 --- a/src/main/res/values-ro-rRO/strings.xml +++ b/src/main/res/values-ro-rRO/strings.xml @@ -1085,4 +1085,10 @@ Mărește fontul pentru textul din mesaje Invitații de la persoane necunoscute Acceptă invitații la discuții de grup de la persoane care nu sunt în lista de contacte + Creează o dată, Programează recurent + Creați o copie de rezervă unică + Copie de rezervă recurentă + Notificări pe tot ecranul + Operațiune neacceptată + Atunci când dispozitivul este blocat permite aplicației să arate notificările apelurilor pe tot ecranul. \ No newline at end of file From 12eaa3464a2b163bc68cf17b44fd70a751849a61 Mon Sep 17 00:00:00 2001 From: Besnik_b Date: Mon, 6 May 2024 06:59:53 +0000 Subject: [PATCH 05/29] Translated using Weblate (Albanian) Currently translated at 99.0% (1012 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/sq/ --- src/main/res/values-sq-rAL/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/res/values-sq-rAL/strings.xml b/src/main/res/values-sq-rAL/strings.xml index c37741aa94fa0e2d70d002797ba103d5951ac775..3cac9ea202a93f88663455c9b2bd872ca87a336e 100644 --- a/src/main/res/values-sq-rAL/strings.xml +++ b/src/main/res/values-sq-rAL/strings.xml @@ -1078,4 +1078,8 @@ Prano ftesa për fjalosje në grup nga të panjohur Shkronja të mëdha Rrit madhësi shkronja në flluska mesazhesh + Njoftime sa krejt ekrani + Lejojeni këtë aplikacion të shfaqë njoftime për thirrje ardhëse që zënë krejt ekranin, kur pajisja është e kyçur. + Veprim i pambuluar + Kopjeruajtje ripërsëritëse \ No newline at end of file From 36a4719d693b49f650074bb2987235b62e2be667 Mon Sep 17 00:00:00 2001 From: SomeTr Date: Mon, 6 May 2024 11:50:39 +0000 Subject: [PATCH 06/29] Translated using Weblate (Ukrainian) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/uk/ --- src/main/res/values-uk/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 001761e69ae9aa4e57356adc852ae95fc02fecc6..34196860acacb2dca6ea00da448402c5c35fdb6b 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -1118,4 +1118,6 @@ Регулярне резервне копіювання Операція не підтримується Показувати сповіщення про вхідні виклики на весь екран, коли пристрій заблоковано. + Створити резервну копію, запланувати повторюване резервування + Створити резервну копію \ No newline at end of file From 60ff9214e43b4d2279c889721dce735ce75cb314 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 8 May 2024 10:46:58 +0200 Subject: [PATCH 07/29] add Galaxy Tab A to broken devices --- .../conversations/services/CallIntegration.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/CallIntegration.java b/src/main/java/eu/siacs/conversations/services/CallIntegration.java index 28cdb36e583d13a7cbf312361fa223ea5e8a8435..4b9485876deae096fa0c2fcf30cdf3652f613310 100644 --- a/src/main/java/eu/siacs/conversations/services/CallIntegration.java +++ b/src/main/java/eu/siacs/conversations/services/CallIntegration.java @@ -36,11 +36,14 @@ import java.util.concurrent.atomic.AtomicBoolean; public class CallIntegration extends Connection { - private static final List BROKEN_DEVICE_MODELS = - Arrays.asList( - "OnePlus6" // OnePlus 6 (Android 8.1-11) Device is buggy and always starts the - // OS call screen even though we want to be self managed - ); + /** + * OnePlus 6 (Android 8.1-11) Device is buggy and always starts the OS call screen even though + * we want to be self managed + * + *

Samsung Galaxy Tab A claims to have FEATURE_CONNECTION_SERVICE but then throws + * SecurityException when invoking placeCall(). Both Stock and LineageOS have this problem. + */ + private static final List BROKEN_DEVICE_MODELS = Arrays.asList("OnePlus6", "gtaxlwifi"); public static final int DEFAULT_TONE_VOLUME = 60; private static final int DEFAULT_MEDIA_PLAYER_VOLUME = 90; @@ -564,7 +567,6 @@ public class CallIntegration extends Connection { return this.isDestroyed.get(); } - /** AudioDevice is the names of possible audio devices that we currently support. */ public enum AudioDevice { NONE, SPEAKER_PHONE, From ce85c306e9e9af8311dceec5fe609ce1d2289bce Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 8 May 2024 12:56:12 +0200 Subject: [PATCH 08/29] read backup file header from URI on background thread backup files can be on a network drive and thus take a while to read even if just the header is read --- .../services/ImportBackupService.java | 13 +++- .../ui/ImportBackupActivity.java | 61 +++++++++++++------ 2 files changed, 55 insertions(+), 19 deletions(-) diff --git a/src/conversations/java/eu/siacs/conversations/services/ImportBackupService.java b/src/conversations/java/eu/siacs/conversations/services/ImportBackupService.java index 17c76d167d3b7e1fdb22096ec4403eaa5f829d2d..dd96468ee87427a2fb4a1ef319650c5ab9ff1abb 100644 --- a/src/conversations/java/eu/siacs/conversations/services/ImportBackupService.java +++ b/src/conversations/java/eu/siacs/conversations/services/ImportBackupService.java @@ -23,6 +23,8 @@ import androidx.core.app.NotificationManagerCompat; import com.google.common.base.Charsets; import com.google.common.base.Stopwatch; import com.google.common.io.CountingInputStream; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; @@ -64,6 +66,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.WeakHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; @@ -73,6 +77,9 @@ import javax.crypto.BadPaddingException; public class ImportBackupService extends Service { + private static final ExecutorService BACKUP_FILE_READER_EXECUTOR = + Executors.newSingleThreadExecutor(); + private static final int NOTIFICATION_ID = 21; private static final AtomicBoolean running = new AtomicBoolean(false); private final ImportBackupServiceBinder binder = new ImportBackupServiceBinder(); @@ -433,6 +440,10 @@ public class ImportBackupService extends Service { } } + public static ListenableFuture read(final Context context, final Uri uri) { + return Futures.submit(() -> BackupFile.read(context, uri), BACKUP_FILE_READER_EXECUTOR); + } + @Override public IBinder onBind(Intent intent) { return this.binder; @@ -475,7 +486,7 @@ public class ImportBackupService extends Service { throw new FileNotFoundException(); } final DataInputStream dataInputStream = new DataInputStream(inputStream); - BackupFileHeader backupFileHeader = BackupFileHeader.read(dataInputStream); + final BackupFileHeader backupFileHeader = BackupFileHeader.read(dataInputStream); inputStream.close(); return new BackupFile(uri, backupFileHeader); } diff --git a/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java b/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java index 3cbde4d5a4fed5ca2a213294d2edb6e78917ae42..331857e29fb2242060ee8a77d8afd4b29f3b9e50 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java @@ -19,6 +19,7 @@ import android.view.View; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; @@ -27,6 +28,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; @@ -34,6 +37,7 @@ import eu.siacs.conversations.databinding.ActivityImportBackupBinding; import eu.siacs.conversations.databinding.DialogEnterPasswordBinding; import eu.siacs.conversations.services.ImportBackupService; import eu.siacs.conversations.ui.adapter.BackupFileAdapter; +import eu.siacs.conversations.ui.util.MainThreadExecutor; import eu.siacs.conversations.utils.BackupFileHeader; import java.io.IOException; @@ -182,21 +186,36 @@ public class ImportBackupActivity extends ActionBarActivity } private void openBackupFileFromUri(final Uri uri, final boolean finishOnCancel) { - try { - final ImportBackupService.BackupFile backupFile = - ImportBackupService.BackupFile.read(this, uri); - showEnterPasswordDialog(backupFile, finishOnCancel); - } catch (final BackupFileHeader.OutdatedBackupFileVersion e) { + final var backupFileFuture = ImportBackupService.read(this, uri); + Futures.addCallback( + backupFileFuture, + new FutureCallback<>() { + @Override + public void onSuccess(final ImportBackupService.BackupFile backupFile) { + showEnterPasswordDialog(backupFile, finishOnCancel); + } + + @Override + public void onFailure(@NonNull final Throwable throwable) { + Log.d(Config.LOGTAG, "could not open backup file " + uri, throwable); + showBackupThrowable(throwable); + } + }, + MainThreadExecutor.getInstance()); + } + + private void showBackupThrowable(final Throwable throwable) { + if (throwable instanceof BackupFileHeader.OutdatedBackupFileVersion) { Snackbar.make( binding.coordinator, R.string.outdated_backup_file_format, Snackbar.LENGTH_LONG) .show(); - } catch (final IOException | IllegalArgumentException e) { - Log.d(Config.LOGTAG, "unable to open backup file " + uri, e); + } else if (throwable instanceof IOException + || throwable instanceof IllegalArgumentException) { Snackbar.make(binding.coordinator, R.string.not_a_backup_file, Snackbar.LENGTH_LONG) .show(); - } catch (final SecurityException e) { + } else if (throwable instanceof SecurityException e) { Snackbar.make( binding.coordinator, R.string.sharing_application_not_grant_permission, @@ -243,16 +262,7 @@ public class ImportBackupActivity extends ActionBarActivity getString(R.string.please_enter_password)); return; } - final Uri uri = backupFile.getUri(); - Intent intent = new Intent(this, ImportBackupService.class); - intent.setAction(Intent.ACTION_SEND); - intent.putExtra("password", password); - if ("file".equals(uri.getScheme())) { - intent.putExtra("file", uri.getPath()); - } else { - intent.setData(uri); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - } + final Intent intent = getIntent(backupFile, password); setLoadingState(true); ContextCompat.startForegroundService(this, intent); d.dismiss(); @@ -261,6 +271,21 @@ public class ImportBackupActivity extends ActionBarActivity dialog.show(); } + @NonNull + private Intent getIntent(ImportBackupService.BackupFile backupFile, String password) { + final Uri uri = backupFile.getUri(); + Intent intent = new Intent(this, ImportBackupService.class); + intent.setAction(Intent.ACTION_SEND); + intent.putExtra("password", password); + if ("file".equals(uri.getScheme())) { + intent.putExtra("file", uri.getPath()); + } else { + intent.setData(uri); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + } + return intent; + } + private void setLoadingState(final boolean loadingState) { binding.coordinator.setVisibility(loadingState ? View.GONE : View.VISIBLE); binding.inProgress.setVisibility(loadingState ? View.VISIBLE : View.GONE); From 005f9c3fe0d1c15cead8333753a05256d8444e78 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 8 May 2024 12:57:57 +0200 Subject: [PATCH 09/29] set usage notification for notification channel audio attributes --- .../eu/siacs/conversations/services/NotificationService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 4613ccb45800ac30add6236fa9f9bf1744412bb7..409a05d573282b2b7a677fabb6f3c8b523101090 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -243,7 +243,7 @@ public class NotificationService { RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION), new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) - .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) + .setUsage(AudioAttributes.USAGE_NOTIFICATION) .build()); messagesChannel.setLightColor(LED_COLOR); final int dat = 70; @@ -276,7 +276,7 @@ public class NotificationService { RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION), new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) - .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT) + .setUsage(AudioAttributes.USAGE_NOTIFICATION) .build()); deliveryFailedChannel.setGroup("chats"); notificationManager.createNotificationChannel(deliveryFailedChannel); From 3f4ee87b2937f5a18117851284328738ebbf0542 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 8 May 2024 13:39:23 +0200 Subject: [PATCH 10/29] show user no longer in group when coming from adapter --- .../conversations/ui/adapter/UserAdapter.java | 20 ++++++++++++++++--- .../ui/adapter/UserPreviewAdapter.java | 16 +++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/UserAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/UserAdapter.java index 6463412dde0e4b5675ef893006418f4c9313daa2..a48b22233308e71dd7699ac31cfaf20cbf8d8a48 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/UserAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/UserAdapter.java @@ -6,6 +6,7 @@ import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.databinding.DataBindingUtil; @@ -13,6 +14,8 @@ import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.RecyclerView; +import com.google.common.base.Strings; + import org.openintents.openpgp.util.OpenPgpUtils; import eu.siacs.conversations.R; @@ -71,9 +74,20 @@ public class UserAdapter extends ListAdapter { final XmppActivity activity = XmppActivity.find(v); - if (activity != null) { - activity.highlightInMuc(user.getConversation(), user.getName()); + if (activity == null) { + return; + } + final var contact = user.getContact(); + if (user.getRole() == MucOptions.Role.NONE && contact != null) { + Toast.makeText( + activity, + activity.getString( + R.string.user_has_left_conference, + contact.getDisplayName()), + Toast.LENGTH_SHORT) + .show(); } + activity.highlightInMuc(user.getConversation(), user.getName()); }); viewHolder.binding.getRoot().setTag(user); viewHolder.binding.getRoot().setOnCreateContextMenuListener(this); @@ -92,7 +106,7 @@ public class UserAdapter extends ListAdapter { final XmppActivity activity = XmppActivity.find(v); - if (activity != null) { - activity.highlightInMuc(user.getConversation(), user.getName()); + if (activity == null) { + return; } + final var contact = user.getContact(); + if (user.getRole() == MucOptions.Role.NONE && contact != null) { + Toast.makeText( + activity, + activity.getString( + R.string.user_has_left_conference, + contact.getDisplayName()), + Toast.LENGTH_SHORT) + .show(); + } + activity.highlightInMuc(user.getConversation(), user.getName()); }); viewHolder.binding.getRoot().setOnCreateContextMenuListener(this); viewHolder.binding.getRoot().setTag(user); From fdb0509876f7202122f92c6072cb521d52fa3669 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 9 May 2024 08:27:50 +0200 Subject: [PATCH 11/29] clip image preview to message bubble --- .../siacs/conversations/ui/adapter/MessageAdapter.java | 2 +- src/main/res/layout/item_message_content.xml | 8 ++++++-- src/main/res/layout/item_message_received.xml | 7 +++---- src/main/res/layout/item_message_sent.xml | 10 ++++------ 4 files changed, 14 insertions(+), 13 deletions(-) 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 c33e7765516ac8fcbaf451c8844642f29c054f6b..e422aac15d50d658c8d7b7d822a6178c1985936f 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -662,7 +662,6 @@ public class MessageAdapter extends ArrayAdapter { } final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(scaledW, scaledH); - layoutParams.setMargins(0, (int) (metrics.density * 4), 0, (int) (metrics.density * 4)); viewHolder.image.setLayoutParams(layoutParams); activity.loadBitmap(message, viewHolder.image); viewHolder.image.setOnClickListener(v -> openDownloadable(message)); @@ -920,6 +919,7 @@ public class MessageAdapter extends ArrayAdapter { } return view; } else { + viewHolder.message_box.setClipToOutline(true); AvatarWorkerTask.loadAvatar(message, viewHolder.contact_picture, R.dimen.avatar); } diff --git a/src/main/res/layout/item_message_content.xml b/src/main/res/layout/item_message_content.xml index 889c90507fec32bce57de2b6eb7d03444e9f5215..0c070b5a1568d1b9af20b3f10e67acab7c936c97 100644 --- a/src/main/res/layout/item_message_content.xml +++ b/src/main/res/layout/item_message_content.xml @@ -8,6 +8,8 @@ android:id="@+id/message_body" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginHorizontal="8dp" + android:layout_marginTop="4dp" android:autoLink="web" android:longClickable="false" android:textAppearance="?textAppearanceBodyMedium" /> @@ -16,8 +18,6 @@ android:id="@+id/message_image" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="8dp" - android:layout_marginBottom="4dp" android:adjustViewBounds="true" android:background="@color/gray_800" android:longClickable="true" @@ -28,6 +28,8 @@ style="@style/Widget.Material3.Button.ElevatedButton" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginHorizontal="8dp" + android:layout_marginTop="4dp" android:longClickable="true" android:visibility="gone" app:iconSize="24dp" /> @@ -36,6 +38,8 @@ android:id="@+id/audio_player" android:layout_width="@dimen/audio_player_width" android:layout_height="wrap_content" + android:layout_marginHorizontal="8dp" + android:layout_marginVertical="4dp" android:visibility="gone"> + android:minHeight="48dp"> + android:minHeight="48dp"> + android:orientation="vertical"> Date: Thu, 9 May 2024 10:00:43 +0200 Subject: [PATCH 12/29] slightly increase corner radius of avatars in chat --- src/main/res/layout/item_message_received.xml | 2 +- src/main/res/layout/item_message_sent.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/res/layout/item_message_received.xml b/src/main/res/layout/item_message_received.xml index 486263993bd81ac348f0ac80a14905e06f5b96df..4e2fdd252839a3a9c35e1ab610021dcc0e315a74 100644 --- a/src/main/res/layout/item_message_received.xml +++ b/src/main/res/layout/item_message_received.xml @@ -18,7 +18,7 @@ android:layout_alignParentTop="true" android:layout_marginEnd="6dp" android:scaleType="fitXY" - app:riv_corner_radius="6dp" /> + app:riv_corner_radius="8dp" /> Date: Thu, 9 May 2024 10:01:00 +0200 Subject: [PATCH 13/29] center image preview if bubble is wider --- src/main/res/layout/item_message_content.xml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/res/layout/item_message_content.xml b/src/main/res/layout/item_message_content.xml index 0c070b5a1568d1b9af20b3f10e67acab7c936c97..61021075ec259d49e36c35ff18c7acb8561ce375 100644 --- a/src/main/res/layout/item_message_content.xml +++ b/src/main/res/layout/item_message_content.xml @@ -14,14 +14,21 @@ android:longClickable="false" android:textAppearance="?textAppearanceBodyMedium" /> - + android:layout_gravity="center_horizontal" + android:orientation="horizontal"> + + + Date: Thu, 9 May 2024 10:01:16 +0200 Subject: [PATCH 14/29] call checkbox in clear history dialog: delete --- src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 0310425e689dd80a831855c3ef4a4698bd304186..b510d207740bc17d7e748c22449cd6a1ecb82c17 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -87,7 +87,7 @@ Do you want to delete all messages in this chat?\n\nWarning: This will not influence messages stored on other devices or servers. Delete file Are you sure you want to delete this file?\n\nWarning: This will not delete copies of this file that are stored on other devices or servers. - Archive this chat + Delete chat afterwards Choose device Send clear text message Send message From ddce98781daacea27f65e9d968dae3ff4c21b746 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 9 May 2024 14:56:55 +0200 Subject: [PATCH 15/29] give text in bubbles a little bit more space --- src/main/res/layout/item_message_content.xml | 6 +++--- src/main/res/layout/item_message_received.xml | 2 +- src/main/res/layout/item_message_sent.xml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/res/layout/item_message_content.xml b/src/main/res/layout/item_message_content.xml index 61021075ec259d49e36c35ff18c7acb8561ce375..b34343910b8a5c4209d190c29beeb143650bc7ac 100644 --- a/src/main/res/layout/item_message_content.xml +++ b/src/main/res/layout/item_message_content.xml @@ -8,7 +8,7 @@ android:id="@+id/message_body" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginHorizontal="8dp" + android:layout_marginHorizontal="10dp" android:layout_marginTop="4dp" android:autoLink="web" android:longClickable="false" @@ -35,7 +35,7 @@ style="@style/Widget.Material3.Button.ElevatedButton" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginHorizontal="8dp" + android:layout_marginHorizontal="10dp" android:layout_marginTop="4dp" android:longClickable="true" android:visibility="gone" @@ -45,7 +45,7 @@ android:id="@+id/audio_player" android:layout_width="@dimen/audio_player_width" android:layout_height="wrap_content" - android:layout_marginHorizontal="8dp" + android:layout_marginHorizontal="10dp" android:layout_marginVertical="4dp" android:visibility="gone"> diff --git a/src/main/res/layout/item_message_received.xml b/src/main/res/layout/item_message_received.xml index 4e2fdd252839a3a9c35e1ab610021dcc0e315a74..3c76e88577e6fa7bb526a1d9d86646d466a0956a 100644 --- a/src/main/res/layout/item_message_received.xml +++ b/src/main/res/layout/item_message_received.xml @@ -45,7 +45,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="start" - android:layout_marginHorizontal="8dp" + android:layout_marginHorizontal="10dp" android:layout_marginVertical="4dp" android:orientation="horizontal"> diff --git a/src/main/res/layout/item_message_sent.xml b/src/main/res/layout/item_message_sent.xml index 487746ab01837192ba84664c1e8b020cfd11f726..f29a5d96c0b41a52654737c387c2c027ea8e08ca 100644 --- a/src/main/res/layout/item_message_sent.xml +++ b/src/main/res/layout/item_message_sent.xml @@ -53,7 +53,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end" - android:layout_marginHorizontal="8dp" + android:layout_marginHorizontal="10dp" android:layout_marginVertical="4dp" android:orientation="horizontal"> From cc24e10e86c3baeb8bc5e8b4291e2b9e26f26878 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 9 May 2024 16:58:58 +0200 Subject: [PATCH 16/29] mark entire message as read if all group members have read it --- .../eu/siacs/conversations/entities/Message.java | 10 +++++++++- .../eu/siacs/conversations/parser/MessageParser.java | 12 ++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index e50ffc73c00e83360e8c742ea0d0c4fd161bde6d..a359cf34c2cff3970879992301bae33d9539294d 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -7,6 +7,7 @@ import android.text.SpannableStringBuilder; import android.util.Log; import com.google.common.base.Strings; +import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableSet; import com.google.common.primitives.Longs; @@ -509,7 +510,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable this.transferable = transferable; } - public boolean addReadByMarker(ReadByMarker readByMarker) { + public boolean addReadByMarker(final ReadByMarker readByMarker) { if (readByMarker.getRealJid() != null) { if (readByMarker.getRealJid().asBareJid().equals(trueCounterpart)) { return false; @@ -539,6 +540,13 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable return ImmutableSet.copyOf(this.readByMarkers); } + public Set getReadyByTrue() { + return ImmutableSet.copyOf( + Collections2.transform( + Collections2.filter(this.readByMarkers, m -> m.getRealJid() != null), + ReadByMarker::getRealJid)); + } + boolean similar(Message message) { if (!isPrivateMessage() && this.serverMsgId != null && message.getServerMsgId() != null) { return this.serverMsgId.equals(message.getServerMsgId()) || Edit.wasPreviouslyEditedServerMsgId(edits, message.getServerMsgId()); diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 97c0181b7dca5ceb91def16b20935bb921c8bb29..ec8601bf0622afc6c05d6efc5ea9682e4d65c62d 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -3,6 +3,8 @@ package eu.siacs.conversations.parser; import android.util.Log; import android.util.Pair; +import com.google.common.collect.ImmutableSet; + import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -1033,6 +1035,16 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece } else if (!counterpart.isBareJid() && trueJid != null) { final ReadByMarker readByMarker = ReadByMarker.from(counterpart, trueJid); if (message.addReadByMarker(readByMarker)) { + final var mucOptions = conversation.getMucOptions(); + final var everyone = ImmutableSet.copyOf(mucOptions.getMembers(false)); + final var readyBy = message.getReadyByTrue(); + final var mStatus = message.getStatus(); + if (mucOptions.isPrivateAndNonAnonymous() + && (mStatus == Message.STATUS_SEND_RECEIVED + || mStatus == Message.STATUS_SEND) + && readyBy.containsAll(everyone)) { + message.setStatus(Message.STATUS_SEND_DISPLAYED); + } mXmppConnectionService.updateMessage(message, false); } } From 80e23547099cffc3d747a72a543d533ee4c9326f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 10 May 2024 10:35:45 +0200 Subject: [PATCH 17/29] leave channel when bookmark gets deleted --- .../generator/AbstractGenerator.java | 2 +- .../conversations/parser/MessageParser.java | 33 +++++++++++++++---- .../services/XmppConnectionService.java | 28 +++++++++++----- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java index 905b08286149639b7dc4bea7ff97c63763e95105..9d94813e72b26c6b97316c5dead77d30d812ccb4 100644 --- a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java @@ -105,7 +105,7 @@ public abstract class AbstractGenerator { return Base64.encodeToString(sha1, Base64.NO_WRAP); } - public List getFeatures(Account account) { + public List getFeatures(final Account account) { final XmppConnection connection = account.getXmppConnection(); final ArrayList features = new ArrayList<>(Arrays.asList(STATIC_FEATURES)); if (Config.MESSAGE_DISPLAYED_SYNCHRONIZATION) { diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index ec8601bf0622afc6c05d6efc5ea9682e4d65c62d..6accc1f12a01ff880d2b6e86191e6c7856930ddb 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -245,14 +245,27 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece final AxolotlService axolotlService = account.getAxolotlService(); axolotlService.registerDevices(from, deviceIds); } else if (Namespace.BOOKMARKS.equals(node) && account.getJid().asBareJid().equals(from)) { - if (account.getXmppConnection().getFeatures().bookmarksConversion()) { + final var connection = account.getXmppConnection(); + if (connection.getFeatures().bookmarksConversion()) { + if (connection.getFeatures().bookmarks2()) { + Log.w( + Config.LOGTAG, + account.getJid().asBareJid() + + ": received storage:bookmark notification even though we opted into bookmarks:1"); + } final Element i = items.findChild("item"); - final Element storage = i == null ? null : i.findChild("storage", Namespace.BOOKMARKS); - Map bookmarks = Bookmark.parseFromStorage(storage, account); + final Element storage = + i == null ? null : i.findChild("storage", Namespace.BOOKMARKS); + final Map bookmarks = Bookmark.parseFromStorage(storage, account); mXmppConnectionService.processBookmarksInitial(account, bookmarks, true); - Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": processing bookmark PEP event"); + Log.d( + Config.LOGTAG, + account.getJid().asBareJid() + ": processing bookmark PEP event"); } else { - Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": ignoring bookmark PEP event because bookmark conversion was not detected"); + Log.d( + Config.LOGTAG, + account.getJid().asBareJid() + + ": ignoring bookmark PEP event because bookmark conversion was not detected"); } } else if (Namespace.BOOKMARKS2.equals(node) && account.getJid().asBareJid().equals(from)) { final Element item = items.findChild("item"); @@ -295,8 +308,8 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece Log.d(Config.LOGTAG, "parsing nick delete event from " + from); setNick(account, from, null); } else if (Namespace.BOOKMARKS2.equals(node) && account.getJid().asBareJid().equals(from)) { - account.setBookmarks(Collections.emptyMap()); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": deleted bookmarks node"); + deleteAllBookmarks(account); } else if (Namespace.AVATAR_METADATA.equals(node) && account.getJid().asBareJid().equals(from)) { Log.d(Config.LOGTAG,account.getJid().asBareJid()+": deleted avatar metadata node"); } @@ -306,11 +319,17 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece final Element purge = event.findChild("purge"); final String node = purge == null ? null : purge.getAttribute("node"); if (Namespace.BOOKMARKS2.equals(node) && account.getJid().asBareJid().equals(from)) { - account.setBookmarks(Collections.emptyMap()); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": purged bookmarks"); + deleteAllBookmarks(account); } } + private void deleteAllBookmarks(final Account account) { + final var previous = account.getBookmarkedJids(); + account.setBookmarks(Collections.emptyMap()); + mXmppConnectionService.processDeletedBookmarks(account, previous); + } + private void setNick(Account account, Jid user, String nick) { if (user.asBareJid().equals(account.getJid().asBareJid())) { account.setDisplayName(nick); diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index ce45d9083ce69ae32d17477d5d6c99194e1525ea..89efa949a3185ec722b4def9abccfe7a97b2e5e6 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -2018,20 +2018,32 @@ public class XmppConnectionService extends Service { processModifiedBookmark(bookmark, pep); } if (pep) { - Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": " + previousBookmarks.size() + " bookmarks have been removed"); - for (Jid jid : previousBookmarks) { - processDeletedBookmark(account, jid); - } + processDeletedBookmarks(account, previousBookmarks); } account.setBookmarks(bookmarks); } - public void processDeletedBookmark(Account account, Jid jid) { + public void processDeletedBookmarks(final Account account, final Collection bookmarks) { + Log.d( + Config.LOGTAG, + account.getJid().asBareJid() + + ": " + + bookmarks.size() + + " bookmarks have been removed"); + for (final Jid bookmark : bookmarks) { + processDeletedBookmark(account, bookmark); + } + } + + public void processDeletedBookmark(final Account account, final Jid jid) { final Conversation conversation = find(account, jid); - if (conversation != null && conversation.getMucOptions().getError() == MucOptions.Error.DESTROYED) { - Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": archiving destroyed conference (" + conversation.getJid() + ") after receiving pep"); - archiveConversation(conversation, false); + if (conversation == null) { + return; } + Log.d( + Config.LOGTAG, + account.getJid().asBareJid() + ": archiving MUC " + jid + " after PEP update"); + archiveConversation(conversation, false); } private void processModifiedBookmark(final Bookmark bookmark, final boolean pep) { From e389ee089d3039dfc511beb58ecbe45b07fbdd47 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 10 May 2024 16:31:36 +0200 Subject: [PATCH 18/29] remove 'add as bookmark' checkmark in join conference dialog --- .../ui/JoinConferenceDialog.java | 8 ++-- .../ui/StartConversationActivity.java | 39 +++++++------------ .../res/layout/dialog_join_conference.xml | 15 ++----- src/main/res/values-ar/strings.xml | 1 - src/main/res/values-cs/strings.xml | 1 - src/main/res/values-de/strings.xml | 1 - src/main/res/values-es/strings.xml | 1 - src/main/res/values-fa-rIR/strings.xml | 1 - src/main/res/values-fr/strings.xml | 1 - src/main/res/values-gl/strings.xml | 1 - src/main/res/values-it/strings.xml | 1 - src/main/res/values-ja/strings.xml | 1 - src/main/res/values-pl/strings.xml | 1 - src/main/res/values-ro-rRO/strings.xml | 1 - src/main/res/values-ru/strings.xml | 1 - src/main/res/values-sq-rAL/strings.xml | 1 - src/main/res/values-sv/strings.xml | 1 - src/main/res/values-tr-rTR/strings.xml | 1 - src/main/res/values-uk/strings.xml | 1 - src/main/res/values-vi/strings.xml | 1 - src/main/res/values-zh-rCN/strings.xml | 1 - src/main/res/values-zh-rTW/strings.xml | 1 - src/main/res/values/strings.xml | 1 - 23 files changed, 22 insertions(+), 60 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/JoinConferenceDialog.java b/src/main/java/eu/siacs/conversations/ui/JoinConferenceDialog.java index 7ed3fbd9d80284da80991924722da244e58ca555..849554d87eadb5730a5479abefa496397bd38760 100644 --- a/src/main/java/eu/siacs/conversations/ui/JoinConferenceDialog.java +++ b/src/main/java/eu/siacs/conversations/ui/JoinConferenceDialog.java @@ -67,9 +67,9 @@ public class JoinConferenceDialog extends DialogFragment implements OnBackendCon builder.setNegativeButton(R.string.cancel, null); AlertDialog dialog = builder.create(); dialog.show(); - dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(view -> mListener.onJoinDialogPositiveClick(dialog, binding.account, binding.accountJidLayout, binding.jid, binding.bookmark.isChecked())); + dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(view -> mListener.onJoinDialogPositiveClick(dialog, binding.account, binding.accountJidLayout, binding.jid)); binding.jid.setOnEditorActionListener((v, actionId, event) -> { - mListener.onJoinDialogPositiveClick(dialog, binding.account, binding.accountJidLayout, binding.jid, binding.bookmark.isChecked()); + mListener.onJoinDialogPositiveClick(dialog, binding.account, binding.accountJidLayout, binding.jid); return true; }); return dialog; @@ -89,7 +89,7 @@ public class JoinConferenceDialog extends DialogFragment implements OnBackendCon } @Override - public void onAttach(Context context) { + public void onAttach(@NonNull final Context context) { super.onAttach(context); try { mListener = (JoinConferenceDialogListener) context; @@ -118,6 +118,6 @@ public class JoinConferenceDialog extends DialogFragment implements OnBackendCon } public interface JoinConferenceDialogListener { - void onJoinDialogPositiveClick(Dialog dialog, AutoCompleteTextView spinner, TextInputLayout jidLayout, AutoCompleteTextView jid, boolean isBookmarkChecked); + void onJoinDialogPositiveClick(Dialog dialog, AutoCompleteTextView spinner, TextInputLayout jidLayout, AutoCompleteTextView jid); } } diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java index 8c29ec08e10282280b7bf23dd003b94da2f3f778..acd0320ed52ac011f4e0f0e4e14990d079ec8383 100644 --- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java @@ -454,13 +454,13 @@ public class StartConversationActivity extends XmppActivity implements XmppConne } } - protected void openConversationsForBookmark(Bookmark bookmark) { + protected void openConversationsForBookmark(final Bookmark bookmark) { final Jid jid = bookmark.getFullJid(); if (jid == null) { Toast.makeText(this, R.string.invalid_jid, Toast.LENGTH_SHORT).show(); return; } - Conversation conversation = xmppConnectionService.findOrCreateConversation(bookmark.getAccount(), jid, true, true, true); + final Conversation conversation = xmppConnectionService.findOrCreateConversation(bookmark.getAccount(), jid, true, true, true); bookmark.setConversation(conversation); if (!bookmark.autojoin()) { bookmark.setAutojoin(true); @@ -1117,7 +1117,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne } @Override - public void onJoinDialogPositiveClick(Dialog dialog, AutoCompleteTextView spinner, TextInputLayout layout, AutoCompleteTextView jid, boolean isBookmarkChecked) { + public void onJoinDialogPositiveClick(final Dialog dialog, final AutoCompleteTextView spinner, final TextInputLayout layout, final AutoCompleteTextView jid) { if (!xmppConnectionServiceBound) { return; } @@ -1141,32 +1141,23 @@ public class StartConversationActivity extends XmppActivity implements XmppConne return; } } - - if (isBookmarkChecked) { - Bookmark bookmark = account.getBookmark(conferenceJid); - if (bookmark != null) { - dialog.dismiss(); - openConversationsForBookmark(bookmark); - } else { - bookmark = new Bookmark(account, conferenceJid.asBareJid()); - bookmark.setAutojoin(true); - final String nick = conferenceJid.getResource(); - if (nick != null && !nick.isEmpty() && !nick.equals(MucOptions.defaultNick(account))) { - bookmark.setNick(nick); - } - xmppConnectionService.createBookmark(account, bookmark); - final Conversation conversation = xmppConnectionService - .findOrCreateConversation(account, conferenceJid, true, true, true); - bookmark.setConversation(conversation); - dialog.dismiss(); - switchToConversation(conversation); - } + final var existingBookmark = account.getBookmark(conferenceJid); + if (existingBookmark != null) { + openConversationsForBookmark(existingBookmark); } else { + final var bookmark = new Bookmark(account, conferenceJid.asBareJid()); + bookmark.setAutojoin(true); + final String nick = conferenceJid.getResource(); + if (nick != null && !nick.isEmpty() && !nick.equals(MucOptions.defaultNick(account))) { + bookmark.setNick(nick); + } + xmppConnectionService.createBookmark(account, bookmark); final Conversation conversation = xmppConnectionService .findOrCreateConversation(account, conferenceJid, true, true, true); - dialog.dismiss(); + bookmark.setConversation(conversation); switchToConversation(conversation); } + dialog.dismiss(); } @Override diff --git a/src/main/res/layout/dialog_join_conference.xml b/src/main/res/layout/dialog_join_conference.xml index 7cfec64c0426d0e8164c93505c7d525434cd50d1..0d17dfacb416e115949cf85f8fe79c1fbcc71e07 100644 --- a/src/main/res/layout/dialog_join_conference.xml +++ b/src/main/res/layout/dialog_join_conference.xml @@ -1,6 +1,5 @@ - + + android:inputType="textEmailAddress" + android:padding="16dp" /> - - diff --git a/src/main/res/values-ar/strings.xml b/src/main/res/values-ar/strings.xml index 32b4ab14225c882ef674f688659c2066af663e8a..982d188dfb2adcf91452393f5b79bfa7a6418602 100644 --- a/src/main/res/values-ar/strings.xml +++ b/src/main/res/values-ar/strings.xml @@ -649,7 +649,6 @@ منع أخذ لقطات للشاشة آخِر ظهور البارحة آخر ظهور منذ ساعة - احفظه كمحادثة جماعية رمز التسجيل غير صالح مفتاح تعمية خاطئ. هذا ليس عنوان XMPP صالح diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index 4905b019b6dd6536fb81aed30749454487b70c6e..74b4545a7dab5194fe0d38f0b5c8abe239ebc459 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -971,7 +971,6 @@ Fixovat polohu Skupinové chaty Zmeškané hovory - Uložit jako skupinový chat Tento skupinový chat jste opustili z technických důvodů Znovu spojuji hovor Slepě důvěřované klíče OMEMO, které mohou být někdo jiný nebo někým zasaženy. diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 912e967dbba5185a4b143fc4661e422773934043..c81638c9d96f0cc800d8585f6831a6fd5b1ccbb9 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -988,7 +988,6 @@ Konto vom Server löschen Konto konnte nicht vom Server gelöscht werden Gruppenchats - Als Gruppenchat speichern Gruppenchats durchsuchen Versuche nicht, Backups wiederherzustellen, die du nicht selbst erstellt hast! Du versuchst, ein veraltetes Sicherungsdateiformat zu importieren diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index 39e794bcbdae0ed10e57547033eeb136e46118f4..56f96bb529d315d13ddc40d5fe3f49c93dc7e889 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -1003,7 +1003,6 @@ No se pudo eliminar la cuenta del servidor Chats en grupo Buscar un grupo de chats - Guardar como un chat en grupo ¡No intentes restaurar las copias de seguridad que no creaste tu mismo! Estás intentando importar un formato de copia de seguridad obsoleto Audiolibro diff --git a/src/main/res/values-fa-rIR/strings.xml b/src/main/res/values-fa-rIR/strings.xml index e7ced4f7c11f819ae484ce7405eac676eb7214fa..df8f407e446f17dcdc5d4be2f5a74040e3431bf6 100644 --- a/src/main/res/values-fa-rIR/strings.xml +++ b/src/main/res/values-fa-rIR/strings.xml @@ -481,7 +481,6 @@ خطای برنامه فرستادن پیام خصوصی فعال‌سازی حساب را فراموش نکنید. - ذخیره به عنوان گفتگوی گروهی کتاب صوتی نشانی‌های XMPP را برای همه نمایان کن وصل می‌شود… diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 7433936de0f688d9afbc5e81f03a86180e00bf82..ed4c16b618aa2ee76ad2f6ebe231a0932a88e0f0 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -993,7 +993,6 @@ %1$d appels manqués de %2$d contacts Discussions de groupe - Enregistrer comme groupe Synchroniser les favoris Activer \"Rejoindre automatiquement\" en entrant ou sortant d\'un groupe et réagir aux modifications apportées par d\'autres clients. graphique vectoriel diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 9ffc9dd30ed3fcbca73c9ce22cd516e717872b0e..fa50e0463c94cc36fa9b181c486a9ca74b9bda77 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -989,7 +989,6 @@ Chamada saínte · %s Eliminar a conta no servidor Non se puido eliminar a conta no servidor - Gardar como chat en grupo Buscar chats en grupo Chats en grupo Non intentes restablecer unha copia de apoio que non tiveses creado ti! diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index a3b8c3f26c0872aaf690afa263ca4ade487c889c..85a223bed9504036143ef6c740b1de81b80bc0fe 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -1002,7 +1002,6 @@ Rimuovi profilo dal server Impossibile eliminare il profilo dal server Chat di gruppo - Salva come chat di gruppo Cerca chat di gruppo Non tentare di ripristinare dei backup che non hai creato te stesso! Stai tentando di importare un formato di file di backup obsoleto diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index 6b40fa2940a8a26fe67cecacbc6764d8333948f7..b9e43564c48074cf50ace5ce10f6b888b841fe7d 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -976,7 +976,6 @@ なし(無効) 拒否 Pushサーバー - グループチャットとして保存 UnifiedPushディストリビューター スパムを報告 Pushメッセージを受信する際に経由するアカウント。 diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index a65cb8ade2483b6c09d6184ade7889108536dbe8..921c2542abb4f50b441719df23878620d36a54dc 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -1021,7 +1021,6 @@ Nie można usunąć konta z serwera Przeszukaj rozmowy grupowe Rozmowy grupowe - Zapisz jako rozmowę grupową Nie próbuj przywracać kopii zapasowych, których nie utworzono samodzielnie! Próbujesz zaimportować plik kopii zapasowej o przestarzałym formacie Audiobook diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml index 19d28e717b511b86e52031eec4f164ed494e4403..fbba31dec0b64ae4427bb8609aad550c645f3aee 100644 --- a/src/main/res/values-ro-rRO/strings.xml +++ b/src/main/res/values-ro-rRO/strings.xml @@ -1007,7 +1007,6 @@ Nu s-a putut șterge contul de pe server Șterge contul de pe server Discuții de grup - Salvare ca discuție de grup Caută discuții de grup Nu încercați să restaurați copii de rezervă pe care nu le-ați creat personal! Încercați să importați un fișier copie de rezervă format vechi diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index cdfa3e440ccc5249859adc3e4e49eae56e19beaa..771346875350ce3d1463e425d889b2e57ad109ad 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -994,7 +994,6 @@ Отклонить Невозможно удалить учётную запись на сервере Удалить учётную запись на сервере - Сохранить как групповую беседу Синхронизировать закладки Устанавливать флаг \"автоприсоединение\" при входе в- и выходе из MUC, и реагировать на изменения от других клиентов. Поиск по групповым беседам diff --git a/src/main/res/values-sq-rAL/strings.xml b/src/main/res/values-sq-rAL/strings.xml index 3cac9ea202a93f88663455c9b2bd872ca87a336e..41cb53a3a435e128bd83e960535df86c2b2ad673 100644 --- a/src/main/res/values-sq-rAL/strings.xml +++ b/src/main/res/values-sq-rAL/strings.xml @@ -978,7 +978,6 @@ jabber.network kërkoni në fjalosje grupesh Fjalosje në grup - Ruaje si fjalosjeje grupi Po përdorni pajisje të paverifikuara. Që të kryhet verifikimi dhe të pengohen sulme MITM, skanoni Kodin QR në pajisjet tuaja të tjera. Listë bllokimesh I dalë diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index 20a6b823da0c38b182d97eb086f880287ee239f1..ed055de47a99b456fd6238837c6138c77ae02ae5 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -1016,7 +1016,6 @@ Utloggad Du använder overifierade enheter. Skanna QR-kod på dina andra enheter, för att utföra en verifiering och för att förhindra aktiva MITM-attacker. Utgående samtal · %s - Spara som gruppchatt Ljudbok Rapportera spam Försök inte att återställa säkerhetskopior som du inte har skapat själv! diff --git a/src/main/res/values-tr-rTR/strings.xml b/src/main/res/values-tr-rTR/strings.xml index 95a736b7640e96f558b3313b89cb8d8c7e47ceca..00711aaf2155dcfd37be1230da6291d88ad617de 100644 --- a/src/main/res/values-tr-rTR/strings.xml +++ b/src/main/res/values-tr-rTR/strings.xml @@ -1017,7 +1017,6 @@ Görüntülü aramaya geçilsin mi? Uygulama değiştiricide içeriği göster ve ekran görüntüsü almaya izin ver %s için yer imini kaldırmak ve sohbeti arşivlemek ister misiniz? - Grup olarak kaydet Sesli kitap Şifrelenmiş ileti gönder Gruplar diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 34196860acacb2dca6ea00da448402c5c35fdb6b..47bc3f8844d12b761f17494922f26824e60eb13c 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -981,7 +981,6 @@ Цифровий підпис v\\OMEMO (джерело повідомлення) Продовжити Групові чати - Зберегти як групу Синхронізувати закладки Ви залишили цю групу з технічних причин векторна графіка diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml index 915c4924f02b2c044df17c2b284ed1281491268d..fca05da8567270d43c82903a4a95c101dfeb72fd 100644 --- a/src/main/res/values-vi/strings.xml +++ b/src/main/res/values-vi/strings.xml @@ -957,7 +957,6 @@ Máy chủ đẩy Không tồn tại (đã vô hiệu hóa) Từ chối - Lưu thành nhóm trò chuyện Bạn đã rời khỏi nhóm trò chuyện này vì lý do kỹ thuật Bạn chuẩn bị xác minh các khoá OMEMO cho tài khoản của chính bạn. Việc làm này chỉ an toàn nếu bạn đã đến liên kết này từ một nguồn đáng tin tưởng, chỉ có bạn mới có thể cho ra liên kết này trước đó. Tiếp tục diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 5b56baf80f7df09a96ac14c6e1a8850ca7eb0f1a..794eade98607b82c24c1ec8070a89e783e600e5c 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -993,7 +993,6 @@ 去电 · %s 无法从服务器删除账号 群聊 - 保存为群聊 搜索群聊 从服务器移除账号 请勿尝试恢复您尚未自行创建的备份! diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index c6d67029a376706267a8958d4f47dde75763a3f4..58d616b20698163221c79fc40f27d2bb9edcbffb 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -994,7 +994,6 @@ 無法從伺服器刪除帳戶 搜尋群組聊天 群組聊天 - 儲存為群組聊天 您已登出此帳戶 登入 隱藏通知 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index b510d207740bc17d7e748c22449cd6a1ecb82c17..a7acb7ecacb51174c2ddda2e838366a558c65e47 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -238,7 +238,6 @@ channel@conference.example.com/nick channel@conference.example.com Save as bookmark - Save as group chat Delete bookmark Destroy group chat Destroy channel From 1050c8b54e6524038e7e6a8ba5f4d755d3f5520b Mon Sep 17 00:00:00 2001 From: Grzegorz Szymaszek Date: Tue, 7 May 2024 06:38:16 +0000 Subject: [PATCH 19/29] Translated using Weblate (Polish) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/pl/ --- src/main/res/values-pl/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 921c2542abb4f50b441719df23878620d36a54dc..8fa55e8996b7fcc6fd5536e20b108a9412201f01 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -1097,4 +1097,10 @@ Odkrywanie kanałów używa usługi podmiotu trzeciego nazywanej <a href=https://search.jabber.network>search.jabber.network</a>.<br><br>Używanie tej funkcjonalności spowoduje wysłanie twojego adresu IP oraz kryteriów wyszukiwania. Sprawdź ich <a href=https://search.jabber.network/privacy>politykę prywatności</a> aby uzyskać więcej informacji. Zaproszenia od nieznajomych Akceptuj zaproszenia do rozmów grupowych od nieznajomych + Regularna kopia zapasowa + Utwórz teraz, zaplanuj regularną + Utwórz teraz kopię zapasową + Pełnoekranowe powiadomienia + Nieobsługiwana operacja + Pozwól tej aplikacji na pokazywanie powiadomień o przychodzącym połączeniu, które zajmują cały ekran gdy urządzenie jest zablokowane. \ No newline at end of file From b6d9a527833891b85110328ffcd65092a4b34190 Mon Sep 17 00:00:00 2001 From: nautilusx Date: Wed, 8 May 2024 07:54:56 +0000 Subject: [PATCH 20/29] Translated using Weblate (German) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/de/ --- src/main/res/values-de/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index c81638c9d96f0cc800d8585f6831a6fd5b1ccbb9..ed57c748f009837f867a6831a32dae2f71ac5016 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -1065,4 +1065,10 @@ Große Schrift Einladungen von Unbekannten Einladungen zu Gruppenchats von Unbekannten annehmen + Einmalig erstellen, wiederkehrend planen + Wiederkehrende Sicherung + Benachrichtigungen im Vollbildmodus + Nicht unterstützte Operation + Erlaube dieser App, Benachrichtigungen über eingehende Anrufe anzuzeigen, die den gesamten Bildschirm einnehmen, wenn das Gerät gesperrt ist. + Einmalige Sicherung erstellen \ No newline at end of file From d204f1fa5c61ef9612e73d088a8fd65f0a743756 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Wed, 8 May 2024 11:44:09 +0000 Subject: [PATCH 21/29] Translated using Weblate (Spanish) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/es/ --- src/main/res/values-es/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index 56f96bb529d315d13ddc40d5fe3f49c93dc7e889..af95feb8163f06f646b9398d346f1c96d9b71b06 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -1079,4 +1079,10 @@ Mostrar el contenido de la aplicación en el conmutador de aplicaciones y permitir la realización de capturas de pantalla Invitaciones de extraños Aceptar invitaciones a chats grupales de extraños + Crear una sola vez, Programar recurrentes + Crear una copia de seguridad única + Copia de seguridad periódica + Operación no soportada + Notificaciones a pantalla completa + Permite que esta aplicación muestre notificaciones de llamadas entrantes que ocupan toda la pantalla cuando el dispositivo está bloqueado. \ No newline at end of file From d8bcd6fc126474796cd2bad3f4ee80b917a4c877 Mon Sep 17 00:00:00 2001 From: Nifou Date: Wed, 8 May 2024 09:37:46 +0000 Subject: [PATCH 22/29] Translated using Weblate (French) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/fr/ --- src/main/res/values-fr/strings.xml | 97 ++++++++++++++++++++++++------ 1 file changed, 80 insertions(+), 17 deletions(-) diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index ed4c16b618aa2ee76ad2f6ebe231a0932a88e0f0..1c81d4d1cae652cedd4a6ce8ae9f33f4fb4547b8 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -78,7 +78,7 @@ Préparation pour l\'envoi des images Partage des fichiers. Veuillez patienter… Vider l\'historique - Vider l\'historique de la conversation + Effacer l\'historique de la conversation Êtes-vous sûr de vouloir supprimer tous les messages de cette conversation ? \n \n Avertissement : Cela ne supprimera pas les copies des messages qui sont stockés sur d\'autres appareils ou serveurs. @@ -165,7 +165,7 @@ Serveur incompatible Erreur de flux Erreur d\'ouverture du flux - Non chiffré + En clair OTR OpenPGP OMEMO @@ -277,7 +277,7 @@ Ignorer Attention : peut poser problème si l\'un des deux correspondants n\'a pas activé les mises à jour de disponibilité.\n\nVérifiez dans « Détails du contact » que vous y avez bien souscrit. Sécurité - Autoriser la correction + Correction des messages Permet à vos contacts d\'éditer leurs messages rétroactivement Paramètres avancés À utiliser avec précaution. @@ -466,8 +466,8 @@ Occupé lorsque l\'appareil est en mode silencieux Indisponible en mode vibreur Occupé lorsque l\'appareil est en mode vibreur - Paramètres de connexion avancés - Montrer le nom d\'hôte et le port lors du paramétrage d\'un compte + Nom d\'hôte et port + Montrer les paramètres étendus de connexion lors du paramétrage d\'un compte xmpp.example.com Se connecter avec certificat Impossible d\'analyser le certificat @@ -555,8 +555,8 @@ Courte Moyenne Longue - Partage de l\'utilisation - Informer vos contacts lorsque vous utilisez Conversations + Dernière connexion + Informer vos contacts de la dernière fois que vous avez utilisé l\'application Confidentialité Thème Choisir la palette de couleurs @@ -695,14 +695,14 @@ Impossible de récupérer la liste des appareils Impossible de récupérer les clés de chiffrement Indication : Dans certains cas, cela peut être résolu en vous ajoutant respectivement dans votre liste de contacts. - Êtes-vous sûr de vouloir désactiver le chiffrement OMEMO pour cette discussion ? + Êtes-vous sûr de vouloir désactiver le chiffrement OMEMO pour cette conversation ? \nCeci permettra à l\'administrateur de votre serveur de lire vos messages, mais cela peut être le seul moyen de communiquer avec des personnes utilisant un vieux client. Désactiver maintenant Brouillon : Chiffrement OMEMO OMEMO sera toujours utilisé pour des discussions à deux ou les groupes privés. - OMEMO sera utilisé par défaut pour les nouvelles discussions. - OMEMO devra être activé manuellement pour chaque nouvelle discussion. + OMEMO sera utilisé par défaut pour les nouvelles conversations. + OMEMO devra être activé manuellement pour chaque nouvelle conversation. Créer un raccourci Activé par défaut Désactivé par défaut @@ -730,7 +730,7 @@ Copier l\'adresse XMPP Partage de fichier HTTP pour S3 Recherche directe - Sur l\'écran de démarrage de Conversation, afficher le clavier et placer le curseur sur le champ recherche + Lors de l\'ajout de conversations, afficher le clavier et placer le curseur sur le champ de recherche Avatar du groupe Le serveur ne prend pas en charge les avatars pour les groupes Seul le propriétaire peut changer l\'avatar d\'un groupe @@ -785,8 +785,8 @@ Renvoyer un SMS Renvoyer SMS (%s) S\'il vous plaît, attendez (%s) - retour - Collage possible des broches possibles du presse-papiers. + Retour + Le code PIN du presse-papier a été automatiquement copié. Veuillez entrer votre code PIN à 6 chiffres. Êtes-vous sûr de vouloir quitter la procédure d\'inscription ? Oui @@ -970,10 +970,9 @@ La sauvegarde a débuté. Vous serez notifié une fois terminé. Vous avez quitté ce groupe pour des raisons techniques Supprimer le compte du serveur - %1$s souhaite obtenir la permission d\'accéder à votre carnet d\'adresses pour le faire correspondre à votre liste de contacts XMPP. -\nCela affichera les noms complets et les avatars de vos contacts. + %1$s traite votre liste de contacts sur votre appareil pour afficher les noms et les photo de profil des contacts correspondants sur XMPP. \n -\n%1$s ne lira que votre carnet d\'adresses et le comparera localement sans rien télécharger sur votre serveur. +\nVotre liste de contacts ne quitte jamais votre appareil ! ficher multimédia Rechercher des groupes Appel sortant (%s) · %s @@ -1028,5 +1027,69 @@ Cacher la notification Se déconnecter L\'intégration de la liste de contacts n\'est pas disponible - Supprimer & Fermer + Supprimer et archiver la conversation + Vous utilisez un appareil qui n\'est pas encore vérifié. Scannez le QR code sur votre autre appareil pour effectuer une vérification et éviter une attaque de l\'homme du milieu. + L\'intégration d\'appels n\'est pas diponible ! + Interface + Thème clair/sombre + Autoriser les captures d\'écran + Chiffrement de bout en bout + Afficher le contenu de l\'application dans le sélecteur d\'applications et autorise les captures d\'écran + Autorités de certification + Faire confiance aux certificats de l\'autorité de certification du système + Oblige la liaison du canal + La liaison du canal peut permettre de détecter les attaques de l\'homme du milieu + Clavier + Créer une sauvegarde ponctuelle + Créer une sauvegarde récurrente + Le code-barre ne contient pas les empreintes pour cette conversation. + Les conversations correspondantes ont été archivés. + Nouvelle conversation + Voulez-vous supprimer le favori %s et archiver la conversation ? + Voulez-vous supprimer le favori %s ? + Envoyer des rapports d\'incident + Rejoignez la Conversation + Chiffrement de bout en bout, confiance aveugle avant vérification, détection des attaques de l\'homme du milieu + Système d\'exploitation + Opération pas encore supportée + Notifications d\'utilisation + En agissant en tant que distributeur UnifiedPush, la connexion XMPP persistante, fiable et économique en batterie sera utilisée pour communiquer avec d\'autres applications compatibles comme Tusky, Ltt.rs, FluffyChat et d\'autres encore. + Notifications en plein écran + Autoriser cette application à afficher une notification en plein écran lors d\'un appel entrant lorsque l\'appareil est verrouillé. + Créer des sauvegardes ponctuelles ou récurrentes + Partager avec… + Bulles de conversation colorées + Afficher un fond différent pour distinguer les messages envoyés et reçus + Couleurs dynamiques + Couleurs systèmes (Material You) + La découverte de canaux utilise un service de tierce partie appelé <a href=https://search.jabber.network>search.jabber.network</a>.<br><br> Utiliser cette fonctionnalité va transmettre votre adresse IP et votre recherche à ce service. Voir leur <a href=https://search.jabber.network/privacy>Politique de confidentialité</a> pour plus d\'informations. + Archiver la conversation + Archiver cette conversation + Envoyer un message chiffré + Conversation archivée + Se rendre à la conversation + Votre contact utilise un appareil qui n\'est pas encore vérifié. Scannez son QR code pour effectuer une vérification et éviter une attaque de l\'homme du milieu. + Discuter + Aucun certificat client sélectionné ! + Thème, couleurs, captures d\'écran, saisie + Sécurité + Relai de notifications pour les applications de tierce partie compatibles avec UnifiedPush + Notifications + Taille de fichier, compression des images, qualité des vidéos + Période sans notifications, sonnerie, vibration, inconnus + Envoi + Réception + Téléchargement automatique + Apparence + Connection au serveur + Notifications d\'écriture, dernière connexion, disponibilité + Nom d\'hôte et port, Tor + Nom d\'hôte et port, Tor et découverte des canaux + Application + Interaction + Sur l\'appareil + Invitations d\'inconnus + Accepter les invitations aux conversations de groupes provenant d\'inconnus + Grande police + Augmenter la taille de la police dans les bulles de message \ No newline at end of file From b494c9389f5715121e3b3e50ddad36557b422292 Mon Sep 17 00:00:00 2001 From: dqjxelg2srtivm Date: Thu, 9 May 2024 08:23:01 +0000 Subject: [PATCH 23/29] Translated using Weblate (Japanese) Currently translated at 98.5% (1007 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/ja/ --- src/main/res/values-ja/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index b9e43564c48074cf50ace5ce10f6b888b841fe7d..7ea4a0de43a930c8d5ea40b5fb6b34ce08591cdd 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -1038,4 +1038,8 @@ 送受信メッセージの個別の背景色 メッセージの吹き出しのフォントサイズを大きくする 大きなフォント + …で共有 + ダイナミックカラー + 談話室束縛が必要です + 談話室束縛はいくつかの中間機攻撃を検知できます \ No newline at end of file From 3c217c0a9fea14c448739faf44fbae6e46ac6656 Mon Sep 17 00:00:00 2001 From: nautilusx Date: Thu, 9 May 2024 09:15:35 +0000 Subject: [PATCH 24/29] Translated using Weblate (German) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/de/ --- src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index ed57c748f009837f867a6831a32dae2f71ac5016..ae2f109ed0d31b275d0c43854c11185dafe264b4 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -1020,7 +1020,7 @@ Chat starten Kein Client-Zertifikat ausgewählt! Neuer Chat - Diesen Chat archivieren + Chat anschließend löschen Entsprechende Chats werden archiviert. Zum Chat wechseln Chat archivieren From 7772149666a699a9bd18098b82cd65e26f50ee7b Mon Sep 17 00:00:00 2001 From: ghose Date: Fri, 10 May 2024 04:43:01 +0000 Subject: [PATCH 25/29] Translated using Weblate (Galician) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/gl/ --- src/main/res/values-gl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index fa50e0463c94cc36fa9b181c486a9ca74b9bda77..2dcdfad3a3f3b6721a941c635f506c4d8b61f1b2 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -1022,7 +1022,7 @@ Arquivar conversa Novo chat Inciar chat - Arquivar este chat + Eliminar o chat Únete á Conversa Cambiar ao chat Sen certificado cliente seleccionado! From 9bcb3c7bb4957fcee5fa99257fdfaa6029a9b732 Mon Sep 17 00:00:00 2001 From: dqjxelg2srtivm Date: Thu, 9 May 2024 08:51:33 +0000 Subject: [PATCH 26/29] Translated using Weblate (Japanese) Currently translated at 98.9% (1011 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/ja/ --- src/main/res/values-ja/strings.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index 7ea4a0de43a930c8d5ea40b5fb6b34ce08591cdd..80adacec3efae3fe228f116718f432027d55eed9 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -961,7 +961,7 @@ ビデオ通話を拒否 着信中の通話 (%s) · %s XMPPアカウント - グループ + グループチャット 選択したファイルは、旧式のファイル形式ので復元できません グループを検索 発信中の通話 (%s) · %s @@ -1042,4 +1042,8 @@ ダイナミックカラー 談話室束縛が必要です 談話室束縛はいくつかの中間機攻撃を検知できます + バーコードにはこの会話の指紋が含まれていません。 + 全画面通知 + 端末がロックされているとき、このアプリが全画面を占める着信通知を表示することを許可する。 + UnifiedPush互換サードパーティアプリの通知中継 \ No newline at end of file From 57121faf436e02c3e15436e1ddee5616bbc9c7b4 Mon Sep 17 00:00:00 2001 From: SomeTr Date: Thu, 9 May 2024 11:47:18 +0000 Subject: [PATCH 27/29] Translated using Weblate (Ukrainian) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/uk/ --- src/main/res/values-uk/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 47bc3f8844d12b761f17494922f26824e60eb13c..1304601d117b869cc756ca14ba355c55d864e838 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -1072,7 +1072,7 @@ Кольорові бульбашки в розмовах Нова розмова Архівувати розмову - Архівувати цю розмову + Після цього видалити розмову Розмову заархівовано Перемкнути на чат Почати розмову From 48a7d53e3241ebf6dfed61103d8d2cbbadb0c4c3 Mon Sep 17 00:00:00 2001 From: licaon-kter Date: Thu, 9 May 2024 08:49:20 +0000 Subject: [PATCH 28/29] Translated using Weblate (Romanian) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/ro/ --- src/main/res/values-ro-rRO/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml index fbba31dec0b64ae4427bb8609aad550c645f3aee..5e7e8d7e500b107bbcfa4e3d5b6e494562d8f206 100644 --- a/src/main/res/values-ro-rRO/strings.xml +++ b/src/main/res/values-ro-rRO/strings.xml @@ -1037,7 +1037,7 @@ Culori dinamice Culori de sistem (Material You) Arhivează discuția - Arhivează această discuție + Apoi șterge și discuția Discuție arhivată Descoperirea de canale publice folosește un serviciu terț numit <a href=https://search.jabber.network>search.jabber.network</a>.<br><br>Folosind această funcție se va transmite adresa dumneavoastră IP și cuvintele căutate către acest serviciu. Pentru mai multe informații citiți <a href=https://search.jabber.network/privacy>Politica de confidențialitate</a> a serviciului. Treci la discuție From 0bc243b9507069227e7c9d8f377224e260ac4013 Mon Sep 17 00:00:00 2001 From: Outbreak2096 Date: Thu, 9 May 2024 12:18:07 +0000 Subject: [PATCH 29/29] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1022 of 1022 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/zh_Hans/ --- src/main/res/values-zh-rCN/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 794eade98607b82c24c1ec8070a89e783e600e5c..8383c6c5ccdb5f657835c70001bcad6f6b9ec195 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -1027,7 +1027,7 @@ 动态色彩 系统色彩 (Material You) 新聊天 - 存档此聊天 + 之后删除聊天 聊天已存档 切换到聊天 存档聊天