From db32f4116ce9c780bc21bd28d6f1c57417100bc9 Mon Sep 17 00:00:00 2001 From: still-flow <46608177+still-flow@users.noreply.github.com> Date: Mon, 23 Jan 2023 21:59:35 +0300 Subject: [PATCH] add rudimentary emote autocomplete --- .../twire/fragments/ChatFragment.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/src/main/java/com/perflyst/twire/fragments/ChatFragment.java b/app/src/main/java/com/perflyst/twire/fragments/ChatFragment.java index 1fc62d9e..5e071d9f 100644 --- a/app/src/main/java/com/perflyst/twire/fragments/ChatFragment.java +++ b/app/src/main/java/com/perflyst/twire/fragments/ChatFragment.java @@ -674,6 +674,7 @@ private void setupChatInput() { }); final Pattern mentionPattern = Pattern.compile("@(\\w+)$"); + final Pattern emotePattern = Pattern.compile(":(\\w+)$"); mSendText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { @@ -697,6 +698,29 @@ public void afterTextChanged(Editable editable) { } else { setMentionSuggestions(new ArrayList<>()); } + + + mInputMatcher = emotePattern.matcher(getSendText()); + + String emoteName = null; + while (mInputMatcher.find()) { + emoteName = mInputMatcher.group(1); + } + + if (emoteName != null && !emoteName.isEmpty() && customEmotes != null) { + List result = new ArrayList<>(); + + for (Emote emote : customEmotes) { + if (emote.getKeyword().toLowerCase().matches("\\w*" + emoteName.toLowerCase() + "\\w*") && !result.contains(emote.getKeyword())) { + result.add(emote.getKeyword()); + } + } + + Collections.sort(result); + setMentionSuggestions(result); + } else { + setMentionSuggestions(new ArrayList<>()); + } } });