Press on
This commit is contained in:
parent
372d684650
commit
dae137c07a
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
||||||
}
|
}
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user