mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-27 13:13:43 +00:00
Remove legacy keyword search flag from emoji search infra.
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user