This commit is contained in:
Nehemiah of Zebulun 2023-08-27 16:51:49 +02:00
parent 372d684650
commit dae137c07a
6 changed files with 66 additions and 26 deletions

View File

@ -111,6 +111,7 @@ class WKT9: InputMethodService() {
inputMode = null inputMode = null
cursorPosition = 0 cursorPosition = 0
sentenceStart = false
clearCandidates() clearCandidates()
} }
@ -121,10 +122,10 @@ class WKT9: InputMethodService() {
return inputMode?.let { return inputMode?.let {
val keyEventResult = val keyEventResult =
if (repeatCount > 0) it.onKeyDownRepeatedly(key, repeatCount) if (repeatCount > 0) it.onKeyDownRepeatedly(key, repeatCount, sentenceStart)
else { else {
event?.startTracking() event?.startTracking()
it.onKeyDown(key) it.onKeyDown(key, sentenceStart)
} }
handleKeyEventResult(keyEventResult) handleKeyEventResult(keyEventResult)
@ -139,8 +140,8 @@ class WKT9: InputMethodService() {
return inputMode?.let { return inputMode?.let {
val keyEventResult = val keyEventResult =
if (keyDownMS >= longPressTimeout) it.afterKeyLongDown(key, keyDownMS) if (keyDownMS >= longPressTimeout) it.afterKeyLongDown(key, keyDownMS, sentenceStart)
else it.afterKeyDown(key) else it.afterKeyDown(key, sentenceStart)
handleKeyEventResult(keyEventResult) handleKeyEventResult(keyEventResult)
} ?: super.onKeyUp(keyCode, event) } ?: super.onKeyUp(keyCode, event)
@ -150,7 +151,7 @@ class WKT9: InputMethodService() {
val key = keypad.getKey(keyCode) ?: return super.onKeyLongPress(keyCode, event) val key = keypad.getKey(keyCode) ?: return super.onKeyLongPress(keyCode, event)
return inputMode?.let { return inputMode?.let {
val keyEventResult = it.onKeyLongDown(key) val keyEventResult = it.onKeyLongDown(key, sentenceStart)
handleKeyEventResult(keyEventResult) handleKeyEventResult(keyEventResult)
} ?: super.onKeyLongPress(keyCode, event) } ?: super.onKeyLongPress(keyCode, event)
@ -268,6 +269,7 @@ class WKT9: InputMethodService() {
if (res.right) onRight() if (res.right) onRight()
if (res.record) onRecord() if (res.record) onRecord()
if (res.transcribe) onTranscribe() if (res.transcribe) onTranscribe()
if (res.updateStatus) onUpdateStatus()
return res.consumed 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 { private suspend fun queryT9Candidates(codeWord: StringBuilder, limit: Int = 10): Boolean {
val words = wordDao.findCandidates(codeWord.toString(), limit) val words = wordDao.findCandidates(codeWord.toString(), limit)

View File

@ -7,23 +7,23 @@ class AlphaInputMode: InputMode {
override var status: Status = Status.ALPHA_CAP override var status: Status = Status.ALPHA_CAP
private set private set
override fun onKeyDown(key: Key): KeyEventResult { override fun onKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult {
return KeyEventResult(consumed = false) return KeyEventResult(consumed = false)
} }
override fun onKeyLongDown(key: Key): KeyEventResult { override fun onKeyLongDown(key: Key, sentenceStart: Boolean): KeyEventResult {
return KeyEventResult(consumed = false) 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) return KeyEventResult(consumed = false)
} }
override fun afterKeyDown(key: Key): KeyEventResult { override fun afterKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult {
return KeyEventResult(consumed = false) 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) return KeyEventResult(consumed = false)
} }
} }

View File

@ -6,13 +6,13 @@ import net.mezimmah.wkt9.keypad.KeyEventResult
interface InputMode { interface InputMode {
val status: Status 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
} }

View File

@ -15,7 +15,7 @@ class NumericInputMode: InputMode {
override var status: Status = Status.NUM override var status: Status = Status.NUM
private set private set
override fun onKeyDown(key: Key): KeyEventResult { override fun onKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult {
return when(keyCommandResolver.getCommand(key)) { return when(keyCommandResolver.getCommand(key)) {
Command.CHARACTER -> buildCodeWord(key) Command.CHARACTER -> buildCodeWord(key)
// Command.SELECT -> true // 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) 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) return KeyEventResult(consumed = false)
} }
override fun afterKeyDown(key: Key): KeyEventResult { override fun afterKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult {
return KeyEventResult(consumed = false) 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) return KeyEventResult(consumed = false)
} }

View File

@ -22,7 +22,7 @@ class WordInputMode: InputMode {
Log.d(tag, "Started word input mode.") Log.d(tag, "Started word input mode.")
} }
override fun onKeyDown(key: Key): KeyEventResult { override fun onKeyDown(key: Key, sentenceStart: Boolean): KeyEventResult {
keyStats(key) keyStats(key)
return when(keyCommandResolver.getCommand(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)) { return when(keyCommandResolver.getCommand(key, true)) {
Command.RECORD -> record() Command.RECORD -> record()
Command.SWITCH_MODE -> switchMode()
else -> KeyEventResult(true) 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)) { return when(keyCommandResolver.getCommand(key, repeat = repeat)) {
Command.HOME -> goHome(repeat) Command.HOME -> goHome(repeat)
Command.DELETE -> deleteCharacter(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)) { return when(keyCommandResolver.getCommand(key, after = true)) {
Command.BACK -> goBack() Command.BACK -> goBack()
Command.SHIFT_MODE -> shiftMode(sentenceStart)
else -> KeyEventResult() 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)) { return when(keyCommandResolver.getCommand(key, after = true, longPress = true)) {
Command.TRANSCRIBE -> transcribe() Command.TRANSCRIBE -> transcribe()
else -> KeyEventResult() else -> KeyEventResult()
@ -163,6 +165,36 @@ class WordInputMode: InputMode {
lastKey = null 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 { private fun transcribe(): KeyEventResult {
return KeyEventResult( return KeyEventResult(
consumed = true, consumed = true,

View File

@ -14,5 +14,7 @@ data class KeyEventResult(
val left: Boolean = false, val left: Boolean = false,
val right: Boolean = false, val right: Boolean = false,
val record: Boolean = false, val record: Boolean = false,
val transcribe: Boolean = false val transcribe: Boolean = false,
val updateStatus: Boolean = false,
val sentenceStart: Boolean? = null
) )