diff options
| author | blafoo <github@blafoo.de> | 2012-02-12 11:10:43 +0100 |
|---|---|---|
| committer | blafoo <github@blafoo.de> | 2012-02-12 11:10:43 +0100 |
| commit | 802b2bdd8f43b32ea6588cca14d281a40aab0914 (patch) | |
| tree | 2f4ca94e6c13d1a8763344ef68b52f9085421354 /main/src/cgeo | |
| parent | 03a7e62bb8186c553de1e06c92fceb18230a8941 (diff) | |
| download | cgeo-802b2bdd8f43b32ea6588cca14d281a40aab0914.zip cgeo-802b2bdd8f43b32ea6588cca14d281a40aab0914.tar.gz cgeo-802b2bdd8f43b32ea6588cca14d281a40aab0914.tar.bz2 | |
Check if calendar add-on is available. Fixes #1017
Diffstat (limited to 'main/src/cgeo')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 33 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgBase.java | 25 |
2 files changed, 44 insertions, 14 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 8cea884..9a7b60c 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -723,20 +723,25 @@ public class CacheDetailActivity extends AbstractActivity { } private void addToCalendarWithIntent() { - // this method is NOT unused :) - final Parameters params = new Parameters( - ICalendar.PARAM_NAME, cache.getName(), - ICalendar.PARAM_NOTE, StringUtils.defaultString(cache.getPersonalNote()), - ICalendar.PARAM_HIDDEN_DATE, String.valueOf(cache.getHiddenDate().getTime()), - ICalendar.PARAM_URL, StringUtils.defaultString(cache.getUrl()), - ICalendar.PARAM_COORDS, cache.getCoords() == null ? "" : cache.getCoords().format(GeopointFormatter.Format.LAT_LON_DECMINUTE_RAW), - ICalendar.PARAM_LOCATION, StringUtils.defaultString(cache.getLocation()), - ICalendar.PARAM_SHORT_DESC, StringUtils.defaultString(cache.getShortDescription()) - ); - - // TODO: Check if addon is installed, if not, tell the user how to get it. - startActivity(new Intent(ICalendar.INTENT, - Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST + "?" + params.toString()))); + + final boolean calendarAddOnAvailable = cgBase.isIntentAvailable(this, ICalendar.INTENT); + + if (calendarAddOnAvailable) { + final Parameters params = new Parameters( + ICalendar.PARAM_NAME, cache.getName(), + ICalendar.PARAM_NOTE, StringUtils.defaultString(cache.getPersonalNote()), + ICalendar.PARAM_HIDDEN_DATE, String.valueOf(cache.getHiddenDate().getTime()), + ICalendar.PARAM_URL, StringUtils.defaultString(cache.getUrl()), + ICalendar.PARAM_COORDS, cache.getCoords() == null ? "" : cache.getCoords().format(GeopointFormatter.Format.LAT_LON_DECMINUTE_RAW), + ICalendar.PARAM_LOCATION, StringUtils.defaultString(cache.getLocation()), + ICalendar.PARAM_SHORT_DESC, StringUtils.defaultString(cache.getShortDescription()) + ); + + startActivity(new Intent(ICalendar.INTENT, + Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST + "?" + params.toString()))); + } else { + showToast(res.getString(R.string.helper_calendar_missing)); + } } /** diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java index 9cb9e22..c833317 100644 --- a/main/src/cgeo/geocaching/cgBase.java +++ b/main/src/cgeo/geocaching/cgBase.java @@ -61,6 +61,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; @@ -3116,5 +3117,29 @@ public class cgBase { cgBase.actualStatus = actualStatus; } + /** + * Indicates whether the specified action can be used as an intent. This + * method queries the package manager for installed packages that can + * respond to an intent with the specified action. If no suitable package is + * found, this method returns false. + * + * From: http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html + * + * @param context + * The application's environment. + * @param action + * The Intent action to check for availability. + * + * @return True if an Intent with the specified action can be sent and + * responded to, false otherwise. + */ + public static boolean isIntentAvailable(Context context, String action) { + final PackageManager packageManager = context.getPackageManager(); + final Intent intent = new Intent(action); + List<ResolveInfo> list = packageManager.queryIntentActivities(intent, + PackageManager.MATCH_DEFAULT_ONLY); + return list.size() > 0; + } + } |
