From dc17075408a38f6e80a3678c54d5ad5654018940 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 13 Feb 2025 14:41:44 +0700 Subject: [PATCH 1/3] fix(android): Remove sendOptionsToKeyboard function from Engine API --- .../java/com/keyman/android/SystemKeyboard.java | 2 -- .../kmapro/AdjustLongpressDelayActivity.java | 1 - .../java/com/tavultesoft/kmapro/MainActivity.java | 3 +-- android/KMEA/app/src/main/assets/android-host.js | 8 +++++++- .../main/java/com/keyman/engine/KMManager.java | 15 +++++++++------ 5 files changed, 17 insertions(+), 12 deletions(-) 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 5ca3de5807..4f5bd29dd3 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 @@ -250,8 +250,6 @@ public class SystemKeyboard extends InputMethodService implements OnKeyboardEven if (exText != null) exText = null; } - // Initialize keyboard options - KMManager.sendOptionsToKeyboard(); } @Override diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/AdjustLongpressDelayActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/AdjustLongpressDelayActivity.java index e79cb917ff..596c247d09 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/AdjustLongpressDelayActivity.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/AdjustLongpressDelayActivity.java @@ -133,7 +133,6 @@ public class AdjustLongpressDelayActivity extends BaseActivity { // Store the longpress delay as a reference // and then update KeymanWeb with the longpress delay KMManager.setLongpressDelay(currentDelayTimeMS); - KMManager.sendOptionsToKeyboard(); super.onBackPressed(); } 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 908d2f4538..37eb8eb685 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 @@ -475,8 +475,7 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene @Override public void onKeyboardLoaded(KeyboardType keyboardType) { - // Initialize keyboard options - KMManager.sendOptionsToKeyboard(); + // Do nothing } @Override diff --git a/android/KMEA/app/src/main/assets/android-host.js b/android/KMEA/app/src/main/assets/android-host.js index 0bd199b4d6..155daed493 100644 --- a/android/KMEA/app/src/main/assets/android-host.js +++ b/android/KMEA/app/src/main/assets/android-host.js @@ -13,6 +13,7 @@ var bannerImagePath = ''; var bannerHTMLContents = ''; var fragmentToggle = 0; var deferredBannerCall; +var longpressDelay = null; var sentryManager = new KeymanSentryManager({ hostPlatform: "android" @@ -71,6 +72,10 @@ function init() { keyman.refreshOskLayout(); } + // Initialize the longpress delay + if(longpressDelay !== null) { + setLongpressDelay(longpressDelay); + } }); keyman.addEventListener('keyboardloaded', setIsChiral); @@ -128,7 +133,8 @@ function notifyHost(event, params) { // Update the KeymanWeb longpress delay // delay is in milliseconds function setLongpressDelay(delay) { - if (keyman.osk) { + longpressDelay = delay; + if (keyman && keyman.osk) { keyman.osk.gestureParams.longpress.waitLength = delay; console_debug('setLongpressDelay('+delay+')'); } else { diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index 0e4c261232..13363185cc 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -724,6 +724,7 @@ public final class KMManager { keyboard.showBanner(true); } setEngineWebViewVersionStatus(appContext, keyboard); + sendLongpressDelay(); } public static String getLanguagePredictionPreferenceKey(String langID) { @@ -921,7 +922,7 @@ public final class KMManager { copyAsset(context, KMFilename_KmwCss, "", true); copyAsset(context, KMFilename_KmwGlobeHintCss, "", true); copyAsset(context, KMFilename_Osk_Ttf_Font, "", true); - + // Needed until our minimum version of Chrome is 61.0+. copyAsset(context, KMFilename_JSPolyfill2, "", true); @@ -2124,7 +2125,7 @@ public final class KMManager { } /** - * Set the longpress delay (in milliseconds) as a stored preference. + * Set the longpress delay (in milliseconds) as a stored preference and sends to KeymanWeb. * Valid range is 300 ms to 1500 ms. Returns true if the preference is successfully stored. * @param longpressDelay - int longpress delay in milliseconds * @return boolean @@ -2140,17 +2141,19 @@ public final class KMManager { editor.putInt(KMKey_LongpressDelay, longpressDelay); editor.commit(); + // Send longpress delay to KeymanWeb + sendLongpressDelay(); + return true; } /** - * Sends options to the KeymanWeb keyboard. + * Sends longpress delay to the KeymanWeb keyboard. * 1. number of milliseconds to trigger a longpress gesture. - * This method requires a keyboard to be loaded for the value to take effect. */ - public static void sendOptionsToKeyboard() { + private static void sendLongpressDelay() { int longpressDelay = getLongpressDelay(); - if (isKeyboardLoaded(KeyboardType.KEYBOARD_TYPE_INAPP)) { + if (InAppKeyboard != null) { InAppKeyboard.loadJavascript(KMString.format("setLongpressDelay(%d)", longpressDelay)); } From 1265e8770cb92d15670354ebd05858556d9be6a9 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 13 Feb 2025 15:20:33 +0700 Subject: [PATCH 2/3] chore(android/engine): Cleanup else clause --- android/KMEA/app/src/main/assets/android-host.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/android/KMEA/app/src/main/assets/android-host.js b/android/KMEA/app/src/main/assets/android-host.js index 155daed493..ad440d493a 100644 --- a/android/KMEA/app/src/main/assets/android-host.js +++ b/android/KMEA/app/src/main/assets/android-host.js @@ -137,8 +137,6 @@ function setLongpressDelay(delay) { if (keyman && keyman.osk) { keyman.osk.gestureParams.longpress.waitLength = delay; console_debug('setLongpressDelay('+delay+')'); - } else { - window.console.log('setLongpressDelay error: keyman.osk undefined'); } } From b3ae7f831a583e6955005c612f3063bdc3e6f7bb Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 13 Feb 2025 15:21:13 +0700 Subject: [PATCH 3/3] fix(android): Don't set longpress delay for unit tests --- android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index 13363185cc..72e2d29811 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -722,9 +722,9 @@ public final class KMManager { } keyboard.setBanner(KMManager.BannerType.HTML); keyboard.showBanner(true); + sendLongpressDelay(); } setEngineWebViewVersionStatus(appContext, keyboard); - sendLongpressDelay(); } public static String getLanguagePredictionPreferenceKey(String langID) {