ComposeTokenizer: do not search stop after second @

This commit is contained in:
Alibek Omarov 2020-10-05 19:51:17 +03:00
parent c5cedbe85f
commit 3fff54c1f4

View File

@ -18,23 +18,51 @@ package com.keylesspalace.tusky.util
import android.text.SpannableString
import android.text.Spanned
import android.text.TextUtils
import android.util.Log
import android.widget.MultiAutoCompleteTextView
class ComposeTokenizer : MultiAutoCompleteTextView.Tokenizer {
private fun isMentionOrHashtagAllowedCharacter(character: Char) : Boolean {
return Character.isLetterOrDigit(character) || character == '_' // simple usernames
|| character == '-' // extended usernames
|| character == '.' // domain dot
}
override fun findTokenStart(text: CharSequence, cursor: Int): Int {
if (cursor == 0) {
return cursor
}
var i = cursor
var character = text[i - 1]
while (i > 0 && character != '@' && character != '#' && character != ':') {
// See SpanUtils.MENTION_REGEX
if (!Character.isLetterOrDigit(character) && character != '_') {
while(i > 0 && !(character == '@' || character == '#' || character == ':')) {
if(!isMentionOrHashtagAllowedCharacter(character)) {
return cursor
}
i--
character = if (i == 0) ' ' else text[i - 1]
}
// caught domain name, try search username
// don't ask me about this code
if(i > 3 && character == '@') {
i--
character = text[i - 1]
while(i > 0 && character != '@') {
if(!isMentionOrHashtagAllowedCharacter(character)) {
return cursor
}
i--
character = if (i == 0) ' ' else text[i - 1]
}
}
// Log.d("Tokenizer", "Stopped search at ${character} ${text.substring(i)}")
if (i < 1
|| (character != '@' && character != '#' && character != ':')
|| i > 1 && !Character.isWhitespace(text[i - 2])) {