diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/impl/EmojiTransliterator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/impl/EmojiTransliterator.java index 8a15ee3c5e..2ad7b05bc7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/impl/EmojiTransliterator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/impl/EmojiTransliterator.java @@ -1,12 +1,34 @@ package nodomain.freeyourgadget.gadgetbridge.util.language.impl; import net.fellbaum.jemoji.EmojiManager; + +import java.util.Comparator; import java.util.Objects; + import nodomain.freeyourgadget.gadgetbridge.util.language.Transliterator; public class EmojiTransliterator implements Transliterator { + private static boolean isAllASCII(String input) { + boolean isASCII = true; + for (int i = 0; i < input.length(); i++) { + int c = input.charAt(i); + if (c > 0x7F) { + isASCII = false; + break; + } + } + return isASCII; + } + @Override public String transliterate(String txt) { - return EmojiManager.replaceAllEmojis(txt, emoji -> Objects.requireNonNullElse(emoji.getAllAliases().get(0), "")); + return EmojiManager.replaceAllEmojis(txt, emoji -> Objects.requireNonNullElse( + emoji.getAllAliases() + .stream() + .filter(Objects::nonNull) + // This is required, because in another case emoji's will be returned + .filter(EmojiTransliterator::isAllASCII) + .min(Comparator.comparingInt(String::length)) + .orElse(""), "")); } } diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/EmojiTransliteratorTest.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/EmojiTransliteratorTest.java index ae7bc67bcb..33ec06e125 100644 --- a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/EmojiTransliteratorTest.java +++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/EmojiTransliteratorTest.java @@ -10,12 +10,12 @@ public class EmojiTransliteratorTest extends TestCase { @Test public void testSimpleEmoji() { - Assert.assertEquals(":heart:", new EmojiTransliterator().transliterate("❤\uFE0F")); + Assert.assertEquals("<3", new EmojiTransliterator().transliterate("❤\uFE0F")); Assert.assertEquals(":grinning:", new EmojiTransliterator().transliterate("\uD83D\uDE00")); } @Test public void testCompoundEmoji() { - Assert.assertEquals(":factory_worker::skin-tone-4:", new EmojiTransliterator().transliterate("\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDFED")); + Assert.assertEquals(":factory_worker_tone4:", new EmojiTransliterator().transliterate("\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDFED")); } }