From f799adc36c98fe0090e40afc73c5ac3d61d19b89 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 7 May 2024 09:07:42 +0700 Subject: [PATCH 01/10] chore(common): Add `minimum-versions.md` --- resources/build/minimum-versions.md | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 resources/build/minimum-versions.md diff --git a/resources/build/minimum-versions.md b/resources/build/minimum-versions.md new file mode 100644 index 0000000000..3658acdd32 --- /dev/null +++ b/resources/build/minimum-versions.md @@ -0,0 +1,63 @@ +--- +title: Keyman Minimum Versions +--- + +This file reflects the minimum versions in Keyman as defined in [minimum-versions.inc.sh](minimum-versions.inc.sh). Updates should be manually propagated to the linked help files below: + +## Keyman 18.0 + +Target Operating System and Platform Versions + +### Keyman for Windows + +* Minimum supported version of Windows is 10 (KEYMAN_MIN_TARGET_VERSION_WINDOWS) + +Helpfile: [os.md](../../windows/src/desktop/help/common/os.md) + +### Keyman for macOS + +* Minimum supported version of macOS is 10.13 (High Sierra - KEYMAN_MIN_TARGET_VERSION_MAC) + +Helpfile: [requirements.md](../../mac/help/about/requirements.md) + +### Keyman for Linux + +* Minimum supported version of Linux is 20.04 (Ubuntu 20.04 Focal - KEYMAN_MIN_TARGET_VERSION_UBUNTU) + +Helpfile: [common/index.md](../../linux/help/common/index.md#q-what-linux-distros-will-keyman-work-with) + +### Keyman iPhone and iPad + +* Minimum supported version of iOS is 12.2 (KEYMAN_MIN_TARGET_VERSION_IOS) + +Helpfile: [system-requirements.md](../../ios/help/about/system-requirements.md) + +### Keyman for Android + +* Minimum supported version of Android is 5.0 (KEYMAN_MIN_TARGET_VERSION_ANDROID) + +* Minimum version of Chrome on Android is 95.0 (KEYMAN_MIN_TARGET_VERSION_CHROME) + +Helpfile: [system-requirements.md](../../android/help/about/system-requirements.md) + +### KeymanWeb + +* Minimum supported version of Chrome is 95.0 (??) + +---- + +### Minimum Dependency Versions for Developers + +* Node 18 (MIN_NODE_MAJOR_VERSION) +* Emscripten 3.1.44 (MIN_EMSCRIPTEN_VERSION) +* Visual Studio 2019 (MIN_VISUAL_STUDIO_VERSION) +* Meson 1.0.0 (MIN_MESON_VERSION) +* Chrome 95.0 (MIN_CHROME_VERSION) + +### Language and Runtime Versions + +* Java/OpenJDK 11 (KEYMAN_MIN_VERSION_JAVA) +* C++ 17 (KEYMAN_MIN_VERSION_CPP) + +* Ubuntu 24.04 Noble (DEFAULT_UBUNTU_VERSION) + From 134ecbe60805badec9bfaed221e73725144fcaf7 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 7 May 2024 09:31:20 +0700 Subject: [PATCH 02/10] chore(common): List documentation to update --- resources/build/minimum-versions.md | 34 ++++++----------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/resources/build/minimum-versions.md b/resources/build/minimum-versions.md index 3658acdd32..6ba331f3a6 100644 --- a/resources/build/minimum-versions.md +++ b/resources/build/minimum-versions.md @@ -2,7 +2,7 @@ title: Keyman Minimum Versions --- -This file reflects the minimum versions in Keyman as defined in [minimum-versions.inc.sh](minimum-versions.inc.sh). Updates should be manually propagated to the linked help files below: +Changes in [minimum-versions.inc.sh](minimum-versions.inc.sh) should manually be propagated to the linked help files below: ## Keyman 18.0 @@ -10,54 +10,34 @@ Target Operating System and Platform Versions ### Keyman for Windows -* Minimum supported version of Windows is 10 (KEYMAN_MIN_TARGET_VERSION_WINDOWS) - Helpfile: [os.md](../../windows/src/desktop/help/common/os.md) ### Keyman for macOS -* Minimum supported version of macOS is 10.13 (High Sierra - KEYMAN_MIN_TARGET_VERSION_MAC) - Helpfile: [requirements.md](../../mac/help/about/requirements.md) ### Keyman for Linux -* Minimum supported version of Linux is 20.04 (Ubuntu 20.04 Focal - KEYMAN_MIN_TARGET_VERSION_UBUNTU) - Helpfile: [common/index.md](../../linux/help/common/index.md#q-what-linux-distros-will-keyman-work-with) ### Keyman iPhone and iPad -* Minimum supported version of iOS is 12.2 (KEYMAN_MIN_TARGET_VERSION_IOS) - Helpfile: [system-requirements.md](../../ios/help/about/system-requirements.md) ### Keyman for Android -* Minimum supported version of Android is 5.0 (KEYMAN_MIN_TARGET_VERSION_ANDROID) - -* Minimum version of Chrome on Android is 95.0 (KEYMAN_MIN_TARGET_VERSION_CHROME) - Helpfile: [system-requirements.md](../../android/help/about/system-requirements.md) -### KeymanWeb - -* Minimum supported version of Chrome is 95.0 (??) - ---- -### Minimum Dependency Versions for Developers +## Product Build Documentation -* Node 18 (MIN_NODE_MAJOR_VERSION) -* Emscripten 3.1.44 (MIN_EMSCRIPTEN_VERSION) -* Visual Studio 2019 (MIN_VISUAL_STUDIO_VERSION) -* Meson 1.0.0 (MIN_MESON_VERSION) -* Chrome 95.0 (MIN_CHROME_VERSION) +[linux-ubuntu.md](../../docs/build/linux-ubuntu.md) -### Language and Runtime Versions +[macos.md](../../docs/build/macos.md) -* Java/OpenJDK 11 (KEYMAN_MIN_VERSION_JAVA) -* C++ 17 (KEYMAN_MIN_VERSION_CPP) +[windows.md](../../docs/build/windows.md) -* Ubuntu 24.04 Noble (DEFAULT_UBUNTU_VERSION) +## Keyman Engine Documentation +https://help.keyman.com/developer/engine/android/latest-version/ From 326090b5616cfcd0dcecb6cd312bb5d7fb8fee78 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 8 May 2024 13:13:18 +0700 Subject: [PATCH 03/10] chore(common): Generate min-ver.md --- resources/build/min-ver.sh | 49 ++++++++++++++++++++++++++ resources/build/minimum-versions.md | 43 ---------------------- resources/build/minimum-versions.md.in | 48 +++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 43 deletions(-) create mode 100755 resources/build/min-ver.sh create mode 100644 resources/build/minimum-versions.md.in diff --git a/resources/build/min-ver.sh b/resources/build/min-ver.sh new file mode 100755 index 0000000000..fa9ec5f80b --- /dev/null +++ b/resources/build/min-ver.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +set -e +set -u +set -x + +# +# Usage: min-ver.sh +# +# Parses minimum-versions.inc.sh to update template file minimum-versions.md.in. +# If minimum-versions.md is changed, commit and push changes +# + +## START STANDARD BUILD SCRIPT INCLUDE +# adjust relative paths as necessary +THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" +. "${THIS_SCRIPT%/*}/build-utils.sh" +## END STANDARD BUILD SCRIPT INCLUDE + +. "${THIS_SCRIPT%/*}/minimum-versions.inc.sh" + +function generate_table { + echo "" + echo "## minimum-versions.inc.sh Variables" + echo "" + echo "| KEYMAN Variable | Value |" + echo "|-----------------------------------|--------------|" + + # Parameter expansion all the KEYMAN_MIN_* variable names into strarr array + readarray -d ' ' -t strarr <<< ${!KEYMAN_MIN*} + for((n=0; n<${#strarr[*]}; n++ )) do + echo "| ${strarr[n]} | ${!strarr[n]} |" + done + + # Parameter expansion all the KEYMAN_MAX_* variable names into strarr array + readarray -d ' ' -t strarr <<< ${!KEYMAN_MAX*} + for((n=0; n<${#strarr[*]}; n++ )) do + echo "| ${strarr[n]} | ${!strarr[n]} |" + done + + # Parameter expansion all the KEYMAN_DEFAULT_* variable names into strarr array + readarray -d ' ' -t strarr <<< ${!KEYMAN_DEFAULT*} + for((n=0; n<${#strarr[*]}; n++ )) do + echo "| ${strarr[n]} | ${!strarr[n]} |" + done + +} + +generate_table > minimum-versions.md diff --git a/resources/build/minimum-versions.md b/resources/build/minimum-versions.md index 6ba331f3a6..e69de29bb2 100644 --- a/resources/build/minimum-versions.md +++ b/resources/build/minimum-versions.md @@ -1,43 +0,0 @@ ---- -title: Keyman Minimum Versions ---- - -Changes in [minimum-versions.inc.sh](minimum-versions.inc.sh) should manually be propagated to the linked help files below: - -## Keyman 18.0 - -Target Operating System and Platform Versions - -### Keyman for Windows - -Helpfile: [os.md](../../windows/src/desktop/help/common/os.md) - -### Keyman for macOS - -Helpfile: [requirements.md](../../mac/help/about/requirements.md) - -### Keyman for Linux - -Helpfile: [common/index.md](../../linux/help/common/index.md#q-what-linux-distros-will-keyman-work-with) - -### Keyman iPhone and iPad - -Helpfile: [system-requirements.md](../../ios/help/about/system-requirements.md) - -### Keyman for Android - -Helpfile: [system-requirements.md](../../android/help/about/system-requirements.md) - ----- - -## Product Build Documentation - -[linux-ubuntu.md](../../docs/build/linux-ubuntu.md) - -[macos.md](../../docs/build/macos.md) - -[windows.md](../../docs/build/windows.md) - -## Keyman Engine Documentation - -https://help.keyman.com/developer/engine/android/latest-version/ diff --git a/resources/build/minimum-versions.md.in b/resources/build/minimum-versions.md.in new file mode 100644 index 0000000000..92621b8a54 --- /dev/null +++ b/resources/build/minimum-versions.md.in @@ -0,0 +1,48 @@ +--- +title: Keyman Minimum Versions +--- + +Changes in [minimum-versions.inc.sh](minimum-versions.inc.sh) should manually be propagated to the linked help files below: + +## Keyman 18.0 + +Target Operating System and Platform Versions + +### Keyman for Windows + +Helpfile: [os.md](../../windows/src/desktop/help/common/os.md) + +### Keyman for macOS + +Helpfile: [requirements.md](../../mac/help/about/requirements.md) + +### Keyman for Linux + +Helpfile: [common/index.md](../../linux/help/common/index.md#q-what-linux-distros-will-keyman-work-with) + +### Keyman iPhone and iPad + +Helpfile: [system-requirements.md](../../ios/help/about/system-requirements.md) + +### Keyman for Android + +Helpfile: [system-requirements.md](../../android/help/about/system-requirements.md) + +---- + +## Product Build Documentation + +[linux-ubuntu.md](../../docs/build/linux-ubuntu.md) + +[macos.md](../../docs/build/macos.md) + +[windows.md](../../docs/build/windows.md) + +## Keyman Engine Documentation + +https://help.keyman.com/developer/engine/android/latest-version/ + +---- + +## minimum-versions.inc.sh variables + From 15a0e363726322fcd57fa02081a0a66f4c37e47d Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 9 May 2024 04:51:00 +0700 Subject: [PATCH 04/10] chore(common): Tweak for loop --- resources/build/min-ver.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/build/min-ver.sh b/resources/build/min-ver.sh index fa9ec5f80b..45eac071ae 100755 --- a/resources/build/min-ver.sh +++ b/resources/build/min-ver.sh @@ -27,20 +27,20 @@ function generate_table { echo "|-----------------------------------|--------------|" # Parameter expansion all the KEYMAN_MIN_* variable names into strarr array - readarray -d ' ' -t strarr <<< ${!KEYMAN_MIN*} - for((n=0; n<${#strarr[*]}; n++ )) do + readarray -d ' ' -t strarr <<< ${!KEYMAN_MIN_*} + for n in ${!strarr[@]}; do echo "| ${strarr[n]} | ${!strarr[n]} |" done # Parameter expansion all the KEYMAN_MAX_* variable names into strarr array readarray -d ' ' -t strarr <<< ${!KEYMAN_MAX*} - for((n=0; n<${#strarr[*]}; n++ )) do + for n in ${#strarr[@]}; do echo "| ${strarr[n]} | ${!strarr[n]} |" done # Parameter expansion all the KEYMAN_DEFAULT_* variable names into strarr array readarray -d ' ' -t strarr <<< ${!KEYMAN_DEFAULT*} - for((n=0; n<${#strarr[*]}; n++ )) do + for n in ${#strarr[@]}; do echo "| ${strarr[n]} | ${!strarr[n]} |" done From 90a37de5fe8c69f58df9ff4979b06c4a1b4601ab Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 9 May 2024 08:28:16 +0700 Subject: [PATCH 05/10] fix: generate table and append to minimum-versions.md.in --- resources/build/min-ver.sh | 24 +++------ resources/build/minimum-versions.md | 68 ++++++++++++++++++++++++++ resources/build/minimum-versions.md.in | 3 -- 3 files changed, 76 insertions(+), 19 deletions(-) diff --git a/resources/build/min-ver.sh b/resources/build/min-ver.sh index 45eac071ae..d9efba6827 100755 --- a/resources/build/min-ver.sh +++ b/resources/build/min-ver.sh @@ -2,7 +2,6 @@ set -e set -u -set -x # # Usage: min-ver.sh @@ -26,24 +25,17 @@ function generate_table { echo "| KEYMAN Variable | Value |" echo "|-----------------------------------|--------------|" - # Parameter expansion all the KEYMAN_MIN_* variable names into strarr array - readarray -d ' ' -t strarr <<< ${!KEYMAN_MIN_*} + # Get all the shell variables named KEYMAN*VERSION + strarr=( $(compgen -v KEYMAN | grep VERSION) ) + # echo "${strarr[@]}" + for n in ${!strarr[@]}; do echo "| ${strarr[n]} | ${!strarr[n]} |" done - # Parameter expansion all the KEYMAN_MAX_* variable names into strarr array - readarray -d ' ' -t strarr <<< ${!KEYMAN_MAX*} - for n in ${#strarr[@]}; do - echo "| ${strarr[n]} | ${!strarr[n]} |" - done - - # Parameter expansion all the KEYMAN_DEFAULT_* variable names into strarr array - readarray -d ' ' -t strarr <<< ${!KEYMAN_DEFAULT*} - for n in ${#strarr[@]}; do - echo "| ${strarr[n]} | ${!strarr[n]} |" - done - + echo "" + echo "> ### This file is auto-generated by min-ver.sh. Do not modify" } -generate_table > minimum-versions.md +cp minimum-versions.md.in minimum-versions.md +generate_table >> minimum-versions.md diff --git a/resources/build/minimum-versions.md b/resources/build/minimum-versions.md index e69de29bb2..adb4edc687 100644 --- a/resources/build/minimum-versions.md +++ b/resources/build/minimum-versions.md @@ -0,0 +1,68 @@ +--- +title: Keyman Minimum Versions +--- + +Changes in [minimum-versions.inc.sh](minimum-versions.inc.sh) should manually be propagated to the linked help files below: + +## Keyman 18.0 + +Target Operating System and Platform Versions + +### Keyman for Windows + +Helpfile: [os.md](../../windows/src/desktop/help/common/os.md) + +### Keyman for macOS + +Helpfile: [requirements.md](../../mac/help/about/requirements.md) + +### Keyman for Linux + +Helpfile: [common/index.md](../../linux/help/common/index.md#q-what-linux-distros-will-keyman-work-with) + +### Keyman iPhone and iPad + +Helpfile: [system-requirements.md](../../ios/help/about/system-requirements.md) + +### Keyman for Android + +Helpfile: [system-requirements.md](../../android/help/about/system-requirements.md) + +---- + +## Product Build Documentation + +[linux-ubuntu.md](../../docs/build/linux-ubuntu.md) + +[macos.md](../../docs/build/macos.md) + +[windows.md](../../docs/build/windows.md) + +## Keyman Engine Documentation + +https://help.keyman.com/developer/engine/android/latest-version/ + +---- + +## minimum-versions.inc.sh Variables + +| KEYMAN Variable | Value | +|-----------------------------------|--------------| +| KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER | noble | +| KEYMAN_MAX_VERSION_EMSCRIPTEN | 3.1.58 | +| KEYMAN_MIN_TARGET_VERSION_ANDROID | 5 | +| KEYMAN_MIN_TARGET_VERSION_CHROME | 95.0 | +| KEYMAN_MIN_TARGET_VERSION_IOS | 12.2 | +| KEYMAN_MIN_TARGET_VERSION_MAC | 10.13 | +| KEYMAN_MIN_TARGET_VERSION_UBUNTU | 20.04 | +| KEYMAN_MIN_TARGET_VERSION_WINDOWS | 10 | +| KEYMAN_MIN_VERSION_ANDROID_SDK | 21 | +| KEYMAN_MIN_VERSION_CPP | 17 | +| KEYMAN_MIN_VERSION_EMSCRIPTEN | 3.1.44 | +| KEYMAN_MIN_VERSION_MESON | 1.0.0 | +| KEYMAN_MIN_VERSION_NODE_MAJOR | 18 | +| KEYMAN_MIN_VERSION_NPM | 10.5.1 | +| KEYMAN_MIN_VERSION_VISUAL_STUDIO | 2019 | +| KEYMAN_VERSION_JAVA | 11 | + +> ### This file is auto-generated by min-ver.sh. Do not modify diff --git a/resources/build/minimum-versions.md.in b/resources/build/minimum-versions.md.in index 92621b8a54..42d04b5987 100644 --- a/resources/build/minimum-versions.md.in +++ b/resources/build/minimum-versions.md.in @@ -43,6 +43,3 @@ Helpfile: [system-requirements.md](../../android/help/about/system-requirements. https://help.keyman.com/developer/engine/android/latest-version/ ---- - -## minimum-versions.inc.sh variables - From 947e931e5507fae948e1bdd9db10b1dc88eaca99 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Mon, 13 May 2024 10:23:01 +0700 Subject: [PATCH 06/10] chore(common): Rename min-ver.sh to publish-minimum-versions.sh --- resources/build/{min-ver.sh => publish-minimum-versions.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename resources/build/{min-ver.sh => publish-minimum-versions.sh} (100%) diff --git a/resources/build/min-ver.sh b/resources/build/publish-minimum-versions.sh similarity index 100% rename from resources/build/min-ver.sh rename to resources/build/publish-minimum-versions.sh From 439dbeb7d66070c338921c4c2d91565fbbfb1818 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Mon, 13 May 2024 11:30:26 +0700 Subject: [PATCH 07/10] chore(common): Move minimum-versions.md to /docs/ --- {resources/build => docs}/minimum-versions.md | 0 resources/build/publish-minimum-versions.sh | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) rename {resources/build => docs}/minimum-versions.md (100%) diff --git a/resources/build/minimum-versions.md b/docs/minimum-versions.md similarity index 100% rename from resources/build/minimum-versions.md rename to docs/minimum-versions.md diff --git a/resources/build/publish-minimum-versions.sh b/resources/build/publish-minimum-versions.sh index d9efba6827..19661f963a 100755 --- a/resources/build/publish-minimum-versions.sh +++ b/resources/build/publish-minimum-versions.sh @@ -4,10 +4,10 @@ set -e set -u # -# Usage: min-ver.sh +# Usage: publish-minimum-versions.sh # # Parses minimum-versions.inc.sh to update template file minimum-versions.md.in. -# If minimum-versions.md is changed, commit and push changes +# If /docs/minimum-versions.md is changed, commit and push changes # ## START STANDARD BUILD SCRIPT INCLUDE @@ -37,5 +37,5 @@ function generate_table { echo "> ### This file is auto-generated by min-ver.sh. Do not modify" } -cp minimum-versions.md.in minimum-versions.md -generate_table >> minimum-versions.md +cp minimum-versions.md.in "$KEYMAN_ROOT/docs/minimum-versions.md" +generate_table >> "$KEYMAN_ROOT/docs/minimum-versions.md" From a30807e3aa98ce6addb4008d96e10d5ae490f525 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Mon, 13 May 2024 11:36:23 +0700 Subject: [PATCH 08/10] chore(common): Move template to /docs/ too --- {resources/build => docs}/minimum-versions.md.in | 0 resources/build/publish-minimum-versions.sh | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) rename {resources/build => docs}/minimum-versions.md.in (100%) diff --git a/resources/build/minimum-versions.md.in b/docs/minimum-versions.md.in similarity index 100% rename from resources/build/minimum-versions.md.in rename to docs/minimum-versions.md.in diff --git a/resources/build/publish-minimum-versions.sh b/resources/build/publish-minimum-versions.sh index 19661f963a..e915b84b87 100755 --- a/resources/build/publish-minimum-versions.sh +++ b/resources/build/publish-minimum-versions.sh @@ -6,7 +6,7 @@ set -u # # Usage: publish-minimum-versions.sh # -# Parses minimum-versions.inc.sh to update template file minimum-versions.md.in. +# Parses minimum-versions.inc.sh to update template file /docs/minimum-versions.md.in. # If /docs/minimum-versions.md is changed, commit and push changes # @@ -16,7 +16,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/build-utils.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "${THIS_SCRIPT%/*}/minimum-versions.inc.sh" +. "${KEYMAN_ROOT}/resources/build/minimum-versions.inc.sh" function generate_table { echo "" @@ -37,5 +37,5 @@ function generate_table { echo "> ### This file is auto-generated by min-ver.sh. Do not modify" } -cp minimum-versions.md.in "$KEYMAN_ROOT/docs/minimum-versions.md" +cp "$KEYMAN_ROOT/docs/minimum-versions.md.in" "$KEYMAN_ROOT/docs/minimum-versions.md" generate_table >> "$KEYMAN_ROOT/docs/minimum-versions.md" From 205c8c2d63580af66542a4a93c2144a28d29e294 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Mon, 13 May 2024 10:20:23 +0700 Subject: [PATCH 09/10] fix(android): Replace deprecated APIs for Display, Size, Metrics --- .../com/keyman/android/SystemKeyboard.java | 4 +- .../com/tavultesoft/kmapro/MainActivity.java | 7 +-- .../java/com/keyman/engine/KMKeyboard.java | 5 +- .../java/com/keyman/engine/KMManager.java | 47 ++++++++++++++++++- .../java/com/keyman/engine/KMPopoverView.java | 11 ++--- .../com/keyman/kmsample2/SystemKeyboard.java | 4 +- .../firstvoices/keyboards/SystemKeyboard.java | 8 +--- 7 files changed, 57 insertions(+), 29 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 10b040cc2e..913a643a80 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 @@ -218,9 +218,7 @@ public class SystemKeyboard extends InputMethodService implements OnKeyboardEven super.onComputeInsets(outInsets); // We should extend the touchable region so that Keyman sub keys menu can receive touch events outside the keyboard frame - WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); - Point size = new Point(0, 0); - wm.getDefaultDisplay().getSize(size); + Point size = KMManager.getWindowSize(getApplicationContext()); int inputViewHeight = 0; if (inputView != null) { 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 1de7decfe0..1e5231f521 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 @@ -603,8 +603,7 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene if (resourceId > 0) statusBarHeight = getResources().getDimensionPixelSize(resourceId); - Point size = new Point(0, 0); - getWindowManager().getDefaultDisplay().getSize(size); + Point size = KMManager.getWindowSize(context); int screenHeight = size.y; Log.d(TAG, "Main resizeTextView bannerHeight: " + bannerHeight); textView.setHeight(screenHeight - statusBarHeight - actionBarHeight - bannerHeight - keyboardHeight); @@ -867,9 +866,7 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene } public static Drawable getActionBarDrawable(Context context) { - Point size = new Point(); - WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - wm.getDefaultDisplay().getSize(size); + Point size = KMManager.getWindowSize(context); int width = size.x; TypedValue outValue = new TypedValue(); diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java index 7d741feec0..bc7dfc5cc6 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java @@ -907,10 +907,7 @@ final class KMKeyboard extends WebView { rotateSuggestions.setClickable(false); // Compute the actual display position (offset coordinate by actual screen pos of kbd) - WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - DisplayMetrics metrics = new DisplayMetrics(); - wm.getDefaultDisplay().getMetrics(metrics); - float density = metrics.density; + float density = KMManager.getWindowDensity(context); int posX, posY; if (keyboardType == KeyboardType.KEYBOARD_TYPE_INAPP) { 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 b31fe42506..c0728e81b3 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 @@ -25,6 +25,8 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.Point; import android.graphics.Typeface; import android.inputmethodservice.InputMethodService; import android.net.ConnectivityManager; @@ -32,6 +34,7 @@ import android.net.NetworkInfo; import android.os.Build; import android.os.IBinder; import android.text.InputType; +import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.Display; @@ -39,6 +42,7 @@ import android.view.Surface; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.view.WindowMetrics; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; @@ -2005,7 +2009,20 @@ public final class KMManager { } public static int getOrientation(Context context) { - Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); + Display display; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + // https://developer.android.com/reference/android/content/Context#getDisplay() + try { + display = context.getDisplay(); + } catch (UnsupportedOperationException e) { + // if the method is called on an instance that is not associated with any display. + return context.getResources().getConfiguration().orientation; + } + } else { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + // Deprecated in API 30 + display = wm.getDefaultDisplay(); + } int rotation = display.getRotation(); if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) { return Configuration.ORIENTATION_PORTRAIT; @@ -2052,6 +2069,34 @@ public final class KMManager { } } + /** + * Get the size of the area the window would occupy. + * API 30+ + * https://developer.android.com/reference/android/view/WindowManager#getCurrentWindowMetrics() + * @param context + * @return Point (width, height) + */ + public static Point getWindowSize(Context context) { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + WindowMetrics windowMetrics = wm.getCurrentWindowMetrics(); + return new Point( + windowMetrics.getBounds().width(), + windowMetrics.getBounds().height()); + } + + // Deprecated in API 30 + Point size = new Point(0, 0); + wm.getDefaultDisplay().getSize(size); + return size; + } + + public static float getWindowDensity(Context context) { + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + Log.d(TAG, "KMManager: metrics.density " + metrics.density); + return metrics.density; + } + protected static void setPersistentShouldShowHelpBubble(boolean flag) { SharedPreferences prefs = appContext.getSharedPreferences(appContext.getString(R.string.kma_prefs_name), Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMPopoverView.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMPopoverView.java index 498739c334..7dcbda5ffd 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMPopoverView.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMPopoverView.java @@ -10,6 +10,7 @@ import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Path; +import android.graphics.Point; import android.graphics.RectF; import android.graphics.Shader; import android.util.AttributeSet; @@ -31,13 +32,11 @@ final class KMPopoverView extends View { public KMPopoverView(Context context, AttributeSet attrs) { super(context, attrs); - WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - DisplayMetrics metrics = new DisplayMetrics(); - wm.getDefaultDisplay().getMetrics(metrics); - density = metrics.density; + Point size = KMManager.getWindowSize(context); + density = KMManager.getWindowDensity(context); - viewWidth = metrics.widthPixels; - viewHeight = metrics.heightPixels; + viewWidth = size.x; + viewHeight = size.y; borderRadius = 6 * density; strokeWidth = 2.0f; bgColor = context.getResources().getColor(R.color.popup_bg); diff --git a/android/Samples/KMSample2/app/src/main/java/com/keyman/kmsample2/SystemKeyboard.java b/android/Samples/KMSample2/app/src/main/java/com/keyman/kmsample2/SystemKeyboard.java index e4ab04e50f..4ad462a76c 100644 --- a/android/Samples/KMSample2/app/src/main/java/com/keyman/kmsample2/SystemKeyboard.java +++ b/android/Samples/KMSample2/app/src/main/java/com/keyman/kmsample2/SystemKeyboard.java @@ -176,9 +176,7 @@ public class SystemKeyboard extends InputMethodService implements OnKeyboardEven super.onComputeInsets(outInsets); // We should extend the touchable region so that Keyman sub keys menu can receive touch events outside the keyboard frame - WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); - Point size = new Point(0, 0); - wm.getDefaultDisplay().getSize(size); + Point size = KMManager.getWindowSize(getApplicationContext()); int inputViewHeight = 0; if (inputView != null) diff --git a/oem/firstvoices/android/app/src/main/java/com/firstvoices/keyboards/SystemKeyboard.java b/oem/firstvoices/android/app/src/main/java/com/firstvoices/keyboards/SystemKeyboard.java index b2842f00bc..f047bc6c78 100644 --- a/oem/firstvoices/android/app/src/main/java/com/firstvoices/keyboards/SystemKeyboard.java +++ b/oem/firstvoices/android/app/src/main/java/com/firstvoices/keyboards/SystemKeyboard.java @@ -202,13 +202,7 @@ public class SystemKeyboard extends InputMethodService implements OnKeyboardEven super.onComputeInsets(outInsets); // We should extend the touchable region so that Keyman sub keys menu can receive touch events outside the keyboard frame - WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); - if(wm == null) return; - Point size = new Point(0, 0); - Display display = wm.getDefaultDisplay(); - if(display == null) return; - - display.getSize(size); + Point size = KMManager.getWindowSize(getApplicationContext()); int inputViewHeight = 0; if (inputView != null) From 0be1937756b047147db844a04340bb6958dba5a8 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 16 May 2024 16:00:57 +0700 Subject: [PATCH 10/10] Apply suggestions from code review Co-authored-by: Marc Durdin --- .../java/com/keyman/engine/KMManager.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) 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 c0728e81b3..741e3f9701 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 @@ -2078,17 +2078,17 @@ public final class KMManager { */ public static Point getWindowSize(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - WindowMetrics windowMetrics = wm.getCurrentWindowMetrics(); - return new Point( - windowMetrics.getBounds().width(), - windowMetrics.getBounds().height()); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + // Deprecated in API 30 + Point size = new Point(0, 0); + wm.getDefaultDisplay().getSize(size); + return size; } - - // Deprecated in API 30 - Point size = new Point(0, 0); - wm.getDefaultDisplay().getSize(size); - return size; + + WindowMetrics windowMetrics = wm.getCurrentWindowMetrics(); + return new Point( + windowMetrics.getBounds().width(), + windowMetrics.getBounds().height()); } public static float getWindowDensity(Context context) {