Less nosiy fallback for reactions

Stephen Paul Weber created

Show only the added emoji and nothing on removal

Change summary

src/main/java/eu/siacs/conversations/generator/MessageGenerator.java     | 18 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  4 
2 files changed, 13 insertions(+), 9 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/generator/MessageGenerator.java 🔗

@@ -202,7 +202,7 @@ public class MessageGenerator extends AbstractGenerator {
         return packet;
     }
 
-    public im.conversations.android.xmpp.model.stanza.Message reaction(final Conversational conversation, final Message inReplyTo, final String reactingTo, final Collection<String> ourReactions) {
+    public im.conversations.android.xmpp.model.stanza.Message reaction(final Conversational conversation, final Message inReplyTo, final String reactingTo, final Collection<String> ourReactions, final Collection<String> newReactions) {
         final boolean groupChat = conversation.getMode() == Conversational.MODE_MULTI;
         final Jid to = conversation.getJid().asBareJid();
         final im.conversations.android.xmpp.model.stanza.Message packet = new im.conversations.android.xmpp.model.stanza.Message();
@@ -214,20 +214,22 @@ public class MessageGenerator extends AbstractGenerator {
             reactions.addExtension(new Reaction(ourReaction));
         }
 
-        final var quote = QuoteHelper.quote(MessageUtils.prepareQuote(inReplyTo)) + "\n";
-        packet.setBody(quote + String.join(" ", ourReactions));
+        if (newReactions.size() > 0) {
+            final var quote = QuoteHelper.quote(MessageUtils.prepareQuote(inReplyTo)) + "\n";
+            packet.setBody(quote + String.join(" ", newReactions));
 
-        packet.addChild("reply", "urn:xmpp:reply:0")
+            packet.addChild("reply", "urn:xmpp:reply:0")
                 .setAttribute("to", inReplyTo.getCounterpart())
                 .setAttribute("id", reactingTo);
-        final var replyFallback = packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", "urn:xmpp:reply:0");
-        replyFallback.addChild("body", "urn:xmpp:fallback:0")
+            final var replyFallback = packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", "urn:xmpp:reply:0");
+            replyFallback.addChild("body", "urn:xmpp:fallback:0")
                 .setAttribute("start", "0")
                 .setAttribute("end", "" + quote.codePointCount(0, quote.length()));
 
 
-        final var fallback = packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", "urn:xmpp:reactions:0");
-        fallback.addChild("body", "urn:xmpp:fallback:0");
+            final var fallback = packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", "urn:xmpp:reactions:0");
+            fallback.addChild("body", "urn:xmpp:fallback:0");
+        }
 
         final var thread = inReplyTo.getThread();
         if (thread != null) packet.addChild(thread);

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

@@ -5273,6 +5273,8 @@ public class XmppConnectionService extends Service {
         if (message.getConversation() instanceof Conversation conversation) {
             final String reactToId;
             final Collection<Reaction> combinedReactions;
+            final var newReactions = new HashSet<>(reactions);
+            newReactions.removeAll(message.getAggregatedReactions().ourReactions);
             if (conversation.getMode() == Conversational.MODE_MULTI) {
                 final var self = conversation.getMucOptions().getSelf();
                 final String occupantId = self.getOccupantId();
@@ -5304,7 +5306,7 @@ public class XmppConnectionService extends Service {
                 return false;
             }
             final var reactionMessage =
-                    mMessageGenerator.reaction(conversation, message, reactToId, reactions);
+                    mMessageGenerator.reaction(conversation, message, reactToId, reactions, newReactions);
             sendMessagePacket(conversation.getAccount(), reactionMessage);
             message.setReactions(combinedReactions);
             updateMessage(message, false);