From a00da2ee2504ae2431631e42f0a70e62b834681f Mon Sep 17 00:00:00 2001 From: Alik Aslanyan Date: Tue, 26 Nov 2024 01:30:44 +0400 Subject: [PATCH] Implement Emoji transliteration --- app/build.gradle | 3 +++ .../util/language/LanguageUtils.java | 2 ++ .../language/impl/EmojiTransliterator.java | 12 +++++++++++ app/src/main/res/values/arrays.xml | 2 ++ app/src/main/res/values/strings.xml | 1 + .../test/EmojiTransliteratorTest.java | 21 +++++++++++++++++++ 6 files changed, 41 insertions(+) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/impl/EmojiTransliterator.java create mode 100644 app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/EmojiTransliteratorTest.java diff --git a/app/build.gradle b/app/build.gradle index 0efbf1cbb5..7be585bf64 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -289,6 +289,9 @@ dependencies { // Needed for Armenian transliteration implementation 'org.ahocorasick:ahocorasick:0.6.3' + + // Needed for Emoji transliteration + implementation 'net.fellbaum:jemoji:1.6.0' } preBuild.dependsOn(":GBDaoGenerator:genSources") diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/LanguageUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/LanguageUtils.java index 79167d66d7..cca1f06ed1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/LanguageUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/LanguageUtils.java @@ -40,6 +40,7 @@ import nodomain.freeyourgadget.gadgetbridge.util.language.impl.BengaliTransliter import nodomain.freeyourgadget.gadgetbridge.util.language.impl.CommonSymbolsTransliterator; import nodomain.freeyourgadget.gadgetbridge.util.language.impl.CroatianTransliterator; import nodomain.freeyourgadget.gadgetbridge.util.language.impl.CzechTransliterator; +import nodomain.freeyourgadget.gadgetbridge.util.language.impl.EmojiTransliterator; import nodomain.freeyourgadget.gadgetbridge.util.language.impl.EstonianTransliterator; import nodomain.freeyourgadget.gadgetbridge.util.language.impl.ExtendedAsciiTransliterator; import nodomain.freeyourgadget.gadgetbridge.util.language.impl.FlattenToAsciiTransliterator; @@ -90,6 +91,7 @@ public class LanguageUtils { put("turkish", new TurkishTransliterator()); put("ukranian", new UkranianTransliterator()); put("armenian", new ArmenianTransliterator()); + put("emoji", new EmojiTransliterator()); }}; /** 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 new file mode 100644 index 0000000000..8a15ee3c5e --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/language/impl/EmojiTransliterator.java @@ -0,0 +1,12 @@ +package nodomain.freeyourgadget.gadgetbridge.util.language.impl; + +import net.fellbaum.jemoji.EmojiManager; +import java.util.Objects; +import nodomain.freeyourgadget.gadgetbridge.util.language.Transliterator; + +public class EmojiTransliterator implements Transliterator { + @Override + public String transliterate(String txt) { + return EmojiManager.replaceAllEmojis(txt, emoji -> Objects.requireNonNullElse(emoji.getAllAliases().get(0), "")); + } +} diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 7303ac01ad..fbc971e252 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -4612,6 +4612,7 @@ @string/ukranian @string/hungarian @string/armenian + @string/emoji @@ -4640,6 +4641,7 @@ ukranian hungarian armenian + emoji diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5c4adbd788..b2f2896714 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1265,6 +1265,7 @@ Catalan Finnish Bahasa Melayu + Emoji About to transfer data since %1$s Waiting for reconnect About you diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/EmojiTransliteratorTest.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/EmojiTransliteratorTest.java new file mode 100644 index 0000000000..ae7bc67bcb --- /dev/null +++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/EmojiTransliteratorTest.java @@ -0,0 +1,21 @@ +package nodomain.freeyourgadget.gadgetbridge.test; + +import junit.framework.TestCase; +import org.junit.Test; +import org.junit.Assert; + +import nodomain.freeyourgadget.gadgetbridge.util.language.impl.EmojiTransliterator; + +public class EmojiTransliteratorTest extends TestCase { + + @Test + public void testSimpleEmoji() { + Assert.assertEquals(":heart:", 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")); + } +}