2023-09-11 14:35:19 +02:00

50 lines
1.2 KiB
Kotlin

package net.mezimmah.wkt9.keypad
import android.util.Log
import net.mezimmah.wkt9.exception.MissingLetterCode
import java.lang.StringBuilder
class Keypad(
private val keyCodeMapping: KeyCodeMapping,
private val letterLayout: Map<Key, List<Char>>,
numericLayout: Map<Key, Int>
) {
private val tag = "WKT9"
private val letterCodeMap: MutableMap<Char, Int> = mutableMapOf()
init {
Log.d(tag, "Keypad")
numericLayout.forEach { (key, code) ->
indexKeyLetters(key, code)
}
}
private fun indexKeyLetters(key: Key, code: Int) {
letterLayout[key]?.map { letter ->
letterCodeMap[letter] = code
}
}
fun getKey(code: Int): Key? {
return keyCodeMapping.key(code)
}
fun getCodeForWord(word: String): String {
val builder = StringBuilder()
val normalized = word.lowercase()
for (letter in normalized) {
val code = codeForLetter(letter) ?: throw MissingLetterCode("No code found for '$letter'")
builder.append(code)
}
return builder.toString()
}
fun codeForLetter(letter: Char): Int? {
return letterCodeMap[letter]
}
}