diff options
4 files changed, 31 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/apps/AbstractApp.java b/main/src/cgeo/geocaching/apps/AbstractApp.java index f3715f3..4d7abde 100644 --- a/main/src/cgeo/geocaching/apps/AbstractApp.java +++ b/main/src/cgeo/geocaching/apps/AbstractApp.java @@ -28,7 +28,7 @@ public abstract class AbstractApp implements App { @Override public boolean isInstalled() { - if (StringUtils.isNotEmpty(packageName) && ProcessUtils.isInstalled(packageName)) { + if (StringUtils.isNotEmpty(packageName) && ProcessUtils.isLaunchable(packageName)) { return true; } return MainActivity.isIntentAvailable(intent); diff --git a/main/src/cgeo/geocaching/utils/ProcessUtils.java b/main/src/cgeo/geocaching/utils/ProcessUtils.java index 1c05e84..85cedc5 100644 --- a/main/src/cgeo/geocaching/utils/ProcessUtils.java +++ b/main/src/cgeo/geocaching/utils/ProcessUtils.java @@ -14,8 +14,26 @@ public final class ProcessUtils { // utility class } + /** + * Preferred method to detect the availability of an external app + * + * @param packageName + * @return + */ + public static boolean isLaunchable(final String packageName) { + return getLaunchIntent(packageName) != null; + } + + /** + * Checks whether a launch intent is available or if the package is just installed + * This function is relatively costly, so if you know that the package in question has + * a launch intent, use isLaunchable() instead. + * + * @param packageName + * @return + */ public static boolean isInstalled(final String packageName) { - return (getLaunchIntent(packageName) != null) || hasPackageInstalled(packageName); + return isLaunchable(packageName) || hasPackageInstalled(packageName); } /** diff --git a/main/src/cgeo/geocaching/utils/TranslationUtils.java b/main/src/cgeo/geocaching/utils/TranslationUtils.java index 05045ee..1224f7e 100644 --- a/main/src/cgeo/geocaching/utils/TranslationUtils.java +++ b/main/src/cgeo/geocaching/utils/TranslationUtils.java @@ -35,7 +35,7 @@ public final class TranslationUtils { private static String buildTranslationURI(final String toLang, final String text) { String content = Network.encode(text); // the app works better without the "+", the website works better with "+", therefore assume using the app if installed - if (ProcessUtils.isInstalled(TRANSLATION_APP)) { + if (ProcessUtils.isLaunchable(TRANSLATION_APP)) { content = content.replace("+", "%20"); } return translationWebsite + translationForceClassicMode + translationAutoSelect + translationFieldSeparator + toLang + translationFieldSeparator + content; diff --git a/tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java b/tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java index d2d282b..f34faa6 100644 --- a/tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java +++ b/tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java @@ -8,4 +8,14 @@ public class ProcessUtilsTest extends TestCase { assertTrue(ProcessUtils.isInstalled("com.android.launcher")); } + public static void testIsInstalledNotLaunchable() { + final String packageName = "com.android.systemui"; + assertTrue(ProcessUtils.isInstalled(packageName)); + assertFalse(ProcessUtils.isLaunchable(packageName)); + } + + public static void testIsLaunchable() { + assertTrue(ProcessUtils.isInstalled("com.android.settings")); + } + } |
