kopia lustrzana https://github.com/ryukoposting/Signal-Android
Allow variation selection in emoji search results.
rodzic
115e74d844
commit
45c587c5e4
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue