From 7b7c93aed4b6cfede704cdc4a35b8da082d145df Mon Sep 17 00:00:00 2001 From: jahorton Date: Wed, 25 Sep 2019 14:38:42 +0700 Subject: [PATCH 1/3] Improves app stability, delays JS calls past page load --- .../main/java/com/tavultesoft/kmea/KMKeyboard.java | 4 +++- web/source/osk/visualKeyboard.ts | 11 ++++++++++- web/source/utils/version.ts | 3 +++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java index 3a5d26d555..0ab2c3c632 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java @@ -207,7 +207,9 @@ final class KMKeyboard extends WebView { if((keyboardType == KeyboardType.KEYBOARD_TYPE_INAPP && KMManager.InAppKeyboardLoaded) || (keyboardType == KeyboardType.KEYBOARD_TYPE_SYSTEM && KMManager.SystemKeyboardLoaded)) { - if(this.javascriptAfterLoad.size() == 1) + // If !this.keyboardSet, then pageLoaded hasn't fired yet. + // When pageLoaded fires, it'll call `callJavascriptAfterLoad` safely. + if(this.javascriptAfterLoad.size() == 1 && this.keyboardSet) callJavascriptAfterLoad(); } } diff --git a/web/source/osk/visualKeyboard.ts b/web/source/osk/visualKeyboard.ts index ca3d4573a5..07972bed78 100644 --- a/web/source/osk/visualKeyboard.ts +++ b/web/source/osk/visualKeyboard.ts @@ -592,7 +592,16 @@ namespace com.keyman.osk { // Build a layout using the default for the device if(typeof layout != 'object' || layout == null) { - let kbdDevVersion = new utils.Version(activeKeyboard['KVER']); + var kbdDevVersion: utils.Version; + + // This CAN be called with no backing keyboard; KMW will try to force-show + // the OSK even without a backing keyboard on mobile, using the default + // layout as the OSK's base. + if(activeKeyboard) { + kbdDevVersion = new utils.Version(activeKeyboard['KVER']); + } else { + kbdDevVersion = utils.Version.CURRENT; + } layout=Layouts.buildDefaultLayout(PVK, kbdDevVersion, kbdBitmask, formFactor); } diff --git a/web/source/utils/version.ts b/web/source/utils/version.ts index 3d43ee7ea8..48e75cb585 100644 --- a/web/source/utils/version.ts +++ b/web/source/utils/version.ts @@ -9,6 +9,9 @@ namespace com.keyman.utils { // as it results in unexpected, bug-like behavior for keyboard designers when it is unwanted. public static readonly NO_DEFAULT_KEYCAPS = new Version([12, 0]); + // Corresponds to the most recent known version of KMW and Keyman Developer. + public static readonly CURRENT = new Version([12, 0]); + private readonly components: number[] /** From ae147e63f5d10d859aeaba5429fbe555959efbab Mon Sep 17 00:00:00 2001 From: jahorton Date: Wed, 25 Sep 2019 14:53:16 +0700 Subject: [PATCH 2/3] Better 'default' keyboard version handling --- web/source/osk/visualKeyboard.ts | 2 +- web/source/utils/version.ts | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/web/source/osk/visualKeyboard.ts b/web/source/osk/visualKeyboard.ts index 07972bed78..1bb566a882 100644 --- a/web/source/osk/visualKeyboard.ts +++ b/web/source/osk/visualKeyboard.ts @@ -600,7 +600,7 @@ namespace com.keyman.osk { if(activeKeyboard) { kbdDevVersion = new utils.Version(activeKeyboard['KVER']); } else { - kbdDevVersion = utils.Version.CURRENT; + kbdDevVersion = new utils.Version(keyman['version']); } layout=Layouts.buildDefaultLayout(PVK, kbdDevVersion, kbdBitmask, formFactor); } diff --git a/web/source/utils/version.ts b/web/source/utils/version.ts index 48e75cb585..3d43ee7ea8 100644 --- a/web/source/utils/version.ts +++ b/web/source/utils/version.ts @@ -9,9 +9,6 @@ namespace com.keyman.utils { // as it results in unexpected, bug-like behavior for keyboard designers when it is unwanted. public static readonly NO_DEFAULT_KEYCAPS = new Version([12, 0]); - // Corresponds to the most recent known version of KMW and Keyman Developer. - public static readonly CURRENT = new Version([12, 0]); - private readonly components: number[] /** From e623e494f03aa82193119ee91995fc8c3a93c9a4 Mon Sep 17 00:00:00 2001 From: jahorton Date: Wed, 25 Sep 2019 15:59:52 +0700 Subject: [PATCH 3/3] Clears JS queue on page reload state --- .../src/main/java/com/tavultesoft/kmea/KMKeyboard.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java index 0ab2c3c632..a5a614a34b 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java @@ -190,6 +190,7 @@ final class KMKeyboard extends WebView { public void loadKeyboard() { keyboardSet = false; + this.javascriptAfterLoad.clear(); if(keyboardType == KeyboardType.KEYBOARD_TYPE_INAPP) KMManager.InAppKeyboardLoaded = false; @@ -209,7 +210,7 @@ final class KMKeyboard extends WebView { // If !this.keyboardSet, then pageLoaded hasn't fired yet. // When pageLoaded fires, it'll call `callJavascriptAfterLoad` safely. - if(this.javascriptAfterLoad.size() == 1 && this.keyboardSet) + if(this.javascriptAfterLoad.size() == 1 && keyboardSet) callJavascriptAfterLoad(); } } @@ -223,8 +224,11 @@ final class KMKeyboard extends WebView { if(javascriptAfterLoad.size() > 0) { loadUrl("javascript:" + javascriptAfterLoad.get(0)); javascriptAfterLoad.remove(0); - if (javascriptAfterLoad.size() > 0) { - callJavascriptAfterLoad(); + // Make sure we didn't reset the page in the middle of the queue! + if(keyboardSet) { + if (javascriptAfterLoad.size() > 0) { + callJavascriptAfterLoad(); + } } } }