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.
@@ -712,11 +712,13 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
}
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());