do not merge failed decryptions

Daniel Gultsch created

fixes #4314

Change summary

src/main/java/eu/siacs/conversations/entities/Message.java               | 10 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  2 
2 files changed, 9 insertions(+), 3 deletions(-)

Detailed changes

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

@@ -14,6 +14,7 @@ import org.json.JSONException;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
@@ -633,9 +634,8 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
                         message.getEncryption() != Message.ENCRYPTION_PGP &&
                         message.getEncryption() != Message.ENCRYPTION_DECRYPTION_FAILED &&
                         this.getType() == message.getType() &&
-                        //this.getStatus() == message.getStatus() &&
                         isStatusMergeable(this.getStatus(), message.getStatus()) &&
-                        this.getEncryption() == message.getEncryption() &&
+                        isEncryptionMergeable(this.getEncryption(),message.getEncryption()) &&
                         this.getCounterpart() != null &&
                         this.getCounterpart().equals(message.getCounterpart()) &&
                         this.edited() == message.edited() &&
@@ -668,6 +668,12 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
         );
     }
 
+    private static boolean isEncryptionMergeable(final int a, final int b) {
+        return a == b
+                && Arrays.asList(ENCRYPTION_NONE, ENCRYPTION_DECRYPTED, ENCRYPTION_AXOLOTL)
+                        .contains(a);
+    }
+
     public void setCounterparts(List<MucOptions.User> counterparts) {
         this.counterparts = counterparts;
     }