Add inline emoji search to CFv2.
This commit is contained in:
parent
5c2b475c01
commit
2ef7fabade
6 changed files with 48 additions and 6 deletions
|
@ -2235,7 +2235,6 @@ public class ConversationParentFragment extends Fragment
|
|||
inlineQueryViewModel = new ViewModelProvider(requireActivity()).get(InlineQueryViewModel.class);
|
||||
|
||||
inlineQueryResultsController = new InlineQueryResultsController(
|
||||
requireContext(),
|
||||
inlineQueryViewModel,
|
||||
inputPanel,
|
||||
(ViewGroup) requireView(),
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package org.thoughtcrime.securesms.conversation.ui.inlinequery
|
||||
|
||||
import android.content.Context
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.lifecycle.DefaultLifecycleObserver
|
||||
|
@ -17,7 +16,6 @@ import org.thoughtcrime.securesms.util.doOnEachLayout
|
|||
* Controller for inline search results.
|
||||
*/
|
||||
class InlineQueryResultsController(
|
||||
private val context: Context,
|
||||
private val viewModel: InlineQueryViewModel,
|
||||
private val anchor: View,
|
||||
private val container: ViewGroup,
|
||||
|
@ -44,6 +42,7 @@ class InlineQueryResultsController(
|
|||
}
|
||||
})
|
||||
|
||||
canShow = editText.hasFocus()
|
||||
editText.addOnFocusChangeListener { _, hasFocus ->
|
||||
canShow = hasFocus
|
||||
updateList(previousResults ?: emptyList())
|
||||
|
|
|
@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.util.adapter.mapping.AnyMappingModel
|
|||
|
||||
/**
|
||||
* Activity (at least) scope view model for managing inline queries. The view model needs to be larger scope so it can
|
||||
* be shared between the fragment requesting the search and the instace of [InlineQueryResultsFragment] used for displaying
|
||||
* be shared between the fragment requesting the search and the instance of [InlineQueryResultsFragment] used for displaying
|
||||
* the results.
|
||||
*/
|
||||
class InlineQueryViewModel(
|
||||
|
|
|
@ -29,6 +29,7 @@ import android.view.MenuItem
|
|||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.View.OnFocusChangeListener
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewTreeObserver
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.widget.ImageButton
|
||||
|
@ -161,6 +162,11 @@ import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectFor
|
|||
import org.thoughtcrime.securesms.conversation.quotes.MessageQuotesBottomSheet
|
||||
import org.thoughtcrime.securesms.conversation.ui.edit.EditMessageHistoryDialog
|
||||
import org.thoughtcrime.securesms.conversation.ui.error.EnableCallNotificationSettingsDialog
|
||||
import org.thoughtcrime.securesms.conversation.ui.inlinequery.InlineQuery
|
||||
import org.thoughtcrime.securesms.conversation.ui.inlinequery.InlineQueryChangedListener
|
||||
import org.thoughtcrime.securesms.conversation.ui.inlinequery.InlineQueryReplacement
|
||||
import org.thoughtcrime.securesms.conversation.ui.inlinequery.InlineQueryResultsController
|
||||
import org.thoughtcrime.securesms.conversation.ui.inlinequery.InlineQueryViewModel
|
||||
import org.thoughtcrime.securesms.conversation.v2.groups.ConversationGroupCallViewModel
|
||||
import org.thoughtcrime.securesms.conversation.v2.groups.ConversationGroupViewModel
|
||||
import org.thoughtcrime.securesms.conversation.v2.keyboard.AttachmentKeyboardFragment
|
||||
|
@ -371,6 +377,17 @@ class ConversationFragment :
|
|||
StickerSuggestionsViewModel()
|
||||
}
|
||||
|
||||
private val inlineQueryViewModel: InlineQueryViewModel by activityViewModels()
|
||||
private val inlineQueryController: InlineQueryResultsController by lazy {
|
||||
InlineQueryResultsController(
|
||||
inlineQueryViewModel,
|
||||
inputPanel,
|
||||
(requireView() as ViewGroup),
|
||||
composeText,
|
||||
viewLifecycleOwner
|
||||
)
|
||||
}
|
||||
|
||||
private val conversationTooltips = ConversationTooltips(this)
|
||||
private val colorizer = Colorizer()
|
||||
private val textDraftSaveDebouncer = Debouncer(500)
|
||||
|
@ -798,10 +815,39 @@ class ConversationFragment :
|
|||
initializeSearch()
|
||||
initializeLinkPreviews()
|
||||
initializeStickerSuggestions()
|
||||
initializeInlineSearch()
|
||||
|
||||
inputPanel.setListener(InputPanelListener())
|
||||
}
|
||||
|
||||
private fun initializeInlineSearch() {
|
||||
inlineQueryController.onOrientationChange(resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE)
|
||||
|
||||
composeText.apply {
|
||||
setInlineQueryChangedListener(object : InlineQueryChangedListener {
|
||||
override fun onQueryChanged(inlineQuery: InlineQuery) {
|
||||
inlineQueryViewModel.onQueryChange(inlineQuery)
|
||||
}
|
||||
})
|
||||
|
||||
setMentionValidator { annotations ->
|
||||
val recipient = viewModel.recipientSnapshot ?: return@setMentionValidator annotations
|
||||
|
||||
val validIds = recipient.participantIds
|
||||
.map { MentionAnnotation.idToMentionAnnotationValue(it) }
|
||||
.toSet()
|
||||
|
||||
annotations.filterNot { validIds.contains(it.value) }
|
||||
}
|
||||
}
|
||||
|
||||
inlineQueryViewModel
|
||||
.selection
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe { r: InlineQueryReplacement -> composeText.replaceText(r) }
|
||||
.addTo(disposables)
|
||||
}
|
||||
|
||||
private fun presentInputReadyState(inputReadyState: InputReadyState) {
|
||||
presentConversationTitle(inputReadyState.conversationRecipient)
|
||||
|
||||
|
|
|
@ -167,7 +167,6 @@ class AddMessageDialogFragment : KeyboardEntryDialogFragment(R.layout.v2_media_a
|
|||
mentionsViewModel = ViewModelProvider(requireActivity(), MentionsPickerViewModel.Factory()).get(MentionsPickerViewModel::class.java)
|
||||
|
||||
inlineQueryResultsController = InlineQueryResultsController(
|
||||
requireContext(),
|
||||
inlineQueryViewModel,
|
||||
requireView().findViewById(R.id.background_holder),
|
||||
(requireView() as ViewGroup),
|
||||
|
|
|
@ -451,7 +451,6 @@ class StoryGroupReplyFragment :
|
|||
|
||||
private fun initializeMentions() {
|
||||
inlineQueryResultsController = InlineQueryResultsController(
|
||||
requireContext(),
|
||||
inlineQueryViewModel,
|
||||
composer,
|
||||
(requireView() as ViewGroup),
|
||||
|
|
Loading…
Add table
Reference in a new issue