From 078af940c58726e795a6911e07551bab0667bb8c Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 4 Mar 2020 10:25:24 +0700 Subject: [PATCH] change(android): Move isCustom to FileUtils.isCustomKeyboard() --- .../com/tavultesoft/kmapro/MainActivity.java | 2 +- .../kmea/KMKeyboardDownloaderActivity.java | 14 ------------ .../com/tavultesoft/kmea/util/FileUtils.java | 20 +++++++++++++++++ .../tavultesoft/kmea/util/FileUtilsTest.java | 22 +++++++++++++++++++ 4 files changed, 43 insertions(+), 15 deletions(-) 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 eeed50b611..921cb37dd8 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 @@ -552,7 +552,7 @@ public class MainActivity extends AppCompatActivity implements OnKeyboardEventLi } if (url != null) { // URL contains KMP to download in background. - boolean isCustom = KMKeyboardDownloaderActivity.isCustom(url); + boolean isCustom = FileUtils.isCustomKeyboard(url); String filename = data.getQueryParameter("filename"); if (filename == null) { diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardDownloaderActivity.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardDownloaderActivity.java index c427fc3437..692c2fac4a 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardDownloaderActivity.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardDownloaderActivity.java @@ -41,10 +41,8 @@ public class KMKeyboardDownloaderActivity extends AppCompatActivity { public static final String ARG_URL = "KMKeyboardActivity.url"; public static final String ARG_FILENAME = "KMKeyboardActivity.filename"; - public static final String kKeymanBaseURL = "https://keyman.com"; public static final String kKeymanApiBaseURL = "https://api.keyman.com/cloud/4.0/languages"; public static final String kKeymanApiModelURL = "https://api.keyman.com/model"; - public static final String kKeymanApiRemoteURL = "https://r.keymanweb.com/api/2.0/remote?url="; private static final String TAG = "KMKbdDownloaderActivity"; // TAG needs to be less than 28 chars @@ -283,18 +281,6 @@ public class KMKeyboardDownloaderActivity extends AppCompatActivity { ((AppCompatActivity) context).finish(); } - - public static boolean isCustom(String u) { - boolean ret = false; - if (u != null && !u.contains(KMKeyboardDownloaderActivity.kKeymanApiBaseURL) && - !u.contains(KMKeyboardDownloaderActivity.kKeymanApiRemoteURL) && !u.contains(kKeymanBaseURL)) { - ret = true; - } - return ret; - } - - - public static void addKeyboardDownloadEventListener(KeyboardEventHandler.OnKeyboardDownloadEventListener listener) { if (kbDownloadEventListeners == null) { kbDownloadEventListeners = new ArrayList<>(); 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 2df228c913..51ea47092a 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 @@ -13,6 +13,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Limitations: @@ -227,6 +229,24 @@ public final class FileUtils { return filename; } + /** + * Utility to parse a URL and determine if it's a custom keyboard + * @param u String of the URL + * @return boolean false if URL matches [*.]keyman.com/ + */ + public static boolean isCustomKeyboard(String u) { + boolean ret = true; + if (u == null) { + return ret; + } + Pattern pattern = Pattern.compile("^http(s)?://(.+\\.)?keyman.com/.*"); + Matcher matcher = pattern.matcher(u); + if (matcher.matches()) { + ret = false; + } + return ret; + } + /** * Utility to compare two version strings * @param v1 String 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 5dfcca7c61..6ab6e52ba7 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 @@ -31,6 +31,28 @@ public class FileUtilsTest { Assert.assertEquals("Could not download filename ", logs.get(3).msg); } + @Test + public void test_isCustomKeyboard() { + // True because URL is null or empty (doesn't match *.keyman.com) + Assert.assertTrue(FileUtils.isCustomKeyboard(null)); + Assert.assertTrue(FileUtils.isCustomKeyboard("")); + + Assert.assertFalse(FileUtils.isCustomKeyboard("http://keyman.com/")); + Assert.assertFalse(FileUtils.isCustomKeyboard("https://keyman.com/")); + Assert.assertFalse(FileUtils.isCustomKeyboard("http://api.keyman.com/")); + Assert.assertFalse(FileUtils.isCustomKeyboard("https://api.keyman.com/")); + Assert.assertFalse(FileUtils.isCustomKeyboard("https://keyman.com/keyboard/khmer_angkor")); + + // True because trailing slash is missing + Assert.assertTrue(FileUtils.isCustomKeyboard("http://keyman.com")); + Assert.assertTrue(FileUtils.isCustomKeyboard("https://keyman.com")); + Assert.assertTrue(FileUtils.isCustomKeyboard("http://api.keyman.com")); + Assert.assertTrue(FileUtils.isCustomKeyboard("https://api.keyman.com")); + + // "custom" site + Assert.assertTrue(FileUtils.isCustomKeyboard("https://amerikeyman.com/")); + } + @Test public void test_compareVersions() { Assert.assertEquals(FileUtils.VERSION_INVALID, FileUtils.compareVersions(null, "1.0"));