diff --git a/app/src/main/java/se/nullable/flickboard/model/KeyM.kt b/app/src/main/java/se/nullable/flickboard/model/KeyM.kt index 002a00d..1244ce4 100644 --- a/app/src/main/java/se/nullable/flickboard/model/KeyM.kt +++ b/app/src/main/java/se/nullable/flickboard/model/KeyM.kt @@ -1,6 +1,8 @@ package se.nullable.flickboard.model import se.nullable.flickboard.R +import se.nullable.flickboard.model.layouts.MESSAGEASE_SYMBOLS_LAYER +import se.nullable.flickboard.model.layouts.MINI_NUMBERS_SYMBOLS_LAYER import se.nullable.flickboard.util.HardLineBreakIterator import se.nullable.flickboard.util.flipIfBracket import java.text.BreakIterator @@ -9,6 +11,8 @@ data class Layout( val mainLayer: Layer, val shiftLayer: Layer = mainLayer.autoShift(), val controlLayer: Layer? = null, + val symbolLayer: Layer = MESSAGEASE_SYMBOLS_LAYER, + val miniSymbolLayer: Layer = MINI_NUMBERS_SYMBOLS_LAYER, val digits: String = "0123456789", val textDirection: TextDirection = TextDirection.LeftToRight, ) @@ -365,7 +369,11 @@ enum class ActionClass { sealed class ActionVisual { data class Icon(val resource: Int) : ActionVisual() - data class Label(val label: String) : ActionVisual() + data class Label( + val label: String, + val directionOverride: TextDirection? = null + ) : ActionVisual() + data object None : ActionVisual() } diff --git a/app/src/main/java/se/nullable/flickboard/model/layouts/FAMessagEase.kt b/app/src/main/java/se/nullable/flickboard/model/layouts/FAMessagEase.kt new file mode 100644 index 0000000..721e550 --- /dev/null +++ b/app/src/main/java/se/nullable/flickboard/model/layouts/FAMessagEase.kt @@ -0,0 +1,133 @@ +package se.nullable.flickboard.model.layouts + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import se.nullable.flickboard.model.Action +import se.nullable.flickboard.model.ActionVisual +import se.nullable.flickboard.model.Direction +import se.nullable.flickboard.model.KeyM +import se.nullable.flickboard.model.Layer +import se.nullable.flickboard.model.Layout +import se.nullable.flickboard.model.TextDirection +import se.nullable.flickboard.ui.KeyboardLayoutPreview + +val FA_MESSAGEASE_MAIN_LAYER = Layer( + keyRows = listOf( + listOf( + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ه"), + Direction.RIGHT to Action.Text("ـ"), + Direction.BOTTOM to Action.Text("ۀ"), + Direction.BOTTOM_RIGHT to Action.Text("ق"), + + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ب"), + Direction.BOTTOM_LEFT to Action.Text("ض"), + Direction.BOTTOM to Action.Text("خ"), + Direction.BOTTOM_RIGHT to Action.Text("پ"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("م"), + Direction.TOP_RIGHT to Action.Text( + "\u200F", //RLM + visualOverride = ActionVisual.Label( + "¶‹", + directionOverride = TextDirection.RightToLeft + ), + ), + Direction.BOTTOM_LEFT to Action.Text("چ"), + ) + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ی"), + Direction.TOP_RIGHT to Action.Text("ص"), + Direction.RIGHT to Action.Text("ش"), + Direction.BOTTOM_RIGHT to Action.Text("ط"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ا"), + Direction.TOP_LEFT to Action.Text("ف"), + Direction.TOP to Action.Text("ح"), + Direction.TOP_RIGHT to Action.Text("ج"), + Direction.LEFT to Action.Text("س"), + Direction.RIGHT to Action.Text("آ"), + Direction.BOTTOM_LEFT to Action.Text("ل"), + Direction.BOTTOM to Action.Text("ت"), + Direction.BOTTOM_RIGHT to Action.Text("ک"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ر"), + Direction.TOP_LEFT to Action.Text("ژ"), + Direction.LEFT to Action.Text("ز"), + Direction.BOTTOM_LEFT to Action.Text("ع"), + ) + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("و"), + Direction.TOP_RIGHT to Action.Text("ؤ"), + Direction.RIGHT to Action.Text( + "\u200C", //ZWNJ + visualOverride = ActionVisual.Label("‹›"), + ), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ن"), + Direction.TOP_LEFT to Action.Text("ظ"), + Direction.TOP to Action.Text("ث"), + Direction.TOP_RIGHT to Action.Text("غ"), + Direction.LEFT to Action.Text("ء"), + Direction.RIGHT to Action.Text("أ"), + Direction.BOTTOM to Action.Text("."), + Direction.BOTTOM_RIGHT to Action.Text("ئ"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("د"), + Direction.TOP_LEFT to Action.Text("گ"), + Direction.LEFT to Action.Text("ذ"), + ) + ), + ), + listOf(SPACE) + ) +) + +val FA_MESSAGEASE = Layout( + mainLayer = FA_MESSAGEASE_MAIN_LAYER, + controlLayer = CONTROL_MESSAGEASE_LAYER, + digits = "۰۱۲۳۴۵۶۷۸۹", + textDirection = TextDirection.RightToLeft, + symbolLayer = FA_SYMBOLS_LAYER, + miniSymbolLayer = FA_MINI_NUMBERS_SYMBOLS_LAYER, +) + +@Composable +@Preview +fun FaMessagEaseKeyboardPreview() { + KeyboardLayoutPreview(layout = Layout(FA_MESSAGEASE_MAIN_LAYER)) +} + +@Composable +@Preview +fun FaMessagEaseFullKeyboardPreview() { + KeyboardLayoutPreview(layout = FA_MESSAGEASE, showAllModifiers = true) +} diff --git a/app/src/main/java/se/nullable/flickboard/model/layouts/FASymbols.kt b/app/src/main/java/se/nullable/flickboard/model/layouts/FASymbols.kt new file mode 100644 index 0000000..d884ea2 --- /dev/null +++ b/app/src/main/java/se/nullable/flickboard/model/layouts/FASymbols.kt @@ -0,0 +1,194 @@ +package se.nullable.flickboard.model.layouts + +import se.nullable.flickboard.R +import se.nullable.flickboard.model.Action +import se.nullable.flickboard.model.ActionVisual +import se.nullable.flickboard.model.Direction +import se.nullable.flickboard.model.KeyM +import se.nullable.flickboard.model.Layer + +val FA_SYMBOLS_LAYER = Layer( + keyRows = listOf( + listOf( + KeyM( + actions = mapOf( + Direction.BOTTOM_LEFT to Action.Text("﷼"), + Direction.BOTTOM to Action.Text("٫"), + Direction.RIGHT to Action.Text( + "ّ", + visualOverride = ActionVisual.Label("ـّ") + ) + ), + shift = KeyM( + actions = mapOf( + Direction.RIGHT to Action.Text("÷"), + Direction.BOTTOM_LEFT to Action.Text("¥"), + Direction.BOTTOM to Action.Text("•") + ) + ) + ), + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("`"), + Direction.TOP to Action.Text("^"), + Direction.TOP_RIGHT to Action.Text("´"), + Direction.LEFT to Action.Text("+"), + Direction.RIGHT to Action.Text("!"), + Direction.BOTTOM_LEFT to Action.Text("/"), + Direction.BOTTOM_RIGHT to Action.Text("\\") + ), + shift = KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("‘"), + Direction.TOP to Action.Text("ˇ"), + Direction.TOP_RIGHT to Action.Text("’"), + Direction.LEFT to Action.Text("×"), + Direction.RIGHT to Action.Text("¡"), + Direction.BOTTOM_LEFT to Action.Text("–"), + Direction.BOTTOM_RIGHT to Action.Text("—") + ) + ) + ), + KeyM( + actions = mapOf( + Direction.LEFT to Action.Text("؟"), + Direction.BOTTOM to Action.Text("="), + Direction.BOTTOM_RIGHT to Action.Text("$"), + ), + shift = KeyM( + actions = mapOf( + Direction.LEFT to Action.Text("¿"), + Direction.BOTTOM to Action.Text("±"), + Direction.BOTTOM_RIGHT to Action.Text("£") + ) + ) + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("{"), + Direction.TOP_RIGHT to Action.Text("٪"), + Direction.LEFT to Action.Text("("), + Direction.BOTTOM_LEFT to Action.Text("["), + Direction.BOTTOM_RIGHT to Action.Text("_"), + ), + shift = KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("}"), + Direction.TOP_RIGHT to Action.Text("‰"), + Direction.LEFT to Action.Text(")"), + Direction.BOTTOM_LEFT to Action.Text("]"), + Direction.BOTTOM to Action.Text("¯"), + Direction.BOTTOM_RIGHT to Action.Text("¬") + ) + ) + ), + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text( + "ُ", + visualOverride = ActionVisual.Label("ـُ") + ), + Direction.TOP_RIGHT to Action.Text( + "َ", + visualOverride = ActionVisual.Label("ـَ") + ), + Direction.BOTTOM to Action.Text( + "ِ", + visualOverride = ActionVisual.Label("ـِ") + ) + ) + ), + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("|"), + Direction.TOP_RIGHT to Action.Text("}"), + Direction.RIGHT to Action.Text(")"), + Direction.BOTTOM_LEFT to Action.Text("@"), + Direction.BOTTOM_RIGHT to Action.Text("]"), + ), + shift = KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("¶"), + Direction.TOP_RIGHT to Action.Text("{"), + Direction.RIGHT to Action.Text("("), + Direction.BOTTOM_LEFT to Action.Text("ª"), + Direction.BOTTOM_RIGHT to Action.Text("[") + ) + ) + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("~"), + Direction.TOP_RIGHT to Action.Text( + "ً", + visualOverride = ActionVisual.Label("ـً") + ), + Direction.LEFT to Action.Text("«"), + Direction.BOTTOM_LEFT to Action.Text("<"), + Direction.BOTTOM_RIGHT to Action.Text(":") + ), + shift = KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("˜"), + Direction.TOP to Action.Text("˝"), + Direction.LEFT to Action.Text("‹"), + Direction.RIGHT to Action.Text("†"), + Direction.BOTTOM_LEFT to Action.Text("«"), + Direction.BOTTOM_RIGHT to Action.Text( + "\t", + forceRawKeyEvent = true, + visualOverride = ActionVisual.Icon(R.drawable.baseline_keyboard_tab_24) + ) + ) + ) + ), + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("\""), + Direction.TOP_RIGHT to Action.Text("'"), + Direction.LEFT to Action.Text("،"), + Direction.BOTTOM_LEFT to Action.Text("*"), + Direction.BOTTOM to Action.Text("."), + Direction.BOTTOM_RIGHT to Action.Text("-"), + ), + shift = KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("“"), + Direction.TOP_RIGHT to Action.Text("”"), + Direction.BOTTOM_LEFT to Action.Text("‚"), + Direction.BOTTOM to Action.Text("…"), + Direction.BOTTOM_RIGHT to Action.Text("„") + ) + ) + ), + KeyM( + actions = mapOf( + Direction.TOP to Action.Text("&"), + Direction.TOP_RIGHT to Action.Text("°"), + Direction.LEFT to Action.Text("#"), + Direction.RIGHT to Action.Text("»"), + Direction.BOTTOM_LEFT to Action.Text("؛"), + Direction.BOTTOM_RIGHT to Action.Text(">") + ), + shift = KeyM( + actions = mapOf( + Direction.TOP to Action.Text("§"), + Direction.TOP_RIGHT to Action.Text("º"), + Direction.LEFT to Action.Text("£"), + Direction.RIGHT to Action.Text("›"), + Direction.BOTTOM_LEFT to Action.Text("¸"), + Direction.BOTTOM_RIGHT to Action.Text("»") + ) + ) + ), + ), + listOf( + KeyM(actions = mapOf(), colspan = 2), + SPACE.copy(colspan = 1) + ) + ) +) diff --git a/app/src/main/java/se/nullable/flickboard/model/layouts/FASymbolsMini.kt b/app/src/main/java/se/nullable/flickboard/model/layouts/FASymbolsMini.kt new file mode 100644 index 0000000..ba8ab50 --- /dev/null +++ b/app/src/main/java/se/nullable/flickboard/model/layouts/FASymbolsMini.kt @@ -0,0 +1,65 @@ +package se.nullable.flickboard.model.layouts + +import se.nullable.flickboard.model.Action +import se.nullable.flickboard.model.Direction +import se.nullable.flickboard.model.KeyM +import se.nullable.flickboard.model.Layer +import se.nullable.flickboard.model.SearchDirection + +// This should only be a side-layer and not a "proper" numbers layer, since it doesn't fill the +// regular 3x3+2 layout and can't be safely merged into a letters layer. + +val FA_MINI_NUMBERS_SYMBOLS_LAYER = Layer( + keyRows = listOf( + listOf( + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("+"), + Direction.TOP to Action.Text("*"), + Direction.TOP_RIGHT to Action.Text("="), + Direction.BOTTOM_LEFT to Action.Text("-"), + Direction.BOTTOM to Action.Text("^"), + Direction.BOTTOM_RIGHT to Action.Text("_"), + ), + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("("), + Direction.TOP to Action.JumpLineKeepPos(SearchDirection.Backwards), + Direction.TOP_RIGHT to Action.Text(")"), + Direction.BOTTOM_LEFT to Action.Text("#"), + Direction.BOTTOM to Action.JumpLineKeepPos(SearchDirection.Forwards), + Direction.BOTTOM_RIGHT to Action.Text("$"), + ), + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("&"), + Direction.TOP to Action.Text("@"), + Direction.TOP_RIGHT to Action.Text("~"), + Direction.BOTTOM_LEFT to Action.Text("!"), + Direction.BOTTOM to Action.Text("|"), + Direction.BOTTOM_RIGHT to Action.Text("?"), + ), + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.TOP_LEFT to Action.Text("\""), + Direction.TOP to Action.Text("'"), + Direction.TOP_RIGHT to Action.Text("؛"), + Direction.LEFT to Action.Jump(SearchDirection.Backwards), + Direction.RIGHT to Action.Jump(SearchDirection.Forwards), + Direction.BOTTOM_LEFT to Action.Text("،"), + Direction.BOTTOM to Action.Text("."), + Direction.BOTTOM_RIGHT to Action.Text(":"), + ), + ), + ), + ) +) diff --git a/app/src/main/java/se/nullable/flickboard/model/layouts/FAThumbKey.kt b/app/src/main/java/se/nullable/flickboard/model/layouts/FAThumbKey.kt new file mode 100644 index 0000000..b81480b --- /dev/null +++ b/app/src/main/java/se/nullable/flickboard/model/layouts/FAThumbKey.kt @@ -0,0 +1,133 @@ +package se.nullable.flickboard.model.layouts + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import se.nullable.flickboard.model.Action +import se.nullable.flickboard.model.ActionVisual +import se.nullable.flickboard.model.Direction +import se.nullable.flickboard.model.KeyM +import se.nullable.flickboard.model.Layer +import se.nullable.flickboard.model.Layout +import se.nullable.flickboard.model.TextDirection +import se.nullable.flickboard.ui.KeyboardLayoutPreview + +val FA_THUMBKEY_MAIN_LAYER = Layer( + keyRows = listOf( + listOf( + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("د"), + Direction.BOTTOM to Action.Text("ض"), + Direction.BOTTOM_RIGHT to Action.Text("ص"), + + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ر"), + Direction.RIGHT to Action.Text("ژ"), + Direction.BOTTOM_LEFT to Action.Text("ق"), + Direction.BOTTOM to Action.Text("ز"), + Direction.BOTTOM_RIGHT to Action.Text("ف"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("و"), + Direction.TOP_RIGHT to Action.Text( + "\u200F", //RLM + visualOverride = ActionVisual.Label( + "¶‹", + directionOverride = TextDirection.RightToLeft + ), + ), + Direction.BOTTOM_LEFT to Action.Text("ع"), + Direction.BOTTOM to Action.Text("ء"), + ) + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ن"), + Direction.TOP_RIGHT to Action.Text("ح"), + Direction.RIGHT to Action.Text("ج"), + Direction.BOTTOM_RIGHT to Action.Text("چ"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ا"), + Direction.TOP_LEFT to Action.Text("ذ"), + Direction.TOP to Action.Text("ب"), + Direction.TOP_RIGHT to Action.Text("پ"), + Direction.LEFT to Action.Text("خ"), + Direction.RIGHT to Action.Text("س"), + Direction.BOTTOM_LEFT to Action.Text("آ"), + Direction.BOTTOM to Action.Text("ل"), + Direction.BOTTOM_RIGHT to Action.Text("ش"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("م"), + Direction.TOP_LEFT to Action.Text("غ"), + Direction.LEFT to Action.Text("ک"), + Direction.BOTTOM_LEFT to Action.Text("گ"), + ) + ), + ), + listOf( + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ت"), + Direction.TOP_RIGHT to Action.Text("ث"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ی"), + Direction.TOP to Action.Text( + "\u200C", //ZWNJ + visualOverride = ActionVisual.Label("‹›"), + ), + Direction.LEFT to Action.Text("؟"), + Direction.RIGHT to Action.Text("ئ"), + Direction.BOTTOM_LEFT to Action.Text("*"), + Direction.BOTTOM to Action.Text("."), + Direction.BOTTOM_RIGHT to Action.Text("ـ"), + ) + ), + KeyM( + actions = mapOf( + Direction.CENTER to Action.Text("ه"), + Direction.TOP_LEFT to Action.Text("ط"), + Direction.TOP to Action.Text("ظ"), + Direction.LEFT to Action.Text("ۀ"), + ) + ), + ), + listOf(SPACE) + ) +) + +val FA_THUMBKEY = Layout( + mainLayer = FA_THUMBKEY_MAIN_LAYER, + controlLayer = CONTROL_MESSAGEASE_LAYER, + digits = "۰۱۲۳۴۵۶۷۸۹", + textDirection = TextDirection.RightToLeft, + symbolLayer = FA_SYMBOLS_LAYER, + miniSymbolLayer = FA_MINI_NUMBERS_SYMBOLS_LAYER, +) + +@Composable +@Preview +fun FaKeyboardPreview() { + KeyboardLayoutPreview(layout = Layout(FA_THUMBKEY_MAIN_LAYER)) +} + +@Composable +@Preview +fun FaFullKeyboardPreview() { + KeyboardLayoutPreview(layout = FA_THUMBKEY, showAllModifiers = true) +} diff --git a/app/src/main/java/se/nullable/flickboard/ui/Key.kt b/app/src/main/java/se/nullable/flickboard/ui/Key.kt index 7b8cd13..d898937 100644 --- a/app/src/main/java/se/nullable/flickboard/ui/Key.kt +++ b/app/src/main/java/se/nullable/flickboard/ui/Key.kt @@ -353,16 +353,20 @@ fun KeyActionIndicator( alignment = LineHeightStyle.Alignment.Center, trim = LineHeightStyle.Trim.Both ), - textDirection = when (layoutTextDirection) { + textDirection = when (actionVisual.directionOverride) { TextDirection.LeftToRight -> androidx.compose.ui.text.style.TextDirection.Ltr - TextDirection.RightToLeft -> - when { - LocalAppSettings.current.noReverseRtlBrackets.state.value -> - androidx.compose.ui.text.style.TextDirection.Content + TextDirection.RightToLeft -> androidx.compose.ui.text.style.TextDirection.Rtl + else -> when (layoutTextDirection) { + TextDirection.LeftToRight -> androidx.compose.ui.text.style.TextDirection.Ltr + TextDirection.RightToLeft -> + when { + LocalAppSettings.current.noReverseRtlBrackets.state.value -> + androidx.compose.ui.text.style.TextDirection.Content - else -> - androidx.compose.ui.text.style.TextDirection.Rtl - } + else -> + androidx.compose.ui.text.style.TextDirection.Rtl + } + } } ), ) diff --git a/app/src/main/java/se/nullable/flickboard/ui/Keyboard.kt b/app/src/main/java/se/nullable/flickboard/ui/Keyboard.kt index b39f044..283ba28 100644 --- a/app/src/main/java/se/nullable/flickboard/ui/Keyboard.kt +++ b/app/src/main/java/se/nullable/flickboard/ui/Keyboard.kt @@ -47,8 +47,6 @@ import se.nullable.flickboard.model.ModifierState import se.nullable.flickboard.model.ShiftState import se.nullable.flickboard.model.TextDirection import se.nullable.flickboard.model.layouts.EN_MESSAGEASE -import se.nullable.flickboard.model.layouts.MESSAGEASE_SYMBOLS_LAYER -import se.nullable.flickboard.model.layouts.MINI_NUMBERS_SYMBOLS_LAYER import se.nullable.flickboard.model.layouts.OVERLAY_ADVANCED_MODIFIERS_MESSAGEASE_LAYER import se.nullable.flickboard.model.layouts.OVERLAY_MESSAGEASE_LAYER import se.nullable.flickboard.model.layouts.OVERLAY_TOGGLE_SYMBOLS_MESSAGEASE_LAYER @@ -106,14 +104,14 @@ fun Keyboard( remember { derivedStateOf { numericLayer.value.fullSizedLayer(layoutState.value) - .mergeFallback(MESSAGEASE_SYMBOLS_LAYER) + .mergeFallback(layoutState.value.symbolLayer) } } val mergedMiniNumericLayer = remember { derivedStateOf { numericLayer.value.miniLayer(layoutState.value) - .mergeFallback(MINI_NUMBERS_SYMBOLS_LAYER) + .mergeFallback(layoutState.value.miniSymbolLayer) .let { it.setShift(it.autoShift()) } } } diff --git a/app/src/main/java/se/nullable/flickboard/ui/Settings.kt b/app/src/main/java/se/nullable/flickboard/ui/Settings.kt index 0576520..e694705 100644 --- a/app/src/main/java/se/nullable/flickboard/ui/Settings.kt +++ b/app/src/main/java/se/nullable/flickboard/ui/Settings.kt @@ -93,6 +93,8 @@ import se.nullable.flickboard.model.layouts.EN_DE_MESSAGEASE import se.nullable.flickboard.model.layouts.EN_MESSAGEASE import se.nullable.flickboard.model.layouts.EN_THUMBKEY import se.nullable.flickboard.model.layouts.ES_MESSAGEASE +import se.nullable.flickboard.model.layouts.FA_MESSAGEASE +import se.nullable.flickboard.model.layouts.FA_THUMBKEY import se.nullable.flickboard.model.layouts.FR_EXT_MESSAGEASE import se.nullable.flickboard.model.layouts.FR_MESSAGEASE import se.nullable.flickboard.model.layouts.FR_PUNC_MESSAGEASE @@ -1329,6 +1331,8 @@ enum class LetterLayerOption(override val label: String, val layout: Layout) : L HungarianMF("Hungarian (MessagEase-style, by Máté Farkas)", HU_MF_MESSAGEASE), HungarianUUp("Hungarian (MessagEase-style, U always up)", HU_UUP_MESSAGEASE), Italian("Italian (MessagEase)", IT_MESSAGEASE), + Persian("Persian (MessagEase)", FA_MESSAGEASE), + PersianThumbKey("Persian (Thumb-Key)", FA_THUMBKEY), PolishRmitura("PL (MessagEase-style, Rmitura)", PL_RMITURA_MESSAGEASE), Portuguese("Portuguese (MessagEase)", PT_MESSAGEASE), PortugueseIos("Portuguese (MessagEase, iOS)", PT_IOS_MESSAGEASE),