From a51013cc004e57cf735b3169c8a44f541b54782f Mon Sep 17 00:00:00 2001 From: Hocuri Date: Wed, 20 Nov 2024 13:59:50 +0100 Subject: [PATCH] fix: Show composite emojis enlarged, too (#3427) fix: Show composite emojis enlarged, too There are a lot of composite emojis like the flags and the family emojis. Here, the grapheme starts with an emoji, but then come some other characters that modify the first emoji (e.g. all flags start with the flag emoji). This PR shows those as big, too, by checking whether a grapheme _starts_ with an emoji to determine whether it's an emoji. --------- Co-authored-by: adb --- .../emoji/AutoScaledEmojiTextView.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/components/emoji/AutoScaledEmojiTextView.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/AutoScaledEmojiTextView.java index 08777fc15..a4521fbc2 100644 --- a/src/main/java/org/thoughtcrime/securesms/components/emoji/AutoScaledEmojiTextView.java +++ b/src/main/java/org/thoughtcrime/securesms/components/emoji/AutoScaledEmojiTextView.java @@ -22,7 +22,7 @@ public class AutoScaledEmojiTextView extends AppCompatTextView { with spaces, *, # and 0-9 removed and the corresponding emojis added explicitly to avoid matching normal text with such characters */ - private static final Pattern emojiRegex = Pattern.compile("([๐Ÿป-๐Ÿฟ๐Ÿ˜€๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜๐Ÿ˜†๐Ÿ˜…๐Ÿคฃ๐Ÿ˜‚๐Ÿ™‚๐Ÿ™ƒ๐Ÿซ ๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‡๐Ÿฅฐ๐Ÿ˜๐Ÿคฉ๐Ÿ˜˜๐Ÿ˜—โ˜บ๐Ÿ˜š๐Ÿ˜™๐Ÿฅฒ๐Ÿ˜‹๐Ÿ˜›๐Ÿ˜œ๐Ÿคช๐Ÿ˜๐Ÿค‘๐Ÿค—๐Ÿคญ๐Ÿซข๐Ÿซฃ๐Ÿคซ๐Ÿค”๐Ÿซก๐Ÿค๐Ÿคจ๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ถ๐Ÿซฅ๐Ÿ˜๐Ÿ˜’๐Ÿ™„๐Ÿ˜ฌ๐Ÿคฅ๐Ÿซจ๐Ÿ˜Œ๐Ÿ˜”๐Ÿ˜ช๐Ÿคค๐Ÿ˜ด๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคข๐Ÿคฎ๐Ÿคง๐Ÿฅต๐Ÿฅถ๐Ÿฅด๐Ÿ˜ต๐Ÿคฏ๐Ÿค ๐Ÿฅณ๐Ÿฅธ๐Ÿ˜Ž๐Ÿค“๐Ÿง๐Ÿ˜•๐Ÿซค๐Ÿ˜Ÿ๐Ÿ™โ˜น๐Ÿ˜ฎ๐Ÿ˜ฏ๐Ÿ˜ฒ๐Ÿ˜ณ๐Ÿฅบ๐Ÿฅน๐Ÿ˜ฆ-๐Ÿ˜จ๐Ÿ˜ฐ๐Ÿ˜ฅ๐Ÿ˜ข๐Ÿ˜ญ๐Ÿ˜ฑ๐Ÿ˜–๐Ÿ˜ฃ๐Ÿ˜ž๐Ÿ˜“๐Ÿ˜ฉ๐Ÿ˜ซ๐Ÿฅฑ๐Ÿ˜ค๐Ÿ˜ก๐Ÿ˜ ๐Ÿคฌ๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’€โ˜ ๐Ÿ’ฉ๐Ÿคก๐Ÿ‘น-๐Ÿ‘ป๐Ÿ‘ฝ๐Ÿ‘พ๐Ÿค–๐Ÿ˜บ๐Ÿ˜ธ๐Ÿ˜น๐Ÿ˜ป-๐Ÿ˜ฝ๐Ÿ™€๐Ÿ˜ฟ๐Ÿ˜พ๐Ÿ™ˆ-๐Ÿ™Š๐Ÿ’Œ๐Ÿ’˜๐Ÿ’๐Ÿ’–๐Ÿ’—๐Ÿ’“๐Ÿ’ž๐Ÿ’•๐Ÿ’Ÿโฃ๐Ÿ’”โค๐Ÿฉท๐Ÿงก๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿฉต๐Ÿ’œ๐ŸคŽ๐Ÿ–ค๐Ÿฉถ๐Ÿค๐Ÿ’‹๐Ÿ’ฏ๐Ÿ’ข๐Ÿ’ฅ๐Ÿ’ซ๐Ÿ’ฆ๐Ÿ’จ๐Ÿ•ณ๐Ÿ’ฌ๐Ÿ—จ๐Ÿ—ฏ๐Ÿ’ญ๐Ÿ’ค๐Ÿ‘‹๐Ÿคš๐Ÿ–โœ‹๐Ÿ––๐Ÿซฑ-๐Ÿซด๐Ÿซท๐Ÿซธ๐Ÿ‘Œ๐ŸคŒ๐ŸคโœŒ๐Ÿคž๐Ÿซฐ๐ŸคŸ๐Ÿค˜๐Ÿค™๐Ÿ‘ˆ๐Ÿ‘‰๐Ÿ‘†๐Ÿ–•๐Ÿ‘‡โ˜๐Ÿซต๐Ÿ‘๐Ÿ‘ŽโœŠ๐Ÿ‘Š๐Ÿค›๐Ÿคœ๐Ÿ‘๐Ÿ™Œ๐Ÿซถ๐Ÿ‘๐Ÿคฒ๐Ÿค๐Ÿ™โœ๐Ÿ’…๐Ÿคณ๐Ÿ’ช๐Ÿฆพ๐Ÿฆฟ๐Ÿฆต๐Ÿฆถ๐Ÿ‘‚๐Ÿฆป๐Ÿ‘ƒ๐Ÿง ๐Ÿซ€๐Ÿซ๐Ÿฆท๐Ÿฆด๐Ÿ‘€๐Ÿ‘๐Ÿ‘…๐Ÿ‘„๐Ÿซฆ๐Ÿ‘ถ๐Ÿง’๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿง‘๐Ÿ‘ฑ๐Ÿ‘จ๐Ÿง”๐Ÿ‘ฉ๐Ÿง“๐Ÿ‘ด๐Ÿ‘ต๐Ÿ™๐Ÿ™Ž๐Ÿ™…๐Ÿ™†๐Ÿ’๐Ÿ™‹๐Ÿง๐Ÿ™‡๐Ÿคฆ๐Ÿคท๐Ÿ‘ฎ๐Ÿ•ต๐Ÿ’‚๐Ÿฅท๐Ÿ‘ท๐Ÿซ…๐Ÿคด๐Ÿ‘ธ๐Ÿ‘ณ๐Ÿ‘ฒ๐Ÿง•๐Ÿคต๐Ÿ‘ฐ๐Ÿคฐ๐Ÿซƒ๐Ÿซ„๐Ÿคฑ๐Ÿ‘ผ๐ŸŽ…๐Ÿคถ๐Ÿฆธ๐Ÿฆน๐Ÿง™-๐ŸงŸ๐ŸงŒ๐Ÿ’†๐Ÿ’‡๐Ÿšถ๐Ÿง๐ŸงŽ๐Ÿƒ๐Ÿ’ƒ๐Ÿ•บ๐Ÿ•ด๐Ÿ‘ฏ๐Ÿง–๐Ÿง—๐Ÿคบ๐Ÿ‡โ›ท๐Ÿ‚๐ŸŒ๐Ÿ„๐Ÿšฃ๐ŸŠโ›น๐Ÿ‹๐Ÿšด๐Ÿšต๐Ÿคธ๐Ÿคผ-๐Ÿคพ๐Ÿคน๐Ÿง˜๐Ÿ›€๐Ÿ›Œ๐Ÿ‘ญ๐Ÿ‘ซ๐Ÿ‘ฌ๐Ÿ’๐Ÿ’‘๐Ÿ—ฃ๐Ÿ‘ค๐Ÿ‘ฅ๐Ÿซ‚๐Ÿ‘ช๐Ÿ‘ฃ๐Ÿฆฐ๐Ÿฆฑ๐Ÿฆณ๐Ÿฆฒ๐Ÿต๐Ÿ’๐Ÿฆ๐Ÿฆง๐Ÿถ๐Ÿ•๐Ÿฆฎ๐Ÿฉ๐Ÿบ๐ŸฆŠ๐Ÿฆ๐Ÿฑ๐Ÿˆ๐Ÿฆ๐Ÿฏ๐Ÿ…๐Ÿ†๐Ÿด๐ŸซŽ๐Ÿซ๐ŸŽ๐Ÿฆ„๐Ÿฆ“๐ŸฆŒ๐Ÿฆฌ๐Ÿฎ๐Ÿ‚-๐Ÿ„๐Ÿท๐Ÿ–๐Ÿ—๐Ÿฝ๐Ÿ๐Ÿ‘๐Ÿ๐Ÿช๐Ÿซ๐Ÿฆ™๐Ÿฆ’๐Ÿ˜๐Ÿฆฃ๐Ÿฆ๐Ÿฆ›๐Ÿญ๐Ÿ๐Ÿ€๐Ÿน๐Ÿฐ๐Ÿ‡๐Ÿฟ๐Ÿฆซ๐Ÿฆ”๐Ÿฆ‡๐Ÿป๐Ÿจ๐Ÿผ๐Ÿฆฅ๐Ÿฆฆ๐Ÿฆจ๐Ÿฆ˜๐Ÿฆก๐Ÿพ๐Ÿฆƒ๐Ÿ”๐Ÿ“๐Ÿฃ-๐Ÿง๐Ÿ•Š๐Ÿฆ…๐Ÿฆ†๐Ÿฆข๐Ÿฆ‰๐Ÿฆค๐Ÿชถ๐Ÿฆฉ๐Ÿฆš๐Ÿฆœ๐Ÿชฝ๐Ÿชฟ๐Ÿธ๐ŸŠ๐Ÿข๐ŸฆŽ๐Ÿ๐Ÿฒ๐Ÿ‰๐Ÿฆ•๐Ÿฆ–๐Ÿณ๐Ÿ‹๐Ÿฌ๐Ÿฆญ๐ŸŸ-๐Ÿก๐Ÿฆˆ๐Ÿ™๐Ÿš๐Ÿชธ๐Ÿชผ๐ŸŒ๐Ÿฆ‹๐Ÿ›-๐Ÿ๐Ÿชฒ๐Ÿž๐Ÿฆ—๐Ÿชณ๐Ÿ•ท๐Ÿ•ธ๐Ÿฆ‚๐ŸฆŸ๐Ÿชฐ๐Ÿชฑ๐Ÿฆ ๐Ÿ’๐ŸŒธ๐Ÿ’ฎ๐Ÿชท๐Ÿต๐ŸŒน๐Ÿฅ€๐ŸŒบ-๐ŸŒผ๐ŸŒท๐Ÿชป๐ŸŒฑ๐Ÿชด๐ŸŒฒ-๐ŸŒต๐ŸŒพ๐ŸŒฟโ˜˜๐Ÿ€-๐Ÿƒ๐Ÿชน๐Ÿชบ๐Ÿ„๐Ÿ‡-๐Ÿ๐Ÿฅญ๐ŸŽ-๐Ÿ“๐Ÿซ๐Ÿฅ๐Ÿ…๐Ÿซ’๐Ÿฅฅ๐Ÿฅ‘๐Ÿ†๐Ÿฅ”๐Ÿฅ•๐ŸŒฝ๐ŸŒถ๐Ÿซ‘๐Ÿฅ’๐Ÿฅฌ๐Ÿฅฆ๐Ÿง„๐Ÿง…๐Ÿฅœ๐Ÿซ˜๐ŸŒฐ๐Ÿซš๐Ÿซ›๐Ÿž๐Ÿฅ๐Ÿฅ–๐Ÿซ“๐Ÿฅจ๐Ÿฅฏ๐Ÿฅž๐Ÿง‡๐Ÿง€๐Ÿ–๐Ÿ—๐Ÿฅฉ๐Ÿฅ“๐Ÿ”๐ŸŸ๐Ÿ•๐ŸŒญ๐Ÿฅช๐ŸŒฎ๐ŸŒฏ๐Ÿซ”๐Ÿฅ™๐Ÿง†๐Ÿฅš๐Ÿณ๐Ÿฅ˜๐Ÿฒ๐Ÿซ•๐Ÿฅฃ๐Ÿฅ—๐Ÿฟ๐Ÿงˆ๐Ÿง‚๐Ÿฅซ๐Ÿฑ๐Ÿ˜-๐Ÿ๐Ÿ ๐Ÿข-๐Ÿฅ๐Ÿฅฎ๐Ÿก๐ŸฅŸ-๐Ÿฅก๐Ÿฆ€๐Ÿฆž๐Ÿฆ๐Ÿฆ‘๐Ÿฆช๐Ÿฆ-๐Ÿช๐ŸŽ‚๐Ÿฐ๐Ÿง๐Ÿฅง๐Ÿซ-๐Ÿฏ๐Ÿผ๐Ÿฅ›โ˜•๐Ÿซ–๐Ÿต๐Ÿถ๐Ÿพ๐Ÿท-๐Ÿป๐Ÿฅ‚๐Ÿฅƒ๐Ÿซ—๐Ÿฅค๐Ÿง‹๐Ÿงƒ๐Ÿง‰๐ŸงŠ๐Ÿฅข๐Ÿฝ๐Ÿด๐Ÿฅ„๐Ÿ”ช๐Ÿซ™๐Ÿบ๐ŸŒ-๐ŸŒ๐Ÿ—บ๐Ÿ—พ๐Ÿงญ๐Ÿ”โ›ฐ๐ŸŒ‹๐Ÿ—ป๐Ÿ•๐Ÿ–๐Ÿœ-๐ŸŸ๐Ÿ›๐Ÿ—๐Ÿงฑ๐Ÿชจ๐Ÿชต๐Ÿ›–๐Ÿ˜๐Ÿš๐Ÿ -๐Ÿฆ๐Ÿจ-๐Ÿญ๐Ÿฏ๐Ÿฐ๐Ÿ’’๐Ÿ—ผ๐Ÿ—ฝโ›ช๐Ÿ•Œ๐Ÿ›•๐Ÿ•โ›ฉ๐Ÿ•‹โ›ฒโ›บ๐ŸŒ๐ŸŒƒ๐Ÿ™๐ŸŒ„-๐ŸŒ‡๐ŸŒ‰โ™จ๐ŸŽ ๐Ÿ›๐ŸŽก๐ŸŽข๐Ÿ’ˆ๐ŸŽช๐Ÿš‚-๐ŸšŠ๐Ÿš๐Ÿšž๐Ÿš‹-๐ŸšŽ๐Ÿš-๐Ÿš™๐Ÿ›ป๐Ÿšš-๐Ÿšœ๐ŸŽ๐Ÿ๐Ÿ›ต๐Ÿฆฝ๐Ÿฆผ๐Ÿ›บ๐Ÿšฒ๐Ÿ›ด๐Ÿ›น๐Ÿ›ผ๐Ÿš๐Ÿ›ฃ๐Ÿ›ค๐Ÿ›ขโ›ฝ๐Ÿ›ž๐Ÿšจ๐Ÿšฅ๐Ÿšฆ๐Ÿ›‘๐Ÿšงโš“๐Ÿ›Ÿโ›ต๐Ÿ›ถ๐Ÿšค๐Ÿ›ณโ›ด๐Ÿ›ฅ๐Ÿšขโœˆ๐Ÿ›ฉ๐Ÿ›ซ๐Ÿ›ฌ๐Ÿช‚๐Ÿ’บ๐Ÿš๐ŸšŸ-๐Ÿšก๐Ÿ›ฐ๐Ÿš€๐Ÿ›ธ๐Ÿ›Ž๐ŸงณโŒ›โณโŒšโฐ-โฒ๐Ÿ•ฐ๐Ÿ•›๐Ÿ•ง๐Ÿ•๐Ÿ•œ๐Ÿ•‘๐Ÿ•๐Ÿ•’๐Ÿ•ž๐Ÿ•“๐Ÿ•Ÿ๐Ÿ•”๐Ÿ• ๐Ÿ••๐Ÿ•ก๐Ÿ•–๐Ÿ•ข๐Ÿ•—๐Ÿ•ฃ๐Ÿ•˜๐Ÿ•ค๐Ÿ•™๐Ÿ•ฅ๐Ÿ•š๐Ÿ•ฆ๐ŸŒ‘-๐ŸŒœ๐ŸŒกโ˜€๐ŸŒ๐ŸŒž๐Ÿชโญ๐ŸŒŸ๐ŸŒ ๐ŸŒŒโ˜โ›…โ›ˆ๐ŸŒค-๐ŸŒฌ๐ŸŒ€๐ŸŒˆ๐ŸŒ‚โ˜‚โ˜”โ›ฑโšกโ„โ˜ƒโ›„โ˜„๐Ÿ”ฅ๐Ÿ’ง๐ŸŒŠ๐ŸŽƒ๐ŸŽ„๐ŸŽ†๐ŸŽ‡๐Ÿงจโœจ๐ŸŽˆ-๐ŸŽ‹๐ŸŽ-๐ŸŽ‘๐Ÿงง๐ŸŽ€๐ŸŽ๐ŸŽ—๐ŸŽŸ๐ŸŽซ๐ŸŽ–๐Ÿ†๐Ÿ…๐Ÿฅ‡-๐Ÿฅ‰โšฝโšพ๐ŸฅŽ๐Ÿ€๐Ÿ๐Ÿˆ๐Ÿ‰๐ŸŽพ๐Ÿฅ๐ŸŽณ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿฅ๐Ÿ“๐Ÿธ๐ŸฅŠ๐Ÿฅ‹๐Ÿฅ…โ›ณโ›ธ๐ŸŽฃ๐Ÿคฟ๐ŸŽฝ๐ŸŽฟ๐Ÿ›ท๐ŸฅŒ๐ŸŽฏ๐Ÿช€๐Ÿช๐Ÿ”ซ๐ŸŽฑ๐Ÿ”ฎ๐Ÿช„๐ŸŽฎ๐Ÿ•น๐ŸŽฐ๐ŸŽฒ๐Ÿงฉ๐Ÿงธ๐Ÿช…๐Ÿชฉ๐Ÿช†โ™ โ™ฅโ™ฆโ™ฃโ™Ÿ๐Ÿƒ๐Ÿ€„๐ŸŽด๐ŸŽญ๐Ÿ–ผ๐ŸŽจ๐Ÿงต๐Ÿชก๐Ÿงถ๐Ÿชข๐Ÿ‘“๐Ÿ•ถ๐Ÿฅฝ๐Ÿฅผ๐Ÿฆบ๐Ÿ‘”-๐Ÿ‘–๐Ÿงฃ-๐Ÿงฆ๐Ÿ‘—๐Ÿ‘˜๐Ÿฅป๐Ÿฉฑ-๐Ÿฉณ๐Ÿ‘™๐Ÿ‘š๐Ÿชญ๐Ÿ‘›-๐Ÿ‘๐Ÿ›๐ŸŽ’๐Ÿฉด๐Ÿ‘ž๐Ÿ‘Ÿ๐Ÿฅพ๐Ÿฅฟ๐Ÿ‘ ๐Ÿ‘ก๐Ÿฉฐ๐Ÿ‘ข๐Ÿชฎ๐Ÿ‘‘๐Ÿ‘’๐ŸŽฉ๐ŸŽ“๐Ÿงข๐Ÿช–โ›‘๐Ÿ“ฟ๐Ÿ’„๐Ÿ’๐Ÿ’Ž๐Ÿ”‡-๐Ÿ”Š๐Ÿ“ข๐Ÿ“ฃ๐Ÿ“ฏ๐Ÿ””๐Ÿ”•๐ŸŽผ๐ŸŽต๐ŸŽถ๐ŸŽ™-๐ŸŽ›๐ŸŽค๐ŸŽง๐Ÿ“ป๐ŸŽท๐Ÿช—๐ŸŽธ-๐ŸŽป๐Ÿช•๐Ÿฅ๐Ÿช˜๐Ÿช‡๐Ÿชˆ๐Ÿ“ฑ๐Ÿ“ฒโ˜Ž๐Ÿ“ž-๐Ÿ“ ๐Ÿ”‹๐Ÿชซ๐Ÿ”Œ๐Ÿ’ป๐Ÿ–ฅ๐Ÿ–จโŒจ๐Ÿ–ฑ๐Ÿ–ฒ๐Ÿ’ฝ-๐Ÿ“€๐Ÿงฎ๐ŸŽฅ๐ŸŽž๐Ÿ“ฝ๐ŸŽฌ๐Ÿ“บ๐Ÿ“ท-๐Ÿ“น๐Ÿ“ผ๐Ÿ”๐Ÿ”Ž๐Ÿ•ฏ๐Ÿ’ก๐Ÿ”ฆ๐Ÿฎ๐Ÿช”๐Ÿ“”-๐Ÿ“š๐Ÿ““๐Ÿ“’๐Ÿ“ƒ๐Ÿ“œ๐Ÿ“„๐Ÿ“ฐ๐Ÿ—ž๐Ÿ“‘๐Ÿ”–๐Ÿท๐Ÿ’ฐ๐Ÿช™๐Ÿ’ด-๐Ÿ’ธ๐Ÿ’ณ๐Ÿงพ๐Ÿ’นโœ‰๐Ÿ“ง-๐Ÿ“ฉ๐Ÿ“ค-๐Ÿ“ฆ๐Ÿ“ซ๐Ÿ“ช๐Ÿ“ฌ-๐Ÿ“ฎ๐Ÿ—ณโœโœ’๐Ÿ–‹๐Ÿ–Š๐Ÿ–Œ๐Ÿ–๐Ÿ“๐Ÿ’ผ๐Ÿ“๐Ÿ“‚๐Ÿ—‚๐Ÿ“…๐Ÿ“†๐Ÿ—’๐Ÿ—“๐Ÿ“‡-๐Ÿ“Ž๐Ÿ–‡๐Ÿ“๐Ÿ“โœ‚๐Ÿ—ƒ๐Ÿ—„๐Ÿ—‘๐Ÿ”’๐Ÿ”“๐Ÿ”-๐Ÿ”‘๐Ÿ—๐Ÿ”จ๐Ÿช“โ›โš’๐Ÿ› ๐Ÿ—กโš”๐Ÿ’ฃ๐Ÿชƒ๐Ÿน๐Ÿ›ก๐Ÿชš๐Ÿ”ง๐Ÿช›๐Ÿ”ฉโš™๐Ÿ—œโš–๐Ÿฆฏ๐Ÿ”—โ›“๐Ÿช๐Ÿงฐ๐Ÿงฒ๐Ÿชœโš—๐Ÿงช-๐Ÿงฌ๐Ÿ”ฌ๐Ÿ”ญ๐Ÿ“ก๐Ÿ’‰๐Ÿฉธ๐Ÿ’Š๐Ÿฉน๐Ÿฉผ๐Ÿฉบ๐Ÿฉป๐Ÿšช๐Ÿ›—๐Ÿชž๐ŸชŸ๐Ÿ›๐Ÿ›‹๐Ÿช‘๐Ÿšฝ๐Ÿช ๐Ÿšฟ๐Ÿ›๐Ÿชค๐Ÿช’๐Ÿงด๐Ÿงท๐Ÿงน-๐Ÿงป๐Ÿชฃ๐Ÿงผ๐Ÿซง๐Ÿชฅ๐Ÿงฝ๐Ÿงฏ๐Ÿ›’๐Ÿšฌโšฐ๐Ÿชฆโšฑ๐Ÿงฟ๐Ÿชฌ๐Ÿ—ฟ๐Ÿชง๐Ÿชช๐Ÿง๐Ÿšฎ๐Ÿšฐโ™ฟ๐Ÿšน-๐Ÿšผ๐Ÿšพ๐Ÿ›‚-๐Ÿ›…โš ๐Ÿšธโ›”๐Ÿšซ๐Ÿšณ๐Ÿšญ๐Ÿšฏ๐Ÿšฑ๐Ÿšท๐Ÿ“ต๐Ÿ”žโ˜ขโ˜ฃโฌ†โ†—โžกโ†˜โฌ‡โ†™โฌ…โ†–โ†•โ†”โ†ฉโ†ชโคดโคต๐Ÿ”ƒ๐Ÿ”„๐Ÿ”™-๐Ÿ”๐Ÿ›โš›๐Ÿ•‰โœกโ˜ธโ˜ฏโœโ˜ฆโ˜ชโ˜ฎ๐Ÿ•Ž๐Ÿ”ฏ๐Ÿชฏโ™ˆ-โ™“โ›Ž๐Ÿ”€-๐Ÿ”‚โ–ถโฉโญโฏโ—€โชโฎ๐Ÿ”ผโซ๐Ÿ”ฝโฌโธ-โบโ๐ŸŽฆ๐Ÿ”…๐Ÿ”†๐Ÿ“ถ๐Ÿ›œ๐Ÿ“ณ๐Ÿ“ดโ™€โ™‚โšงโœ–โž•-โž—๐ŸŸฐโ™พโ€ผโ‰โ“-โ•โ—ใ€ฐ๐Ÿ’ฑ๐Ÿ’ฒโš•โ™ปโšœ๐Ÿ”ฑ๐Ÿ“›๐Ÿ”ฐโญ•โœ…โ˜‘โœ”โŒโŽโžฐโžฟใ€ฝโœณโœดโ‡ยฉยฎโ„ข๐Ÿ”Ÿ-๐Ÿ”ค๐Ÿ…ฐ๐Ÿ†Ž๐Ÿ…ฑ๐Ÿ†‘-๐Ÿ†“โ„น๐Ÿ†”โ“‚๐Ÿ†•๐Ÿ†–๐Ÿ…พ๐Ÿ†—๐Ÿ…ฟ๐Ÿ†˜-๐Ÿ†š๐Ÿˆ๐Ÿˆ‚๐Ÿˆท๐Ÿˆถ๐Ÿˆฏ๐Ÿ‰๐Ÿˆน๐Ÿˆš๐Ÿˆฒ๐Ÿ‰‘๐Ÿˆธ๐Ÿˆด๐ŸˆณใŠ—ใŠ™๐Ÿˆบ๐Ÿˆต๐Ÿ”ด๐ŸŸ -๐ŸŸข๐Ÿ”ต๐ŸŸฃ๐ŸŸคโšซโšช๐ŸŸฅ๐ŸŸง-๐ŸŸฉ๐ŸŸฆ๐ŸŸช๐ŸŸซโฌ›โฌœโ—ผโ—ปโ—พโ—ฝโ–ชโ–ซ๐Ÿ”ถ-๐Ÿ”ป๐Ÿ’ ๐Ÿ”˜๐Ÿ”ณ๐Ÿ”ฒ๐Ÿ๐Ÿšฉ๐ŸŽŒ๐Ÿด๐Ÿณ๐Ÿ‡ฆ-๐Ÿ‡ฟ\uD83E\uDD89\uD83E\uDD8F\uD83E\uDDBE\uD83E\uDDC6\uD83E\uddcd\uD83E\udddf\uD83E\ude99]|#๏ธโƒฃ|\\*๏ธโƒฃ|0๏ธโƒฃ|1๏ธโƒฃ|2๏ธโƒฃ|3๏ธโƒฃ|4๏ธโƒฃ|5๏ธโƒฃ|6๏ธโƒฃ|7๏ธโƒฃ|8๏ธโƒฃ|9๏ธโƒฃ)+"); + private static final Pattern emojiRegex = Pattern.compile("([๐Ÿป-๐Ÿฟ๐Ÿ˜€๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜๐Ÿ˜†๐Ÿ˜…๐Ÿคฃ๐Ÿ˜‚๐Ÿ™‚๐Ÿ™ƒ๐Ÿซ ๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‡๐Ÿฅฐ๐Ÿ˜๐Ÿคฉ๐Ÿ˜˜๐Ÿ˜—โ˜บ๐Ÿ˜š๐Ÿ˜™๐Ÿฅฒ๐Ÿ˜‹๐Ÿ˜›๐Ÿ˜œ๐Ÿคช๐Ÿ˜๐Ÿค‘๐Ÿค—๐Ÿคญ๐Ÿซข๐Ÿซฃ๐Ÿคซ๐Ÿค”๐Ÿซก๐Ÿค๐Ÿคจ๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ถ๐Ÿซฅ๐Ÿ˜๐Ÿ˜’๐Ÿ™„๐Ÿ˜ฌ๐Ÿคฅ๐Ÿซจ๐Ÿ˜Œ๐Ÿ˜”๐Ÿ˜ช๐Ÿคค๐Ÿ˜ด๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคข๐Ÿคฎ๐Ÿคง๐Ÿฅต๐Ÿฅถ๐Ÿฅด๐Ÿ˜ต๐Ÿคฏ๐Ÿค ๐Ÿฅณ๐Ÿฅธ๐Ÿ˜Ž๐Ÿค“๐Ÿง๐Ÿ˜•๐Ÿซค๐Ÿ˜Ÿ๐Ÿ™โ˜น๐Ÿ˜ฎ๐Ÿ˜ฏ๐Ÿ˜ฒ๐Ÿ˜ณ๐Ÿฅบ๐Ÿฅน๐Ÿ˜ฆ-๐Ÿ˜จ๐Ÿ˜ฐ๐Ÿ˜ฅ๐Ÿ˜ข๐Ÿ˜ญ๐Ÿ˜ฑ๐Ÿ˜–๐Ÿ˜ฃ๐Ÿ˜ž๐Ÿ˜“๐Ÿ˜ฉ๐Ÿ˜ซ๐Ÿฅฑ๐Ÿ˜ค๐Ÿ˜ก๐Ÿ˜ ๐Ÿคฌ๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’€โ˜ ๐Ÿ’ฉ๐Ÿคก๐Ÿ‘น-๐Ÿ‘ป๐Ÿ‘ฝ๐Ÿ‘พ๐Ÿค–๐Ÿ˜บ๐Ÿ˜ธ๐Ÿ˜น๐Ÿ˜ป-๐Ÿ˜ฝ๐Ÿ™€๐Ÿ˜ฟ๐Ÿ˜พ๐Ÿ™ˆ-๐Ÿ™Š๐Ÿ’Œ๐Ÿ’˜๐Ÿ’๐Ÿ’–๐Ÿ’—๐Ÿ’“๐Ÿ’ž๐Ÿ’•๐Ÿ’Ÿโฃ๐Ÿ’”โค๐Ÿฉท๐Ÿงก๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿฉต๐Ÿ’œ๐ŸคŽ๐Ÿ–ค๐Ÿฉถ๐Ÿค๐Ÿ’‹๐Ÿ’ฏ๐Ÿ’ข๐Ÿ’ฅ๐Ÿ’ซ๐Ÿ’ฆ๐Ÿ’จ๐Ÿ•ณ๐Ÿ’ฌ๐Ÿ—จ๐Ÿ—ฏ๐Ÿ’ญ๐Ÿ’ค๐Ÿ‘‹๐Ÿคš๐Ÿ–โœ‹๐Ÿ––๐Ÿซฑ-๐Ÿซด๐Ÿซท๐Ÿซธ๐Ÿ‘Œ๐ŸคŒ๐ŸคโœŒ๐Ÿคž๐Ÿซฐ๐ŸคŸ๐Ÿค˜๐Ÿค™๐Ÿ‘ˆ๐Ÿ‘‰๐Ÿ‘†๐Ÿ–•๐Ÿ‘‡โ˜๐Ÿซต๐Ÿ‘๐Ÿ‘ŽโœŠ๐Ÿ‘Š๐Ÿค›๐Ÿคœ๐Ÿ‘๐Ÿ™Œ๐Ÿซถ๐Ÿ‘๐Ÿคฒ๐Ÿค๐Ÿ™โœ๐Ÿ’…๐Ÿคณ๐Ÿ’ช๐Ÿฆพ๐Ÿฆฟ๐Ÿฆต๐Ÿฆถ๐Ÿ‘‚๐Ÿฆป๐Ÿ‘ƒ๐Ÿง ๐Ÿซ€๐Ÿซ๐Ÿฆท๐Ÿฆด๐Ÿ‘€๐Ÿ‘๐Ÿ‘…๐Ÿ‘„๐Ÿซฆ๐Ÿ‘ถ๐Ÿง’๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿง‘๐Ÿ‘ฑ๐Ÿ‘จ๐Ÿง”๐Ÿ‘ฉ๐Ÿง“๐Ÿ‘ด๐Ÿ‘ต๐Ÿ™๐Ÿ™Ž๐Ÿ™…๐Ÿ™†๐Ÿ’๐Ÿ™‹๐Ÿง๐Ÿ™‡๐Ÿคฆ๐Ÿคท๐Ÿ‘ฎ๐Ÿ•ต๐Ÿ’‚๐Ÿฅท๐Ÿ‘ท๐Ÿซ…๐Ÿคด๐Ÿ‘ธ๐Ÿ‘ณ๐Ÿ‘ฒ๐Ÿง•๐Ÿคต๐Ÿ‘ฐ๐Ÿคฐ๐Ÿซƒ๐Ÿซ„๐Ÿคฑ๐Ÿ‘ผ๐ŸŽ…๐Ÿคถ๐Ÿฆธ๐Ÿฆน๐Ÿง™-๐ŸงŸ๐ŸงŒ๐Ÿ’†๐Ÿ’‡๐Ÿšถ๐Ÿง๐ŸงŽ๐Ÿƒ๐Ÿ’ƒ๐Ÿ•บ๐Ÿ•ด๐Ÿ‘ฏ๐Ÿง–๐Ÿง—๐Ÿคบ๐Ÿ‡โ›ท๐Ÿ‚๐ŸŒ๐Ÿ„๐Ÿšฃ๐ŸŠโ›น๐Ÿ‹๐Ÿšด๐Ÿšต๐Ÿคธ๐Ÿคผ-๐Ÿคพ๐Ÿคน๐Ÿง˜๐Ÿ›€๐Ÿ›Œ๐Ÿ‘ญ๐Ÿ‘ซ๐Ÿ‘ฌ๐Ÿ’๐Ÿ’‘๐Ÿ—ฃ๐Ÿ‘ค๐Ÿ‘ฅ๐Ÿซ‚๐Ÿ‘ช๐Ÿ‘ฃ๐Ÿฆฐ๐Ÿฆฑ๐Ÿฆณ๐Ÿฆฒ๐Ÿต๐Ÿ’๐Ÿฆ๐Ÿฆง๐Ÿถ๐Ÿ•๐Ÿฆฎ๐Ÿฉ๐Ÿบ๐ŸฆŠ๐Ÿฆ๐Ÿฑ๐Ÿˆ๐Ÿฆ๐Ÿฏ๐Ÿ…๐Ÿ†๐Ÿด๐ŸซŽ๐Ÿซ๐ŸŽ๐Ÿฆ„๐Ÿฆ“๐ŸฆŒ๐Ÿฆฌ๐Ÿฎ๐Ÿ‚-๐Ÿ„๐Ÿท๐Ÿ–๐Ÿ—๐Ÿฝ๐Ÿ๐Ÿ‘๐Ÿ๐Ÿช๐Ÿซ๐Ÿฆ™๐Ÿฆ’๐Ÿ˜๐Ÿฆฃ๐Ÿฆ๐Ÿฆ›๐Ÿญ๐Ÿ๐Ÿ€๐Ÿน๐Ÿฐ๐Ÿ‡๐Ÿฟ๐Ÿฆซ๐Ÿฆ”๐Ÿฆ‡๐Ÿป๐Ÿจ๐Ÿผ๐Ÿฆฅ๐Ÿฆฆ๐Ÿฆจ๐Ÿฆ˜๐Ÿฆก๐Ÿพ๐Ÿฆƒ๐Ÿ”๐Ÿ“๐Ÿฃ-๐Ÿง๐Ÿ•Š๐Ÿฆ…๐Ÿฆ†๐Ÿฆข๐Ÿฆ‰๐Ÿฆค๐Ÿชถ๐Ÿฆฉ๐Ÿฆš๐Ÿฆœ๐Ÿชฝ๐Ÿชฟ๐Ÿธ๐ŸŠ๐Ÿข๐ŸฆŽ๐Ÿ๐Ÿฒ๐Ÿ‰๐Ÿฆ•๐Ÿฆ–๐Ÿณ๐Ÿ‹๐Ÿฌ๐Ÿฆญ๐ŸŸ-๐Ÿก๐Ÿฆˆ๐Ÿ™๐Ÿš๐Ÿชธ๐Ÿชผ๐ŸŒ๐Ÿฆ‹๐Ÿ›-๐Ÿ๐Ÿชฒ๐Ÿž๐Ÿฆ—๐Ÿชณ๐Ÿ•ท๐Ÿ•ธ๐Ÿฆ‚๐ŸฆŸ๐Ÿชฐ๐Ÿชฑ๐Ÿฆ ๐Ÿ’๐ŸŒธ๐Ÿ’ฎ๐Ÿชท๐Ÿต๐ŸŒน๐Ÿฅ€๐ŸŒบ-๐ŸŒผ๐ŸŒท๐Ÿชป๐ŸŒฑ๐Ÿชด๐ŸŒฒ-๐ŸŒต๐ŸŒพ๐ŸŒฟโ˜˜๐Ÿ€-๐Ÿƒ๐Ÿชน๐Ÿชบ๐Ÿ„๐Ÿ‡-๐Ÿ๐Ÿฅญ๐ŸŽ-๐Ÿ“๐Ÿซ๐Ÿฅ๐Ÿ…๐Ÿซ’๐Ÿฅฅ๐Ÿฅ‘๐Ÿ†๐Ÿฅ”๐Ÿฅ•๐ŸŒฝ๐ŸŒถ๐Ÿซ‘๐Ÿฅ’๐Ÿฅฌ๐Ÿฅฆ๐Ÿง„๐Ÿง…๐Ÿฅœ๐Ÿซ˜๐ŸŒฐ๐Ÿซš๐Ÿซ›๐Ÿž๐Ÿฅ๐Ÿฅ–๐Ÿซ“๐Ÿฅจ๐Ÿฅฏ๐Ÿฅž๐Ÿง‡๐Ÿง€๐Ÿ–๐Ÿ—๐Ÿฅฉ๐Ÿฅ“๐Ÿ”๐ŸŸ๐Ÿ•๐ŸŒญ๐Ÿฅช๐ŸŒฎ๐ŸŒฏ๐Ÿซ”๐Ÿฅ™๐Ÿง†๐Ÿฅš๐Ÿณ๐Ÿฅ˜๐Ÿฒ๐Ÿซ•๐Ÿฅฃ๐Ÿฅ—๐Ÿฟ๐Ÿงˆ๐Ÿง‚๐Ÿฅซ๐Ÿฑ๐Ÿ˜-๐Ÿ๐Ÿ ๐Ÿข-๐Ÿฅ๐Ÿฅฎ๐Ÿก๐ŸฅŸ-๐Ÿฅก๐Ÿฆ€๐Ÿฆž๐Ÿฆ๐Ÿฆ‘๐Ÿฆช๐Ÿฆ-๐Ÿช๐ŸŽ‚๐Ÿฐ๐Ÿง๐Ÿฅง๐Ÿซ-๐Ÿฏ๐Ÿผ๐Ÿฅ›โ˜•๐Ÿซ–๐Ÿต๐Ÿถ๐Ÿพ๐Ÿท-๐Ÿป๐Ÿฅ‚๐Ÿฅƒ๐Ÿซ—๐Ÿฅค๐Ÿง‹๐Ÿงƒ๐Ÿง‰๐ŸงŠ๐Ÿฅข๐Ÿฝ๐Ÿด๐Ÿฅ„๐Ÿ”ช๐Ÿซ™๐Ÿบ๐ŸŒ-๐ŸŒ๐Ÿ—บ๐Ÿ—พ๐Ÿงญ๐Ÿ”โ›ฐ๐ŸŒ‹๐Ÿ—ป๐Ÿ•๐Ÿ–๐Ÿœ-๐ŸŸ๐Ÿ›๐Ÿ—๐Ÿงฑ๐Ÿชจ๐Ÿชต๐Ÿ›–๐Ÿ˜๐Ÿš๐Ÿ -๐Ÿฆ๐Ÿจ-๐Ÿญ๐Ÿฏ๐Ÿฐ๐Ÿ’’๐Ÿ—ผ๐Ÿ—ฝโ›ช๐Ÿ•Œ๐Ÿ›•๐Ÿ•โ›ฉ๐Ÿ•‹โ›ฒโ›บ๐ŸŒ๐ŸŒƒ๐Ÿ™๐ŸŒ„-๐ŸŒ‡๐ŸŒ‰โ™จ๐ŸŽ ๐Ÿ›๐ŸŽก๐ŸŽข๐Ÿ’ˆ๐ŸŽช๐Ÿš‚-๐ŸšŠ๐Ÿš๐Ÿšž๐Ÿš‹-๐ŸšŽ๐Ÿš-๐Ÿš™๐Ÿ›ป๐Ÿšš-๐Ÿšœ๐ŸŽ๐Ÿ๐Ÿ›ต๐Ÿฆฝ๐Ÿฆผ๐Ÿ›บ๐Ÿšฒ๐Ÿ›ด๐Ÿ›น๐Ÿ›ผ๐Ÿš๐Ÿ›ฃ๐Ÿ›ค๐Ÿ›ขโ›ฝ๐Ÿ›ž๐Ÿšจ๐Ÿšฅ๐Ÿšฆ๐Ÿ›‘๐Ÿšงโš“๐Ÿ›Ÿโ›ต๐Ÿ›ถ๐Ÿšค๐Ÿ›ณโ›ด๐Ÿ›ฅ๐Ÿšขโœˆ๐Ÿ›ฉ๐Ÿ›ซ๐Ÿ›ฌ๐Ÿช‚๐Ÿ’บ๐Ÿš๐ŸšŸ-๐Ÿšก๐Ÿ›ฐ๐Ÿš€๐Ÿ›ธ๐Ÿ›Ž๐ŸงณโŒ›โณโŒšโฐ-โฒ๐Ÿ•ฐ๐Ÿ•›๐Ÿ•ง๐Ÿ•๐Ÿ•œ๐Ÿ•‘๐Ÿ•๐Ÿ•’๐Ÿ•ž๐Ÿ•“๐Ÿ•Ÿ๐Ÿ•”๐Ÿ• ๐Ÿ••๐Ÿ•ก๐Ÿ•–๐Ÿ•ข๐Ÿ•—๐Ÿ•ฃ๐Ÿ•˜๐Ÿ•ค๐Ÿ•™๐Ÿ•ฅ๐Ÿ•š๐Ÿ•ฆ๐ŸŒ‘-๐ŸŒœ๐ŸŒกโ˜€๐ŸŒ๐ŸŒž๐Ÿชโญ๐ŸŒŸ๐ŸŒ ๐ŸŒŒโ˜โ›…โ›ˆ๐ŸŒค-๐ŸŒฌ๐ŸŒ€๐ŸŒˆ๐ŸŒ‚โ˜‚โ˜”โ›ฑโšกโ„โ˜ƒโ›„โ˜„๐Ÿ”ฅ๐Ÿ’ง๐ŸŒŠ๐ŸŽƒ๐ŸŽ„๐ŸŽ†๐ŸŽ‡๐Ÿงจโœจ๐ŸŽˆ-๐ŸŽ‹๐ŸŽ-๐ŸŽ‘๐Ÿงง๐ŸŽ€๐ŸŽ๐ŸŽ—๐ŸŽŸ๐ŸŽซ๐ŸŽ–๐Ÿ†๐Ÿ…๐Ÿฅ‡-๐Ÿฅ‰โšฝโšพ๐ŸฅŽ๐Ÿ€๐Ÿ๐Ÿˆ๐Ÿ‰๐ŸŽพ๐Ÿฅ๐ŸŽณ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿฅ๐Ÿ“๐Ÿธ๐ŸฅŠ๐Ÿฅ‹๐Ÿฅ…โ›ณโ›ธ๐ŸŽฃ๐Ÿคฟ๐ŸŽฝ๐ŸŽฟ๐Ÿ›ท๐ŸฅŒ๐ŸŽฏ๐Ÿช€๐Ÿช๐Ÿ”ซ๐ŸŽฑ๐Ÿ”ฎ๐Ÿช„๐ŸŽฎ๐Ÿ•น๐ŸŽฐ๐ŸŽฒ๐Ÿงฉ๐Ÿงธ๐Ÿช…๐Ÿชฉ๐Ÿช†โ™ โ™ฅโ™ฆโ™ฃโ™Ÿ๐Ÿƒ๐Ÿ€„๐ŸŽด๐ŸŽญ๐Ÿ–ผ๐ŸŽจ๐Ÿงต๐Ÿชก๐Ÿงถ๐Ÿชข๐Ÿ‘“๐Ÿ•ถ๐Ÿฅฝ๐Ÿฅผ๐Ÿฆบ๐Ÿ‘”-๐Ÿ‘–๐Ÿงฃ-๐Ÿงฆ๐Ÿ‘—๐Ÿ‘˜๐Ÿฅป๐Ÿฉฑ-๐Ÿฉณ๐Ÿ‘™๐Ÿ‘š๐Ÿชญ๐Ÿ‘›-๐Ÿ‘๐Ÿ›๐ŸŽ’๐Ÿฉด๐Ÿ‘ž๐Ÿ‘Ÿ๐Ÿฅพ๐Ÿฅฟ๐Ÿ‘ ๐Ÿ‘ก๐Ÿฉฐ๐Ÿ‘ข๐Ÿชฎ๐Ÿ‘‘๐Ÿ‘’๐ŸŽฉ๐ŸŽ“๐Ÿงข๐Ÿช–โ›‘๐Ÿ“ฟ๐Ÿ’„๐Ÿ’๐Ÿ’Ž๐Ÿ”‡-๐Ÿ”Š๐Ÿ“ข๐Ÿ“ฃ๐Ÿ“ฏ๐Ÿ””๐Ÿ”•๐ŸŽผ๐ŸŽต๐ŸŽถ๐ŸŽ™-๐ŸŽ›๐ŸŽค๐ŸŽง๐Ÿ“ป๐ŸŽท๐Ÿช—๐ŸŽธ-๐ŸŽป๐Ÿช•๐Ÿฅ๐Ÿช˜๐Ÿช‡๐Ÿชˆ๐Ÿ“ฑ๐Ÿ“ฒโ˜Ž๐Ÿ“ž-๐Ÿ“ ๐Ÿ”‹๐Ÿชซ๐Ÿ”Œ๐Ÿ’ป๐Ÿ–ฅ๐Ÿ–จโŒจ๐Ÿ–ฑ๐Ÿ–ฒ๐Ÿ’ฝ-๐Ÿ“€๐Ÿงฎ๐ŸŽฅ๐ŸŽž๐Ÿ“ฝ๐ŸŽฌ๐Ÿ“บ๐Ÿ“ท-๐Ÿ“น๐Ÿ“ผ๐Ÿ”๐Ÿ”Ž๐Ÿ•ฏ๐Ÿ’ก๐Ÿ”ฆ๐Ÿฎ๐Ÿช”๐Ÿ“”-๐Ÿ“š๐Ÿ““๐Ÿ“’๐Ÿ“ƒ๐Ÿ“œ๐Ÿ“„๐Ÿ“ฐ๐Ÿ—ž๐Ÿ“‘๐Ÿ”–๐Ÿท๐Ÿ’ฐ๐Ÿช™๐Ÿ’ด-๐Ÿ’ธ๐Ÿ’ณ๐Ÿงพ๐Ÿ’นโœ‰๐Ÿ“ง-๐Ÿ“ฉ๐Ÿ“ค-๐Ÿ“ฆ๐Ÿ“ซ๐Ÿ“ช๐Ÿ“ฌ-๐Ÿ“ฎ๐Ÿ—ณโœโœ’๐Ÿ–‹๐Ÿ–Š๐Ÿ–Œ๐Ÿ–๐Ÿ“๐Ÿ’ผ๐Ÿ“๐Ÿ“‚๐Ÿ—‚๐Ÿ“…๐Ÿ“†๐Ÿ—’๐Ÿ—“๐Ÿ“‡-๐Ÿ“Ž๐Ÿ–‡๐Ÿ“๐Ÿ“โœ‚๐Ÿ—ƒ๐Ÿ—„๐Ÿ—‘๐Ÿ”’๐Ÿ”“๐Ÿ”-๐Ÿ”‘๐Ÿ—๐Ÿ”จ๐Ÿช“โ›โš’๐Ÿ› ๐Ÿ—กโš”๐Ÿ’ฃ๐Ÿชƒ๐Ÿน๐Ÿ›ก๐Ÿชš๐Ÿ”ง๐Ÿช›๐Ÿ”ฉโš™๐Ÿ—œโš–๐Ÿฆฏ๐Ÿ”—โ›“๐Ÿช๐Ÿงฐ๐Ÿงฒ๐Ÿชœโš—๐Ÿงช-๐Ÿงฌ๐Ÿ”ฌ๐Ÿ”ญ๐Ÿ“ก๐Ÿ’‰๐Ÿฉธ๐Ÿ’Š๐Ÿฉน๐Ÿฉผ๐Ÿฉบ๐Ÿฉป๐Ÿšช๐Ÿ›—๐Ÿชž๐ŸชŸ๐Ÿ›๐Ÿ›‹๐Ÿช‘๐Ÿšฝ๐Ÿช ๐Ÿšฟ๐Ÿ›๐Ÿชค๐Ÿช’๐Ÿงด๐Ÿงท๐Ÿงน-๐Ÿงป๐Ÿชฃ๐Ÿงผ๐Ÿซง๐Ÿชฅ๐Ÿงฝ๐Ÿงฏ๐Ÿ›’๐Ÿšฌโšฐ๐Ÿชฆโšฑ๐Ÿงฟ๐Ÿชฌ๐Ÿ—ฟ๐Ÿชง๐Ÿชช๐Ÿง๐Ÿšฎ๐Ÿšฐโ™ฟ๐Ÿšน-๐Ÿšผ๐Ÿšพ๐Ÿ›‚-๐Ÿ›…โš ๐Ÿšธโ›”๐Ÿšซ๐Ÿšณ๐Ÿšญ๐Ÿšฏ๐Ÿšฑ๐Ÿšท๐Ÿ“ต๐Ÿ”žโ˜ขโ˜ฃโฌ†โ†—โžกโ†˜โฌ‡โ†™โฌ…โ†–โ†•โ†”โ†ฉโ†ชโคดโคต๐Ÿ”ƒ๐Ÿ”„๐Ÿ”™-๐Ÿ”๐Ÿ›โš›๐Ÿ•‰โœกโ˜ธโ˜ฏโœโ˜ฆโ˜ชโ˜ฎ๐Ÿ•Ž๐Ÿ”ฏ๐Ÿชฏโ™ˆ-โ™“โ›Ž๐Ÿ”€-๐Ÿ”‚โ–ถโฉโญโฏโ—€โชโฎ๐Ÿ”ผโซ๐Ÿ”ฝโฌโธ-โบโ๐ŸŽฆ๐Ÿ”…๐Ÿ”†๐Ÿ“ถ๐Ÿ›œ๐Ÿ“ณ๐Ÿ“ดโ™€โ™‚โšงโœ–โž•-โž—๐ŸŸฐโ™พโ€ผโ‰โ“-โ•โ—ใ€ฐ๐Ÿ’ฑ๐Ÿ’ฒโš•โ™ปโšœ๐Ÿ”ฑ๐Ÿ“›๐Ÿ”ฐโญ•โœ…โ˜‘โœ”โŒโŽโžฐโžฟใ€ฝโœณโœดโ‡ยฉยฎโ„ข๐Ÿ”Ÿ-๐Ÿ”ค๐Ÿ…ฐ๐Ÿ†Ž๐Ÿ…ฑ๐Ÿ†‘-๐Ÿ†“โ„น๐Ÿ†”โ“‚๐Ÿ†•๐Ÿ†–๐Ÿ…พ๐Ÿ†—๐Ÿ…ฟ๐Ÿ†˜-๐Ÿ†š๐Ÿˆ๐Ÿˆ‚๐Ÿˆท๐Ÿˆถ๐Ÿˆฏ๐Ÿ‰๐Ÿˆน๐Ÿˆš๐Ÿˆฒ๐Ÿ‰‘๐Ÿˆธ๐Ÿˆด๐ŸˆณใŠ—ใŠ™๐Ÿˆบ๐Ÿˆต๐Ÿ”ด๐ŸŸ -๐ŸŸข๐Ÿ”ต๐ŸŸฃ๐ŸŸคโšซโšช๐ŸŸฅ๐ŸŸง-๐ŸŸฉ๐ŸŸฆ๐ŸŸช๐ŸŸซโฌ›โฌœโ—ผโ—ปโ—พโ—ฝโ–ชโ–ซ๐Ÿ”ถ-๐Ÿ”ป๐Ÿ’ ๐Ÿ”˜๐Ÿ”ณ๐Ÿ”ฒ๐Ÿ๐Ÿšฉ๐ŸŽŒ๐Ÿด๐Ÿณ๐Ÿ‡ฆ-๐Ÿ‡ฟ\uD83E\uDD89\uD83E\uDD8F\uD83E\uDDBE\uD83E\uDDC6\uD83E\uddcd\uD83E\udddf\uD83E\ude99]|#๏ธโƒฃ|\\*๏ธโƒฃ|0๏ธโƒฃ|1๏ธโƒฃ|2๏ธโƒฃ|3๏ธโƒฃ|4๏ธโƒฃ|5๏ธโƒฃ|6๏ธโƒฃ|7๏ธโƒฃ|8๏ธโƒฃ|9๏ธโƒฃ)+.*"); private float originalFontSize; public AutoScaledEmojiTextView(Context context) { @@ -73,36 +73,35 @@ public class AutoScaledEmojiTextView extends AppCompatTextView { if (text.length() > 21 || text.isEmpty() || Character.isLetter(text.charAt(0))) { return 1; } - int emojiCount = countGraphemes(text, 8); - if (emojiCount > 8) { + int emojiCount = countEmojis(text, 8); + if (emojiCount <= 0) { return 1; } - boolean isEmoji = emojiRegex.matcher(text).matches(); - if (isEmoji) { - float scale = 1.25f; - if (emojiCount <= 6) scale += 0.25f; - if (emojiCount <= 4) scale += 0.25f; - if (emojiCount <= 2) scale += 0.25f; - return scale; - } - return 1; + float scale = 1.25f; + if (emojiCount <= 6) scale += 0.25f; + if (emojiCount <= 4) scale += 0.25f; + if (emojiCount <= 2) scale += 0.25f; + return scale; } - public static int countGraphemes(String text, int max) { - // Create a BreakIterator for grapheme boundaries + /** + * Returns the number of emojis if there are only emojis AND there are no more than `max` emojis, + * or -1 otherwise. + */ + public static int countEmojis(String text, int max) { BreakIterator graphemeIterator = BreakIterator.getCharacterInstance(Locale.getDefault()); - // Set the text to be analyzed graphemeIterator.setText(text); - // Initialize count int graphemeCount = 0; // Iterate over the text and count graphemes int start = graphemeIterator.first(); for (int end = graphemeIterator.next(); end != BreakIterator.DONE; start = end, end = graphemeIterator.next()) { - if (++graphemeCount > max) break; + String grapheme = text.substring(start, end); + if (!emojiRegex.matcher(grapheme).matches()) return -1; + if (++graphemeCount > max) return -1; } return graphemeCount;