From 9f5b822e33e9ccfbcc4606e26de4f60852e6785d Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 5 Aug 2022 17:57:24 -0400 Subject: [PATCH] Do not show :query completion for possible time entries. --- .../securesms/components/ComposeText.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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 edf84341c9..7fb14d4bc7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java @@ -46,6 +46,8 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences; import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static org.thoughtcrime.securesms.database.MentionUtil.MENTION_STARTER; @@ -54,6 +56,8 @@ public class ComposeText extends EmojiEditText { private static final char EMOJI_STARTER = ':'; private static final long EMOJI_KEYWORD_DELAY = 1500; + private static final Pattern TIME_PATTERN = Pattern.compile("^[0-9]{1,2}:[0-9]{1,2}$"); + private CharSequence hint; private SpannableString subHint; private MentionRendererDelegate mentionRendererDelegate; @@ -427,11 +431,37 @@ public class ComposeText extends EmojiEditText { } if (delimiterSearchIndex >= 0 && text.charAt(delimiterSearchIndex) == starter) { - return delimiterSearchIndex + 1; + if (couldBeTimeEntry(text, delimiterSearchIndex)) { + return -1; + } else { + return delimiterSearchIndex + 1; + } } return -1; } + /** + * Return true if we think the user may be inputting a time. + */ + private static boolean couldBeTimeEntry(@NonNull CharSequence text, int startIndex) { + if (startIndex <= 0 || startIndex + 1 >= text.length()) { + return false; + } + + int startOfToken = startIndex; + while (startOfToken > 0 && !Character.isWhitespace(text.charAt(startOfToken))) { + startOfToken--; + } + startOfToken++; + + int endOfToken = startIndex; + while (endOfToken < text.length() && !Character.isWhitespace(text.charAt(endOfToken))) { + endOfToken++; + } + + return TIME_PATTERN.matcher(text.subSequence(startOfToken, endOfToken)).find(); + } + private static class CommitContentListener implements InputConnectionCompat.OnCommitContentListener { private static final String TAG = Log.tag(CommitContentListener.class);