From a0825983139c99a9799503cafdf0dd0e3ce54a2f Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Thu, 24 Apr 2014 20:08:52 +0200 Subject: Implement Android Beam (NFC Sharing) for cgeo To support direct opening of CGEO on the other device, introduce a distinction between getBrowserURL and getCgeoURL in providers. --- main/src/cgeo/calendar/CalendarAddon.java | 2 +- main/src/cgeo/geocaching/CacheDetailActivity.java | 13 +++++++- main/src/cgeo/geocaching/Geocache.java | 10 +++--- main/src/cgeo/geocaching/Trackable.java | 8 +++-- main/src/cgeo/geocaching/TrackableActivity.java | 14 +++++++-- .../cgeo/geocaching/activity/AbstractActivity.java | 36 ++++++++++++++++++++++ .../geocaching/connector/AbstractConnector.java | 7 ++++- .../connector/GeocachingAustraliaConnector.java | 2 +- .../geocaching/connector/GeopeitusConnector.java | 2 +- main/src/cgeo/geocaching/connector/IConnector.java | 10 +++++- .../geocaching/connector/UnknownConnector.java | 2 +- .../geocaching/connector/WaymarkingConnector.java | 2 +- .../cgeo/geocaching/connector/ec/ECConnector.java | 4 +-- .../cgeo/geocaching/connector/gc/GCConnector.java | 7 ++++- .../geocaching/connector/oc/OCApiConnector.java | 2 +- .../cgeo/geocaching/connector/oc/OCConnector.java | 2 +- .../cgeo/geocaching/connector/ox/OXConnector.java | 4 +-- .../trackable/AbstractTrackableConnector.java | 6 ++++ .../connector/trackable/GeokretyConnector.java | 4 +-- .../connector/trackable/TrackableConnector.java | 4 ++- .../connector/trackable/TravelBugConnector.java | 7 ++++- .../trackable/UnknownTrackableConnector.java | 2 +- main/src/cgeo/geocaching/export/GpxSerializer.java | 2 +- .../cgeo/geocaching/utils/LogTemplateProvider.java | 4 +-- 24 files changed, 125 insertions(+), 31 deletions(-) (limited to 'main/src') diff --git a/main/src/cgeo/calendar/CalendarAddon.java b/main/src/cgeo/calendar/CalendarAddon.java index 4a672fa..5d6371d 100644 --- a/main/src/cgeo/calendar/CalendarAddon.java +++ b/main/src/cgeo/calendar/CalendarAddon.java @@ -35,7 +35,7 @@ public class CalendarAddon { ICalendar.PARAM_NAME, cache.getName(), ICalendar.PARAM_NOTE, StringUtils.defaultString(cache.getPersonalNote()), ICalendar.PARAM_HIDDEN_DATE, hiddenDate != null ? String.valueOf(hiddenDate.getTime()) : StringUtils.EMPTY, - ICalendar.PARAM_URL, StringUtils.defaultString(cache.getUrl()), + ICalendar.PARAM_URL, StringUtils.defaultString(cache.getBrowserUrl()), 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()), diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index e42e780..42e06a2 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -606,6 +606,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity" + connector.getName() + "")); + final Spanned tableNote = Html.fromHtml(res.getString(R.string.cache_description_table_note, "" + connector.getName() + "")); ((Editable) description).append("\n\n").append(tableNote); ((Editable) description).setSpan(new StyleSpan(Typeface.ITALIC), startPos, description.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index db36740..21de4ac 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -501,7 +501,7 @@ public class Geocache implements ICache, IWaypoint { } private String getCacheUrl() { - return getConnector().getCacheUrl(this); + return getConnector().getCacheBrowserUrl(this); } private String getBrowserCacheUrl() { @@ -722,15 +722,17 @@ public class Geocache implements ICache, IWaypoint { final Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, subject.toString()); - intent.putExtra(Intent.EXTRA_TEXT, getUrl()); + intent.putExtra(Intent.EXTRA_TEXT, getBrowserUrl()); return intent; } - public String getUrl() { - return getConnector().getCacheUrl(this); + public String getBrowserUrl() { + return getConnector().getCacheBrowserUrl(this); } + public String getCgeoUrl() { return getConnector().getCgeoCacheUrl(this); } + public boolean supportsGCVote() { return StringUtils.startsWithIgnoreCase(geocode, "GC"); } diff --git a/main/src/cgeo/geocaching/Trackable.java b/main/src/cgeo/geocaching/Trackable.java index d532cda..0fe580f 100644 --- a/main/src/cgeo/geocaching/Trackable.java +++ b/main/src/cgeo/geocaching/Trackable.java @@ -38,8 +38,12 @@ public class Trackable implements ILogable { private List logs = new ArrayList(); private String trackingcode = null; - public String getUrl() { - return getConnector().getUrl(this); + public String getBrowserUrl() { + return getConnector().getBrowserUrl(this); + } + + public String getCgeoUrl() { + return getConnector().getCgeoUrl(this); } private TrackableConnector getConnector() { diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index 7dfc3c1..9907060 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -111,6 +111,16 @@ public class TrackableActivity extends AbstractViewPagerActivity Build.VERSION_CODES.ICE_CREAM_SANDWICH) + initializeICSAndroidBeam(sharingInterface); + } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + protected void initializeICSAndroidBeam(final ActivitySharingInterface sharingInterface) { + NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); + if (nfcAdapter == null) { + return; + } + nfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() { + @Override + public NdefMessage createNdefMessage(NfcEvent event) { + NdefRecord record = NdefRecord.createUri(sharingInterface.getUri()); + return new NdefMessage(new NdefRecord[]{record}); + } + }, this); + + } } diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index 6d8d79e..0d28b7f 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -142,7 +142,12 @@ public abstract class AbstractConnector implements IConnector { @Override public String getLongCacheUrl(final @NonNull Geocache cache) { - return getCacheUrl(cache); + return getCacheBrowserUrl(cache); + } + + @Override + public String getCgeoCacheUrl(@NonNull Geocache cache) { + return getLongCacheUrl(cache); } @Override diff --git a/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java b/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java index 3992013..1aaaf53 100644 --- a/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java +++ b/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java @@ -14,7 +14,7 @@ public class GeocachingAustraliaConnector extends AbstractConnector { } @Override - public String getCacheUrl(final @NonNull Geocache cache) { + public String getCacheBrowserUrl(final @NonNull Geocache cache) { return getCacheUrlPrefix() + cache.getGeocode(); } diff --git a/main/src/cgeo/geocaching/connector/GeopeitusConnector.java b/main/src/cgeo/geocaching/connector/GeopeitusConnector.java index aa08485..aa7ca1e 100644 --- a/main/src/cgeo/geocaching/connector/GeopeitusConnector.java +++ b/main/src/cgeo/geocaching/connector/GeopeitusConnector.java @@ -14,7 +14,7 @@ public class GeopeitusConnector extends AbstractConnector { } @Override - public String getCacheUrl(final @NonNull Geocache cache) { + public String getCacheBrowserUrl(final @NonNull Geocache cache) { return getCacheUrlPrefix() + StringUtils.stripStart(cache.getGeocode().substring(2), "0"); } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index fbade5a..d103011 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -34,7 +34,15 @@ public interface IConnector { * @param cache * @return */ - public String getCacheUrl(final @NonNull Geocache cache); + public String getCacheBrowserUrl(final @NonNull Geocache cache); + + /** + * Get the URL that will default to CGEO opening the cache + * + * @param cache + * @return + */ + public String getCgeoCacheUrl(final @NonNull Geocache cache); /** * get long browser URL for the given cache diff --git a/main/src/cgeo/geocaching/connector/UnknownConnector.java b/main/src/cgeo/geocaching/connector/UnknownConnector.java index 05593d7..d254af1 100644 --- a/main/src/cgeo/geocaching/connector/UnknownConnector.java +++ b/main/src/cgeo/geocaching/connector/UnknownConnector.java @@ -14,7 +14,7 @@ public class UnknownConnector extends AbstractConnector { } @Override - public String getCacheUrl(@NonNull Geocache cache) { + public String getCacheBrowserUrl(@NonNull Geocache cache) { return null; // we have no url for these caches } diff --git a/main/src/cgeo/geocaching/connector/WaymarkingConnector.java b/main/src/cgeo/geocaching/connector/WaymarkingConnector.java index 282ee31..d1e4e41 100644 --- a/main/src/cgeo/geocaching/connector/WaymarkingConnector.java +++ b/main/src/cgeo/geocaching/connector/WaymarkingConnector.java @@ -14,7 +14,7 @@ public class WaymarkingConnector extends AbstractConnector { } @Override - public String getCacheUrl(@NonNull Geocache cache) { + public String getCacheBrowserUrl(@NonNull Geocache cache) { return getCacheUrlPrefix() + cache.getGeocode(); } diff --git a/main/src/cgeo/geocaching/connector/ec/ECConnector.java b/main/src/cgeo/geocaching/connector/ec/ECConnector.java index 71716fe..ebc1a92 100644 --- a/main/src/cgeo/geocaching/connector/ec/ECConnector.java +++ b/main/src/cgeo/geocaching/connector/ec/ECConnector.java @@ -68,7 +68,7 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode, } @Override - public String getCacheUrl(@NonNull Geocache cache) { + public String getCacheBrowserUrl(@NonNull Geocache cache) { return CACHE_URL + cache.getGeocode().replace("EC", ""); } @@ -178,7 +178,7 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode, @Override public String getLicenseText(final @NonNull Geocache cache) { // NOT TO BE TRANSLATED - return "© " + cache.getOwnerDisplayName() + ", " + getName() + ", CC BY-NC-ND 3.0, alle Logeinträge © jeweiliger Autor"; + return "© " + cache.getOwnerDisplayName() + ", " + getName() + ", CC BY-NC-ND 3.0, alle Logeinträge © jeweiliger Autor"; } @Override diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index a38bad0..723d873 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -84,12 +84,17 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, } @Override + public String getCgeoCacheUrl(@NonNull Geocache cache) { + return getLongCacheUrl(cache).replace("//", "/"); + } + + @Override public String getLongCacheUrl(@NonNull Geocache cache) { return CACHE_URL_LONG + cache.getGeocode(); } @Override - public String getCacheUrl(@NonNull Geocache cache) { + public String getCacheBrowserUrl(@NonNull Geocache cache) { return CACHE_URL_SHORT + cache.getGeocode(); } diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java index 284234e..4357e79 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java @@ -45,7 +45,7 @@ public class OCApiConnector extends OCConnector implements ISearchByGeocode { @Override public String getLicenseText(final @NonNull Geocache cache) { // NOT TO BE TRANSLATED - return "© " + cache.getOwnerDisplayName() + ", " + getName() + ", " + licenseString; + return "© " + cache.getOwnerDisplayName() + ", " + getName() + ", " + licenseString; } @Override diff --git a/main/src/cgeo/geocaching/connector/oc/OCConnector.java b/main/src/cgeo/geocaching/connector/oc/OCConnector.java index 1ba88d5..0131c73 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCConnector.java @@ -39,7 +39,7 @@ public class OCConnector extends AbstractConnector { } @Override - public String getCacheUrl(@NonNull Geocache cache) { + public String getCacheBrowserUrl(@NonNull Geocache cache) { return getCacheUrlPrefix() + cache.getGeocode(); } diff --git a/main/src/cgeo/geocaching/connector/ox/OXConnector.java b/main/src/cgeo/geocaching/connector/ox/OXConnector.java index 7d4cf7f..b95a5b8 100644 --- a/main/src/cgeo/geocaching/connector/ox/OXConnector.java +++ b/main/src/cgeo/geocaching/connector/ox/OXConnector.java @@ -35,7 +35,7 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I } @Override - public String getCacheUrl(@NonNull Geocache cache) { + public String getCacheBrowserUrl(@NonNull Geocache cache) { return getCacheUrlPrefix() + cache.getGeocode(); } @@ -52,7 +52,7 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I @Override public String getLicenseText(@NonNull Geocache cache) { // NOT TO BE TRANSLATED - return "" + getName() + " data licensed under the Creative Commons CC-BY-SA 3.0 License"; + return "" + getName() + " data licensed under the Creative Commons CC-BY-SA 3.0 License"; } @Override diff --git a/main/src/cgeo/geocaching/connector/trackable/AbstractTrackableConnector.java b/main/src/cgeo/geocaching/connector/trackable/AbstractTrackableConnector.java index fb554b9..15e32fb 100644 --- a/main/src/cgeo/geocaching/connector/trackable/AbstractTrackableConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/AbstractTrackableConnector.java @@ -1,5 +1,6 @@ package cgeo.geocaching.connector.trackable; +import cgeo.geocaching.Trackable; import cgeo.geocaching.connector.AbstractConnector; import cgeo.geocaching.connector.UserAction; @@ -22,6 +23,11 @@ public abstract class AbstractTrackableConnector implements TrackableConnector { } @Override + public String getCgeoUrl(Trackable trackable) { + return getBrowserUrl(trackable); + } + + @Override public @NonNull List getUserActions() { return AbstractConnector.getDefaultUserActions(); diff --git a/main/src/cgeo/geocaching/connector/trackable/GeokretyConnector.java b/main/src/cgeo/geocaching/connector/trackable/GeokretyConnector.java index 03052f9..709ec70 100644 --- a/main/src/cgeo/geocaching/connector/trackable/GeokretyConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/GeokretyConnector.java @@ -20,7 +20,7 @@ public class GeokretyConnector extends AbstractTrackableConnector { } @Override - public String getUrl(Trackable trackable) { + public String getBrowserUrl(Trackable trackable) { return "http://geokrety.org/konkret.php?id=" + getId(trackable.getGeocode()); } @@ -38,7 +38,7 @@ public class GeokretyConnector extends AbstractTrackableConnector { final String hex = geocode.substring(2); return Integer.parseInt(hex, 16); } catch (final NumberFormatException e) { - Log.e("Trackable.getUrl", e); + Log.e("Trackable.getBrowserUrl", e); } return -1; } diff --git a/main/src/cgeo/geocaching/connector/trackable/TrackableConnector.java b/main/src/cgeo/geocaching/connector/trackable/TrackableConnector.java index 6071b5f..f91c4ba 100644 --- a/main/src/cgeo/geocaching/connector/trackable/TrackableConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/TrackableConnector.java @@ -16,7 +16,9 @@ public interface TrackableConnector { public boolean canHandleTrackable(final String geocode); - public String getUrl(final Trackable trackable); + public String getBrowserUrl(final Trackable trackable); + + public String getCgeoUrl(final Trackable trackable); public boolean isLoggable(); diff --git a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java index 77848d7..3b4077e 100644 --- a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java @@ -25,7 +25,12 @@ public class TravelBugConnector extends AbstractTrackableConnector { } @Override - public String getUrl(Trackable trackable) { + public String getCgeoUrl(Trackable trackable) { + return getBrowserUrl(trackable).replace("//", "/"); + } + + @Override + public String getBrowserUrl(Trackable trackable) { return "http://www.geocaching.com//track/details.aspx?tracker=" + trackable.getGeocode(); } diff --git a/main/src/cgeo/geocaching/connector/trackable/UnknownTrackableConnector.java b/main/src/cgeo/geocaching/connector/trackable/UnknownTrackableConnector.java index 0295927..ea1d0ae 100644 --- a/main/src/cgeo/geocaching/connector/trackable/UnknownTrackableConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/UnknownTrackableConnector.java @@ -12,7 +12,7 @@ public class UnknownTrackableConnector extends AbstractTrackableConnector { } @Override - public String getUrl(Trackable trackable) { + public String getBrowserUrl(Trackable trackable) { return StringUtils.EMPTY; } diff --git a/main/src/cgeo/geocaching/export/GpxSerializer.java b/main/src/cgeo/geocaching/export/GpxSerializer.java index b2587aa..8e71c08 100644 --- a/main/src/cgeo/geocaching/export/GpxSerializer.java +++ b/main/src/cgeo/geocaching/export/GpxSerializer.java @@ -111,7 +111,7 @@ public final class GpxSerializer { XmlUtils.multipleTexts(gpx, PREFIX_GPX, "name", cache.getGeocode(), "desc", cache.getName(), - "url", cache.getUrl(), + "url", cache.getCgeoUrl(), "urlname", cache.getName(), "sym", cache.isFound() ? "Geocache Found" : "Geocache", "type", "Geocache|" + cache.getType().pattern); diff --git a/main/src/cgeo/geocaching/utils/LogTemplateProvider.java b/main/src/cgeo/geocaching/utils/LogTemplateProvider.java index 5fa0982..04433c3 100644 --- a/main/src/cgeo/geocaching/utils/LogTemplateProvider.java +++ b/main/src/cgeo/geocaching/utils/LogTemplateProvider.java @@ -202,11 +202,11 @@ public final class LogTemplateProvider { public String getValue(LogContext context) { Trackable trackable = context.getTrackable(); if (trackable != null) { - return trackable.getUrl(); + return trackable.getBrowserUrl(); } Geocache cache = context.getCache(); if (cache != null) { - return cache.getUrl(); + return cache.getBrowserUrl(); } return StringUtils.EMPTY; } -- cgit v1.1