don't quote text when '>' is followed by numeber

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java |  2 
src/main/java/eu/siacs/conversations/utils/UIHelper.java            | 17 
2 files changed, 17 insertions(+), 2 deletions(-)

Detailed changes

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

@@ -351,7 +351,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
 			char current = body.length() > i ? body.charAt(i) : '\n';
 			if (lineStart == -1) {
 				if (previous == '\n') {
-					if (current == '>' || current == '\u00bb') {
+					if ((current == '>' && !UIHelper.isPositionFollowedByNumber(body,i)) || current == '\u00bb') {
 						// Line start with quote
 						lineStart = i;
 						if (quoteStart == -1) quoteStart = i;

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

@@ -202,7 +202,7 @@ public class UIHelper {
 				for(String l : lines) {
 					if (l.length() > 0) {
 						char first = l.charAt(0);
-						if (first != '>' && first != '\u00bb') {
+						if ((first != '>' || isPositionFollowedByNumber(l,0)) && first != '\u00bb') {
 							String line = l.trim();
 							if (line.isEmpty()) {
 								continue;
@@ -226,6 +226,21 @@ public class UIHelper {
 		}
 	}
 
+	public static boolean isPositionFollowedByNumber(CharSequence body, int pos) {
+		boolean previousWasNumber = false;
+		for (int i = pos +1; i < body.length(); i++) {
+			char c = body.charAt(i);
+			if (Character.isDigit(body.charAt(i))) {
+				previousWasNumber = true;
+			} else if (previousWasNumber && (c == '.' || c == ',')) {
+				previousWasNumber = false;
+			} else {
+				return Character.isWhitespace(c) && previousWasNumber;
+			}
+		}
+		return previousWasNumber;
+	}
+
 	public static String getFileDescriptionString(final Context context, final Message message) {
 		if (message.getType() == Message.TYPE_IMAGE) {
 			return context.getString(R.string.image);