diff --git a/vector/src/main/java/im/vector/riotx/features/reactions/EmojiSearchResultViewModel.kt b/vector/src/main/java/im/vector/riotx/features/reactions/EmojiSearchResultViewModel.kt index aa5e79ed29..8aa03d9b22 100644 --- a/vector/src/main/java/im/vector/riotx/features/reactions/EmojiSearchResultViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/reactions/EmojiSearchResultViewModel.kt @@ -59,8 +59,6 @@ class EmojiSearchResultViewModel @AssistedInject constructor( setState { copy( query = action.queryString, - // First add emojis with name matching query, sorted by name - // Then emojis with keyword matching any of the word in the query, sorted by name results = dataSource.filterWith(action.queryString) ) } 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 b8ab24da4e..8a279a7d4d 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 @@ -37,11 +37,13 @@ class EmojiDataSource @Inject constructor( fun filterWith(query: String): List { val words = query.split("\\s".toRegex()) + // First add emojis with name matching query, sorted by name return (rawData.emojis.values .filter { emojiItem -> emojiItem.name.contains(query, true) } .sortedBy { it.name } + + // Then emojis with keyword matching any of the word in the query, sorted by name rawData.emojis.values .filter { emojiItem -> words.fold(true, { prev, word -> @@ -49,6 +51,7 @@ class EmojiDataSource @Inject constructor( }) } .sortedBy { it.name }) + // and ensure they will not be present twice .distinct() }