Signal-Android/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchViewModel.kt

37 wiersze
1.4 KiB
Kotlin

package org.thoughtcrime.securesms.keyboard.emoji.search
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import org.thoughtcrime.securesms.components.emoji.EmojiPageModel
import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel
import org.thoughtcrime.securesms.keyboard.emoji.toMappingModels
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil
class EmojiSearchViewModel(private val repository: EmojiSearchRepository) : ViewModel() {
private val pageModel = MutableLiveData<EmojiPageModel>()
val emojiList: LiveData<EmojiSearchResults> = LiveDataUtil.mapAsync(pageModel) { page ->
EmojiSearchResults(page.toMappingModels(), page.key == RecentEmojiPageModel.KEY)
}
init {
onQueryChanged("")
}
fun onQueryChanged(query: String) {
repository.submitQuery(query = query, includeRecents = true, consumer = pageModel::postValue)
}
data class EmojiSearchResults(val emojiList: List<MappingModel<*>>, val isRecents: Boolean)
class Factory(private val repository: EmojiSearchRepository) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return requireNotNull(modelClass.cast(EmojiSearchViewModel(repository)))
}
}
}