Use less quote for reaction fallback

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  2 
src/main/java/eu/siacs/conversations/ui/util/QuoteHelper.java            |  6 
src/main/java/eu/siacs/conversations/utils/MessageUtils.java             | 10 
3 files changed, 15 insertions(+), 3 deletions(-)

Detailed changes

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

@@ -4667,7 +4667,7 @@ public class XmppConnectionService extends Service {
             final var packet =
                     mMessageGenerator.reaction(reactTo, typeGroupChat, message, reactToId, reactions);
 
-            final var quote = QuoteHelper.quote(MessageUtils.prepareQuote(message)) + "\n";
+            final var quote = QuoteHelper.quote(MessageUtils.prepareQuote(message, 1, 2)) + "\n\n";
             final var body  = quote + String.join(" ", newReactions);
             if (conversation.getNextEncryption() == Message.ENCRYPTION_AXOLOTL && newReactions.size() > 0) {
                 FILE_ATTACHMENT_EXECUTOR.execute(() -> {

src/main/java/eu/siacs/conversations/ui/util/QuoteHelper.java 🔗

@@ -98,6 +98,10 @@ public class QuoteHelper {
     }
 
     public static boolean isNestedTooDeeply(CharSequence line) {
+        return isNestedTooDeeply(line, Config.QUOTING_MAX_DEPTH);
+    }
+
+    public static boolean isNestedTooDeeply(CharSequence line, int maxDepth) {
         if (isPositionQuoteStart(line, 0)) {
             int nestingDepth = 1;
             for (int i = 1; i < line.length(); i++) {
@@ -107,7 +111,7 @@ public class QuoteHelper {
                     break;
                 }
             }
-            return nestingDepth >= (Config.QUOTING_MAX_DEPTH);
+            return nestingDepth >= maxDepth;
         }
         return false;
     }

src/main/java/eu/siacs/conversations/utils/MessageUtils.java 🔗

@@ -30,6 +30,7 @@
 package eu.siacs.conversations.utils;
 
 import com.google.common.base.Strings;
+import eu.siacs.conversations.Config;
 import eu.siacs.conversations.entities.Conversational;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.http.AesGcmURL;
@@ -46,6 +47,10 @@ public class MessageUtils {
     public static final String EMPTY_STRING = "";
 
     public static String prepareQuote(final Message message) {
+        return prepareQuote(message, Config.QUOTING_MAX_DEPTH, -1);
+    }
+
+    public static String prepareQuote(final Message message, int maxDepth, int maxLines) {
         final StringBuilder builder = new StringBuilder();
         final String body;
         if (message.hasMeCommand()) {
@@ -63,14 +68,17 @@ public class MessageUtils {
         } else {
             body = message.getQuoteableBody();
         }
+        int lines = 0;
         for (String line : body.split("\n")) {
-            if (!(line.length() <= 0) && QuoteHelper.isNestedTooDeeply(line)) {
+            if (!(line.length() <= 0) && QuoteHelper.isNestedTooDeeply(line, maxDepth)) {
                 continue;
             }
+            if (maxLines > 0 && maxLines <= lines) break;
             if (builder.length() != 0) {
                 builder.append('\n');
             }
             builder.append(line.trim());
+            lines++;
         }
         return builder.toString();
     }