mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Make it more likely 8 emoji fit on a row, fix emoji search emoticons.
This commit is contained in:
committed by
Alex Hart
parent
a1c8573fad
commit
b85c5eb54a
@@ -7,16 +7,12 @@ import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiPageModel
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.EmojiHeader
|
||||
import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel
|
||||
import org.thoughtcrime.securesms.components.emoji.parsing.EmojiTree
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import org.thoughtcrime.securesms.emoji.EmojiCategory
|
||||
import org.thoughtcrime.securesms.emoji.EmojiSource.Companion.latest
|
||||
import org.thoughtcrime.securesms.keyboard.emoji.EmojiKeyboardPageCategoryMappingModel.EmojiCategoryMappingModel
|
||||
import org.thoughtcrime.securesms.util.DefaultValueLiveData
|
||||
import org.thoughtcrime.securesms.util.MappingModel
|
||||
import org.thoughtcrime.securesms.util.MappingModelList
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil
|
||||
@@ -92,17 +88,3 @@ class EmojiKeyboardPageViewModel(repository: EmojiKeyboardPageRepository) : View
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun EmojiPageModel.toMappingModels(): List<MappingModel<*>> {
|
||||
val emojiTree: EmojiTree = latest.emojiTree
|
||||
|
||||
return displayEmoji.map {
|
||||
val isTextEmoji = EmojiCategory.EMOTICONS.key == key || (RecentEmojiPageModel.KEY == key && emojiTree.getEmoji(it.value, 0, it.value.length) == null)
|
||||
|
||||
if (isTextEmoji) {
|
||||
EmojiPageViewGridAdapter.EmojiTextModel(key, it)
|
||||
} else {
|
||||
EmojiPageViewGridAdapter.EmojiModel(key, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.thoughtcrime.securesms.keyboard.emoji
|
||||
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiPageModel
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter
|
||||
import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel
|
||||
import org.thoughtcrime.securesms.components.emoji.parsing.EmojiTree
|
||||
import org.thoughtcrime.securesms.emoji.EmojiCategory
|
||||
import org.thoughtcrime.securesms.emoji.EmojiSource
|
||||
import org.thoughtcrime.securesms.util.MappingModel
|
||||
|
||||
fun EmojiPageModel.toMappingModels(): List<MappingModel<*>> {
|
||||
val emojiTree: EmojiTree = EmojiSource.latest.emojiTree
|
||||
|
||||
return displayEmoji.map {
|
||||
val isTextEmoji = EmojiCategory.EMOTICONS.key == key || (RecentEmojiPageModel.KEY == key && emojiTree.getEmoji(it.value, 0, it.value.length) == null)
|
||||
|
||||
if (isTextEmoji) {
|
||||
EmojiPageViewGridAdapter.EmojiTextModel(key, it)
|
||||
} else {
|
||||
EmojiPageViewGridAdapter.EmojiModel(key, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,17 +40,25 @@ class EmojiSearchFragment : Fragment(R.layout.emoji_search_fragment), EmojiPageV
|
||||
val searchBar: KeyboardPageSearchView = view.findViewById(R.id.emoji_search_view)
|
||||
val resultsContainer: FrameLayout = view.findViewById(R.id.emoji_search_results_container)
|
||||
val noResults: TextView = view.findViewById(R.id.emoji_search_empty)
|
||||
val emojiPageView = EmojiPageView(requireContext(), eventListener, this, true, LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false), R.layout.emoji_search_result_display_item)
|
||||
val emojiPageView = EmojiPageView(
|
||||
requireContext(),
|
||||
eventListener,
|
||||
this,
|
||||
true,
|
||||
LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false),
|
||||
R.layout.emoji_display_item_list,
|
||||
R.layout.emoji_text_display_item_list
|
||||
)
|
||||
|
||||
resultsContainer.addView(emojiPageView)
|
||||
|
||||
searchBar.presentForEmojiSearch()
|
||||
searchBar.callbacks = SearchCallbacks()
|
||||
|
||||
viewModel.pageModel.observe(viewLifecycleOwner) { pageModel ->
|
||||
emojiPageView.setModel(pageModel)
|
||||
viewModel.emojiList.observe(viewLifecycleOwner) { results ->
|
||||
emojiPageView.setList(results.emojiList)
|
||||
|
||||
if (pageModel.emoji.isNotEmpty() || pageModel.iconAttr == R.attr.emoji_category_recent) {
|
||||
if (results.emojiList.isNotEmpty() || results.isRecents) {
|
||||
emojiPageView.visibility = View.VISIBLE
|
||||
noResults.visibility = View.GONE
|
||||
} else {
|
||||
|
||||
@@ -5,21 +5,29 @@ 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.MappingModel
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil
|
||||
|
||||
class EmojiSearchViewModel(private val repository: EmojiSearchRepository) : ViewModel() {
|
||||
|
||||
private val internalPageModel = MutableLiveData<EmojiPageModel>()
|
||||
private val pageModel = MutableLiveData<EmojiPageModel>()
|
||||
|
||||
val pageModel: LiveData<EmojiPageModel> = internalPageModel
|
||||
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 = internalPageModel::postValue)
|
||||
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)))
|
||||
|
||||
Reference in New Issue
Block a user