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<>()); + } } });