Fix or disable reactions on MUC PM

Stephen Paul Weber created

The new data model from upstream broke them and they're not very useful anyway.

Change summary

src/main/java/eu/siacs/conversations/entities/Conversation.java          | 2 
src/main/java/eu/siacs/conversations/entities/Message.java               | 2 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 1 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java        | 4 
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java      | 2 
5 files changed, 6 insertions(+), 5 deletions(-)

Detailed changes

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

@@ -785,7 +785,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
 
     public Reaction.Aggregated aggregatedReactionsFor(Message m, Function<Reaction, GetThumbnailForCid> thumbnailer) {
         Set<Reaction> result = new HashSet<>();
-        if (getMode() == MODE_MULTI) {
+        if (getMode() == MODE_MULTI && !m.isPrivateMessage()) {
             result.addAll(reactions.get(m.getServerMsgId()));
         } else if (m.getStatus() > Message.STATUS_RECEIVED) {
             result.addAll(reactions.get(m.getUuid()));

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

@@ -424,7 +424,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
     }
 
     public String replyId() {
-        if (conversation.getMode() == Conversation.MODE_MULTI) return getServerMsgId();
+        if (conversation.getMode() == Conversation.MODE_MULTI && !isPrivateMessage()) return getServerMsgId();
         final String remote = getRemoteMsgId();
         if (remote == null && getStatus() > STATUS_RECEIVED) return getUuid();
         return remote;

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

@@ -5315,6 +5315,7 @@ public class XmppConnectionService extends Service {
     }
 
     public boolean sendReactions(final Message message, final Collection<String> reactions) {
+        if (message.isPrivateMessage()) throw new IllegalArgumentException("Reactions to PM not implemented");
         if (message.getConversation() instanceof Conversation conversation) {
             final String reactToId;
             final Collection<Reaction> combinedReactions;

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

@@ -996,7 +996,7 @@ public class ConversationFragment extends XmppFragment
                 while (body.length() > 0 && Character.isWhitespace(body.charAt(0))) body.delete(0, 1);
             }
             if (conversation.getReplyTo() != null) {
-                if (Emoticons.isEmoji(body.toString().replaceAll("\\s", ""))) {
+                if (Emoticons.isEmoji(body.toString().replaceAll("\\s", "")) && conversation.getNextCounterpart() == null && !conversation.getReplyTo().isPrivateMessage()) {
                     final var aggregated = conversation.getReplyTo().getAggregatedReactions();
                     final ImmutableSet.Builder<String> reactionBuilder = new ImmutableSet.Builder<>();
                     reactionBuilder.addAll(aggregated.ourReactions);
@@ -1912,7 +1912,7 @@ public class ConversationFragment extends XmppFragment
                     reportAndBlock.setVisible(true);
                 }
             }
-            if (!encrypted) {
+            if (!encrypted && !m.isPrivateMessage()) {
                 addReaction.setVisible(!showError && !m.isDeleted());
             }
             if (!m.isFileOrImage()

src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java 🔗

@@ -1644,7 +1644,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
     }
 
     private void sendReactions(final Message message, final Collection<String> reactions) {
-        if (activity.xmppConnectionService.sendReactions(message, reactions)) {
+        if (!message.isPrivateMessage() && activity.xmppConnectionService.sendReactions(message, reactions)) {
             return;
         }
         Toast.makeText(activity, R.string.could_not_add_reaction, Toast.LENGTH_LONG).show();