From 25b1a814feca3e31023b0b7551f3d8770fe0beca Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 23 Apr 2024 12:03:24 -0400 Subject: [PATCH] Remove legacy keyword search flag from emoji search infra. --- .../securesms/components/ComposeText.java | 34 +++++++------------ .../ui/inlinequery/InlineQuery.kt | 2 +- .../ui/inlinequery/InlineQueryEmojiResult.kt | 2 +- .../ui/inlinequery/InlineQueryReplacement.kt | 8 ++--- .../ui/inlinequery/InlineQueryViewModel.kt | 9 +++-- .../ui/inlinequery/InlineQueryViewModelV2.kt | 11 +++--- 6 files changed, 27 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java index 8d73f8eded..f54d6b0b50 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java @@ -370,16 +370,16 @@ public class ComposeText extends EmojiEditText { } private void doAfterCursorChange(@NonNull Editable text) { - if (enoughToFilter(text, false)) { - performFiltering(text, false); + if (enoughToFilter(text)) { + performFiltering(text); } else { clearInlineQuery(); } } - private void performFiltering(@NonNull Editable text, boolean keywordEmojiSearch) { + private void performFiltering(@NonNull Editable text) { int end = getSelectionEnd(); - QueryStart queryStart = findQueryStart(text, end, keywordEmojiSearch); + QueryStart queryStart = findQueryStart(text, end); int start = queryStart.index; String query = text.subSequence(start, end).toString(); @@ -387,7 +387,7 @@ public class ComposeText extends EmojiEditText { if (queryStart.isMentionQuery) { inlineQueryChangedListener.onQueryChanged(new InlineQuery.Mention(query)); } else { - inlineQueryChangedListener.onQueryChanged(new InlineQuery.Emoji(query, keywordEmojiSearch)); + inlineQueryChangedListener.onQueryChanged(new InlineQuery.Emoji(query)); } } } @@ -398,23 +398,23 @@ public class ComposeText extends EmojiEditText { } } - private boolean enoughToFilter(@NonNull Editable text, boolean keywordEmojiSearch) { + private boolean enoughToFilter(@NonNull Editable text) { int end = getSelectionEnd(); if (end < 0) { return false; } - return findQueryStart(text, end, keywordEmojiSearch).index != -1; + return findQueryStart(text, end).index != -1; } public void replaceTextWithMention(@NonNull String displayName, @NonNull RecipientId recipientId) { - replaceText(createReplacementToken(displayName, recipientId), false); + replaceText(createReplacementToken(displayName, recipientId)); } public void replaceText(@NonNull InlineQueryReplacement replacement) { - replaceText(replacement.toCharSequence(getContext()), replacement.isKeywordSearch()); + replaceText(replacement.toCharSequence(getContext())); } - private void replaceText(@NonNull CharSequence replacement, boolean keywordReplacement) { + private void replaceText(@NonNull CharSequence replacement) { Editable text = getText(); if (text == null) { return; @@ -423,7 +423,7 @@ public class ComposeText extends EmojiEditText { clearComposingText(); int end = getSelectionEnd(); - int start = findQueryStart(text, end, keywordReplacement).index - (keywordReplacement ? 0 : 1); + int start = findQueryStart(text, end).index - 1; text.replace(start, end, ""); text.insert(start, replacement); @@ -444,17 +444,7 @@ public class ComposeText extends EmojiEditText { return builder; } - private QueryStart findQueryStart(@NonNull CharSequence text, int inputCursorPosition, boolean keywordEmojiSearch) { - if (keywordEmojiSearch) { - int start = findQueryStart(text, inputCursorPosition, ' '); - if (start == -1 && inputCursorPosition != 0) { - start = 0; - } else if (start == inputCursorPosition) { - start = -1; - } - return new QueryStart(start, false); - } - + private QueryStart findQueryStart(@NonNull CharSequence text, int inputCursorPosition) { QueryStart queryStart = new QueryStart(findQueryStart(text, inputCursorPosition, MENTION_STARTER), true); if (queryStart.index < 0) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQuery.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQuery.kt index b14631d181..09e2b3d1d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQuery.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQuery.kt @@ -5,6 +5,6 @@ package org.thoughtcrime.securesms.conversation.ui.inlinequery */ sealed class InlineQuery(val query: String) { object NoQuery : InlineQuery("") - class Emoji(query: String, val keywordSearch: Boolean) : InlineQuery(query.replace('_', ' ')) + class Emoji(query: String) : InlineQuery(query.replace('_', ' ')) class Mention(query: String) : InlineQuery(query) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryEmojiResult.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryEmojiResult.kt index 4d2bc37b8c..866cb6ba2a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryEmojiResult.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryEmojiResult.kt @@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder */ object InlineQueryEmojiResult { - class Model(val canonicalEmoji: String, val preferredEmoji: String, val keywordSearch: Boolean) : MappingModel { + class Model(val canonicalEmoji: String, val preferredEmoji: String) : MappingModel { override fun areItemsTheSame(newItem: Model): Boolean { return canonicalEmoji == newItem.canonicalEmoji } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryReplacement.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryReplacement.kt index 83f2d72c17..09408061f6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryReplacement.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryReplacement.kt @@ -10,16 +10,16 @@ import org.thoughtcrime.securesms.recipients.Recipient /** * Encapsulate how to replace a query with a user selected result. */ -sealed class InlineQueryReplacement(@get:JvmName("isKeywordSearch") val keywordSearch: Boolean = false) { - abstract fun toCharSequence(context: Context): CharSequence +sealed interface InlineQueryReplacement { + fun toCharSequence(context: Context): CharSequence - class Emoji(private val emoji: String, keywordSearch: Boolean) : InlineQueryReplacement(keywordSearch) { + class Emoji(private val emoji: String) : InlineQueryReplacement { override fun toCharSequence(context: Context): CharSequence { return emoji } } - class Mention(private val recipient: Recipient, keywordSearch: Boolean) : InlineQueryReplacement(keywordSearch) { + class Mention(private val recipient: Recipient) : InlineQueryReplacement { override fun toCharSequence(context: Context): CharSequence { val builder = SpannableStringBuilder().apply { append(MentionUtil.MENTION_STARTER) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModel.kt index 149725ca22..dd4343d2bf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModel.kt @@ -44,7 +44,7 @@ class InlineQueryViewModel( private fun queryEmoji(query: InlineQuery.Emoji): Observable> { return emojiSearchRepository .submitQuery(query.query) - .map { r -> toMappingModels(r, query.keywordSearch) } + .map { r -> toMappingModels(r) } .toObservable() } @@ -52,21 +52,20 @@ class InlineQueryViewModel( when (model) { is InlineQueryEmojiResult.Model -> { recentEmojis.onCodePointSelected(model.preferredEmoji) - selectionSubject.onNext(InlineQueryReplacement.Emoji(model.preferredEmoji, model.keywordSearch)) + selectionSubject.onNext(InlineQueryReplacement.Emoji(model.preferredEmoji)) } } } companion object { - fun toMappingModels(emojiWithLabels: List, keywordSearch: Boolean): List { + fun toMappingModels(emojiWithLabels: List): List { val emojiValues = SignalStore.emojiValues() return emojiWithLabels .distinct() .map { emoji -> InlineQueryEmojiResult.Model( canonicalEmoji = emoji, - preferredEmoji = emojiValues.getPreferredVariation(emoji), - keywordSearch = keywordSearch + preferredEmoji = emojiValues.getPreferredVariation(emoji) ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2.kt index 6939d52bbc..48a247bdb8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2.kt @@ -54,7 +54,7 @@ class InlineQueryViewModelV2( private fun queryEmoji(query: InlineQuery.Emoji): Observable { return emojiSearchRepository .submitQuery(query.query) - .map { r -> if (r.isEmpty()) None else EmojiResults(toMappingModels(r, query.keywordSearch)) } + .map { r -> if (r.isEmpty()) None else EmojiResults(toMappingModels(r)) } .toObservable() } @@ -77,10 +77,10 @@ class InlineQueryViewModelV2( when (model) { is InlineQueryEmojiResult.Model -> { recentEmojis.onCodePointSelected(model.preferredEmoji) - selectionSubject.onNext(InlineQueryReplacement.Emoji(model.preferredEmoji, model.keywordSearch)) + selectionSubject.onNext(InlineQueryReplacement.Emoji(model.preferredEmoji)) } is MentionViewState -> { - selectionSubject.onNext(InlineQueryReplacement.Mention(model.recipient, false)) + selectionSubject.onNext(InlineQueryReplacement.Mention(model.recipient)) } } } @@ -90,15 +90,14 @@ class InlineQueryViewModelV2( } companion object { - fun toMappingModels(emojiWithLabels: List, keywordSearch: Boolean): List { + fun toMappingModels(emojiWithLabels: List): List { val emojiValues = SignalStore.emojiValues() return emojiWithLabels .distinct() .map { emoji -> InlineQueryEmojiResult.Model( canonicalEmoji = emoji, - preferredEmoji = emojiValues.getPreferredVariation(emoji), - keywordSearch = keywordSearch + preferredEmoji = emojiValues.getPreferredVariation(emoji) ) } }