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">
-
+
+
- android:id="@+id/emojis"
- style="@style/Widget.Material3.MaterialButtonGroup.Connected"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="?dialogPreferredPadding" />
\ No newline at end of file
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index e7237085d6ad21ff7d38580d98068543f79ecfb3..627106a3569d8985f59653f67d334403dddbfdf4 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -1084,4 +1084,6 @@
Login mechanism
Could not add reaction
Add reaction…
+ Add reaction
+ More reactions