aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-06-23 10:42:15 +0200
committerBananeweizen <bananeweizen@gmx.de>2013-06-23 10:42:15 +0200
commite733eb45200b16ed4b59b87c113a3044c52316ca (patch)
tree18a8eb060cb12b0b18eacf9cfd102ca63655f9d9 /main/src/cgeo
parentd2e4b2723f08afaff855d690be1fc79eb4630371 (diff)
downloadcgeo-e733eb45200b16ed4b59b87c113a3044c52316ca.zip
cgeo-e733eb45200b16ed4b59b87c113a3044c52316ca.tar.gz
cgeo-e733eb45200b16ed4b59b87c113a3044c52316ca.tar.bz2
fix #2907: opening TB from cache inventory broken
Diffstat (limited to 'main/src/cgeo')
-rw-r--r--main/src/cgeo/geocaching/TrackableActivity.java25
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java2
-rw-r--r--main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java16
3 files changed, 33 insertions, 10 deletions
diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java
index 9963d45..d1f323c 100644
--- a/main/src/cgeo/geocaching/TrackableActivity.java
+++ b/main/src/cgeo/geocaching/TrackableActivity.java
@@ -7,6 +7,7 @@ import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.activity.AbstractViewPagerActivity;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.trackable.TrackableConnector;
+import cgeo.geocaching.connector.trackable.TravelBugConnector;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.network.HtmlImage;
@@ -231,19 +232,25 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi
@Override
public void run() {
- trackable = cgData.loadTrackable(geocode);
-
- if (trackable == null || trackable.isLoggable()) {
- // iterate over the connectors as some codes may be handled by multiple connectors
- for (final TrackableConnector trackableConnector : ConnectorFactory.getTrackableConnectors()) {
- if (trackableConnector.canHandleTrackable(geocode)) {
- trackable = trackableConnector.searchTrackable(geocode, guid, id);
- if (trackable != null) {
- break;
+ if (StringUtils.isNotEmpty(geocode)) {
+ trackable = cgData.loadTrackable(geocode);
+
+ if (trackable == null || trackable.isLoggable()) {
+ // iterate over the connectors as some codes may be handled by multiple connectors
+ for (final TrackableConnector trackableConnector : ConnectorFactory.getTrackableConnectors()) {
+ if (trackableConnector.canHandleTrackable(geocode)) {
+ trackable = trackableConnector.searchTrackable(geocode, guid, id);
+ if (trackable != null) {
+ break;
+ }
}
}
}
}
+ // fall back to GC search by GUID
+ if (trackable == null) {
+ trackable = TravelBugConnector.getInstance().searchTrackable(geocode, guid, id);
+ }
handler.sendMessage(Message.obtain());
}
}
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
index 2cf2588..a2b0192 100644
--- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java
+++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
@@ -47,7 +47,7 @@ public final class ConnectorFactory {
public static final UnknownTrackableConnector UNKNOWN_TRACKABLE_CONNECTOR = new UnknownTrackableConnector();
private static final TrackableConnector[] TRACKABLE_CONNECTORS = new TrackableConnector[] {
new GeokretyConnector(), // GK must be first, as it overlaps with the secret codes of travel bugs
- new TravelBugConnector(),
+ TravelBugConnector.getInstance(),
UNKNOWN_TRACKABLE_CONNECTOR // must be last
};
diff --git a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java
index 9cae016..0dac6cc 100644
--- a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java
+++ b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java
@@ -31,4 +31,20 @@ public class TravelBugConnector extends AbstractTrackableConnector {
public Trackable searchTrackable(String geocode, String guid, String id) {
return GCParser.searchTrackable(geocode, guid, id);
}
+
+ /**
+ * initialization on demand holder pattern
+ */
+ private static class Holder {
+ private static final TravelBugConnector INSTANCE = new TravelBugConnector();
+ }
+
+ private TravelBugConnector() {
+ // singleton
+ }
+
+ public static TravelBugConnector getInstance() {
+ return Holder.INSTANCE;
+ }
+
} \ No newline at end of file