Remove legacy keyword search flag from emoji search infra.

This commit is contained in:
Cody Henthorne
2024-04-23 12:03:24 -04:00
parent b043b6e458
commit 25b1a814fe
6 changed files with 27 additions and 39 deletions

View File

@@ -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) {

View File

@@ -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)
}

View File

@@ -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<Model> {
class Model(val canonicalEmoji: String, val preferredEmoji: String) : MappingModel<Model> {
override fun areItemsTheSame(newItem: Model): Boolean {
return canonicalEmoji == newItem.canonicalEmoji
}

View File

@@ -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)

View File

@@ -44,7 +44,7 @@ class InlineQueryViewModel(
private fun queryEmoji(query: InlineQuery.Emoji): Observable<List<AnyMappingModel>> {
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<String>, keywordSearch: Boolean): List<AnyMappingModel> {
fun toMappingModels(emojiWithLabels: List<String>): List<AnyMappingModel> {
val emojiValues = SignalStore.emojiValues()
return emojiWithLabels
.distinct()
.map { emoji ->
InlineQueryEmojiResult.Model(
canonicalEmoji = emoji,
preferredEmoji = emojiValues.getPreferredVariation(emoji),
keywordSearch = keywordSearch
preferredEmoji = emojiValues.getPreferredVariation(emoji)
)
}
}

View File

@@ -54,7 +54,7 @@ class InlineQueryViewModelV2(
private fun queryEmoji(query: InlineQuery.Emoji): Observable<Results> {
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<String>, keywordSearch: Boolean): List<AnyMappingModel> {
fun toMappingModels(emojiWithLabels: List<String>): List<AnyMappingModel> {
val emojiValues = SignalStore.emojiValues()
return emojiWithLabels
.distinct()
.map { emoji ->
InlineQueryEmojiResult.Model(
canonicalEmoji = emoji,
preferredEmoji = emojiValues.getPreferredVariation(emoji),
keywordSearch = keywordSearch
preferredEmoji = emojiValues.getPreferredVariation(emoji)
)
}
}