From a4192a07612bd1182fdd3fe1edd0d8218f8c704a Mon Sep 17 00:00:00 2001
From: Benoit Marty <benoitm@matrix.org>
Date: Tue, 28 Apr 2020 13:41:23 +0200
Subject: [PATCH] =?UTF-8?q?Emoji=20completion=20:tada:=20does=20not=20comp?=
 =?UTF-8?q?letes=20to=20=F0=9F=8E=89=20like=20on=20web=20(#1285)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGES.md                                      |  1 +
 .../reactions/data/EmojiDataSourceTest.kt       | 12 +++++++++++-
 .../features/reactions/data/EmojiDataSource.kt  | 17 +++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/CHANGES.md b/CHANGES.md
index 1c35e70cd8..bae15ca0c0 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -44,6 +44,7 @@ Bugfix 🐛:
  - Fix issue with media path (#1227)
  - Add user to direct chat by user id (#1065)
  - Use correct URL for SSO connection (#1178)
+ - Emoji completion :tada: does not completes to 🎉 like on web (#1285)
 
 Translations 🗣:
  -
diff --git a/vector/src/androidTest/java/im/vector/riotx/features/reactions/data/EmojiDataSourceTest.kt b/vector/src/androidTest/java/im/vector/riotx/features/reactions/data/EmojiDataSourceTest.kt
index 88ca1eb01a..a3e45c3cf2 100644
--- a/vector/src/androidTest/java/im/vector/riotx/features/reactions/data/EmojiDataSourceTest.kt
+++ b/vector/src/androidTest/java/im/vector/riotx/features/reactions/data/EmojiDataSourceTest.kt
@@ -77,7 +77,17 @@ class EmojiDataSourceTest : InstrumentedTest {
     }
 
     @Test
-    fun testQuickReaction() {
+    fun testTada() {
+        val emojiDataSource = EmojiDataSource(context().resources)
+
+        val result = emojiDataSource.filterWith("tada")
+
+        assertEquals("Should find tada emoji", 1, result.size)
+        assertEquals("Should find tada emoji", "🎉", result[0].emoji)
+    }
+
+    @Test
+    fun testQuickReactions() {
         val emojiDataSource = EmojiDataSource(context().resources)
 
         assertEquals("Should have 8 quick reactions", 8, emojiDataSource.getQuickReactions().size)
diff --git a/vector/src/main/java/im/vector/riotx/features/reactions/data/EmojiDataSource.kt b/vector/src/main/java/im/vector/riotx/features/reactions/data/EmojiDataSource.kt
index 1d7338e2a4..4acb8ed79e 100644
--- a/vector/src/main/java/im/vector/riotx/features/reactions/data/EmojiDataSource.kt
+++ b/vector/src/main/java/im/vector/riotx/features/reactions/data/EmojiDataSource.kt
@@ -32,6 +32,23 @@ class EmojiDataSource @Inject constructor(
                         .adapter(EmojiData::class.java)
                         .fromJson(input.bufferedReader().use { it.readText() })
             }
+            ?.let { parsedRawData ->
+                // Add key as a keyword, it will solve the issue that ":tada" is not available in completion
+                parsedRawData.copy(
+                        emojis = mutableMapOf<String, EmojiItem>().apply {
+                            parsedRawData.emojis.keys.forEach { key ->
+                                val origin = parsedRawData.emojis[key] ?: return@forEach
+
+                                // Do not add keys containing '_'
+                                if (origin.keywords.contains(key) || key.contains("_")) {
+                                    put(key, origin)
+                                } else {
+                                    put(key, origin.copy(keywords = origin.keywords + key))
+                                }
+                            }
+                        }
+                )
+            }
             ?: EmojiData(emptyList(), emptyMap(), emptyMap())
 
     private val quickReactions = mutableListOf<EmojiItem>()