Hide single-char sigils while composing

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/utils/StylingHelper.java | 16 +++-
1 file changed, 11 insertions(+), 5 deletions(-)

Detailed changes

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

@@ -72,7 +72,8 @@ public class StylingHelper {
 			StyleSpan.class,
 			StrikethroughSpan.class,
 			TypefaceSpan.class,
-			ForegroundColorSpan.class
+			ForegroundColorSpan.class,
+			RelativeSizeSpan.class
 	);
 
 	public static void clear(final Editable editable) {
@@ -201,7 +202,15 @@ public class StylingHelper {
 		QuoteSpan[] quoteSpans = editable.getSpans(start, end, QuoteSpan.class);
 		@ColorInt int textColor = quoteSpans.length > 0 ? quoteSpans[0].getColor() : fallbackTextColor;
 		@ColorInt int keywordColor = transformColor(textColor);
-		editable.setSpan(new ForegroundColorSpan(keywordColor), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | (composing ? XHTML_REMOVE << Spanned.SPAN_USER_SHIFT : 0));
+		if (composing) {
+			if (end-start > 1) {
+				editable.setSpan(new ForegroundColorSpan(keywordColor), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | XHTML_REMOVE << Spanned.SPAN_USER_SHIFT);
+			} else {
+				editable.setSpan(new RelativeSizeSpan(0), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | XHTML_REMOVE << Spanned.SPAN_USER_SHIFT);
+			}
+		} else {
+			editable.setSpan(new ForegroundColorSpan(keywordColor), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+		}
 	}
 
 	private static
@@ -257,9 +266,6 @@ public class StylingHelper {
 			for (final var span : editable.getSpans(0, editable.length() - 1, QuoteSpan.class)) {
 				editable.removeSpan(span);
 			}
-			for (final var span : editable.getSpans(0, editable.length() - 1, RelativeSizeSpan.class)) {
-				editable.removeSpan(span);
-			}
 			format(editable, mEditText.getCurrentTextColor(), true);
 			mAdapter.handleTextQuotes(mEditText, editable, false);
 		}