Longpress key gives invalid key beep on phones but works correctly on 'Test Keyboard on web'?

On 64bit Win 10 1909 build 18363.1016 using Keyman Developer v13.0.111.0 my Karon keyboard works as expected on compilation and using “Test Keyboard on web” using Google Chrome (v85.0.4183.83 Official Build 64-bit). For both the web keyboard and the phone touch keyboard, using the ‘More tools|Developer Tools’ option.

However when I install the ‘keyman-13.0.6218.apk’ on my Samsung Galaxy A10 Android v10, the { and } long-press keys on the [ and ] keys on the ‘123|numeric’ layer just produce an invalid key beep. Though the simple { } keys on the ‘cv|other’ layer do produce the expected character.

I see exactly the same wrong behaviour on my Alcatel onetouch Pixi3 with Android 4.4.2.

I presume there’s something wrong with my code but can’t see what. Or is this a bug?

I would like to look a bit closer at the issue, could you zip the keyboard project and send it to me in DM. Thanks.

Here it is <sil_krx_latn_azerty.zip>.


I have looked into the .kmn. The keyboard is impressive and the code look good.

It looks like there is a bug in Keyman for Android where it does not recognize the key references “ctrl-alt” and “shift-ctrl-alt”. It means not only the longpress keys { and } that do not work, but any keys with references to complex key combinations won’t give the expected output. I have logged the issue here: https://github.com/keymanapp/keyman/issues/3569.

For now, there is a work around while waiting for the fix. Instead of using the key references, you can use Unicode code point as the key code, i.e. U_007B for { (see the snippet below).


Do not hesitate to bug me should you have further query on this thread.

Hi Makara,
Thanks for looking at this. I tried your suggestion but still go the same ‘invalid key’ beep on my Samsung Galaxy A10 phone (Android v 10.0). I’ve got a number of other language keyboards to produce for Senegal and want them to have similar layouts. So for now I’ll give up on the convenience of longpress keys and accept the overhead of extra layers.
Mark Skinner

Can you try this .kmp (sil_krx_latn_azerty_codepoint.kmp (278.8 KB) ) and see if the longpress for {, } and ¢ work? It works well for me.

Thanks Makara that worked, could you zip up your version of the project and send it to me. Then I’ll be able to compare what you’ve done with what I tried.

Here is the zip file of the project: sil_krx_latn_azerty_codepoint.zip (468.5 KB).

You may need to update the longpress of dash on numeric layer as well.

I presume there’s something wrong with my code but can’t see what. Or is this a bug?

@MarkSkinner - I know you were able to use @makara’s workaround. But the issue turned out to be a KeymanWeb bug in determining the ctrl-alt and shift-ctrl-alt layers of the touch layout. We’ve fixed it in the latest Keyman for Android 13.0.6219 so you should be use your original keyboard source if you choose to.

1 Like