From 6ee2b9c9dede47c508adc4aa932e62c07726228d Mon Sep 17 00:00:00 2001 From: Licaon_Kter Date: Mon, 30 Sep 2024 13:32:57 +0300 Subject: [PATCH 001/357] Upgrade transcoding lib --- build.gradle | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index e1fc3a11742c86c5dec65936df14994d2ef932e3..1fb7053fab4a17cf2f993471ce1343e28b734f44 100644 --- a/build.gradle +++ b/build.gradle @@ -69,10 +69,7 @@ dependencies { implementation 'com.makeramen:roundedimageview:2.3.0' //noinspection GradleDependency - implementation('com.github.natario1:Transcoder:v0.9.1') { - exclude group: 'com.otaliastudios.opengl', module: 'egloo' - } - implementation 'com.github.natario1:Egloo:v0.4.0' + implementation 'io.deepmedia.community:transcoder-android:0.11.1' implementation 'org.jxmpp:jxmpp-jid:1.0.3' implementation 'org.jxmpp:jxmpp-stringprep-libidn:1.0.3' From c83259188e1bd92369db30187e4631ac7c55b027 Mon Sep 17 00:00:00 2001 From: Grzegorz Szymaszek Date: Sat, 28 Sep 2024 10:55:49 +0000 Subject: [PATCH 002/357] Translated using Weblate (Polish) Currently translated at 100.0% (1041 of 1041 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 3718ee2d679db7eabdcfc581210c0c57156ad593..2ca80077e01d8b8963b3d1f62bbb6d6228f6e867 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -1121,4 +1121,6 @@ XEP-0388: rozszerzalny profil SASL XEP-0386: uproszczone nawiązywanie połączenia Mechanizm logowania + Nie można dodać reakcji + Dodaj reakcję… \ No newline at end of file From 96b1b1ec8d996f2b2f4c9cdc2de7404549cf218c Mon Sep 17 00:00:00 2001 From: solokot Date: Sun, 29 Sep 2024 17:05:58 +0000 Subject: [PATCH 003/357] Translated using Weblate (Russian) Currently translated at 100.0% (1041 of 1041 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/ru/ --- src/main/res/values-ru/strings.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index c59f6d8b1a9670f4680ffbd42960582c49a2fa75..29df77299edb1e9f3fdc2a575d9e7c9d4276c16b 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -390,8 +390,8 @@ Снять права участника Назначить администратором Снять административные права - Назначить администратором - Снять права администратора + Назначить владельцем + Снять права владельца Убрать из конференции Исключить Невозможно изменить принадлежность %s @@ -1136,4 +1136,6 @@ Создание разовых и повторяющихся резервных копий XEP-0388: расширяемый профиль SASL XEP-0386: привязка 2 + Невозможно добавить реакцию + Добавить реакцию… \ No newline at end of file From 9b08010429e2f7018a4dc3ba61ed09ee2ae468af Mon Sep 17 00:00:00 2001 From: solokot Date: Sun, 29 Sep 2024 17:09:47 +0000 Subject: [PATCH 004/357] Translated using Weblate (Russian) Currently translated at 50.0% (1 of 2 strings) Translation: Conversations/App Store Metadata (Conversations) Translate-URL: https://translate.codeberg.org/projects/conversations/app-store-metadata-conversations/ru/ --- .../fastlane/metadata/android/ru-RU/short_description.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/conversations/fastlane/metadata/android/ru-RU/short_description.txt b/src/conversations/fastlane/metadata/android/ru-RU/short_description.txt index 059ec9eb73419eb1821d52281dfecbdc1b403352..5c6dacbe88fc8c8fdcc30253e4ee170809141fe5 100644 --- a/src/conversations/fastlane/metadata/android/ru-RU/short_description.txt +++ b/src/conversations/fastlane/metadata/android/ru-RU/short_description.txt @@ -1 +1 @@ -Зашифрованный и простой в использовании XMPP мессенджер для вашего мобильного +Зашифрованный и простой в использовании XMPP-мессенджер для мобильного From 93733a259beded4f136bd5edac10ccd413f8eb03 Mon Sep 17 00:00:00 2001 From: solokot Date: Sun, 29 Sep 2024 17:11:34 +0000 Subject: [PATCH 005/357] Translated using Weblate (Russian) Currently translated at 100.0% (2 of 2 strings) Translation: Conversations/App Store Metadata (Quicksy) Translate-URL: https://translate.codeberg.org/projects/conversations/app-store-metadata-quicksy/ru/ --- .../fastlane/metadata/android/ru-RU/short_description.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/quicksy/fastlane/metadata/android/ru-RU/short_description.txt b/src/quicksy/fastlane/metadata/android/ru-RU/short_description.txt index 57eed896e40e578785f1132778f610b59946afdc..361fb2a1b3a1fbfca105c5fd93c827486875dde6 100644 --- a/src/quicksy/fastlane/metadata/android/ru-RU/short_description.txt +++ b/src/quicksy/fastlane/metadata/android/ru-RU/short_description.txt @@ -1 +1 @@ -Jabber/XMPP клиент с простым присоединением и простым нахождением контактов +Клиент Jabber/XMPP с простым присоединением и нахождением контактов From a692d163adfbce4b017aed7a5266dee36801e0f6 Mon Sep 17 00:00:00 2001 From: user11 Date: Mon, 30 Sep 2024 18:27:48 +0000 Subject: [PATCH 006/357] Translated using Weblate (Serbian) Currently translated at 100.0% (1041 of 1041 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/sr/ --- src/main/res/values-sr/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index e943409f41715470d8049f48d7555c1d19b98831..4bbf96623be9ef5453a62ae751334eaf26269f0e 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -1123,4 +1123,6 @@ Проблем са овером Прихвати непознат сертификат? Системске боје (Material You) + Није могуће ставити реакцију + Стави реакцију… \ No newline at end of file From 633019b4f1408f6348d458a607dfc5acb8276209 Mon Sep 17 00:00:00 2001 From: "lucasmz.dev" Date: Tue, 1 Oct 2024 06:38:03 +0000 Subject: [PATCH 007/357] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1041 of 1041 strings) Translation: Conversations/Android App (shared) Translate-URL: https://translate.codeberg.org/projects/conversations/android-app-shared/pt_BR/ --- src/main/res/values-pt-rBR/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 1eab24375b642d59398a7f7c64ea5c898672cf79..4bbff515c00e62d985912e0a05383fa57876e4fa 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -1109,4 +1109,6 @@ Teclado Notificações de engajamento Aplicação + Não pôde adicionar reação + Adicionar reação… \ No newline at end of file From 156dedee18634a374fd4d3163e4e97eba15b53a6 Mon Sep 17 00:00:00 2001 From: user11 Date: Mon, 30 Sep 2024 18:19:18 +0000 Subject: [PATCH 008/357] Translated using Weblate (Serbian) Currently translated at 100.0% (2 of 2 strings) Translation: Conversations/App Store Metadata (Conversations) Translate-URL: https://translate.codeberg.org/projects/conversations/app-store-metadata-conversations/sr/ --- .../fastlane/metadata/android/sr/full_description.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/conversations/fastlane/metadata/android/sr/full_description.txt b/src/conversations/fastlane/metadata/android/sr/full_description.txt index 10f602f71998e6e17c4b4cbfa9d271cc2d285c98..da2c4a60ee49438fd5c26aab58593aebd170c36f 100644 --- a/src/conversations/fastlane/metadata/android/sr/full_description.txt +++ b/src/conversations/fastlane/metadata/android/sr/full_description.txt @@ -28,7 +28,7 @@ Conversations ради уз сваки XMPP сервер. Међутим XMPP ј Ови XEP-ови су - за сада: -* XEP-0065: SOCKS5 Bytestreams (или mod_proxy65). Користи се за пребацивање фајлова ако су обе стране иза firewall-а (NAT). +* XEP-0065: SOCKS5 Bytestreams (или mod_proxy65). Користи се за пребацивање фајлова ако су обе стране иза firewall-а или NAT-а). * XEP-0163: Personal Eventing Protocol за аватаре * XEP-0191: Blocking command омогућава blacklist-овање спамера или блокирање контаката без њиховог уклањања из твог списка. * XEP-0198: Stream Management омогућава да XMPP преживи мање прекиде на мрежи и промене у TCP веза. From 2bba4e4ca3bc75f8a45674ce6486a591bdafc6aa Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 2 Oct 2024 19:04:59 +0200 Subject: [PATCH 009/357] improve logging for message/reactions restore --- src/main/java/eu/siacs/conversations/entities/Message.java | 2 +- src/main/java/eu/siacs/conversations/entities/Reaction.java | 6 +++++- .../eu/siacs/conversations/persistance/DatabaseBackend.java | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index 7fae1b9b4ba9608dd12786048e2080012f3f95d4..237525a0859ba010d807f8e9d7f2db746451e378 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -227,7 +227,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable this.reactions = reactions; } - public static Message fromCursor(Cursor cursor, Conversation conversation) { + public static Message fromCursor(final Cursor cursor, final Conversation conversation) { return new Message(conversation, cursor.getString(cursor.getColumnIndexOrThrow(UUID)), cursor.getString(cursor.getColumnIndexOrThrow(CONVERSATION)), diff --git a/src/main/java/eu/siacs/conversations/entities/Reaction.java b/src/main/java/eu/siacs/conversations/entities/Reaction.java index eff7be74b096c1acc7c6020a992d452e025009b4..28e0dbd85ebcca3a364bebd3e141a8271b15e72f 100644 --- a/src/main/java/eu/siacs/conversations/entities/Reaction.java +++ b/src/main/java/eu/siacs/conversations/entities/Reaction.java @@ -1,5 +1,7 @@ package eu.siacs.conversations.entities; +import android.util.Log; + import androidx.annotation.NonNull; import com.google.common.base.MoreObjects; @@ -19,6 +21,7 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; +import eu.siacs.conversations.Config; import eu.siacs.conversations.xmpp.Jid; import java.io.IOException; @@ -76,8 +79,9 @@ public class Reaction { return Collections.emptyList(); } try { - return GSON.fromJson(asString, new TypeToken>() {}.getType()); + return GSON.fromJson(asString, new TypeToken>() {}.getType()); } catch (final JsonSyntaxException e) { + Log.e(Config.LOGTAG,"could not restore reactions", e); return Collections.emptyList(); } } diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index 40ee39e2f3e6c856876eb1ffb12dea0d51b742a7..f21a7af9e7b5b79e5fe10c2eeb426348aef53281 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -820,8 +820,8 @@ public class DatabaseBackend extends SQLiteOpenHelper { while (cursor.moveToNext()) { try { list.add(0, Message.fromCursor(cursor, conversation)); - } catch (Exception e) { - Log.e(Config.LOGTAG, "unable to restore message"); + } catch (final Exception e) { + Log.e(Config.LOGTAG, "unable to restore message", e); } } cursor.close(); From 9fc32cd2210dbe90a9f2ef344c2751005780fee2 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 3 Oct 2024 13:43:13 +0200 Subject: [PATCH 010/357] add proguard rules for TypeToken --- proguard-rules.pro | 5 +++++ src/main/java/eu/siacs/conversations/entities/Reaction.java | 5 ++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/proguard-rules.pro b/proguard-rules.pro index c23fd72ae9e0740cf9826edbedf5784c2a836e2b..41f383ba7f6356edda802e376a39d7b1d6de0d1c 100644 --- a/proguard-rules.pro +++ b/proguard-rules.pro @@ -41,6 +41,11 @@ !transient ; } +# Needed for proper GSON deserialization +-keep class com.google.gson.reflect.TypeToken +-keep class * extends com.google.gson.reflect.TypeToken +-keep public class * implements java.lang.reflect.Type + # Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and # EnclosingMethod is required to use InnerClasses. -keepattributes Signature, InnerClasses, EnclosingMethod diff --git a/src/main/java/eu/siacs/conversations/entities/Reaction.java b/src/main/java/eu/siacs/conversations/entities/Reaction.java index 28e0dbd85ebcca3a364bebd3e141a8271b15e72f..54166a318a3cb4f6146027191c532c605a45725e 100644 --- a/src/main/java/eu/siacs/conversations/entities/Reaction.java +++ b/src/main/java/eu/siacs/conversations/entities/Reaction.java @@ -12,11 +12,11 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import com.google.common.collect.Multimaps; import com.google.common.collect.Ordering; -import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonSyntaxException; import com.google.gson.TypeAdapter; +import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; @@ -25,7 +25,6 @@ import eu.siacs.conversations.Config; import eu.siacs.conversations.xmpp.Jid; import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -80,7 +79,7 @@ public class Reaction { } try { return GSON.fromJson(asString, new TypeToken>() {}.getType()); - } catch (final JsonSyntaxException e) { + } catch (final IllegalArgumentException | JsonSyntaxException e) { Log.e(Config.LOGTAG,"could not restore reactions", e); return Collections.emptyList(); } From 53f719e98d80099dfe75b64cb43b11efa660b6d3 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 4 Oct 2024 12:06:35 +0200 Subject: [PATCH 011/357] add ability to add arbitrary emojis --- src/main/AndroidManifest.xml | 1 + .../conversations/ui/AddReactionActivity.java | 63 +++++++++++++++++++ .../siacs/conversations/ui/XmppActivity.java | 8 +++ src/main/res/layout/activity_add_reaction.xml | 25 ++++++++ src/main/res/layout/dialog_add_reaction.xml | 31 ++++++--- src/main/res/values/strings.xml | 2 + 6 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 src/main/java/eu/siacs/conversations/ui/AddReactionActivity.java create mode 100644 src/main/res/layout/activity_add_reaction.xml diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 382f0ebd9a9ab39c92fa7a58bbaa16e20bb2873d..b621147724ca0088d4bf5aad295d37e79b867d75 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -354,6 +354,7 @@ + finish()); + setTitle(R.string.add_reaction_title); + binding.emojiPicker.setOnEmojiPickedListener( + emojiViewItem -> addReaction(emojiViewItem.getEmoji())); + } + + private void addReaction(final String emoji) { + final var intent = getIntent(); + final var conversation = intent == null ? null : intent.getStringExtra("conversation"); + final var message = intent == null ? null : intent.getStringExtra("message"); + if (Strings.isNullOrEmpty(conversation) || Strings.isNullOrEmpty(message)) { + Toast.makeText(this, R.string.could_not_add_reaction, Toast.LENGTH_LONG).show(); + return; + } + final var c = xmppConnectionService.findConversationByUuid(conversation); + final var m = c == null ? null : c.findMessageWithUuid(message); + if (m == null) { + Toast.makeText(this, R.string.could_not_add_reaction, Toast.LENGTH_LONG).show(); + return; + } + final var aggregated = m.getAggregatedReactions(); + if (aggregated.ourReactions.contains(emoji)) { + xmppConnectionService.sendReactions(m, aggregated.ourReactions); + } else { + final ImmutableSet.Builder reactionBuilder = new ImmutableSet.Builder<>(); + reactionBuilder.addAll(aggregated.ourReactions); + reactionBuilder.add(emoji); + xmppConnectionService.sendReactions(m, reactionBuilder.build()); + } + finish(); + } + + @Override + protected void refreshUiReal() {} + + @Override + protected void onBackendConnected() {} +} diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java index 25d334915d86710184c0d3742b1505b011556cb0..0798994f6adc1d49be6a869f05a9da9d345fac1a 100644 --- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java @@ -326,6 +326,14 @@ public abstract class XmppActivity extends ActionBarActivity { dialog.dismiss(); }); } + viewBinding.more.setOnClickListener( + v -> { + dialog.dismiss(); + final var intent = new Intent(this, AddReactionActivity.class); + intent.putExtra("conversation", message.getConversation().getUuid()); + intent.putExtra("message", message.getUuid()); + startActivity(intent); + }); dialog.show(); } diff --git a/src/main/res/layout/activity_add_reaction.xml b/src/main/res/layout/activity_add_reaction.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a963b02c6b2385a3de0369be310100dbea25b8c --- /dev/null +++ b/src/main/res/layout/activity_add_reaction.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/res/layout/dialog_add_reaction.xml b/src/main/res/layout/dialog_add_reaction.xml index 4eda335e28bb81040dc78443985edd032887e113..6546f37f85f4c8dbad55928b331c011f605adb5b 100644 --- a/src/main/res/layout/dialog_add_reaction.xml +++ b/src/main/res/layout/dialog_add_reaction.xml @@ -1,18 +1,31 @@ - + + android:layout_height="wrap_content" + android:padding="?dialogPreferredPadding"> - + +