From 0ec4f4b262e5037a47eb3241183743767e8c08ae Mon Sep 17 00:00:00 2001 From: Nehemiah Date: Mon, 4 Dec 2023 05:19:38 -0500 Subject: [PATCH] Get initial sentence position state --- app/src/main/java/net/mezimmah/wkt9/IME.kt | 1 - .../main/java/net/mezimmah/wkt9/WKT9IME.kt | 6 +---- .../wkt9/inputhandler/DefaultInputHandler.kt | 23 +++++++++++++++++-- .../wkt9/inputhandler/LetterInputHandler.kt | 5 +--- .../wkt9/inputhandler/WordInputHandler.kt | 2 +- 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/net/mezimmah/wkt9/IME.kt b/app/src/main/java/net/mezimmah/wkt9/IME.kt index 74ec3ba..8bebc41 100644 --- a/app/src/main/java/net/mezimmah/wkt9/IME.kt +++ b/app/src/main/java/net/mezimmah/wkt9/IME.kt @@ -31,7 +31,6 @@ interface IME { fun onDeleteText(beforeCursor: Int = 0, afterCursor: Int = 0, finishComposing: Boolean = false) - fun onGetTextBeforeCursor(n: Int): CharSequence? fun onSwitchInputHandler(inputMode: InputMode) diff --git a/app/src/main/java/net/mezimmah/wkt9/WKT9IME.kt b/app/src/main/java/net/mezimmah/wkt9/WKT9IME.kt index 448aaea..b1b15fb 100644 --- a/app/src/main/java/net/mezimmah/wkt9/WKT9IME.kt +++ b/app/src/main/java/net/mezimmah/wkt9/WKT9IME.kt @@ -112,10 +112,6 @@ class WKT9IME: IME, InputMethodService() { inputHandler?.onDeleteWord(word) } - override fun onGetTextBeforeCursor(n: Int): CharSequence? { - return this.currentInputConnection?.getTextBeforeCursor(n, 0) - } - override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { if (keyDownStats.keyCode != keyCode) { keyDownStats.keyCode = keyCode @@ -318,7 +314,7 @@ class WKT9IME: IME, InputMethodService() { private fun switchInputMode(mode: InputMode) { inputHandler = when(mode) { - InputMode.Word -> WordInputHandler(this, this, locale) + InputMode.Word -> WordInputHandler(this, this, locale) InputMode.Letter -> { val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) diff --git a/app/src/main/java/net/mezimmah/wkt9/inputhandler/DefaultInputHandler.kt b/app/src/main/java/net/mezimmah/wkt9/inputhandler/DefaultInputHandler.kt index 0168cf0..69c07c2 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputhandler/DefaultInputHandler.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputhandler/DefaultInputHandler.kt @@ -19,14 +19,29 @@ open class DefaultInputHandler( private var currentCapMode: Int? = null protected val punctuationMarks = listOf(" ", ". ", "? ", "! ", ", ", ": ", "; ") + protected val sentenceDelimiters = listOf('.', '?', '!') + protected val wordDelimiters = listOf('\t', '\n', ' ', ',', ':', ';') protected val tag = "WKT9" protected val keypad: Keypad = Keypad() - protected var wordStart: Boolean = true - protected var sentenceStart: Boolean = true + protected var wordStart: Boolean = false + protected var sentenceStart: Boolean = false init { + val textBeforeCursor = getTextBeforeCursor(15) + + if ( + textBeforeCursor.isNullOrEmpty() || + textBeforeCursor.trim().isEmpty() || + sentenceDelimiters.contains(textBeforeCursor.trim().last()) + ) { + sentenceStart = true + wordStart = true + } else if (wordDelimiters.contains(textBeforeCursor.last())) { + wordStart = true + } + wkt9.currentInputEditorInfo?.let { val inputType = it.inputType val typeFlags = inputType.and(InputType.TYPE_MASK_FLAGS) @@ -83,4 +98,8 @@ open class DefaultInputHandler( protected fun triggerOriginalKeyEvent(key: Key) { triggerKeyEvent(key.keyCode) } + + protected fun getTextBeforeCursor(count: Int): CharSequence? { + return wkt9.currentInputConnection?.getTextBeforeCursor(count, 0) + } } \ No newline at end of file diff --git a/app/src/main/java/net/mezimmah/wkt9/inputhandler/LetterInputHandler.kt b/app/src/main/java/net/mezimmah/wkt9/inputhandler/LetterInputHandler.kt index 39c77eb..8326e5f 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputhandler/LetterInputHandler.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputhandler/LetterInputHandler.kt @@ -30,7 +30,7 @@ class LetterInputHandler( val ime: IME, private var wkt9: WKT9IME, private var locale: Locale, - private var composeTimeout: Long + private var composeTimeout: Long, ): SpellCheckerSession.SpellCheckerSessionListener, DefaultInputHandler(wkt9), InputHandler { private val db = AppDatabase.getInstance(wkt9) private val wordDao = db.getWordDao() @@ -163,9 +163,6 @@ class LetterInputHandler( } private fun finishComposingChar() { - val wordDelimiters = listOf(' ', ',', ':', ';') - val sentenceDelimiters = listOf('.', '?', '!') - wkt9.onCommit() if (sentenceDelimiters.contains(lastComposeChar)) { diff --git a/app/src/main/java/net/mezimmah/wkt9/inputhandler/WordInputHandler.kt b/app/src/main/java/net/mezimmah/wkt9/inputhandler/WordInputHandler.kt index 17350b1..051c7a5 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputhandler/WordInputHandler.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputhandler/WordInputHandler.kt @@ -23,7 +23,7 @@ import java.util.Locale class WordInputHandler( val ime: IME, private var wkt9: WKT9IME, - private var locale: Locale, + private var locale: Locale ) : DefaultInputHandler(wkt9), InputHandler { private val codeword = StringBuilder() private var staleCodeword = false