From 21b85eb04eddfddfca5533ca5b7b274ded4405ce Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Fri, 10 Jul 2020 17:42:15 +0700 Subject: [PATCH] fix(android): Use go/ links for keyboard search --- .../java/com/tavultesoft/kmea/KMManager.java | 16 ++++++++++++++++ .../tavultesoft/kmea/KMPBrowserActivity.java | 10 +++++----- .../com/tavultesoft/kmea/util/FileUtils.java | 19 +++++-------------- .../tavultesoft/kmea/util/FileUtilsTest.java | 19 ++++--------------- 4 files changed, 30 insertions(+), 34 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMManager.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMManager.java index d86829c8bb..904ba16a94 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMManager.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMManager.java @@ -290,6 +290,22 @@ public final class KMManager { return Tier.STABLE; } + /** + * Extract KMEA major version #.# from VERSION_NAME + * @return String + */ + public static String getMajorVersion() { + // Regex needs to match the entire string + String appVersion = com.tavultesoft.kmea.BuildConfig.VERSION_NAME; + Pattern pattern = Pattern.compile("^(\\d+\\.\\d+)\\.\\d+.*"); + Matcher matcher = pattern.matcher(appVersion); + if (matcher.matches() && matcher.groupCount() >= 1) { + appVersion = matcher.group(1); + } + + return appVersion; + } + /** * Extract KMEA version #.#.# from VERSION_NAME * @return String diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMPBrowserActivity.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMPBrowserActivity.java index d6fb5be1b3..f6d4bb6fb0 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMPBrowserActivity.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMPBrowserActivity.java @@ -32,8 +32,8 @@ public class KMPBrowserActivity extends AppCompatActivity { private WebView webView; private static final String KMP_PRODUCTION_HOST = "https://keyman.com"; private static final String KMP_STAGING_HOST = "https://staging-keyman-com.azurewebsites.net"; - private static final String KMP_SEARCH_URL_FORMATSTR = "%s/keyboards%s?embed=android&version=%s"; - private static final String KMP_LANGUAGE_FORMATSTR = "/languages/%s"; + private static final String KMP_DOWNLOAD_KEYBOARDS_FORMATSTR = "%s/go/android/%s/download-keyboards%s"; + private static final String KMP_DOWNLOAD_KEYBOARDS_LANGUAGES = "/languages/%s"; private boolean isLoading = false; private boolean didFinishLoading = false; @@ -108,9 +108,9 @@ public class KMPBrowserActivity extends AppCompatActivity { KMP_PRODUCTION_HOST : KMP_STAGING_HOST; // If language ID is provided, include it in the keyboard search String languageID = getIntent().getStringExtra("languageCode"); - String languageStr = (languageID != null) ? String.format(KMP_LANGUAGE_FORMATSTR, languageID) : ""; - String appVersion = KMManager.getVersion(); - String kmpSearchUrl = String.format(KMP_SEARCH_URL_FORMATSTR, host, languageStr, appVersion); + String languageStr = (languageID != null) ? String.format(KMP_DOWNLOAD_KEYBOARDS_LANGUAGES, languageID) : ""; + String appMajorVersion = KMManager.getMajorVersion(); + String kmpSearchUrl = String.format(KMP_DOWNLOAD_KEYBOARDS_FORMATSTR, host, appMajorVersion, languageStr); webView.loadUrl(kmpSearchUrl); } diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/util/FileUtils.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/util/FileUtils.java index 74f4c48d90..ba8479474a 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/util/FileUtils.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/util/FileUtils.java @@ -266,9 +266,7 @@ public final class FileUtils { } /** - * Utility to parse a URL and determine if it's a valid keyman: - * Currently, only "keyman" scheme with "download" path and query is supported. - * Legacy keyman:// protocol is deprecated and not supported. + * Utility to parse a URL and determine if it's a Keyman hosted keyboard download. * @param u String of the URL * @return boolean true if URL is a supported Keyman link */ @@ -278,20 +276,13 @@ public final class FileUtils { return ret; } String lowerU = u.toLowerCase(); - Pattern pattern = Pattern.compile("^keyman:(\\w+)\\?(.+)"); + Pattern pattern = Pattern.compile("^https://(staging-keyman-com.azurewebsites.net|keyman.com)/keyboard/download\\?(.+)"); Matcher matcher = pattern.matcher(lowerU); // Check URL starts with "keyman" if (matcher.matches() && (matcher.group(1) != null)) { - // For now, only handle "download" - switch (matcher.group(1).toLowerCase()) { - case "download": - if (matcher.group(2) != null) { - // Contains query - ret = true; - } - break; - default: - ret = false; + if (matcher.group(2) != null) { + // Contains query + ret = true; } } return ret; diff --git a/android/KMEA/app/src/test/java/com/tavultesoft/kmea/util/FileUtilsTest.java b/android/KMEA/app/src/test/java/com/tavultesoft/kmea/util/FileUtilsTest.java index 0f4fc3511e..59bcec1b1a 100644 --- a/android/KMEA/app/src/test/java/com/tavultesoft/kmea/util/FileUtilsTest.java +++ b/android/KMEA/app/src/test/java/com/tavultesoft/kmea/util/FileUtilsTest.java @@ -38,23 +38,12 @@ public class FileUtilsTest { Assert.assertFalse(FileUtils.isKeymanLink("")); // Valid Keyman links - Assert.assertTrue(FileUtils.isKeymanLink("keyman:download?keyboard")); - Assert.assertTrue(FileUtils.isKeymanLink("Keyman:Download?keyboard")); - - // keyman:// invalid - Assert.assertFalse(FileUtils.isKeymanLink("keyman://keyboard")); - Assert.assertFalse(FileUtils.isKeymanLink("Keyman://keyboard")); - Assert.assertFalse(FileUtils.isKeymanLink("keyman:download//keyboard")); - Assert.assertFalse(FileUtils.isKeymanLink("keyman://download/keyboard")); + Assert.assertTrue(FileUtils.isKeymanLink("https://staging-keyman-com.azurewebsites.net/keyboard/download?id=malar_malayalam&platform=android&mode=standalone")); + Assert.assertTrue(FileUtils.isKeymanLink("https://keyman.com/keyboard/download?id=malar_malayalam&platform=android&mode=standalone")); // link missing query - Assert.assertFalse(FileUtils.isKeymanLink("keyman:download?")); - - // Other methods not supported - Assert.assertFalse(FileUtils.isKeymanLink("keyman:method//keyboard")); - Assert.assertFalse(FileUtils.isKeymanLink("keyman:method?keyboard")); - - Assert.assertFalse(FileUtils.isKeymanLink("example:keyman?")); + Assert.assertFalse(FileUtils.isKeymanLink("https://staging-keyman-com.azurewebsites.net/keyboard/download")); + Assert.assertFalse(FileUtils.isKeymanLink("https://keyman.com/keyboard/download")); } @Test