Commit graph

1894 commits

Author SHA1 Message Date
Marc Durdin
c61734c236
Merge pull request #16139 from keymanapp/feat/android/325-add-keyman-version-check-to-package-version
feat(android): add keyman-version to package-version check
2026-07-11 22:44:40 +10:00
Marc Durdin
2b2339d2aa fix(android): restrict fallback tap to document element only
Relates-to: #16170
2026-07-10 15:44:03 +02:00
Marc Durdin
2b078ce165 fix(android): handle blank keyboard tap properly
Previously, the event handler was attached to body, but in the event of
the keyboard failing to render, the body element will typically be zero
pixels high. Instead, attach the handler to the document itself.
KeymanWeb, when running normally, will handle all touches on the
keyboard elements which take 100% of the real estate. So the document
tap will only be received in the case of an error condition.

Also, add a console error that will be reported to Sentry when user has
error reporting switched on.

Test-bot: skip
2026-07-10 14:08:27 +02:00
Marc Durdin
41344abae0
Merge branch 'master' into feat/android/325-add-keyman-version-check-to-package-version
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-07-09 17:44:49 +10:00
Eberhard Beilharz
fcf8988910
Merge pull request #16188 from keymanapp/fix/android/16187_font
fix(android): differentiate between fontPath and fontUrl in Keyman Engine for Android
2026-07-08 14:35:10 +02:00
Marc Durdin
1aae71e998
Merge pull request #16152 from keymanapp/fix/android/16122-refactor-KMLog
fix(android): refactor `KMLog` - simplification and added resilience
2026-07-08 22:34:21 +10:00
Eberhard Beilharz
71aefb8f47
fix(android): address code review comments
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
Co-authored-by: Marc Durdin <marc@durdin.net>
2026-07-08 11:43:15 +02:00
Eberhard Beilharz
1191e4387f
fix(android): fix setting font
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: #16146
Fixes: #16187
Build-bot: release:android
2026-07-02 19:52:35 +02:00
Marc Durdin
fb761fc78f fix(android): skip test on Windows that triggers androidx WebKit bug
Fixes: #16183
Test-bot: skip
2026-07-02 09:16:17 +02:00
Eberhard Beilharz
28652af8ab
fix(android): suppress error for fallback keyboard
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.
2026-07-01 12:27:38 +02:00
Eberhard Beilharz
0aa41c1028
fix(android): fix typo 2026-07-01 11:52:02 +02:00
Eberhard Beilharz
a146345eae
fix(android): fix problem with fonts
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.
2026-07-01 11:33:01 +02:00
Marc Durdin
809a3cad4a chore(android): address review comments
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
Also add logging if unit test fails
2026-06-30 15:12:59 +02:00
Eberhard Beilharz
71b0586c66
fix(android): fix failing test on Windows
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
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.
2026-06-29 18:25:26 +02:00
Eberhard Beilharz
bec75197b1
fix(android): add tests for WebViewUtils.buildAssertUrl
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.
2026-06-29 17:56:06 +02:00
Eberhard Beilharz
0847fb6ca2
chore(android): address code review comments
Co-authored-by: Marc Durdin <marc@durdin.net>
2026-06-29 16:57:33 +02:00
Marc Durdin
7155e9d722 fix(android): refactor KMLog - simplification and added resilience
* Clean up `KMLog` -- simpler code paths, DRY out common validation,
  remove redundant re-entrancy checks.
* Use Sentry `setTag` API and scopes instead of `setExtra`.
* Wrap all potential failure points in exception handlers for extra
  resilience -- do our best to make sure errors are reported in as many
  cases as possible.

Fixes: #16122
Test-bot: skip
2026-06-29 09:50:51 +02:00
Eberhard Beilharz
64abd5b690
fix(android): fix loading of keyboards on Android
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
2026-06-26 20:01:30 +02:00
Marc Durdin
77ad99ee25 feat(android): add keyman-version to package-version check
For Keyman for Android, add the new `keyman-version` parameter to the
api.keyman.com/package-version call so that updates to packages that are
not supported on the current version of Keyman will not be offered. This
supports the scenario where an updated keyboard or lexical model depends
on a newer version of Keyman. Note that an older version of the keyboard
or lexical model package will not be offered (the user can still
download and install an older version manually, but generally, the
recommended solution is to upgrade Keyman; there would be significant
cost to add support for querying and installation of older version
keyboards on the server side, for limited benefit).

Relates-to: keymanapp/api.keyman.com#325
2026-06-25 11:02:46 +02:00
Marc Durdin
6a98a39b8a
Merge branch 'master' into chore/web-core-preflight 2026-05-27 22:37:12 +10:00
Darcy Wong
d66ecec73d fix(android): Address review comments
* Move Espanol back
* Capitalize Svwnska (Swedish)
2026-04-22 13:53:00 +07:00
Darcy Wong
ded6e1c6f3 fix(android): Reorder display language list 2026-04-22 10:42:37 +07:00
Keyman Server
e77d46f873
Merge branch 'epic/web-core' into auto/A19S21-merge-master-into-web-core 2026-01-31 06:31:15 +01:00
Darcy Wong
356ef54c86 chore(common): Update Crowdin strings for de 2026-01-29 16:38:12 +07:00
Marc Durdin
f6b8bfb463
Merge branch 'epic/web-core' into auto/A19S20-merge-master-into-web-core 2026-01-16 08:40:12 +01:00
Eberhard Beilharz
5b38557227
refactor(web): remove defaults in keyboard-storage
- Also renamed `prefixed` and `withoutPrefix` functions to use the name
  that was aliased on most cases: `toPrefixedKeyboardId` and
  `toUnprefixedKeyboardId`.
- Renamed `ModelManager` class to `ModelCache` which was the name used
  everywhere except in comments.

Part-of: #15292
Test-bot: skip
2025-12-19 18:43:02 +01:00
Darcy Wong
cbca7630e1 chore(common): Update crowdin strings for PT 2025-12-18 16:13:25 +07:00
Marc Durdin
00e88d37a4 chore: Merge remote-tracking branch 'origin/epic/web-core' into auto/A19S17-merge-master-into-web-core 2025-12-05 08:07:35 +01:00
Matthew Lee
8bcf03cb1e
Update android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java
Co-authored-by: Marc Durdin <marc@durdin.net>
2025-11-25 02:35:58 -06:00
Claude
99704c4ec2
fix(android): resolve PR review comments for keyboard height min/max
Addresses review feedback from Marc and Darcy:

- Add JavaDoc comments to getKeyboardHeightMin() and getKeyboardHeightMax()
  explaining the purpose, parameters, and return values
- Implement separate pending height tracking per keyboard type (in-app/system)
  and orientation (portrait/landscape) instead of a single flag
- Add four preference keys following KMKey_ naming convention:
  KMKey_PendingHeightUpdate_InappPortrait, KMKey_PendingHeightUpdate_InappLandscape,
  KMKey_PendingHeightUpdate_SystemPortrait, KMKey_PendingHeightUpdate_SystemLandscape
- Create helper function getPendingHeightKey() to determine the correct key
- Create setPendingHeightUpdate() and getAndClearPendingHeightUpdate() functions
- Fix applyKeyboardHeight() to use new helper functions and remove broken
  heightApplied variable and duplicate pending height logic
- Update KMKeyboard.onResume() to use getAndClearPendingHeightUpdate()
- Add documentation links for getKeyboardHeightMin and getKeyboardHeightMax
  in index.md
2025-11-24 23:14:52 +00:00
Matthew Lee
3ed2d4a21e
Update android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java
Co-authored-by: Marc Durdin <marc@durdin.net>
2025-11-24 01:10:05 -06:00
Matthew Lee
1662802bd5
Update android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java
Co-authored-by: Marc Durdin <marc@durdin.net>
2025-11-22 02:35:00 -06:00
Matthew Lee
3962d5795d
Update android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java
Co-authored-by: Marc Durdin <marc@durdin.net>
2025-11-22 02:34:49 -06:00
Matthew Lee
6be82ac9b8 Adding Docs for getKeyboardHeightMin/max & updating webview height
Handling invalid orientations

updating orientation logic

refresh webview height if ApplyKeyboardHeight() has been applied without KB active

I ran into a bug building this code into app-builders and fixed it downstream. This commit pushes it upstream.

While resize dialog is open:
- Keyboard WebView is NOT loaded (isKeyboardLoaded() == false)
- ACTION_UP saves to SharedPreferences:  Works
 -But skips WebView layout update:  Because keyboard not loaded
 - User exits dialog, keyboard appears:
    - If the keyboard WebView loads and reads from SharedPreferences properly:  Works
    - But if there's a timing issue or the WebView had old layout params cached:  Touch zone mismatch
2025-11-21 14:50:03 -06:00
Marc Durdin
86a903dcf5 refactor(web): move sentry-manager and es-bundling to common
sentry-manager is used by Keyman Engine for Android and Keyman Engine
for iOS, but not directly by KeymanWeb, nor does it have any
dependencies on /web. So it does not make sense to keep it under /web.

es-bundling is used by sentry-manager and potentially other /common/web
tools in the future, so moving it under /common/tools makes it more
consistent in the future.

This is part of simplifying the web source tree; these changes do not
make significant build performance differences at this time.

Test-bot: skip
2025-11-06 15:28:04 +01:00
Darcy Wong
c38f488986 chore(common): Update crowdin strings for Vietnamese 2025-10-09 11:40:18 +07:00
Darcy Wong
499e427b8e fix(android): Fallback to legacy calculation when not initialized 2025-10-08 15:23:33 +07:00
Darcy Wong
eda50b2232 chore(android): Remove unused insets 2025-10-07 14:11:09 +07:00
Darcy Wong
329125a1b1 fix(android): Separate bottom insets for in-app and system keyboard 2025-10-07 13:29:46 +07:00
Darcy Wong
0e2011eca8 chore(android): Cleanup code 2025-10-07 10:24:22 +07:00
Darcy Wong
295dfd9e92 test(android): Adjust system keyboard insets 2025-10-07 08:36:20 +07:00
Darcy Wong
5aee77d5a8 fix(android): Use a toggle for adjusting the navigation bar height 2025-10-06 11:05:24 +07:00
Darcy Wong
65a631b53d test(android): Experiment with insets 2025-10-04 09:43:49 +07:00
Darcy Wong
3249f75b40 fix(android): Use max of gesture and navigation bar height 2025-10-03 13:02:21 +07:00
Darcy Wong
942723dad8 chore(android): Cleanup missing change 2025-10-03 11:25:23 +07:00
Darcy Wong
dd6a1aaf00 fix(android): Revert to using systemBars() 2025-10-03 09:02:53 +07:00
Darcy Wong
c9cc466e09 fix(android): Don't assume landscape inset 0 2025-10-02 14:41:03 +07:00
Darcy Wong
6820718d44 fix(android): Check visibility flags to determine which insets used 2025-10-02 14:02:45 +07:00
Darcy Wong
f1ad3ec4d1 fix(android): Use gestureInsets dimension when visible 2025-10-02 07:29:42 +07:00
Darcy Wong
22f63ccfdd fix(android): Try to factor in gesture insets 2025-10-01 15:45:37 +07:00