From 8ca088cfedd2816a2a941612d5f9e8709a9f7cdb Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Sun, 9 Jun 2024 21:44:49 -0500 Subject: [PATCH] Fix fitzpatrick double-show For some reason, emoji with skintone modifier showed as doubled, a big one and then a little one. The span was being set correctly over the whole thing, and yet this happened. If we set it to one longer, it fixes the problem, and in all testing so far doesn't cause any new problems. I don't love this because it doesn't fully make sense to me, but it works so I'm putting it in for now. --- .../conversations/ui/adapter/MessageAdapter.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 95b1fbd9d0a62f3ecaa9a209d6f8e3adb9428020..3288572cc75930d60bffc49a94d45d0e6d33720e 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -712,11 +712,13 @@ public class MessageAdapter extends ArrayAdapter { } } for (final var emoji : EmojiManager.extractEmojisInOrderWithIndex(body.toString())) { - body.setSpan( - new RelativeSizeSpan(1.2f), - emoji.getCharIndex(), - emoji.getCharIndex() + emoji.getEmoji().getEmoji().length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + var end = emoji.getCharIndex() + emoji.getEmoji().getEmoji().length(); + if (body.length() > end) end++; // This fixes double-showing for skin tone emoji + body.setSpan( + new RelativeSizeSpan(1.2f), + emoji.getCharIndex(), + end, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if (processMarkup) StylingHelper.format(body, viewHolder.messageBody.getCurrentTextColor());