From aee8243bf651ccf283b675cb505e5a0fbaa82352 Mon Sep 17 00:00:00 2001 From: Nehemiah of Zebulun Date: Sun, 3 Sep 2023 11:30:50 +0200 Subject: [PATCH] Progress --- app/src/main/java/net/mezimmah/wkt9/WKT9.kt | 18 +++++++-- .../mezimmah/wkt9/inputmode/FNInputMode.kt | 39 +++++++++++++++++++ .../mezimmah/wkt9/inputmode/IdleInputMode.kt | 2 +- .../net/mezimmah/wkt9/inputmode/Status.kt | 3 +- .../mezimmah/wkt9/inputmode/WKT9InputMode.kt | 11 +++--- .../mezimmah/wkt9/inputmode/WordInputMode.kt | 8 ++++ .../wkt9/keypad/KeyCommandResolver.kt | 4 +- .../mezimmah/wkt9/keypad/KeyEventResult.kt | 3 +- app/src/main/res/drawable/fn_en_us_na.xml | 10 +++++ ...idle_en_us_lower.xml => idle_en_us_na.xml} | 0 10 files changed, 85 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/net/mezimmah/wkt9/inputmode/FNInputMode.kt create mode 100644 app/src/main/res/drawable/fn_en_us_na.xml rename app/src/main/res/drawable/{idle_en_us_lower.xml => idle_en_us_na.xml} (100%) diff --git a/app/src/main/java/net/mezimmah/wkt9/WKT9.kt b/app/src/main/java/net/mezimmah/wkt9/WKT9.kt index 57e648c..a1c3e91 100644 --- a/app/src/main/java/net/mezimmah/wkt9/WKT9.kt +++ b/app/src/main/java/net/mezimmah/wkt9/WKT9.kt @@ -14,8 +14,6 @@ import android.view.inputmethod.InputMethodManager import android.view.textservice.SentenceSuggestionsInfo import android.view.textservice.SpellCheckerSession import android.view.textservice.SuggestionsInfo -import android.view.textservice.TextInfo -import android.view.textservice.TextServicesManager import android.widget.LinearLayout import android.widget.TextView import android.widget.Toast @@ -30,6 +28,7 @@ import net.mezimmah.wkt9.dao.WordDao import net.mezimmah.wkt9.db.AppDatabase import net.mezimmah.wkt9.inputmode.InputMode import net.mezimmah.wkt9.inputmode.AlphaInputMode +import net.mezimmah.wkt9.inputmode.FNInputMode import net.mezimmah.wkt9.inputmode.IdleInputMode import net.mezimmah.wkt9.inputmode.NumericInputMode import net.mezimmah.wkt9.inputmode.Status @@ -80,6 +79,7 @@ class WKT9: InputMethodService(), SpellCheckerSession.SpellCheckerSessionListene private var lastInputMode: WKT9InputMode = WKT9InputMode.WORD private var inputMode: InputMode? = null private lateinit var alphaInputMode: AlphaInputMode + private lateinit var fnInputMode: FNInputMode private lateinit var numericInputMode: NumericInputMode private lateinit var wordInputMode: WordInputMode private lateinit var idleInputMode: IdleInputMode @@ -121,6 +121,7 @@ class WKT9: InputMethodService(), SpellCheckerSession.SpellCheckerSessionListene keypad = Keypad(KeyCodeMapping(KeyCodeMapping.basic), KeyLayout.en_US, KeyLayout.numeric) t9 = T9(this, keypad, settingDao, wordDao) alphaInputMode = AlphaInputMode() + fnInputMode = FNInputMode() numericInputMode = NumericInputMode() wordInputMode = WordInputMode() idleInputMode = IdleInputMode() @@ -311,13 +312,14 @@ class WKT9: InputMethodService(), SpellCheckerSession.SpellCheckerSessionListene // Todo: inputType private fun enableInputMode(mode: WKT9InputMode) { - lastInputMode = mode + if (mode != WKT9InputMode.FN) lastInputMode = mode inputMode = when(mode) { WKT9InputMode.ALPHA -> alphaInputMode WKT9InputMode.NUMERIC -> numericInputMode WKT9InputMode.WORD -> wordInputMode - WKT9InputMode.IDLE -> idleInputMode + WKT9InputMode.FN -> fnInputMode + else -> idleInputMode } } @@ -373,6 +375,8 @@ class WKT9: InputMethodService(), SpellCheckerSession.SpellCheckerSessionListene .replace('-', '_') .lowercase() + Log.d(tag, name) + return resources.getIdentifier(name, "drawable", packageName) } @@ -416,6 +420,7 @@ class WKT9: InputMethodService(), SpellCheckerSession.SpellCheckerSessionListene if (res.updateWordStatus) onUpdateWordStatus() if (res.focus) onFocus() if (res.switchInputMode != null) onSwitchInputMode(res.switchInputMode) + if (res.functionMode) onFunctionMode() return res.consumed } @@ -504,6 +509,11 @@ class WKT9: InputMethodService(), SpellCheckerSession.SpellCheckerSessionListene requestShowSelf(InputMethodManager.SHOW_IMPLICIT) } + private fun onFunctionMode() { + enableInputMode(WKT9InputMode.FN) + updateInputStatus() + } + private fun onIncreaseWeight() { val word = commitHistory.last() diff --git a/app/src/main/java/net/mezimmah/wkt9/inputmode/FNInputMode.kt b/app/src/main/java/net/mezimmah/wkt9/inputmode/FNInputMode.kt new file mode 100644 index 0000000..c63febc --- /dev/null +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/FNInputMode.kt @@ -0,0 +1,39 @@ +package net.mezimmah.wkt9.inputmode + +import android.util.Log +import net.mezimmah.wkt9.keypad.Key +import net.mezimmah.wkt9.keypad.KeyEventResult + +class FNInputMode: InputMode { + private val tag = "WKT9" + + override val mode: String = "fn" + + override var status: Status = Status.NA + private set + + init { + Log.d(tag, "Started $mode input mode.") + } + + override fun onKeyDown(key: Key, composing: Boolean): KeyEventResult { + return KeyEventResult() + } + + override fun onKeyLongDown(key: Key, composing: Boolean): KeyEventResult { + return KeyEventResult() + } + + override fun onKeyDownRepeatedly(key: Key, repeat: Int, composing: Boolean): KeyEventResult { + return KeyEventResult() + } + + override fun afterKeyDown(key: Key, composing: Boolean): KeyEventResult { + return KeyEventResult() + } + + override fun afterKeyLongDown(key: Key, keyDownMS: Long, composing: Boolean): KeyEventResult { + return KeyEventResult() + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/mezimmah/wkt9/inputmode/IdleInputMode.kt b/app/src/main/java/net/mezimmah/wkt9/inputmode/IdleInputMode.kt index 86106d7..6c57368 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputmode/IdleInputMode.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/IdleInputMode.kt @@ -9,7 +9,7 @@ import net.mezimmah.wkt9.keypad.KeyEventResult class IdleInputMode : InputMode { override val mode: String = "idle" - override var status: Status = Status.LOWER + override var status: Status = Status.NA private set private val tag = "WKT9" diff --git a/app/src/main/java/net/mezimmah/wkt9/inputmode/Status.kt b/app/src/main/java/net/mezimmah/wkt9/inputmode/Status.kt index 19f3698..9c5c9de 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputmode/Status.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/Status.kt @@ -4,5 +4,6 @@ enum class Status { CAP, UPPER, LOWER, - NUM + NUM, + NA } \ No newline at end of file diff --git a/app/src/main/java/net/mezimmah/wkt9/inputmode/WKT9InputMode.kt b/app/src/main/java/net/mezimmah/wkt9/inputmode/WKT9InputMode.kt index 15eec32..1adc987 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputmode/WKT9InputMode.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/WKT9InputMode.kt @@ -1,8 +1,9 @@ package net.mezimmah.wkt9.inputmode -enum class WKT9InputMode(val idx: Int) { - WORD(0), - ALPHA(1), - NUMERIC(2), - IDLE(3) +enum class WKT9InputMode { + WORD, + ALPHA, + NUMERIC, + IDLE, + FN } \ No newline at end of file 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 73d5390..5857597 100644 --- a/app/src/main/java/net/mezimmah/wkt9/inputmode/WordInputMode.kt +++ b/app/src/main/java/net/mezimmah/wkt9/inputmode/WordInputMode.kt @@ -31,6 +31,7 @@ class WordInputMode: InputMode { return when(keyCommandResolver.getCommand(key)) { Command.BACK -> KeyEventResult(consumed = false) Command.DELETE -> deleteCharacter(0, composing) + Command.FN -> functionMode() Command.LEFT -> navigateLeft() Command.RIGHT -> navigateRight() Command.SELECT -> focus() @@ -127,6 +128,13 @@ class WordInputMode: InputMode { ) } + private fun functionMode(): KeyEventResult { + return KeyEventResult( + consumed = true, + functionMode = true + ) + } + private fun goBack(composing: Boolean): KeyEventResult { reset() diff --git a/app/src/main/java/net/mezimmah/wkt9/keypad/KeyCommandResolver.kt b/app/src/main/java/net/mezimmah/wkt9/keypad/KeyCommandResolver.kt index cbd2a9e..22f6e39 100644 --- a/app/src/main/java/net/mezimmah/wkt9/keypad/KeyCommandResolver.kt +++ b/app/src/main/java/net/mezimmah/wkt9/keypad/KeyCommandResolver.kt @@ -35,7 +35,9 @@ class KeyCommandResolver ( Key.DOWN to Command.NAVIGATE, Key.STAR to Command.DELETE, - Key.SELECT to Command.SELECT + Key.SELECT to Command.SELECT, + + Key.FN to Command.FN )), onLong = HashMap(mapOf( 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 37ed090..bd325e8 100644 --- a/app/src/main/java/net/mezimmah/wkt9/keypad/KeyEventResult.kt +++ b/app/src/main/java/net/mezimmah/wkt9/keypad/KeyEventResult.kt @@ -22,5 +22,6 @@ data class KeyEventResult( val updateInputStatus: Boolean = false, val updateWordStatus: Boolean = false, val focus: Boolean = false, - val switchInputMode: WKT9InputMode? = null + val switchInputMode: WKT9InputMode? = null, + val functionMode: Boolean = false ) diff --git a/app/src/main/res/drawable/fn_en_us_na.xml b/app/src/main/res/drawable/fn_en_us_na.xml new file mode 100644 index 0000000..37f20ef --- /dev/null +++ b/app/src/main/res/drawable/fn_en_us_na.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/idle_en_us_lower.xml b/app/src/main/res/drawable/idle_en_us_na.xml similarity index 100% rename from app/src/main/res/drawable/idle_en_us_lower.xml rename to app/src/main/res/drawable/idle_en_us_na.xml