diff --git a/.github/workflows/deb-packaging.README.md b/.github/workflows/deb-packaging.README.md
index 6bbeabd9e1..9dcfce20db 100644
--- a/.github/workflows/deb-packaging.README.md
+++ b/.github/workflows/deb-packaging.README.md
@@ -1,4 +1,4 @@
-# Debian Packaging GitHub Action
+# Ubuntu Packaging GitHub Action
You can manually trigger a deb-packaging action on GitHub, e.g. to test changes:
diff --git a/.github/workflows/deb-packaging.yml b/.github/workflows/deb-packaging.yml
index 00468125c7..96ad55ca1a 100644
--- a/.github/workflows/deb-packaging.yml
+++ b/.github/workflows/deb-packaging.yml
@@ -1,3 +1,14 @@
+#
+# This workflow builds the source package for Keyman for Linux, and then builds
+# the binary packages for the released versions of Ubuntu. It also signs the
+# packages. Released Keyman versions get uploaded to the LLSO repository.
+# It is triggered by a repository_dispatch event with the
+# types `deb-release-packaging:*` and `deb-pr-packaging:*`.
+#
+# We use the filename `deb-packaging.yml` even though we only do Ubuntu
+# packaging here, because we're packaging the .deb format, and because it's shorter.
+#
+
name: "Ubuntu packaging"
run-name: "Ubuntu packaging - ${{ github.event.client_payload.branch }} (branch ${{ github.event.client_payload.baseBranch }}), by @${{ github.event.client_payload.user }}, testbuild: ${{ github.event.client_payload.isTestBuild }}"
on:
@@ -16,7 +27,7 @@ on:
env:
COLOR_GREEN: "\e[32m"
GH_TOKEN: ${{ github.token }}
- STATUS_CONTEXT: 'Debian Packaging'
+ STATUS_CONTEXT: 'Ubuntu Packaging'
DEBFULLNAME: 'Keyman GHA packager'
DEBEMAIL: 'support@keyman.com'
@@ -45,7 +56,7 @@ jobs:
/repos/$GITHUB_REPOSITORY/statuses/${{ github.event.client_payload.buildSha }} \
-f state='pending' \
-f target_url="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \
- -f description='Debian packaging started' \
+ -f description='Ubuntu packaging started' \
-f context="$STATUS_CONTEXT"
- name: Install devscripts
diff --git a/HISTORY.md b/HISTORY.md
index 8641b986ab..dc0b6a7594 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -80,6 +80,59 @@
* refactor(windows): rename `TKeymanMutex.MutexOwned` to `TakeOwnership` and add `ReleaseOwnership` (#13168)
* chore: increment to alpha 19.0 (#13187)
+## 18.0.222 beta 2025-03-28
+
+* fix(android): Handle banner overrides independently when device is locked and unlocked (#13546)
+
+## 18.0.221 beta 2025-03-27
+
+* fix(windows): configuration update tab text changes (#13555)
+* chore(common): update language-subtag-registry to 2025-03-10 release (#13577)
+* docs(mac): update help documentation due to changes in Settings in macOS 13.0 Ventura (#13501)
+* fix(linux): improve emitting keystrokes (#13558)
+* fix(linux): improve key mapping to allow Core to reset context (#13372)
+
+## 18.0.220 beta 2025-03-24
+
+* fix(windows,mac): Update Spanish configuration string and mac strings (#13564)
+* chore(developer): use 'statement' instead of 'command' for messages about kmn statements (#13562)
+
+## 18.0.219 beta 2025-03-21
+
+* fix(windows): add exception handling for loading xml file in XSL Rendering (#13530)
+* refactor(linux): rename `initialize_queue` method (#13554)
+
+## 18.0.218 beta 2025-03-19
+
+* fix(developer): add validation of `nul` usage in output part of rule (#13532)
+* fix(web): model unload and load should use consistent, canEnable check (#13534)
+* feat(web): adds gesture 'traces' for warning/error logging (#13360)
+* fix(linux): fix building in Docker with different Ubuntu/Debian version (#13537)
+* chore(linux): replace deprecated setup.py (#13524)
+* chore(linux): rename "Debian packaging" to "Ubuntu packaging" (#13523)
+
+## 18.0.217 beta 2025-03-18
+
+* fix(windows): cherry pick hard code key cap (#13526)
+* fix(android,windows): Update Russian language strings to use Cyrillic script (#13527)
+* docs(web): add internal documentation for context state and keystroke processing (#13520)
+* docs(common): add link to schemas (#13521)
+* chore(linux): update URL for lcov package (#13535)
+* chore(linux): allow to build and use Debian docker image (#13536)
+
+## 18.0.216 beta 2025-03-17
+
+* change(android): re-order host page script load so Sentry can report script load failures (#13333)
+* chore(web): remove dead osk code (#13358)
+* fix(web): cancel held backspace on new key input (#13359)
+* fix(developer): handle non bmp numeric entities in xml reader (#13365)
+
+## 18.0.215 beta 2025-03-14
+
+* docs(common): Update Sentry links to keyman.sentry.io (#13491)
+* chore(android,windows): Update Crowdin for Spanish and Spanish (Latin America) (#13499)
+* chore(common): update crowdin strings for Italian (#13500)
+
## 18.0.214 beta 2025-03-13
* fix(mac): change text in privacy alert for macOS 13.0 and later (#13480)
diff --git a/VERSION.md b/VERSION.md
index 54beea1b81..9dcade37d9 100644
--- a/VERSION.md
+++ b/VERSION.md
@@ -1 +1 @@
-19.0.19
\ No newline at end of file
+19.0.19
diff --git a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java
index d1965f41b4..023195d1c4 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java
@@ -159,9 +159,11 @@ public class SystemKeyboard extends InputMethodService implements OnKeyboardEven
Context appContext = getApplicationContext();
// Temporarily disable predictions on certain fields (e.g. hidden password field or numeric)
inputType = attribute.inputType;
- KMManager.setMayPredictOverride(inputType);
- if (KMManager.getMayPredictOverride()) {
+ KMManager.setPredictionsSuspended(inputType, KeyboardType.KEYBOARD_TYPE_SYSTEM);
+ if (KMManager.getPredictionsSuspended(KeyboardType.KEYBOARD_TYPE_SYSTEM)) {
KMManager.setBannerOptions(false);
+ // Set the system keyboard HTML banner
+ BannerController.setHTMLBanner(this, KeyboardType.KEYBOARD_TYPE_SYSTEM);
} else if (KMManager.isKeyboardLoaded(KeyboardType.KEYBOARD_TYPE_SYSTEM)){
// Check if predictions needs to be re-enabled per Settings preference
Keyboard kbInfo = KMManager.getCurrentKeyboardInfo(appContext);
diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java
index f5a3c63cb9..07ce5c4cbb 100644
--- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java
+++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java
@@ -244,6 +244,12 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
@Override
protected void onResume() {
super.onResume();
+
+ if (textView != null) {
+ // Reset inAppPredictionsSuspendedForSensitiveInput flag
+ KMManager.setPredictionsSuspended(textView.getInputType(), KeyboardType.KEYBOARD_TYPE_INAPP);
+ }
+
KMManager.onResume();
KMManager.hideSystemKeyboard();
diff --git a/android/KMAPro/kMAPro/src/main/res/values-b+es+419/strings.xml b/android/KMAPro/kMAPro/src/main/res/values-b+es+419/strings.xml
index 856c14c922..0d1f0efde5 100644
--- a/android/KMAPro/kMAPro/src/main/res/values-b+es+419/strings.xml
+++ b/android/KMAPro/kMAPro/src/main/res/values-b+es+419/strings.xml
@@ -126,11 +126,11 @@