aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/apps/AbstractApp.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/apps/AbstractApp.java')
-rw-r--r--main/src/cgeo/geocaching/apps/AbstractApp.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/apps/AbstractApp.java b/main/src/cgeo/geocaching/apps/AbstractApp.java
new file mode 100644
index 0000000..f917563
--- /dev/null
+++ b/main/src/cgeo/geocaching/apps/AbstractApp.java
@@ -0,0 +1,82 @@
+package cgeo.geocaching.apps;
+
+import cgeo.geocaching.cgSettings;
+import cgeo.geocaching.utils.CollectionUtils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+
+import java.util.List;
+
+public abstract class AbstractApp implements App {
+
+ protected String packageName;
+
+ private String intent;
+ private String name;
+
+ protected AbstractApp(final String name, final String intent,
+ final String packageName) {
+ this.name = name;
+ this.intent = intent;
+ this.packageName = packageName;
+ }
+
+ protected AbstractApp(final String name, final String intent) {
+ this(name, intent, null);
+ }
+
+ protected Intent getLaunchIntent(Context context) {
+ if (packageName == null) {
+ return null;
+ }
+ PackageManager packageManager = context.getPackageManager();
+ try {
+ // This can throw an exception where the exception type is only defined on API Level > 3
+ // therefore surround with try-catch
+ Intent intent = packageManager.getLaunchIntentForPackage(packageName);
+ return intent;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public boolean isInstalled(final Context context) {
+ if (getLaunchIntent(context) != null) {
+ return true;
+ }
+ return isIntentAvailable(context, intent);
+ }
+
+ private static boolean isIntentAvailable(Context context, String action) {
+ final Intent intent = new Intent(action);
+
+ return isIntentAvailable(context, intent);
+ }
+
+ protected static boolean isIntentAvailable(Context context, Intent intent) {
+ final PackageManager packageManager = context.getPackageManager();
+ final List<ResolveInfo> list = packageManager.queryIntentActivities(
+ intent, PackageManager.MATCH_DEFAULT_ONLY);
+
+ return (CollectionUtils.isNotEmpty(list));
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public int getId() {
+ return getName().hashCode();
+ }
+
+ protected static cgSettings getSettings(Activity activity) {
+ return new cgSettings(activity,
+ activity.getSharedPreferences(cgSettings.preferences, Context.MODE_PRIVATE));
+ }
+}