From dae137c07ab1c3ba94c82114991716524076cbd9 Mon Sep 17 00:00:00 2001 From: Nehemiah of Zebulun Date: Sun, 27 Aug 2023 16:51:49 +0200 Subject: [PATCH] Press on --- app/src/main/java/net/mezimmah/wkt9/WKT9.kt | 16 ++++--- .../mezimmah/wkt9/inputmode/AlphaInputMode.kt | 10 ++--- .../net/mezimmah/wkt9/inputmode/InputMode.kt | 10 ++--- .../wkt9/inputmode/NumericInputMode.kt | 10 ++--- .../mezimmah/wkt9/inputmode/WordInputMode.kt | 42 ++++++++++++++++--- .../mezimmah/wkt9/keypad/KeyEventResult.kt | 4 +- 6 files changed, 66 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/net/mezimmah/wkt9/WKT9.kt b/app/src/main/java/net/mezimmah/wkt9/WKT9.kt index c093cde..4289f90 100644 --- a/app/src/main/java/net/mezimmah/wkt9/WKT9.kt +++ b/app/src/main/java/net/mezimmah/wkt9/WKT9.kt @@ -111,6 +111,7 @@ class WKT9: InputMethodService() { inputMode = null cursorPosition = 0 + sentenceStart = false clearCandidates() } @@ -121,10 +122,10 @@ class WKT9: InputMethodService() { return inputMode?.let { val keyEventResult = - if (repeatCount > 0) it.onKeyDownRepeatedly(key, repeatCount) + if (repeatCount > 0) it.onKeyDownRepeatedly(key, repeatCount, sentenceStart) else { event?.startTracking() - it.onKeyDown(key) + it.onKeyDown(key, sentenceStart) } handleKeyEventResult(keyEventResult) @@ -139,8 +140,8 @@ class WKT9: InputMethodService() { return inputMode?.let { val keyEventResult = - if (keyDownMS >= longPressTimeout) it.afterKeyLongDown(key, keyDownMS) - else it.afterKeyDown(key) + if (keyDownMS >= longPressTimeout) it.afterKeyLongDown(key, keyDownMS, sentenceStart) + else it.afterKeyDown(key, sentenceStart) handleKeyEventResult(keyEventResult) } ?: super.onKeyUp(keyCode, event) @@ -150,7 +151,7 @@ class WKT9: InputMethodService() { val key = keypad.getKey(keyCode) ?: return super.onKeyLongPress(keyCode, event) return inputMode?.let { - val keyEventResult = it.onKeyLongDown(key) + val keyEventResult = it.onKeyLongDown(key, sentenceStart) handleKeyEventResult(keyEventResult) } ?: super.onKeyLongPress(keyCode, event) @@ -268,6 +269,7 @@ class WKT9: InputMethodService() { if (res.right) onRight() if (res.record) onRecord() if (res.transcribe) onTranscribe() + if (res.updateStatus) onUpdateStatus() return res.consumed } @@ -426,6 +428,10 @@ class WKT9: InputMethodService() { } } + private fun onUpdateStatus() { + Log.d(tag, "We're going to update the status...") + } + private suspend fun queryT9Candidates(codeWord: StringBuilder, limit: Int = 10): Boolean { val words = wordDao.findCandidates(codeWord.toString(), limit) diff --git a/app/src/main/java/net/mezimmah/wkt9/inputmode/AlphaInputMode.kt b/app/src/main/java/net/mezimmah/wkt9/inputmode/AlphaInputMode.kt index 9e6edb8..aa3c840 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputmode/AlphaInputMode.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/AlphaInputMode.kt @@ -7,23 +7,23 @@ class AlphaInputMode: InputMode { override var status: Status = Status.ALPHA_CAP private set - override fun onKeyDown(key: Key): KeyEventResult { + override fun onKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } - override fun onKeyLongDown(key: Key): KeyEventResult { + override fun onKeyLongDown(key: Key, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } - override fun onKeyDownRepeatedly(key: Key, repeat: Int): KeyEventResult { + override fun onKeyDownRepeatedly(key: Key, repeat: Int, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } - override fun afterKeyDown(key: Key): KeyEventResult { + override fun afterKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } - override fun afterKeyLongDown(key: Key, keyDownMS: Long): KeyEventResult { + override fun afterKeyLongDown(key: Key, keyDownMS: Long, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } } \ No newline at end of file diff --git a/app/src/main/java/net/mezimmah/wkt9/inputmode/InputMode.kt b/app/src/main/java/net/mezimmah/wkt9/inputmode/InputMode.kt index b467b6f..7145cc5 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputmode/InputMode.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/InputMode.kt @@ -6,13 +6,13 @@ import net.mezimmah.wkt9.keypad.KeyEventResult interface InputMode { val status: Status - fun onKeyDown(key: Key): KeyEventResult + fun onKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult - fun onKeyLongDown(key: Key): KeyEventResult + fun onKeyLongDown(key: Key, sentenceStart: Boolean): KeyEventResult - fun onKeyDownRepeatedly(key: Key, repeat: Int): KeyEventResult + fun onKeyDownRepeatedly(key: Key, repeat: Int, sentenceStart: Boolean): KeyEventResult - fun afterKeyDown(key: Key): KeyEventResult + fun afterKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult - fun afterKeyLongDown(key: Key, keyDownMS: Long): KeyEventResult + fun afterKeyLongDown(key: Key, keyDownMS: Long, sentenceStart: Boolean): KeyEventResult } \ No newline at end of file diff --git a/app/src/main/java/net/mezimmah/wkt9/inputmode/NumericInputMode.kt b/app/src/main/java/net/mezimmah/wkt9/inputmode/NumericInputMode.kt index a9cadb9..04be9d5 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputmode/NumericInputMode.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/NumericInputMode.kt @@ -15,7 +15,7 @@ class NumericInputMode: InputMode { override var status: Status = Status.NUM private set - override fun onKeyDown(key: Key): KeyEventResult { + override fun onKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult { return when(keyCommandResolver.getCommand(key)) { Command.CHARACTER -> buildCodeWord(key) // Command.SELECT -> true @@ -26,19 +26,19 @@ class NumericInputMode: InputMode { } } - override fun onKeyLongDown(key: Key): KeyEventResult { + override fun onKeyLongDown(key: Key, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } - override fun onKeyDownRepeatedly(key: Key, repeat: Int): KeyEventResult { + override fun onKeyDownRepeatedly(key: Key, repeat: Int, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } - override fun afterKeyDown(key: Key): KeyEventResult { + override fun afterKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } - override fun afterKeyLongDown(key: Key, keyDownMS: Long): KeyEventResult { + override fun afterKeyLongDown(key: Key, keyDownMS: Long, sentenceStart: Boolean): KeyEventResult { return KeyEventResult(consumed = false) } diff --git a/app/src/main/java/net/mezimmah/wkt9/inputmode/WordInputMode.kt b/app/src/main/java/net/mezimmah/wkt9/inputmode/WordInputMode.kt index ce5aa5f..21c1720 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputmode/WordInputMode.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/WordInputMode.kt @@ -22,7 +22,7 @@ class WordInputMode: InputMode { Log.d(tag, "Started word input mode.") } - override fun onKeyDown(key: Key): KeyEventResult { + override fun onKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult { keyStats(key) return when(keyCommandResolver.getCommand(key)) { @@ -36,14 +36,15 @@ class WordInputMode: InputMode { } } - override fun onKeyLongDown(key: Key): KeyEventResult { + override fun onKeyLongDown(key: Key, sentenceStart: Boolean): KeyEventResult { return when(keyCommandResolver.getCommand(key, true)) { Command.RECORD -> record() + Command.SWITCH_MODE -> switchMode() else -> KeyEventResult(true) } } - override fun onKeyDownRepeatedly(key: Key, repeat: Int): KeyEventResult { + override fun onKeyDownRepeatedly(key: Key, repeat: Int, sentenceStart: Boolean): KeyEventResult { return when(keyCommandResolver.getCommand(key, repeat = repeat)) { Command.HOME -> goHome(repeat) Command.DELETE -> deleteCharacter(repeat) @@ -51,14 +52,15 @@ class WordInputMode: InputMode { } } - override fun afterKeyDown(key: Key): KeyEventResult { + override fun afterKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult { return when(keyCommandResolver.getCommand(key, after = true)) { Command.BACK -> goBack() + Command.SHIFT_MODE -> shiftMode(sentenceStart) else -> KeyEventResult() } } - override fun afterKeyLongDown(key: Key, keyDownMS: Long): KeyEventResult { + override fun afterKeyLongDown(key: Key, keyDownMS: Long, sentenceStart: Boolean): KeyEventResult { return when(keyCommandResolver.getCommand(key, after = true, longPress = true)) { Command.TRANSCRIBE -> transcribe() else -> KeyEventResult() @@ -163,6 +165,36 @@ class WordInputMode: InputMode { lastKey = null } + private fun shiftMode(sentenceStart: Boolean): KeyEventResult { + reset() + + if (status == Status.WORD_CAP && sentenceStart || status == Status.WORD && !sentenceStart) { + return KeyEventResult( + consumed = true, + sentenceStart = !sentenceStart + ) + } + + status = when(status) { + Status.WORD_CAP -> Status.WORD_UPPER + Status.WORD -> Status.WORD_CAP + else -> Status.WORD + } + + return KeyEventResult( + consumed = true, + updateStatus = true + ) + } + + private fun switchMode(): KeyEventResult { + reset() + + Log.d(tag, "Switch mode") + + return KeyEventResult(true) + } + private fun transcribe(): KeyEventResult { return KeyEventResult( consumed = true, diff --git a/app/src/main/java/net/mezimmah/wkt9/keypad/KeyEventResult.kt b/app/src/main/java/net/mezimmah/wkt9/keypad/KeyEventResult.kt index d3d91db..3d6aba7 100644 --- a/app/src/main/java/net/mezimmah/wkt9/keypad/KeyEventResult.kt +++ b/app/src/main/java/net/mezimmah/wkt9/keypad/KeyEventResult.kt @@ -14,5 +14,7 @@ data class KeyEventResult( val left: Boolean = false, val right: Boolean = false, val record: Boolean = false, - val transcribe: Boolean = false + val transcribe: Boolean = false, + val updateStatus: Boolean = false, + val sentenceStart: Boolean? = null )