Reply with emoji is reaction

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/entities/Message.java               | 14 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 12 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java        | 10 
3 files changed, 18 insertions(+), 18 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Message.java 🔗

@@ -460,20 +460,6 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
         setInReplyTo(replyTo);
     }
 
-    public Message react(String emoji) {
-        final var m = reply();
-        if (getReactionsEl() == null) {
-            m.updateReaction(this, emoji);
-        } else if (mInReplyTo != null) {
-            // Try to send react-to-reaction to parent
-            m.updateReaction(mInReplyTo, emoji);
-        } else {
-            // Do not send react-to-reaction
-            m.updateReplyTo(this, new SpannableStringBuilder(emoji));
-        }
-        return m;
-    }
-
     public void updateReaction(final Message reactTo, String emoji) {
          Set<String> emojis = new HashSet<>();
         if (conversation instanceof Conversation) emojis = ((Conversation) conversation).findReactionsTo(reactTo.replyId(), null);

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -63,9 +63,10 @@ import com.cheogram.android.WebxdcUpdate;
 import com.google.common.base.Objects;
 import com.google.common.base.Optional;
 import com.google.common.base.Strings;
-import com.google.common.collect.Multimap;
 import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Multimap;
 import com.google.common.io.Files;
 
 import com.kedia.ogparser.JsoupProxy;
@@ -1242,8 +1243,13 @@ public class XmppConnectionService extends Service {
         final Message inReplyTo = lastMessageUuid == null ? null : conversation.findMessageWithUuid(lastMessageUuid);
         Message message = new Message(conversation, body, conversation.getNextEncryption());
         if (inReplyTo != null) {
-            if (Emoticons.isEmoji(body)) {
-                message = inReplyTo.react(body);
+            if (Emoticons.isEmoji(body.replaceAll("\\s", ""))) {
+                final var aggregated = inReplyTo.getAggregatedReactions();
+                final ImmutableSet.Builder<String> reactionBuilder = new ImmutableSet.Builder<>();
+                reactionBuilder.addAll(aggregated.ourReactions);
+                reactionBuilder.add(body.replaceAll("\\s", ""));
+                sendReactions(inReplyTo, reactionBuilder.build());
+                return;
             } else {
                 message = inReplyTo.reply();
             }

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

@@ -97,6 +97,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.google.common.base.Optional;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Ordering;
 
@@ -981,7 +982,14 @@ public class ConversationFragment extends XmppFragment
             }
             if (conversation.getReplyTo() != null) {
                 if (Emoticons.isEmoji(body.toString().replaceAll("\\s", ""))) {
-                    message = conversation.getReplyTo().react(body.toString().replaceAll("\\s", ""));
+                    final var aggregated = conversation.getReplyTo().getAggregatedReactions();
+                    final ImmutableSet.Builder<String> reactionBuilder = new ImmutableSet.Builder<>();
+                    reactionBuilder.addAll(aggregated.ourReactions);
+                    reactionBuilder.add(body.toString().replaceAll("\\s", ""));
+                    activity.xmppConnectionService.sendReactions(conversation.getReplyTo(), reactionBuilder.build());
+                    setupReply(null);
+                    messageSent();
+                    return;
                 } else {
                     message = conversation.getReplyTo().reply();
                     message.appendBody(body);