PR #16146 introduced a problem with selecting a different font as
display font so that we always ended up with not setting the font.
This was caused by the font filenames now being a URL (which is necessary
because they get processed by the web engine). However, the Android code
checks for the existence of the font in order to create the typeface,
which only works for local paths.
This PR modifies and simplifies `KMKeyboard.getFontFilename` to return the
full path, renames `KMKeyboard.txtFont` and `KMKeyboard.oskFont` to make
it clearer that they contain a path and not a URL.
Also initialize `KMKeyboard.oskFontPath` with empty string instead of
`null`. This makes it consistent with` txtFontPath` and with the
documented behavior of `KMManager.getKeyboardOskFontFilename()` (which
returns `KMKeyboard.oskFontPath`).
Follows: #16146Fixes: #16187
Build-bot: release:android
Cherry-pick-of: #16146
We use SIL EuroLatin as fallback keyboard. If that is not installed,
previously we output an error which showed up as a toast for the user.
This change now outputs a warning instead of the error for the default
keyboard.
Also changed the KeyboardHarness test app to set a different keyoard as
default.
The default fonts (DejaVueSans.ttf and keymanweb-osk.ttf) are located in
the root directory, not the package directory. This fixes the
KeyboardHarness test app.
Also some improvements with variable and function names to better match
what they do.
On Windows the tests failed because the AppData directory doesn't yet
exist under an allowed app internal storage path. This change creates
the directory first when running tests.
Also fix `assertEquals` in that test file - the parameter ordering is
`expected, actual` but we had it the other way round which gives a
confusing message if the test fails.
This change moves to using `WebViewAssetLoader` for loading files from
the device instead of using file:// URLs. This fixes the blank keyboard
problem reported in #16096 for Android.
Also make `KMKeyboard.getKeyboardRoot()` private, and rename public
`Keyboard.getKeyboardPath()` to private `Keyboard.getKeyboardUrl()`.
Part-of: #16096
This change updates the Android Target API to 36 to satisfy the upcoming
annual Play Store Aug 31 requirement. It updates Keyman for Android to
use API level 36 by changing the compileSdk and targetSdkVersion
properties to 36.
Also update `compileSdkVersion` and some reformatting in `README.md`.
Changes made by AI (Gemini 3 Flash Preview).
Fixes: #16279
Build-bot: release:android
Cherry-pick-of: #16280
A deeper workaround is applied in 19.0 (see for example #16565, #16586)
but for 18.0, this is an attempt to bypass the constant issue of models
failing to load with Chrome 152 and later versions, by retrying on
failure.
Relates-to: #13862 (may fix)
chore(android): log legacy cloud keyboards 🍒🏠
This adds a Sentry log if a user is still using legacy cloud keyboards. We do this so that we will learn if there are still users out there or if we can remove the code that deals with those keyboards.
Cherry-pick-of: #16237
This adds a Sentry log if a user is still using legacy cloud keyboards.
We do this so that we will learn if there are still users out there
or if we can remove the code that deals with those keyboards.
Cherry-pick-of: #16237
Test-bot: skip
fix(linux): add dependency on `procps` 🍒🏠
In the near future `pidof` will be provided by the `procps` package which isn't installed by default. This change adds a dependency on `procps` to fix this problem. Fixes Debian bug #1136515.
This PR supersedes the identical PR #15968 which had problems with the source verification check because it was created at a time when the check was broken.
Fixes: #15965
Cherry-pick-of: #15967
Supersedes: #15968
In the near future `pidof` will be provided by the `procps` package
which isn't installed by default. This change adds a dependency on
`procps` to fix this problem. Fixes Debian bug #1136515.
Fixes: #15965
Cherry-pick-of: #15967
Build-bot: skip
Test-bot: skip
fix(linux): fix memory problem 🍒
This fixes a problem identified by devin.ai: Because of the operator precedence the previous code caused `memmove` to read `sizeof(commit_queue_item) - 1` bytes past the end of `commit_queue`. With this change `memmove` now reads the intended `MAX_QUEUE_SIZE - 1` `commit_queue_items`.
Cherry-pick-of: #15823
This fixes a problem identified by devin.ai: Because of the operator
precedence the previous code caused `memmove` to read
`sizeof(commit_queue_item) - 1` bytes past the end of `commit_queue`.
With this change `memmove` now reads the intended `MAX_QUEUE_SIZE - 1`
`commit_queue_items`.
Cherry-pick-of: #15823
Test-bot: skip
Matches property in keyman-touch-layout.spec.json. Update to version 2.1.2.
Test-bot: skip
See-also: keymanapp/api.keyman.com#338
Cherry-pick-of: #15787