Allow variation selection in emoji search results.

fork-5.53.8
Greyson Parrelli 2021-06-03 21:18:12 -04:00
rodzic 115e74d844
commit 45c587c5e4
3 zmienionych plików z 17 dodań i 21 usunięć

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -23,7 +23,7 @@ class EmojiSource(
private val emojiPageFactory: EmojiPageFactory
) : EmojiData by emojiData {
val variationMap: Map<String, String> by lazy {
val variationsToCanonical: Map<String, String> by lazy {
val map = mutableMapOf<String, String>()
for (page: EmojiPageModel in dataPages) {
@ -37,6 +37,18 @@ class EmojiSource(
map
}
val canonicalToVariations: Map<String, List<String>> by lazy {
val map = mutableMapOf<String, List<String>>()
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()

Wyświetl plik

@ -25,25 +25,9 @@ class EmojiSearchRepository(private val context: Context) {
SignalExecutors.SERIAL.execute {
val emoji: List<String> = emojiSearchDatabase.query(query, EMOJI_SEARCH_LIMIT)
val variationMap: Map<String, String> = EmojiSource.latest.variationMap
val emojiVariationSets: MutableMap<String, LinkedHashSet<String>> = mutableMapOf()
variationMap
.filterKeys { emoji.contains(it) }
.forEach { (variation, canonical) ->
val set: LinkedHashSet<String> = emojiVariationSets.getOrDefault(canonical, linkedSetOf())
set.add(variation)
emojiVariationSets[canonical] = set
}
val displayEmoji: List<Emoji> = emoji.map { canonical ->
val variationSet: LinkedHashSet<String> = linkedSetOf(canonical).apply {
addAll(emojiVariationSets.getOrDefault(canonical, linkedSetOf()))
}
Emoji(variationSet.toList())
}
val displayEmoji: List<Emoji> = emoji
.mapNotNull { canonical -> EmojiSource.latest.canonicalToVariations[canonical] }
.map { Emoji(it) }
consumer(EmojiSearchResultsPageModel(emoji, displayEmoji))
}