Progress
This commit is contained in:
@@ -7,7 +7,7 @@ data class KeyEventResult(
|
||||
val consumed: Boolean = true,
|
||||
val finishComposing: Boolean = false,
|
||||
val startComposing: Boolean = false,
|
||||
val trackCommits: Boolean = false,
|
||||
val increaseWeight: Boolean = false,
|
||||
val codeWord: StringBuilder? = null,
|
||||
val candidates: List<String>? = null,
|
||||
val commit: String? = null,
|
||||
|
||||
@@ -6,41 +6,36 @@ import java.lang.StringBuilder
|
||||
|
||||
class Keypad(
|
||||
private val keyCodeMapping: KeyCodeMapping,
|
||||
private val letterLayout: Map<Key, List<Char>>
|
||||
private val letterLayout: Map<Key, List<Char>>,
|
||||
|
||||
numericLayout: Map<Key, Int>
|
||||
) {
|
||||
private lateinit var letterKeyMap: Map<Char, Key>
|
||||
private lateinit var keyIsLetterMap: Map<Key, Boolean>
|
||||
private var emojiCodes = mapOf(
|
||||
"❤️" to "143278",
|
||||
"\uD83D\uDE18" to "15477"
|
||||
)
|
||||
private val tag = "WKT9"
|
||||
private val letterCodeMap: MutableMap<Char, Int> = mutableMapOf()
|
||||
|
||||
init {
|
||||
initKeyMaps(letterLayout)
|
||||
Log.d(tag, "Keypad")
|
||||
|
||||
numericLayout.forEach { (key, code) ->
|
||||
indexKeyLetters(key, code)
|
||||
}
|
||||
}
|
||||
|
||||
fun getKey(keyCode: Int): Key? {
|
||||
return keyCodeMapping.key(keyCode)
|
||||
private fun indexKeyLetters(key: Key, code: Int) {
|
||||
letterLayout[key]?.map { letter ->
|
||||
letterCodeMap[letter] = code
|
||||
}
|
||||
}
|
||||
|
||||
fun getCharacter(key: Key, idx: Int): Char {
|
||||
val chars = letterLayout[key]!!
|
||||
val length = chars.size
|
||||
val wrappedIdx = idx % (length - 1) + 1
|
||||
return chars[wrappedIdx]
|
||||
}
|
||||
|
||||
fun getDigit(key: Key): Char? {
|
||||
val letters = letterLayout[key] ?: return null
|
||||
return if (letters.isNotEmpty() && letters[0].isDigit()) letters[0] else null
|
||||
fun getKey(code: Int): Key? {
|
||||
return keyCodeMapping.key(code)
|
||||
}
|
||||
|
||||
fun getCodeForWord(word: String): String {
|
||||
if (emojiCodes.keys.contains(word)) return emojiCodes[word]!!
|
||||
|
||||
val builder = StringBuilder()
|
||||
val normalized = word.lowercase()
|
||||
|
||||
for (letter in word) {
|
||||
for (letter in normalized) {
|
||||
val code = codeForLetter(letter) ?: throw MissingLetterCode("No code found for '$letter'")
|
||||
|
||||
builder.append(code)
|
||||
@@ -49,29 +44,7 @@ class Keypad(
|
||||
return builder.toString()
|
||||
}
|
||||
|
||||
private fun codeForLetter(letter: Char): Char? {
|
||||
Log.d("wkt9", "Letter key map: letterKeyMap")
|
||||
return ' ' //letterKeyMap[letter]?.code
|
||||
}
|
||||
|
||||
private fun initKeyMaps(layout: Map<Key, List<Char>>): Map<Char, Key> {
|
||||
val letterKeyMap = HashMap<Char, Key>()
|
||||
val keyIsLetterMap = HashMap<Key, Boolean>()
|
||||
|
||||
this.letterKeyMap = letterKeyMap
|
||||
this.keyIsLetterMap = keyIsLetterMap
|
||||
|
||||
for ((key, characters) in layout) {
|
||||
for (char in characters) {
|
||||
letterKeyMap[char] = key
|
||||
|
||||
if (!KeyLayout.nonAlphaNumeric.contains(char)) {
|
||||
letterKeyMap[char.uppercaseChar()] = key
|
||||
keyIsLetterMap[key] = true
|
||||
} else if (keyIsLetterMap[key] == null) keyIsLetterMap[key] = false
|
||||
}
|
||||
}
|
||||
|
||||
return letterKeyMap
|
||||
private fun codeForLetter(letter: Char): Int? {
|
||||
return letterCodeMap[letter]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user