diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index b7b964c67b40a2c118012ff7732e14a746755066..a014cd480879a7b22d2b8085d484e7441d05ac7e 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -1016,6 +1016,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable final Element html = getHtml(); if (html == null || Build.VERSION.SDK_INT < 24) { spannableBody = new SpannableStringBuilder(MessageUtils.filterLtrRtl(getBody()).trim()); + spannableBody.setSpan(PLAIN_TEXT_SPAN, 0, spannableBody.length(), 0); // Let adapter know it can do more formatting } else { boolean[] anyfallbackimg = new boolean[]{ false }; @@ -1743,4 +1744,6 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable message.setType(isFile ? Message.TYPE_PRIVATE_FILE : Message.TYPE_PRIVATE); return true; } + + public static class PlainTextSpan {} } diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index 1691e75dd9406e0ff7a1bf62402939e2524f051a..97e6930444089023f59634ded66c163d5615ad3d 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -612,6 +612,7 @@ public class MessageAdapter extends ArrayAdapter { viewHolder.messageBody.setVisibility(View.VISIBLE); final String nick = UIHelper.getMessageDisplayName(message); SpannableStringBuilder body = getSpannableBody(message); + final var processMarkup = body.getSpans(0, body.length(), Message.PlainTextSpan.class).length > 0; boolean hasMeCommand = message.hasMeCommand(); if (hasMeCommand) { body = body.replace(0, Message.ME_COMMAND.length(), nick + " "); @@ -633,7 +634,7 @@ public class MessageAdapter extends ArrayAdapter { body.removeSpan(quote); applyQuoteSpan(viewHolder.messageBody, body, start, end, bubbleColor, true); } - boolean startsWithQuote = handleTextQuotes(viewHolder.messageBody, body, bubbleColor, true); + boolean startsWithQuote = processMarkup ? handleTextQuotes(viewHolder.messageBody, body, bubbleColor, true) : false; if (!message.isPrivateMessage()) { if (hasMeCommand) { body.setSpan( @@ -717,7 +718,7 @@ public class MessageAdapter extends ArrayAdapter { } } - StylingHelper.format(body, viewHolder.messageBody.getCurrentTextColor()); + if (processMarkup) StylingHelper.format(body, viewHolder.messageBody.getCurrentTextColor()); MyLinkify.addLinks(body, message.getConversation().getAccount(), message.getConversation().getJid()); if (highlightedTerm != null) { StylingHelper.highlight(viewHolder.messageBody, body, highlightedTerm); @@ -1593,6 +1594,7 @@ public class MessageAdapter extends ArrayAdapter { if (largeFont) { textView.setTextAppearance( com.google.android.material.R.style.TextAppearance_Material3_BodyLarge); + textView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 22); } else { textView.setTextAppearance( com.google.android.material.R.style.TextAppearance_Material3_BodyMedium); diff --git a/src/main/java/eu/siacs/conversations/utils/StylingHelper.java b/src/main/java/eu/siacs/conversations/utils/StylingHelper.java index 95e51eebe427d1b4adce360f8a1ae354740e4079..1dc1c268f69ebbf330e4b7ad6835ce4a5a131451 100644 --- a/src/main/java/eu/siacs/conversations/utils/StylingHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/StylingHelper.java @@ -32,6 +32,7 @@ package eu.siacs.conversations.utils; import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; +import android.preference.PreferenceManager; import android.text.Editable; import android.text.ParcelableSpan; import android.text.Spannable; @@ -251,6 +252,8 @@ public class StylingHelper { @Override public void afterTextChanged(Editable editable) { clear(editable); + final var p = PreferenceManager.getDefaultSharedPreferences(mEditText.getContext()); + if (!p.getBoolean("compose_rich_text", mEditText.getContext().getResources().getBoolean(R.bool.compose_rich_text))) return; for (final var span : editable.getSpans(0, editable.length() - 1, QuoteSpan.class)) { editable.removeSpan(span); } diff --git a/src/main/res/values/bools.xml b/src/main/res/values/bools.xml index b3628dc8a6758cedd0240e46e2cd4820a562717b..c745885e5be19c3316877736bc4bd1eea0d0f95a 100644 --- a/src/main/res/values/bools.xml +++ b/src/main/res/values/bools.xml @@ -2,4 +2,5 @@ true true + true diff --git a/src/main/res/xml/preferences_interface.xml b/src/main/res/xml/preferences_interface.xml index a4d54ea8dc01239a544bb79658c347f4be0911e3..a08013b4211d4362bf9ca35660b682e36253f959 100644 --- a/src/main/res/xml/preferences_interface.xml +++ b/src/main/res/xml/preferences_interface.xml @@ -142,6 +142,12 @@ android:key="message_autocomplete" android:summary="@string/pref_message_autocomplete_summary" android:title="@string/pref_message_autocomplete" /> +