From 30912b75cc2f8770979c0e464a7a1e894e17a3d4 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 27 Nov 2019 16:04:17 +0700 Subject: [PATCH] fix(android): Cherrypick #2378 to master This PR cherrypicks #2378 to master This fixes a few issues involving the Cloud Repository 1. Add some null checking to prevent crashes 2. This addresses an issue where a custom .kmp package is installed (which currently associates the first language listed in kmp.json). Trying to install additional languages listed in the kmp.json failed because the package ID info wasn't being propagated. --- .../com/tavultesoft/kmea/cloud/CloudDataJsonUtil.java | 10 ++++++---- .../java/com/tavultesoft/kmea/packages/JSONUtils.java | 3 +++ android/history.md | 2 ++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/cloud/CloudDataJsonUtil.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/cloud/CloudDataJsonUtil.java index f292a2e270..e5e5c371a9 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/cloud/CloudDataJsonUtil.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/cloud/CloudDataJsonUtil.java @@ -40,8 +40,7 @@ public class CloudDataJsonUtil { String aFont, String aOskFont) { HashMap keyboardInfo = new HashMap(); - if(aPackageId!=null) - keyboardInfo.put(KMManager.KMKey_PackageID, aPackageId); + keyboardInfo.put(KMManager.KMKey_PackageID, aPackageId); keyboardInfo.put(KMManager.KMKey_KeyboardID, aKeyboardId); keyboardInfo.put(KMManager.KMKey_LanguageID, aLanguageId); keyboardInfo.put(KMManager.KMKey_KeyboardName, aKeyboardName); @@ -57,7 +56,9 @@ public class CloudDataJsonUtil { public static List processKeyboardJSON(JSONObject query, boolean fromKMP) { List keyboardsList = new ArrayList<>(); - //keyboardModifiedDates = new HashMap(); + if (query.length() == 0) { + return keyboardsList; + } String isCustom = fromKMP ? "Y" : "N"; @@ -75,13 +76,14 @@ public class CloudDataJsonUtil { int kbLength = langKeyboards.length(); for (int j = 0; j < kbLength; j++) { JSONObject keyboardJSON = langKeyboards.getJSONObject(j); + String pkgID = keyboardJSON.optString(KMManager.KMKey_PackageID, KMManager.KMDefault_UndefinedPackageID); String kbID = keyboardJSON.getString(KMManager.KMKey_ID); String kbName = keyboardJSON.getString(KMManager.KMKey_Name); String kbVersion = keyboardJSON.optString(KMManager.KMKey_KeyboardVersion, "1.0"); String kbFont = keyboardJSON.optString(KMManager.KMKey_Font, ""); //String kbKey = String.format("%s_%s", langID, kbID); - HashMap hashMap = createKeyboardInfoMap(null,langID,langName,kbID,kbName,kbVersion,isCustom,kbFont,null); + HashMap hashMap = createKeyboardInfoMap(pkgID,langID,langName,kbID,kbName,kbVersion,isCustom,kbFont,null); // if (keyboardModifiedDates.get(kbID) == null) { diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/packages/JSONUtils.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/packages/JSONUtils.java index 1f93ea8282..414f7b36db 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/packages/JSONUtils.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/packages/JSONUtils.java @@ -33,6 +33,9 @@ public class JSONUtils { * Will need to swap kmp.json (keyboards : languages) to cloud order (languages : keyboards) */ public static JSONArray getLanguages() { + if (resourceRoot == null) { + return new JSONArray(); + } File[] packages = resourceRoot.listFiles(); JSONArray languagesArray = new JSONArray(); JSONParser parser = new JSONParser(); diff --git a/android/history.md b/android/history.md index 7ebf660089..995a2ce0ba 100644 --- a/android/history.md +++ b/android/history.md @@ -20,6 +20,8 @@ ## 2019-11-27 12.0.4211 stable * Bug fix: * Fix crashes involving context manipulation of invalid context (#2377) + * Fix Package ID so other languages from a keyboard .kmp package can be installed (#2378) + * Fix crashes when accessing the Cloud for downloading keyboards (#2378) ## 2019-11-26 12.0.4210 stable * No change to Keyman for Android (updated Keyman Web Engine, #2322)