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"));
+ }
+}