This commit is contained in:
Niels Andriesse 2019-10-11 11:42:01 +11:00
parent 7ea349ff00
commit 18eb3449ca
2 changed files with 13 additions and 9 deletions

View File

@ -2626,7 +2626,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private void silentlySetComposeText(String text) { private void silentlySetComposeText(String text) {
typingTextWatcher.setEnabled(false); typingTextWatcher.setEnabled(false);
composeText.setText(text); composeText.setText(text);
clearMentions(); if (text.isEmpty()) clearMentions();
typingTextWatcher.setEnabled(true); typingTextWatcher.setEnabled(true);
} }
@ -2774,6 +2774,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} }
} }
} else if (text.length() > 0) { } else if (text.length() > 0) {
if (currentMentionStartIndex > text.length()) {
clearMentions(); // Should never occur
}
int currentEndIndex = text.length() - 1; int currentEndIndex = text.length() - 1;
char lastCharacter = text.charAt(currentEndIndex); char lastCharacter = text.charAt(currentEndIndex);
LokiUserDatabase userDatabase = DatabaseFactory.getLokiUserDatabase(ConversationActivity.this); LokiUserDatabase userDatabase = DatabaseFactory.getLokiUserDatabase(ConversationActivity.this);

View File

@ -780,10 +780,10 @@ public class ConversationItem extends LinearLayout
Pattern pattern = Pattern.compile("@[0-9a-fA-F]*"); Pattern pattern = Pattern.compile("@[0-9a-fA-F]*");
Matcher matcher = pattern.matcher(text); Matcher matcher = pattern.matcher(text);
ArrayList<Range<Integer>> mentions = new ArrayList<>(); ArrayList<Range<Integer>> mentions = new ArrayList<>();
if (matcher.find() && isGroupThread) { int startIndex = 0;
if (matcher.find(startIndex) && isGroupThread) {
while (true) { while (true) {
CharSequence userID = text.subSequence(matcher.start() + 1, matcher.end()); // +1 to get rid of the @ CharSequence userID = text.subSequence(matcher.start() + 1, matcher.end()); // +1 to get rid of the @
Integer matchEnd;
String userDisplayName; String userDisplayName;
if (userID.equals(TextSecurePreferences.getLocalNumber(context))) { if (userID.equals(TextSecurePreferences.getLocalNumber(context))) {
userDisplayName = TextSecurePreferences.getProfileName(context); userDisplayName = TextSecurePreferences.getProfileName(context);
@ -792,14 +792,15 @@ public class ConversationItem extends LinearLayout
userDisplayName = DatabaseFactory.getLokiUserDatabase(context).getServerDisplayName(publicChatID, userID.toString()); userDisplayName = DatabaseFactory.getLokiUserDatabase(context).getServerDisplayName(publicChatID, userID.toString());
} }
if (userDisplayName != null) { if (userDisplayName != null) {
text = text.subSequence(0, matcher.start()) + "@" + userDisplayName + text.subSequence(matcher.end(), Math.max(text.length(), matcher.end())); text = text.subSequence(0, matcher.start()) + "@" + userDisplayName + text.subSequence(matcher.end(), text.length());
matchEnd = matcher.start() + 1 + userDisplayName.length(); int endIndex = matcher.start() + 1 + userDisplayName.length();
mentions.add(Range.create(matcher.start(), matchEnd)); startIndex = endIndex;
mentions.add(Range.create(matcher.start(), endIndex));
} else { } else {
matchEnd = matcher.end(); startIndex = matcher.end();
} }
matcher = pattern.matcher(text.subSequence(matchEnd, Math.max(text.length(), matchEnd))); matcher = pattern.matcher(text);
if (!matcher.find()) { break; } if (!matcher.find(startIndex)) { break; }
} }
} }
SpannableString result = new SpannableString(text); SpannableString result = new SpannableString(text);