Giter Club home page Giter Club logo

thumb-key's Issues

various improvements

hi! this really seems like a promising idea for a keyboard, but for me a few things are missing that are pretty essential, at least for me

ill list them and try to give ideas on tow to improve/add these things:

1 absolutely necessary

  • swiping on the space bar to move the text cursor left or right, florisboard does this and its definitely the thing i rely on the most, its great

  • an easy way to switch between layouts, i use two languages on my phone daily so to me this is pretty important, on florisboard i switch quickly by swiping across the whole keyboard

in thumbkey this could be done by setting maybe a main and a secondary language in the settings. then, when you swipe left on the enter key, the language would switch between them


  • a toggle to disable capitalization on the first letter, yes theres an autocap toggle in the settings, however with it disabled the keyboard still default to capital letters when typing
    (edit: seems this is only the case when switching to thumbkey from another keyboard, still being always lowercase would be cool lol)

2 would be pretty cool

  • more characters, i.e. i was looking for "+" yet couldnt find it, maybe im just blind

  • emoji keyboard (i know this was already mentioned)

  • swiping on the delete key not to delete words, but characters precisely, like florisboard

  • better theming, specifically for me the lines between keys dont really fit, maybe "corner radius" and "lines between keys" settings could improve the look a lot

thank you! i know this app is still in early developement but still i think with these changes it could turn into something even better :)

Either default or toggle option for different color letters

It would be nice, especially while learning this keyboard, to have different colored letters around the H-key and also the smaller letters around the other main keys.

So: J,Q,B,K,P,V,X,Y a different color from the main keys
And: W,G,U,M,L,C,F,D either the same color as the J,Q... set or another different color.

This would provide some additional contrast to make it easier when identifying the letters while learning the keyboard.

I figured you could either make this a default option, or allow a toggle switch to change the colors on those letters.

Thanks!

Inconsistency in taping space bar for punctuation while auto-capitalize is On

If you keep taping space bar, the results are different depending if the auto-capitalize is On or Off.

While Off: Double space will create a period. If you press it again, it will change the period for a comma, again for question mark, again for exclamation mark, again for colon. ( '.' → ',' → '?' → '!' → ':' )

While On: Double space will create a period. If you press it again, it will just create another space.

German Layout

Hi,

I have tried to make the file with german layout. For the letter-frequency I just asked wikipedia. I had to add the "Umlaute" aka diphtongs i think and i decided to place near the ordinary letters, e.g. "Ö" near "O" etc. Same thing for the "ß".

I hope I did not destroy the syntax with the extra-letters. It was great if you could yous my proposal.

Greatings
Rick

https://adelheidi.de/nextcloud/index.php/s/H5CnabrMpQZ7DMG

French layout

Hello,

Would be great to have keys optimised for french typing

Thanks

Russian layout

Hi, I've created russian layout. I took frequency list from "Russian National Corpus" (НКРЯ). I suppose that at top left corner placed the most frequent letters (such а, о, е). Also, I placed "ъ" and "ё" at bottom right corner of bottom left corner because almost all natives write "е" instead of "ё", because of its identity to "е" (although, all official documents must write "ё" and not "е" instead). "ъ", because small group of words have it. E.g. "подъезд", "отъехать", etc. So, this way "ё" and "ъ" cannot be written accidentally.
It should looks like this:
It should looks like this

package com.dessalines.thumbkey.keyboards

import android.view.KeyEvent
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowDropDown
import androidx.compose.material.icons.outlined.ArrowDropUp
import androidx.compose.material.icons.outlined.KeyboardBackspace
import androidx.compose.material.icons.outlined.KeyboardReturn
import androidx.compose.material.icons.outlined.Numbers
import androidx.compose.material.icons.outlined.Settings
import com.dessalines.thumbkey.utils.ColorVariant
import com.dessalines.thumbkey.utils.FontSizeVariant
import com.dessalines.thumbkey.utils.KeyAction
import com.dessalines.thumbkey.utils.KeyC
import com.dessalines.thumbkey.utils.KeyDisplay
import com.dessalines.thumbkey.utils.KeyItemC
import com.dessalines.thumbkey.utils.KeyboardC
import com.dessalines.thumbkey.utils.KeyboardMode
import com.dessalines.thumbkey.utils.SwipeDirection

val thumbkeyV4Keyboard = KeyboardC(
arrayOf(
arrayOf(
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("н"),
action = KeyAction.CommitText("н"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("щ"),
action = KeyAction.CommitText("щ")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("е"),
action = KeyAction.CommitText("е"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.TextDisplay("й"),
action = KeyAction.CommitText("й")
),
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("б"),
action = KeyAction.CommitText("б")
),
SwipeDirection.RIGHT to KeyC(
display = KeyDisplay.TextDisplay("э"),
action = KeyAction.CommitText("э")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("о"),
action = KeyAction.CommitText("о"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.TextDisplay("з"),
action = KeyAction.CommitText("з")
),
SwipeDirection.BOTTOM_LEFT to KeyC(
display = KeyDisplay.TextDisplay("г"),
action = KeyAction.CommitText("г")
),
SwipeDirection.LEFT to KeyC(
display = KeyDisplay.TextDisplay("ь"),
action = KeyAction.CommitText("ь")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.Settings),
action = KeyAction.GotoSettings,
size = FontSizeVariant.LARGE,
color = ColorVariant.SECONDARY
),
backgroundColor = ColorVariant.SURFACE_VARIANT
)
),
arrayOf(
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("с"),
action = KeyAction.CommitText("с"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.RIGHT to KeyC(
display = KeyDisplay.TextDisplay("ю"),
action = KeyAction.CommitText("ю")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("т"),
action = KeyAction.CommitText("т"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.TOP_LEFT to KeyC(
display = KeyDisplay.TextDisplay("у"),
action = KeyAction.CommitText("у")
),
SwipeDirection.TOP to KeyC(
display = KeyDisplay.TextDisplay("д"),
action = KeyAction.CommitText("д")
),
SwipeDirection.TOP_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("л"),
action = KeyAction.CommitText("л")
),
SwipeDirection.RIGHT to KeyC(
display = KeyDisplay.TextDisplay("к"),
action = KeyAction.CommitText("к")
),
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("м"),
action = KeyAction.CommitText("м")
),
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.TextDisplay("п"),
action = KeyAction.CommitText("п")
),
SwipeDirection.BOTTOM_LEFT to KeyC(
display = KeyDisplay.TextDisplay("ы"),
action = KeyAction.CommitText("ы")
),
SwipeDirection.LEFT to KeyC(
display = KeyDisplay.TextDisplay("я"),
action = KeyAction.CommitText("я")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("а"),
action = KeyAction.CommitText("а"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.LEFT to KeyC(
display = KeyDisplay.TextDisplay("х"),
action = KeyAction.CommitText("х")
),
SwipeDirection.TOP_LEFT to KeyC(
display = KeyDisplay.TextDisplay("ч"),
action = KeyAction.CommitText("ч")
),
SwipeDirection.BOTTOM_LEFT to KeyC(
display = KeyDisplay.TextDisplay("ж"),
action = KeyAction.CommitText("ж")
),
SwipeDirection.TOP to KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropUp),
action = KeyAction.ToggleShiftMode(true),
color = ColorVariant.MUTED
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.Numbers),
action = KeyAction.ToggleNumericMode(true),
size = FontSizeVariant.LARGE,
color = ColorVariant.SECONDARY
),
backgroundColor = ColorVariant.SURFACE_VARIANT
)
),
arrayOf(
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("в"),
action = KeyAction.CommitText("в"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.TOP_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("ф"),
action = KeyAction.CommitText("ф")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("р"),
action = KeyAction.CommitText("р"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.TOP to KeyC(
display = KeyDisplay.TextDisplay("ц"),
action = KeyAction.CommitText("ц")
),
SwipeDirection.TOP_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("'"),
action = KeyAction.CommitText("'"),
color = ColorVariant.MUTED
),
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("-"),
action = KeyAction.CommitText("-"),
color = ColorVariant.MUTED
),
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.TextDisplay("."),
action = KeyAction.CommitText("."),
color = ColorVariant.MUTED
),
SwipeDirection.BOTTOM_LEFT to KeyC(
display = KeyDisplay.TextDisplay(","),
action = KeyAction.CommitText(","),
color = ColorVariant.MUTED
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("и"),
action = KeyAction.CommitText("и"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.TOP_LEFT to KeyC(
display = KeyDisplay.TextDisplay("ш"),
action = KeyAction.CommitText("ш")
),
SwipeDirection.RIGHT to KeyC(
display = KeyDisplay.TextDisplay("ъ"),
action = KeyAction.CommitText("ъ")
),
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("ё"),
action = KeyAction.CommitText("ё")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardBackspace),
action = KeyAction.SendEvent(
KeyEvent(
KeyEvent.ACTION_DOWN,
KeyEvent
.KEYCODE_DEL
)
),
size = FontSizeVariant.LARGE,
color = ColorVariant.SECONDARY
),
swipes = mapOf(
SwipeDirection.LEFT to KeyC(
action = KeyAction.DeleteLastWord,
display = null
),
SwipeDirection.TOP_LEFT to KeyC(
action = KeyAction.DeleteLastWord,
display = null
),
SwipeDirection.BOTTOM_LEFT to KeyC(
action = KeyAction.DeleteLastWord,
display = null
)
),
backgroundColor = ColorVariant.SURFACE_VARIANT
)
),
arrayOf(
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay(" "),
action = KeyAction.CommitText(" ")
),
nextTapActions = arrayOf(
KeyAction.ReplaceLastText(", ", trimCount = 1),
KeyAction.ReplaceLastText(". "),
KeyAction.ReplaceLastText("? "),
KeyAction.ReplaceLastText("! "),
KeyAction.ReplaceLastText(": ")
),
backgroundColor = ColorVariant.SURFACE_VARIANT,
widthMultiplier = 3
),
KeyItemC(
center = KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardReturn),
action = KeyAction.IMECompleteAction,
size = FontSizeVariant.LARGE,
color = ColorVariant.SECONDARY
),
backgroundColor = ColorVariant.SURFACE_VARIANT
)
)
)
)

val thumbkeyV4KeyboardShifted = KeyboardC(
arrayOf(
arrayOf(
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("Н"),
action = KeyAction.CommitText("Н"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("Щ"),
action = KeyAction.CommitText("Щ")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("Е"),
action = KeyAction.CommitText("Е"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.TextDisplay("Й"),
action = KeyAction.CommitText("Й")
),
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("Б"),
action = KeyAction.CommitText("Б")
),
SwipeDirection.RIGHT to KeyC(
display = KeyDisplay.TextDisplay("Э"),
action = KeyAction.CommitText("Э")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("О"),
action = KeyAction.CommitText("О"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.TextDisplay("З"),
action = KeyAction.CommitText("З")
),
SwipeDirection.BOTTOM_LEFT to KeyC(
display = KeyDisplay.TextDisplay("Г"),
action = KeyAction.CommitText("Г")
),
SwipeDirection.LEFT to KeyC(
display = KeyDisplay.TextDisplay("Ь"),
action = KeyAction.CommitText("Ь")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.Settings),
action = KeyAction.GotoSettings,
size = FontSizeVariant.LARGE,
color = ColorVariant.SECONDARY
),
backgroundColor = ColorVariant.SURFACE_VARIANT
)
),
arrayOf(
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("С"),
action = KeyAction.CommitText("С"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.RIGHT to KeyC(
display = KeyDisplay.TextDisplay("Ю"),
action = KeyAction.CommitText("Ю")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("т"),
action = KeyAction.CommitText("Т"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.TOP_LEFT to KeyC(
display = KeyDisplay.TextDisplay("У"),
action = KeyAction.CommitText("У")
),
SwipeDirection.TOP to KeyC(
display = KeyDisplay.TextDisplay("Д"),
action = KeyAction.CommitText("Д")
),
SwipeDirection.TOP_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("Л"),
action = KeyAction.CommitText("Л")
),
SwipeDirection.RIGHT to KeyC(
display = KeyDisplay.TextDisplay("К"),
action = KeyAction.CommitText("К")
),
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("М"),
action = KeyAction.CommitText("М")
),
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.TextDisplay("П"),
action = KeyAction.CommitText("П")
),
SwipeDirection.BOTTOM_LEFT to KeyC(
display = KeyDisplay.TextDisplay("Ы"),
action = KeyAction.CommitText("Ы")
),
SwipeDirection.LEFT to KeyC(
display = KeyDisplay.TextDisplay("Я"),
action = KeyAction.CommitText("Я")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("А"),
action = KeyAction.CommitText("А"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.LEFT to KeyC(
display = KeyDisplay.TextDisplay("Х"),
action = KeyAction.CommitText("Х")
),
SwipeDirection.TOP_LEFT to KeyC(
display = KeyDisplay.TextDisplay("Ч"),
action = KeyAction.CommitText("Ч")
),
SwipeDirection.BOTTOM_LEFT to KeyC(
display = KeyDisplay.TextDisplay("Ж"),
action = KeyAction.CommitText("Ж")
),
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
action = KeyAction.ToggleShiftMode(false),
color = ColorVariant.MUTED
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.Numbers),
action = KeyAction.ToggleNumericMode(true),
size = FontSizeVariant.LARGE,
color = ColorVariant.SECONDARY
),
backgroundColor = ColorVariant.SURFACE_VARIANT
)
),
arrayOf(
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("В"),
action = KeyAction.CommitText("В"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.TOP_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("Ф"),
action = KeyAction.CommitText("Ф")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("Р"),
action = KeyAction.CommitText("Р"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.TOP to KeyC(
display = KeyDisplay.TextDisplay("Ц"),
action = KeyAction.CommitText("Ц")
),
SwipeDirection.TOP_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("'"),
action = KeyAction.CommitText("'"),
color = ColorVariant.MUTED
),
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("-"),
action = KeyAction.CommitText("-"),
color = ColorVariant.MUTED
),
SwipeDirection.BOTTOM to KeyC(
display = KeyDisplay.TextDisplay("."),
action = KeyAction.CommitText("."),
color = ColorVariant.MUTED
),
SwipeDirection.BOTTOM_LEFT to KeyC(
display = KeyDisplay.TextDisplay(","),
action = KeyAction.CommitText(","),
color = ColorVariant.MUTED
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay("И"),
action = KeyAction.CommitText("И"),
size = FontSizeVariant.LARGE,
color = ColorVariant.PRIMARY
),
swipes = mapOf(
SwipeDirection.TOP_LEFT to KeyC(
display = KeyDisplay.TextDisplay("Ш"),
action = KeyAction.CommitText("Ш")
),
SwipeDirection.RIGHT to KeyC(
display = KeyDisplay.TextDisplay("Ъ"),
action = KeyAction.CommitText("Ъ")
),
SwipeDirection.BOTTOM_RIGHT to KeyC(
display = KeyDisplay.TextDisplay("Ё"),
action = KeyAction.CommitText("Ё")
)
)
),
KeyItemC(
center = KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardBackspace),
action = KeyAction.SendEvent(
KeyEvent(
KeyEvent.ACTION_DOWN,
KeyEvent
.KEYCODE_DEL
)
),
size = FontSizeVariant.LARGE,
color = ColorVariant.SECONDARY
),
swipes = mapOf(
SwipeDirection.LEFT to KeyC(
action = KeyAction.DeleteLastWord,
display = null
),
SwipeDirection.TOP_LEFT to KeyC(
action = KeyAction.DeleteLastWord,
display = null
),
SwipeDirection.BOTTOM_LEFT to KeyC(
action = KeyAction.DeleteLastWord,
display = null
)
),
backgroundColor = ColorVariant.SURFACE_VARIANT
)
),
arrayOf(
KeyItemC(
center = KeyC(
display = KeyDisplay.TextDisplay(" "),
action = KeyAction.CommitText(" ")
),
nextTapActions = arrayOf(
KeyAction.ReplaceLastText(", ", trimCount = 1),
KeyAction.ReplaceLastText(". "),
KeyAction.ReplaceLastText("? "),
KeyAction.ReplaceLastText("! "),
KeyAction.ReplaceLastText(": ")
),
backgroundColor = ColorVariant.SURFACE_VARIANT,
widthMultiplier = 3
),
KeyItemC(
center = KeyC(
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardReturn),
action = KeyAction.IMECompleteAction,
size = FontSizeVariant.LARGE,
color = ColorVariant.SECONDARY
),
backgroundColor = ColorVariant.SURFACE_VARIANT
)
)
)
)

val THUMBKEY_V4_KEYBOARD_MODES: Map<KeyboardMode, KeyboardC> = mapOf(
KeyboardMode.MAIN to thumbkeyV4Keyboard,
KeyboardMode.SHIFTED to thumbkeyV4KeyboardShifted,
KeyboardMode.NUMERIC to numericKeyboard
)

P.S. sorry, idk where I should attach the code.

Auto switching to capital letters only happens after a period

Just tried this out, and something I noticed immediately was that it automatically switches to capital letters only after typing a period. Entering a question mark or exclamation point does not automatically transition the next key to an uppercase letter, even though those punctuations also end a sentence. (As an aside: it is also noticeably more work to type an exclamation point or question mark compared to a period, which felt inconvenient.)

Additionally, if you type one capital letter and then immediately delete it, it doesn't remember that you wanted to type a capital letter (after typing the capital letter, it switches to lowercase, but doesn't switch back to uppercase if you delete the letter because you want to type a different capital letter instead).

Lastly, it seems to start with a capital letter the first time you switch to the keyboard, but if you switch to another application without switching the keyboard, it doesn't default to a capital letter when focusing on a text field in that other application.

Just wanted to share some feedback, but overall I'm intrigued by the keyboard. I'm not sure how long it would take to get used to, yet, but improving the logic around automatic switching to uppercase would certainly make it easier for me to adopt even before the layout becomes familiar.

Portuguese Layout

I made it based in this frequency list and following the position guidelines. It looks like that:
layout

package com.dessalines.thumbkey.keyboards

import android.view.KeyEvent
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowDropDown
import androidx.compose.material.icons.outlined.ArrowDropUp
import androidx.compose.material.icons.outlined.KeyboardBackspace
import androidx.compose.material.icons.outlined.KeyboardReturn
import androidx.compose.material.icons.outlined.Numbers
import androidx.compose.material.icons.outlined.Settings
import com.dessalines.thumbkey.utils.ColorVariant
import com.dessalines.thumbkey.utils.FontSizeVariant
import com.dessalines.thumbkey.utils.KeyAction
import com.dessalines.thumbkey.utils.KeyC
import com.dessalines.thumbkey.utils.KeyDisplay
import com.dessalines.thumbkey.utils.KeyItemC
import com.dessalines.thumbkey.utils.KeyboardC
import com.dessalines.thumbkey.utils.KeyboardMode
import com.dessalines.thumbkey.utils.SwipeDirection

val thumbkeyV4Keyboard = KeyboardC(
    arrayOf(
        arrayOf(
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("n"),
                    action = KeyAction.CommitText("n"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.BOTTOM_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("v"),
                        action = KeyAction.CommitText("v")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("m"),
                    action = KeyAction.CommitText("m"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("h"),
                        action = KeyAction.CommitText("h")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("o"),
                    action = KeyAction.CommitText("o"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.BOTTOM_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("c"),
                        action = KeyAction.CommitText("c")
                    ),
                    SwipeDirection.LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("ç"),
                        action = KeyAction.CommitText("ç"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("ó"),
                        action = KeyAction.CommitText("ó"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("õ"),
                        action = KeyAction.CommitText("õ"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("ô"),
                        action = KeyAction.CommitText("ô"),
                        color = ColorVariant.MUTED
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.IconDisplay(Icons.Outlined.Settings),
                    action = KeyAction.GotoSettings,
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.SECONDARY
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT
            )
        ),
        arrayOf(
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("r"),
                    action = KeyAction.CommitText("r"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("p"),
                        action = KeyAction.CommitText("p")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("d"),
                    action = KeyAction.CommitText("d"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.TOP_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("x"),
                        action = KeyAction.CommitText("x")
                    ),
                    SwipeDirection.TOP to KeyC(
                        display = KeyDisplay.TextDisplay("w"),
                        action = KeyAction.CommitText("w")
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("f"),
                        action = KeyAction.CommitText("f")
                    ),
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("b"),
                        action = KeyAction.CommitText("b")
                    ),
                    SwipeDirection.BOTTOM_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("q"),
                        action = KeyAction.CommitText("q")
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("k"),
                        action = KeyAction.CommitText("k")
                    ),
                    SwipeDirection.BOTTOM_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("z"),
                        action = KeyAction.CommitText("z")
                    ),
                    SwipeDirection.LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("j"),
                        action = KeyAction.CommitText("j")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("e"),
                    action = KeyAction.CommitText("e"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("t"),
                        action = KeyAction.CommitText("t")
                    ),
                    SwipeDirection.TOP to KeyC(
                        display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropUp),
                        action = KeyAction.ToggleShiftMode(true),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("é"),
                        action = KeyAction.CommitText("é"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("ê"),
                        action = KeyAction.CommitText("ê"),
                        color = ColorVariant.MUTED
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.IconDisplay(Icons.Outlined.Numbers),
                    action = KeyAction.ToggleNumericMode(true),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.SECONDARY
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT
            )
        ),
        arrayOf(
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("s"),
                    action = KeyAction.CommitText("s"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("l"),
                        action = KeyAction.CommitText("l")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("i"),
                    action = KeyAction.CommitText("i"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.TOP to KeyC(
                        display = KeyDisplay.TextDisplay("g"),
                        action = KeyAction.CommitText("g")
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("í"),
                        action = KeyAction.CommitText("í"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("y"),
                        action = KeyAction.CommitText("y")
                    ),
                    SwipeDirection.BOTTOM_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("'"),
                        action = KeyAction.CommitText("'"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("."),
                        action = KeyAction.CommitText("."),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay(","),
                        action = KeyAction.CommitText(","),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("-"),
                        action = KeyAction.CommitText("-"),
                        color = ColorVariant.MUTED
                    ),
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("a"),
                    action = KeyAction.CommitText("a"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.TOP_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("u"),
                        action = KeyAction.CommitText("u")
                    ),
                    SwipeDirection.TOP to KeyC(
                        display = KeyDisplay.TextDisplay("ú"),
                        action = KeyAction.CommitText("ú"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("á"),
                        action = KeyAction.CommitText("á"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("ã"),
                        action = KeyAction.CommitText("ã"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("à"),
                        action = KeyAction.CommitText("à"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("â"),
                        action = KeyAction.CommitText("â"),
                        color = ColorVariant.MUTED
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardBackspace),
                    action = KeyAction.SendEvent(
                        KeyEvent(
                            KeyEvent.ACTION_DOWN,
                            KeyEvent
                                .KEYCODE_DEL
                        )
                    ),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.SECONDARY
                ),
                swipes = mapOf(
                    SwipeDirection.LEFT to KeyC(
                        action = KeyAction.DeleteLastWord,
                        display = null
                    ),
                    SwipeDirection.TOP_LEFT to KeyC(
                        action = KeyAction.DeleteLastWord,
                        display = null
                    ),
                    SwipeDirection.BOTTOM_LEFT to KeyC(
                        action = KeyAction.DeleteLastWord,
                        display = null
                    )
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT
            )
        ),
        arrayOf(
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay(" "),
                    action = KeyAction.CommitText(" ")
                ),
                nextTapActions = arrayOf(
                    KeyAction.ReplaceLastText(", ", trimCount = 1),
                    KeyAction.ReplaceLastText(". "),
                    KeyAction.ReplaceLastText("? "),
                    KeyAction.ReplaceLastText("! "),
                    KeyAction.ReplaceLastText(": ")
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT,
                widthMultiplier = 3
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardReturn),
                    action = KeyAction.IMECompleteAction,
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.SECONDARY
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT
            )
        )
    )
)

val thumbkeyV4KeyboardShifted = KeyboardC(
    arrayOf(
        arrayOf(
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("N"),
                    action = KeyAction.CommitText("N"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.BOTTOM_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("V"),
                        action = KeyAction.CommitText("V")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("M"),
                    action = KeyAction.CommitText("M"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("H"),
                        action = KeyAction.CommitText("H")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("O"),
                    action = KeyAction.CommitText("O"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.BOTTOM_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("C"),
                        action = KeyAction.CommitText("C")
                    ),
                   SwipeDirection.LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("Ç"),
                        action = KeyAction.CommitText("Ç"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("Ó"),
                        action = KeyAction.CommitText("Ó"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("Õ"),
                        action = KeyAction.CommitText("Õ"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("Ô"),
                        action = KeyAction.CommitText("Ô"),
                        color = ColorVariant.MUTED
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.IconDisplay(Icons.Outlined.Settings),
                    action = KeyAction.GotoSettings,
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.SECONDARY
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT
            )
        ),
        arrayOf(
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("R"),
                    action = KeyAction.CommitText("R"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("P"),
                        action = KeyAction.CommitText("P")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("D"),
                    action = KeyAction.CommitText("D"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.TOP_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("X"),
                        action = KeyAction.CommitText("X")
                    ),
                    SwipeDirection.TOP to KeyC(
                        display = KeyDisplay.TextDisplay("W"),
                        action = KeyAction.CommitText("W")
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("F"),
                        action = KeyAction.CommitText("F")
                    ),
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("B"),
                        action = KeyAction.CommitText("B")
                    ),
                    SwipeDirection.BOTTOM_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("Q"),
                        action = KeyAction.CommitText("Q")
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("K"),
                        action = KeyAction.CommitText("K")
                    ),
                    SwipeDirection.BOTTOM_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("Z"),
                        action = KeyAction.CommitText("Z")
                    ),
                    SwipeDirection.LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("J"),
                        action = KeyAction.CommitText("J")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("E"),
                    action = KeyAction.CommitText("E"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("T"),
                        action = KeyAction.CommitText("T")
                    ),
                    SwipeDirection.TOP to KeyC(
                        display = KeyDisplay.TextDisplay("Ê"),
                        action = KeyAction.CommitText("Ê"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("É"),
                        action = KeyAction.CommitText("É"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
                        action = KeyAction.ToggleShiftMode(false),
                        color = ColorVariant.MUTED
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.IconDisplay(Icons.Outlined.Numbers),
                    action = KeyAction.ToggleNumericMode(true),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.SECONDARY
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT
            )
        ),
        arrayOf(
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("S"),
                    action = KeyAction.CommitText("S"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("L"),
                        action = KeyAction.CommitText("L")
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("I"),
                    action = KeyAction.CommitText("I"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.TOP to KeyC(
                        display = KeyDisplay.TextDisplay("G"),
                        action = KeyAction.CommitText("G")
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("Í"),
                        action = KeyAction.CommitText("Í"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("Y"),
                        action = KeyAction.CommitText("Y")
                    ),
                    SwipeDirection.BOTTOM_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("'"),
                        action = KeyAction.CommitText("'"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("."),
                        action = KeyAction.CommitText("."),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay(","),
                        action = KeyAction.CommitText(","),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("-"),
                        action = KeyAction.CommitText("-"),
                        color = ColorVariant.MUTED
                    ),
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay("A"),
                    action = KeyAction.CommitText("A"),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.PRIMARY
                ),
                swipes = mapOf(
                    SwipeDirection.TOP_LEFT to KeyC(
                        display = KeyDisplay.TextDisplay("U"),
                        action = KeyAction.CommitText("U")
                    ),
                    SwipeDirection.TOP to KeyC(
                        display = KeyDisplay.TextDisplay("Ú"),
                        action = KeyAction.CommitText("Ú"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.TOP_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("Á"),
                        action = KeyAction.CommitText("Á"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("Ã"),
                        action = KeyAction.CommitText("Ã"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM_RIGHT to KeyC(
                        display = KeyDisplay.TextDisplay("À"),
                        action = KeyAction.CommitText("À"),
                        color = ColorVariant.MUTED
                    ),
                    SwipeDirection.BOTTOM to KeyC(
                        display = KeyDisplay.TextDisplay("Â"),
                        action = KeyAction.CommitText("Â"),
                        color = ColorVariant.MUTED
                    )
                )
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardBackspace),
                    action = KeyAction.SendEvent(
                        KeyEvent(
                            KeyEvent.ACTION_DOWN,
                            KeyEvent
                                .KEYCODE_DEL
                        )
                    ),
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.SECONDARY
                ),
                swipes = mapOf(
                    SwipeDirection.LEFT to KeyC(
                        action = KeyAction.DeleteLastWord,
                        display = null
                    ),
                    SwipeDirection.TOP_LEFT to KeyC(
                        action = KeyAction.DeleteLastWord,
                        display = null
                    ),
                    SwipeDirection.BOTTOM_LEFT to KeyC(
                        action = KeyAction.DeleteLastWord,
                        display = null
                    )
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT
            )
        ),
        arrayOf(
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.TextDisplay(" "),
                    action = KeyAction.CommitText(" ")
                ),
                nextTapActions = arrayOf(
                    KeyAction.ReplaceLastText(", ", trimCount = 1),
                    KeyAction.ReplaceLastText(". "),
                    KeyAction.ReplaceLastText("? "),
                    KeyAction.ReplaceLastText("! "),
                    KeyAction.ReplaceLastText(": ")
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT,
                widthMultiplier = 3
            ),
            KeyItemC(
                center = KeyC(
                    display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardReturn),
                    action = KeyAction.IMECompleteAction,
                    size = FontSizeVariant.LARGE,
                    color = ColorVariant.SECONDARY
                ),
                backgroundColor = ColorVariant.SURFACE_VARIANT
            )
        )
    )
)

val THUMBKEY_V4_KEYBOARD_MODES: Map<KeyboardMode, KeyboardC> = mapOf(
    KeyboardMode.MAIN to thumbkeyV4Keyboard,
    KeyboardMode.SHIFTED to thumbkeyV4KeyboardShifted,
    KeyboardMode.NUMERIC to numericKeyboard
)

Move cursor by sliding space

I wonder if this would be possible. I don't know what it requires but I would guess Android has that capability builtin. I know rkkr/simple-keyboard has this functionality.

Add settings

  • Key size (limit this)
  • Position
  • Auto-capitalize
  • Layout (thumbkey, messageease)
  • Theme
  • Theme color

Fixes and ideas

Please fix double 'г' in Ukrainian layout, pasting 'E' letter after changing to lover case in Russian layout, and, if it possible, fully rewrite system of keys for loading here from json like this: {"ru":{{}{}{}{}{}{}}{{}{}{}{}{}{}{}{}{}}}} or someone else (I'm bad in json), just implement this idea. And please, add key for changing keyboard layout, I use it now, but going to program settings and changing layout is very uncomfortable. Many thanks and good luck!

Auto-update

Add auto update feature as in LibreTube and other such open source apps. As it is really ineffective to download and install all the way round.

Emoji picker

This could either be done by implementing an already existing android emoji picker, or by trying to build a custom one into thumb key.

I'm leaning toward the former, so I don't have to maintain it, and solve all the emoji related issues that might come up.

edit:

Unfortunately the former solution isn't working for the existing 2 emoji picker libraries I've tried. There appear to be no good jetpack compose emoji pickers yet.

Tap and hold to repeat backspace.

I tried using this as my daily keyboard for the last 2 days, this is probably the only thing I consider a real "issue" preventing me from using it further rather than an "enhancement"

After ~300ms (Normal 'long press') of holding the backspace, it should be repeated every ~40ms.

Swiping to erase words isn't my thing.

Configurable minimum swipe length

I'm finding swipes have trouble registering with my left thumb. (My swipes are bad in general due to limited finger dexterity, they often go in the wrong direction so I often upped minimum swipe length in MessagEase which helped)

I suspect having this configurable will help alleviate the problem just as it did in MessagEase.

Brainstorming idea regarding bigrams/digraphs

According to this wiki:

https://en.m.wikipedia.org/wiki/Frequency_analysis

"Likewise, TH, ER, ON, and AN are the most common pairs of letters (termed bigrams or digraphs), and SS, EE, TT, and FF are the most common repeats."

Since you have extra space on some of the keys like T, E, A, and O, this would provide space to put bigrams and repeats in the corners of those letters if you wanted.

This non-FOSS keyboard does something similar, although some of the options are hidden until you actually slide the key, so I don't know if you can actually see it based off the play store description:
https://play.google.com/store/apps/details?id=com.combokey.plus

Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.