Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import android.text.InputType
import android.view.inputmethod.EditorInfo.IME_ACTION_NONE
import be.scri.R
import be.scri.helpers.KeyHandler
import be.scri.models.ScribeLanguage

/**
* The EnglishKeyboardIME class provides the input method for the English language keyboard.
*/
class EnglishKeyboardIME : GeneralKeyboardIME("English") {
class EnglishKeyboardIME : GeneralKeyboardIME(ScribeLanguage.ENGLISH) {
override fun getKeyboardLayoutXML(): Int =
when {
isTablet() -> R.xml.keys_letters_english_tablet
Expand Down
3 changes: 2 additions & 1 deletion app/src/keyboards/java/be/scri/services/FrenchKeyboardIME.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import android.text.InputType
import android.view.inputmethod.EditorInfo.IME_ACTION_NONE
import be.scri.R
import be.scri.helpers.KeyHandler
import be.scri.models.ScribeLanguage

/**
* The FrenchKeyboardIME class provides the input method for the French language keyboard.
*/
class FrenchKeyboardIME : GeneralKeyboardIME("French") {
class FrenchKeyboardIME : GeneralKeyboardIME(ScribeLanguage.FRENCH) {
override fun getKeyboardLayoutXML(): Int =
when {
isTablet() -> R.xml.keys_letters_french_tablet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ import be.scri.helpers.clipboard.ClipboardHandler
import be.scri.helpers.data.AutocompletionDataManager
import be.scri.helpers.english.ENInterfaceVariables.ALREADY_PLURAL_MSG
import be.scri.helpers.ui.KeyboardUIManager
import be.scri.models.ScribeLanguage
import be.scri.models.ScribeState
import be.scri.views.KeyboardView
import java.util.Locale
Expand All @@ -77,11 +78,16 @@ private const val DATA_CONSTANT_3 = 3

@Suppress("TooManyFunctions", "LargeClass")
abstract class GeneralKeyboardIME(
override var language: String,
val scribeLanguage: ScribeLanguage,
) : InputMethodService(),
KeyboardView.OnKeyboardActionListener,
KeyboardUIManager.KeyboardUIListener,
KeyboardBase.KeyboardContextProvider {
constructor(languageName: String) : this(ScribeLanguage.fromDisplayName(languageName))

override val language: String
get() = scribeLanguage.displayName

// Abstract members required by subclasses (like EnglishKeyboardIME).
abstract override fun getKeyboardLayoutXML(): Int

Expand Down
3 changes: 2 additions & 1 deletion app/src/keyboards/java/be/scri/services/GermanKeyboardIME.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import android.view.inputmethod.EditorInfo.IME_ACTION_NONE
import be.scri.R
import be.scri.helpers.KeyHandler
import be.scri.helpers.PreferencesHelper.getIsAccentCharacterDisabled
import be.scri.models.ScribeLanguage

/**
* The GermanKeyboardIME class provides the input method for the German language keyboard.
*/
class GermanKeyboardIME : GeneralKeyboardIME("German") {
class GermanKeyboardIME : GeneralKeyboardIME(ScribeLanguage.GERMAN) {
override fun getKeyboardLayoutXML(): Int =
if (isTablet()) {
R.xml.keys_letters_german_tablet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import android.text.InputType
import android.view.inputmethod.EditorInfo.IME_ACTION_NONE
import be.scri.R
import be.scri.helpers.KeyHandler
import be.scri.models.ScribeLanguage

/**
* The ItalianKeyboardIME class provides the input method for the Italian language keyboard.
*/
class ItalianKeyboardIME : GeneralKeyboardIME("Italian") {
class ItalianKeyboardIME : GeneralKeyboardIME(ScribeLanguage.ITALIAN) {
override fun getKeyboardLayoutXML(): Int =
when {
isTablet() -> R.xml.keys_letters_italian_tablet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import android.text.InputType
import android.view.inputmethod.EditorInfo.IME_ACTION_NONE
import be.scri.R
import be.scri.helpers.KeyHandler
import be.scri.models.ScribeLanguage

/**
* The PortugueseKeyboardIME class provides the input method for the Portuguese language keyboard.
*/
class PortugueseKeyboardIME : GeneralKeyboardIME("Portuguese") {
class PortugueseKeyboardIME : GeneralKeyboardIME(ScribeLanguage.PORTUGUESE) {
override fun getKeyboardLayoutXML(): Int =
when {
isTablet() -> R.xml.keys_letters_portuguese_tablet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import android.text.InputType
import android.view.inputmethod.EditorInfo.IME_ACTION_NONE
import be.scri.R
import be.scri.helpers.KeyHandler
import be.scri.models.ScribeLanguage

/**
* The RussianKeyboardIME class provides the input method for the Russian language keyboard.
*/
class RussianKeyboardIME : GeneralKeyboardIME("Russian") {
class RussianKeyboardIME : GeneralKeyboardIME(ScribeLanguage.RUSSIAN) {
override fun getKeyboardLayoutXML(): Int =
when {
isTablet() -> R.xml.keys_letters_russian_tablet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import android.view.inputmethod.EditorInfo.IME_ACTION_NONE
import be.scri.R
import be.scri.helpers.KeyHandler
import be.scri.helpers.PreferencesHelper.getIsAccentCharacterDisabled
import be.scri.models.ScribeLanguage

/**
* The SpanishKeyboardIME class provides the input method for the Spanish language keyboard.
*/
class SpanishKeyboardIME : GeneralKeyboardIME("Spanish") {
class SpanishKeyboardIME : GeneralKeyboardIME(ScribeLanguage.SPANISH) {
override fun getKeyboardLayoutXML(): Int =
when {
isTablet() -> R.xml.keys_letters_spanish_tablet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import android.view.inputmethod.EditorInfo.IME_ACTION_NONE
import be.scri.R
import be.scri.helpers.KeyHandler
import be.scri.helpers.PreferencesHelper.getIsAccentCharacterDisabled
import be.scri.models.ScribeLanguage

/**
* The SwedishKeyboardIME class provides the input method for the Swedish language keyboard.
*/
class SwedishKeyboardIME : GeneralKeyboardIME("Swedish") {
class SwedishKeyboardIME : GeneralKeyboardIME(ScribeLanguage.SWEDISH) {
override fun getKeyboardLayoutXML(): Int =
when {
isTablet() -> R.xml.keys_letters_swedish_tablet
Expand Down
20 changes: 8 additions & 12 deletions app/src/main/java/be/scri/helpers/LanguageMappingConstants.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// SPDX-License-Identifier: GPL-3.0-or-later
package be.scri.helpers

import be.scri.models.ScribeLanguage

/**
* Object containing constant mappings related to language-specific data.
* This includes conversions for grammatical annotations.
Expand All @@ -27,23 +29,17 @@ object LanguageMappingConstants {
"Russian" to mapOf("F" to "Ж", "M" to "М", "N" to "Н"),
)

/**
* Converts a [ScribeLanguage] to its two-letter ISO alias (e.g., "EN").
*/
fun getLanguageAlias(language: ScribeLanguage): String = language.isoCode

/**
* Converts a full language name (e.g., "English") to its two-letter ISO alias (e.g., "EN").
*
* @param language The full name of the language.
*
* @return The two-letter alias.
*/
fun getLanguageAlias(language: String): String =
when (language) {
"English" -> "EN"
"French" -> "FR"
"German" -> "DE"
"Italian" -> "IT"
"Portuguese" -> "PT"
"Russian" -> "RU"
"Spanish" -> "ES"
"Swedish" -> "SV"
else -> ""
}
fun getLanguageAlias(language: String): String = ScribeLanguage.fromDisplayName(language).isoCode
}
53 changes: 53 additions & 0 deletions app/src/main/java/be/scri/models/ScribeLanguage.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// SPDX-License-Identifier: GPL-3.0-or-later

package be.scri.models

/**
* Represents the supported languages in Scribe.
*
* @property displayName The human-readable name of the language (e.g., "English").
* @property isoCode The two-letter ISO code for the language (e.g., "EN").
*/
enum class ScribeLanguage(
val displayName: String,
val isoCode: String,
) {
ENGLISH("English", "EN"),
FRENCH("French", "FR"),
GERMAN("German", "DE"),
ITALIAN("Italian", "IT"),
PORTUGUESE("Portuguese", "PT"),
RUSSIAN("Russian", "RU"),
SPANISH("Spanish", "ES"),
SWEDISH("Swedish", "SV"),
;

companion object {
/**
* Resolves a [ScribeLanguage] from a display name, ISO code, or string representation.
* Case-insensitive matching. Defaults to [ENGLISH] if not found.
*
* @param value The string name or code to parse.
* @return The matching [ScribeLanguage], or [ENGLISH] as fallback.
*/
fun fromString(value: String?): ScribeLanguage {
if (value.isNullOrBlank()) return ENGLISH
val trimmed = value.trim()
return entries.firstOrNull { lang ->
lang.displayName.equals(trimmed, ignoreCase = true) ||
lang.isoCode.equals(trimmed, ignoreCase = true) ||
lang.name.equals(trimmed, ignoreCase = true)
} ?: ENGLISH
}

/**
* Resolves a [ScribeLanguage] from a display name (e.g., "English", "French").
*/
fun fromDisplayName(displayName: String?): ScribeLanguage = fromString(displayName)

/**
* Resolves a [ScribeLanguage] from a two-letter ISO code (e.g., "EN", "FR").
*/
fun fromIsoCode(isoCode: String?): ScribeLanguage = fromString(isoCode)
}
}
Loading