Skip to content
Snippets Groups Projects
Commit 87a9fa74 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Corrects further autocomplete issues

parent fa249db4
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@ import android.text.style.UnderlineSpan
import android.view.MenuItem
import android.widget.EditText
import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.util.helper.lastWordIndices
import de.kuschku.quasseldroid_ng.util.helper.selection
import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatSerializer
import de.kuschku.quasseldroid_ng.util.irc.format.spans.*
......@@ -206,17 +207,19 @@ class InputEditor(private val editText: EditText) {
}
fun autoComplete(text: CharSequence) {
val beginningOfWord = editText.text.lastIndexOf(' ', editText.selectionStart)
val endOfWord = editText.text.indexOf(' ', editText.selectionEnd)
val start = beginningOfWord + 1
val end = if (endOfWord != -1) {
endOfWord
val range = editText.text.lastWordIndices(editText.selectionStart, true)
val replacement = if (range?.start == 0) {
"$text: "
} else {
editText.text.length
"$text "
}
val replacement = "$text: "
editText.text.replace(start, end, replacement)
editText.setSelection(start + replacement.length)
if (range != null) {
editText.text.replace(range.start, range.endInclusive + 1, replacement)
editText.setSelection(range.start + replacement.length)
} else {
editText.text.append(replacement)
editText.setSelection(editText.text.length)
}
}
}
\ No newline at end of file
......@@ -2,14 +2,30 @@ package de.kuschku.quasseldroid_ng.util.helper
fun CharSequence.lastWord(cursor: Int = this.length,
onlyBeforeCursor: Boolean = false): CharSequence {
val beginningOfWord = lastIndexOf(' ', cursor)
val endOfWord = indexOf(' ', cursor)
val start = beginningOfWord + 1
val end = if (endOfWord != -1) {
endOfWord
return lastWordIndices(cursor, onlyBeforeCursor)?.let { subSequence(it) } ?: ""
}
fun CharSequence.lastWordIndices(cursor: Int = this.length,
onlyBeforeCursor: Boolean = false): IntRange? {
val cursorPosition = if (cursor != -1) {
cursor
} else {
length
}
return subSequence(start, if (onlyBeforeCursor) cursor else end)
val beginningOfWord = lastIndexOf(' ', cursorPosition - 1)
val endOfWord = indexOf(' ', cursorPosition)
val start = beginningOfWord + 1
val end = when {
onlyBeforeCursor -> cursorPosition
endOfWord == -1 -> cursorPosition
else -> endOfWord
}
return if (end - start > 0 && start >= 0 && end <= length) {
start..end
} else {
null
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment