diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiUtil.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiUtil.java index 6f2a1a5f1a..067f2392aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiUtil.java @@ -49,7 +49,7 @@ public final class EmojiUtil { * If the emoji has no skin variations, this function will return the original emoji. */ public static @NonNull String getCanonicalRepresentation(@NonNull String emoji) { - String canonical = EmojiSource.getLatest().getVariationMap().get(emoji); + String canonical = EmojiSource.getLatest().getVariationsToCanonical().get(emoji); return canonical != null ? canonical : emoji; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/emoji/EmojiSource.kt b/app/src/main/java/org/thoughtcrime/securesms/emoji/EmojiSource.kt index a899488ed1..c9d41285a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/emoji/EmojiSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/emoji/EmojiSource.kt @@ -23,7 +23,7 @@ class EmojiSource( private val emojiPageFactory: EmojiPageFactory ) : EmojiData by emojiData { - val variationMap: Map by lazy { + val variationsToCanonical: Map by lazy { val map = mutableMapOf() for (page: EmojiPageModel in dataPages) { @@ -37,6 +37,18 @@ class EmojiSource( map } + val canonicalToVariations: Map> by lazy { + val map = mutableMapOf>() + + for (page: EmojiPageModel in dataPages) { + for (emoji: Emoji in page.displayEmoji) { + map[emoji.value] = emoji.variations + } + } + + map + } + val maxEmojiLength: Int by lazy { dataPages.map { it.emoji.map(String::length) } .flatten() diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository.kt index 0027af24f3..a8d59c5ae1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository.kt @@ -25,25 +25,9 @@ class EmojiSearchRepository(private val context: Context) { SignalExecutors.SERIAL.execute { val emoji: List = emojiSearchDatabase.query(query, EMOJI_SEARCH_LIMIT) - val variationMap: Map = EmojiSource.latest.variationMap - val emojiVariationSets: MutableMap> = mutableMapOf() - - variationMap - .filterKeys { emoji.contains(it) } - .forEach { (variation, canonical) -> - val set: LinkedHashSet = emojiVariationSets.getOrDefault(canonical, linkedSetOf()) - - set.add(variation) - emojiVariationSets[canonical] = set - } - - val displayEmoji: List = emoji.map { canonical -> - val variationSet: LinkedHashSet = linkedSetOf(canonical).apply { - addAll(emojiVariationSets.getOrDefault(canonical, linkedSetOf())) - } - - Emoji(variationSet.toList()) - } + val displayEmoji: List = emoji + .mapNotNull { canonical -> EmojiSource.latest.canonicalToVariations[canonical] } + .map { Emoji(it) } consumer(EmojiSearchResultsPageModel(emoji, displayEmoji)) }