ComposeTokenizer: do not search stop after second @
This commit is contained in:
parent
9fb700f548
commit
f32bfc2ae6
|
@ -18,23 +18,51 @@ package com.keylesspalace.tusky.util
|
||||||
import android.text.SpannableString
|
import android.text.SpannableString
|
||||||
import android.text.Spanned
|
import android.text.Spanned
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
|
import android.util.Log
|
||||||
import android.widget.MultiAutoCompleteTextView
|
import android.widget.MultiAutoCompleteTextView
|
||||||
|
|
||||||
class ComposeTokenizer : MultiAutoCompleteTextView.Tokenizer {
|
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 {
|
override fun findTokenStart(text: CharSequence, cursor: Int): Int {
|
||||||
if (cursor == 0) {
|
if (cursor == 0) {
|
||||||
return cursor
|
return cursor
|
||||||
}
|
}
|
||||||
var i = cursor
|
var i = cursor
|
||||||
var character = text[i - 1]
|
var character = text[i - 1]
|
||||||
while (i > 0 && character != '@' && character != '#' && character != ':') {
|
|
||||||
// See SpanUtils.MENTION_REGEX
|
while(i > 0 && !(character == '@' || character == '#' || character == ':')) {
|
||||||
if (!Character.isLetterOrDigit(character) && character != '_') {
|
if(!isMentionOrHashtagAllowedCharacter(character)) {
|
||||||
return cursor
|
return cursor
|
||||||
}
|
}
|
||||||
|
|
||||||
i--
|
i--
|
||||||
character = if (i == 0) ' ' else text[i - 1]
|
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
|
if (i < 1
|
||||||
|| (character != '@' && character != '#' && character != ':')
|
|| (character != '@' && character != '#' && character != ':')
|
||||||
|| i > 1 && !Character.isWhitespace(text[i - 2])) {
|
|| i > 1 && !Character.isWhitespace(text[i - 2])) {
|
||||||
|
|
Loading…
Reference in New Issue