Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/src/main/java/be/scri/helpers/KeyHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import be.scri.services.GeneralKeyboardIME.ScribeState
class KeyHandler(
private val ime: GeneralKeyboardIME,
) {
private val suggestionHandler = SuggestionHandler(ime)
private val suggestionHandler = ime.suggestionHandler
private val spaceKeyProcessor = SpaceKeyProcessor(ime, suggestionHandler)
private val autocompletionHandler = AutocompletionHandler(ime)
private val autocompletionHandler = ime.autocompletionHandler

/** Tracks if the last key pressed was a space, used for "period on double space" logic. */
private var wasLastKeySpace: Boolean = false
Expand Down
8 changes: 7 additions & 1 deletion app/src/main/java/be/scri/helpers/ui/KeyboardUIManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ class KeyboardUIManager(

fun getKeyboardLayoutXML(): Int

fun getCurrentKeyboardLayoutXML(): Int

fun getCurrentEnterKeyType(): Int

fun commitText(text: String)
Expand Down Expand Up @@ -226,7 +228,11 @@ class KeyboardUIManager(

binding.scribeKeyOptions.foreground = AppCompatResources.getDrawable(context, R.drawable.ic_scribe_icon_vector)

initializeKeyboard(listener.getKeyboardLayoutXML())
val keyboardXml = listener.getCurrentKeyboardLayoutXML()
initializeKeyboard(keyboardXml)
if (keyboardXml == R.xml.keys_symbols) {
setupCurrencySymbol(language)
}

updateButtonVisibility(ScribeState.IDLE, emojiAutoSuggestionEnabled, autoSuggestEmojis)
updateEmojiSuggestion(ScribeState.IDLE, emojiAutoSuggestionEnabled, autoSuggestEmojis)
Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/be/scri/services/EnglishKeyboardIME.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ class EnglishKeyboardIME : GeneralKeyboardIME("English") {
override var inputTypeClass: Int = InputType.TYPE_CLASS_TEXT
override var enterKeyType: Int = IME_ACTION_NONE
override var switchToLetters: Boolean = false
override var hasTextBeforeCursor: Boolean = false

private val keyHandler by lazy { KeyHandler(this) }

Expand Down
35 changes: 22 additions & 13 deletions app/src/main/java/be/scri/services/GeneralKeyboardIME.kt
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,8 @@ abstract class GeneralKeyboardIME(
private val shiftPermToggleSpeed: Int = DEFAULT_SHIFT_PERM_TOGGLE_SPEED

private lateinit var dbManagers: DatabaseManagers
private lateinit var suggestionHandler: SuggestionHandler
private lateinit var autocompletionHandler: AutocompletionHandler
internal lateinit var suggestionHandler: SuggestionHandler
internal lateinit var autocompletionHandler: AutocompletionHandler
private lateinit var autocompletionManager: AutocompletionDataManager
private var dataContract: DataContract? = null

Expand Down Expand Up @@ -176,6 +176,12 @@ abstract class GeneralKeyboardIME(
internal const val MAX_TEXT_LENGTH = 1000
const val COMMIT_TEXT_CURSOR_POSITION = 1
internal const val CUSTOM_CURSOR = "│" // special tall cursor character

internal fun shouldUseNumericKeyboard(inputType: Int): Boolean =
when (inputType and TYPE_MASK_CLASS) {
TYPE_CLASS_NUMBER, TYPE_CLASS_DATETIME, TYPE_CLASS_PHONE -> true
else -> false
}
}

enum class ScribeState { IDLE, SELECT_COMMAND, TRANSLATE, CONJUGATE, PLURAL, SELECT_VERB_CONJUNCTION, INVALID, ALREADY_PLURAL }
Expand Down Expand Up @@ -287,24 +293,20 @@ abstract class GeneralKeyboardIME(
hasTextBeforeCursor = currentInputConnection?.getTextBeforeCursor(1, 0)?.isNotEmpty() == true

val keyboardXml =
when (inputTypeClass) {
TYPE_CLASS_NUMBER, TYPE_CLASS_DATETIME, TYPE_CLASS_PHONE -> {
keyboardMode = keyboardSymbols
R.xml.keys_symbols
}

else -> {
keyboardMode = keyboardLetters
getKeyboardLayoutXML()
}
if (shouldUseNumericKeyboard(attribute.inputType)) {
keyboardMode = keyboardSymbols
R.xml.keys_symbols
} else {
keyboardMode = keyboardLetters
getKeyboardLayoutXML()
}

loadLanguageData()

keyboard = KeyboardBase(this, keyboardXml, enterKeyType)
keyboardView?.setKeyboard(keyboard!!)

if (keyboardXml == R.xml.keys_symbols) {
if (this::uiManager.isInitialized && keyboardXml == R.xml.keys_symbols) {
uiManager.setupCurrencySymbol(language)
}
}
Expand Down Expand Up @@ -727,6 +729,13 @@ abstract class GeneralKeyboardIME(

override fun getCurrentEnterKeyType(): Int = enterKeyType

override fun getCurrentKeyboardLayoutXML(): Int =
when (keyboardMode) {
keyboardSymbols -> R.xml.keys_symbols
keyboardSymbolShift -> R.xml.keys_symbols_shift
else -> getKeyboardLayoutXML()
}

override fun onKeyboardActionListener(): KeyboardView.OnKeyboardActionListener = this

override fun processLinguisticSuggestions(word: String) {
Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/be/scri/services/ItalianKeyboardIME.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ class ItalianKeyboardIME : GeneralKeyboardIME("Italian") {
override var inputTypeClass: Int = InputType.TYPE_CLASS_TEXT
override var enterKeyType: Int = IME_ACTION_NONE
override var switchToLetters: Boolean = false
override var hasTextBeforeCursor: Boolean = false

private val keyHandler by lazy { KeyHandler(this) }

Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/be/scri/services/RussianKeyboardIME.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ class RussianKeyboardIME : GeneralKeyboardIME("Russian") {
override var inputTypeClass: Int = InputType.TYPE_CLASS_TEXT
override var enterKeyType: Int = IME_ACTION_NONE
override var switchToLetters: Boolean = false
override var hasTextBeforeCursor: Boolean = false

private val keyHandler by lazy { KeyHandler(this) }

Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/be/scri/services/SwedishKeyboardIME.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ class SwedishKeyboardIME : GeneralKeyboardIME("Swedish") {
override var inputTypeClass: Int = InputType.TYPE_CLASS_TEXT
override var enterKeyType: Int = IME_ACTION_NONE
override var switchToLetters: Boolean = false
override var hasTextBeforeCursor: Boolean = false

private val keyHandler by lazy { KeyHandler(this) }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ class KeyboardUIManagerTest {
// Mock Listener
listener = mockk(relaxed = true)
every { listener.getKeyboardLayoutXML() } returns be.scri.R.xml.keys_letters_english
every { listener.getCurrentKeyboardLayoutXML() } returns be.scri.R.xml.keys_letters_english
every { listener.onKeyboardActionListener() } returns mockk()

// Init Manager
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// SPDX-License-Identifier: GPL-3.0-or-later

package be.scri.services

import android.text.InputType
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test

class GeneralKeyboardIMEInputTypeTest {
@Test
fun shouldUseNumericKeyboard_returnsTrueForNumberInputs() {
val inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL

assertTrue(GeneralKeyboardIME.shouldUseNumericKeyboard(inputType))
}

@Test
fun shouldUseNumericKeyboard_returnsTrueForDateTimeInputs() {
val inputType = InputType.TYPE_CLASS_DATETIME or InputType.TYPE_DATETIME_VARIATION_DATE

assertTrue(GeneralKeyboardIME.shouldUseNumericKeyboard(inputType))
}

@Test
fun shouldUseNumericKeyboard_returnsTrueForPhoneInputs() {
assertTrue(GeneralKeyboardIME.shouldUseNumericKeyboard(InputType.TYPE_CLASS_PHONE))
}

@Test
fun shouldUseNumericKeyboard_returnsFalseForTextInputs() {
val inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS

assertFalse(GeneralKeyboardIME.shouldUseNumericKeyboard(inputType))
}
}
Loading