diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-10-19 19:01:32 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-10-19 19:01:32 +0200 |
| commit | f8464a5954ded9e985cd137eeb2e32322943a633 (patch) | |
| tree | 51a8ca8eba27757bf2f15ea49e34383e9906c432 | |
| parent | 737788256d41e51a707e4155e3f0b9bc49be4dd0 (diff) | |
| download | cgeo-f8464a5954ded9e985cd137eeb2e32322943a633.zip cgeo-f8464a5954ded9e985cd137eeb2e32322943a633.tar.gz cgeo-f8464a5954ded9e985cd137eeb2e32322943a633.tar.bz2 | |
fix #3371: Log-offline-menu doesn't respect cache source
| -rw-r--r-- | main/src/cgeo/geocaching/Geocache.java | 34 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/AbstractConnector.java | 42 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/IConnector.java | 12 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/OCConnector.java | 14 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java | 23 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/GeocacheTest.java | 15 |
6 files changed, 92 insertions, 48 deletions
diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index 09a3734..35d6c17 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -491,39 +491,7 @@ public class Geocache implements ICache, IWaypoint { } public List<LogType> getPossibleLogTypes() { - final List<LogType> logTypes = new ArrayList<LogType>(); - if (isEventCache()) { - logTypes.add(LogType.WILL_ATTEND); - logTypes.add(LogType.ATTENDED); - if (isOwner()) { - logTypes.add(LogType.ANNOUNCEMENT); - } - } else if (CacheType.WEBCAM == cacheType.getValue()) { - logTypes.add(LogType.WEBCAM_PHOTO_TAKEN); - } else { - logTypes.add(LogType.FOUND_IT); - } - if (!isEventCache()) { - logTypes.add(LogType.DIDNT_FIND_IT); - } - logTypes.add(LogType.NOTE); - if (!isEventCache()) { - logTypes.add(LogType.NEEDS_MAINTENANCE); - } - if (isOwner()) { - logTypes.add(LogType.OWNER_MAINTENANCE); - if (isDisabled()) { - logTypes.add(LogType.ENABLE_LISTING); - } - else { - logTypes.add(LogType.TEMP_DISABLE_LISTING); - } - logTypes.add(LogType.ARCHIVE); - } - if (!isArchived() && !isOwner()) { - logTypes.add(LogType.NEEDS_ARCHIVE); - } - return logTypes; + return getConnector().getPossibleLogTypes(this); } public void openInBrowser(Activity fromActivity) { diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index b93cda0..3ec0580 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -3,10 +3,15 @@ package cgeo.geocaching.connector; import cgeo.geocaching.Geocache; import cgeo.geocaching.LogCacheActivity; import cgeo.geocaching.R; +import cgeo.geocaching.enumerations.CacheType; +import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.Geopoint; import org.apache.commons.lang3.StringUtils; +import java.util.ArrayList; +import java.util.List; + public abstract class AbstractConnector implements IConnector { @Override @@ -146,4 +151,41 @@ public abstract class AbstractConnector implements IConnector { } return R.drawable.marker_other; } + + @Override + public List<LogType> getPossibleLogTypes(Geocache geocache) { + final List<LogType> logTypes = new ArrayList<LogType>(); + if (geocache.isEventCache()) { + logTypes.add(LogType.WILL_ATTEND); + logTypes.add(LogType.ATTENDED); + if (geocache.isOwner()) { + logTypes.add(LogType.ANNOUNCEMENT); + } + } else if (CacheType.WEBCAM == geocache.getType()) { + logTypes.add(LogType.WEBCAM_PHOTO_TAKEN); + } else { + logTypes.add(LogType.FOUND_IT); + } + if (!geocache.isEventCache()) { + logTypes.add(LogType.DIDNT_FIND_IT); + } + logTypes.add(LogType.NOTE); + if (!geocache.isEventCache()) { + logTypes.add(LogType.NEEDS_MAINTENANCE); + } + if (geocache.isOwner()) { + logTypes.add(LogType.OWNER_MAINTENANCE); + if (geocache.isDisabled()) { + logTypes.add(LogType.ENABLE_LISTING); + } + else { + logTypes.add(LogType.TEMP_DISABLE_LISTING); + } + logTypes.add(LogType.ARCHIVE); + } + if (!geocache.isArchived() && !geocache.isOwner()) { + logTypes.add(LogType.NEEDS_ARCHIVE); + } + return logTypes; + } } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index 4ab7bde..2262e47 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -3,8 +3,11 @@ package cgeo.geocaching.connector; import cgeo.geocaching.Geocache; import cgeo.geocaching.ICache; import cgeo.geocaching.LogCacheActivity; +import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.Geopoint; +import java.util.List; + public interface IConnector { /** * get name for display (currently only used in links) @@ -208,4 +211,13 @@ public interface IConnector { * Whether to return the enabled or disabled marker type */ public int getCacheMapMarkerId(boolean disabled); + + /** + * Get the list of <b>potentially</b> possible log types for a cache. Those may still be filter further during the + * actual logging activity. + * + * @param geocache + * @return + */ + public List<LogType> getPossibleLogTypes(Geocache geocache); } diff --git a/main/src/cgeo/geocaching/connector/oc/OCConnector.java b/main/src/cgeo/geocaching/connector/oc/OCConnector.java index 29cdd10..b5c62ea 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCConnector.java @@ -4,7 +4,10 @@ import cgeo.geocaching.Geocache; import cgeo.geocaching.ICache; import cgeo.geocaching.R; import cgeo.geocaching.connector.AbstractConnector; +import cgeo.geocaching.enumerations.LogType; +import java.util.Arrays; +import java.util.List; import java.util.regex.Pattern; public class OCConnector extends AbstractConnector { @@ -14,6 +17,9 @@ public class OCConnector extends AbstractConnector { private final Pattern codePattern; private static final Pattern GPX_ZIP_FILE_PATTERN = Pattern.compile("oc[a-z]{2,3}\\d{5,}\\.zip", Pattern.CASE_INSENSITIVE); + private static final List<LogType> STANDARD_LOG_TYPES = Arrays.asList(LogType.FOUND_IT, LogType.DIDNT_FIND_IT, LogType.NOTE); + private static final List<LogType> EVENT_LOG_TYPES = Arrays.asList(LogType.WILL_ATTEND, LogType.ATTENDED, LogType.NOTE); + public OCConnector(final String name, final String host, final String prefix) { this.name = name; this.host = host; @@ -66,4 +72,12 @@ public class OCConnector extends AbstractConnector { return R.drawable.marker_oc; } + @Override + public final List<LogType> getPossibleLogTypes(Geocache cache) { + if (cache.isEventCache()) { + return EVENT_LOG_TYPES; + } + + return STANDARD_LOG_TYPES; + } } diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java index 9ffe7a2..c6be3cb 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java @@ -11,7 +11,6 @@ import cgeo.geocaching.enumerations.StatusCode; import android.net.Uri; -import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.List; @@ -22,48 +21,42 @@ public class OkapiLoggingManager implements ILoggingManager { private final Geocache cache; private LogCacheActivity activity; - private final static List<LogType> standardLogTypes = Arrays.asList(LogType.FOUND_IT, LogType.DIDNT_FIND_IT, LogType.NOTE); - private final static List<LogType> eventLogTypes = Arrays.asList(LogType.WILL_ATTEND, LogType.ATTENDED, LogType.NOTE); - - public OkapiLoggingManager(final LogCacheActivity activity, OCApiLiveConnector connector, Geocache cache) { + public OkapiLoggingManager(final LogCacheActivity activity, final OCApiLiveConnector connector, final Geocache cache) { this.connector = connector; this.cache = cache; this.activity = activity; } @Override - public void init() { + public final void init() { activity.onLoadFinished(); } @Override - public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, String logPassword, List<TrackableLog> trackableLogs) { + public final LogResult postLog(final Geocache cache, final LogType logType, final Calendar date, final String log, final String logPassword, final List<TrackableLog> trackableLogs) { final LogResult result = OkapiClient.postLog(cache, logType, date, log, logPassword, connector); connector.login(null, null); return result; } @Override - public ImageResult postLogImage(String logId, String imageCaption, String imageDescription, Uri imageUri) { + public final ImageResult postLogImage(final String logId, final String imageCaption, final String imageDescription, final Uri imageUri) { return new ImageResult(StatusCode.LOG_POST_ERROR, ""); } @Override - public boolean hasLoaderError() { + public final boolean hasLoaderError() { return false; } @Override - public List<TrackableLog> getTrackables() { + public final List<TrackableLog> getTrackables() { return Collections.emptyList(); } @Override public List<LogType> getPossibleLogTypes() { - if (cache.isEventCache()) { - return eventLogTypes; - } - - return standardLogTypes; + return connector.getPossibleLogTypes(cache); } + } diff --git a/tests/src/cgeo/geocaching/GeocacheTest.java b/tests/src/cgeo/geocaching/GeocacheTest.java index 6d3eec3..f7e4e84 100644 --- a/tests/src/cgeo/geocaching/GeocacheTest.java +++ b/tests/src/cgeo/geocaching/GeocacheTest.java @@ -2,6 +2,7 @@ package cgeo.geocaching; import cgeo.CGeoTestCase; import cgeo.geocaching.enumerations.CacheType; +import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.list.StoredList; @@ -252,4 +253,18 @@ public class GeocacheTest extends CGeoTestCase { cache.setType(CacheType.EVENT); assertNull(cache.guessEventTimeMinutes()); } + + public static void testGetPossibleLogTypes() throws Exception { + Geocache gcCache = new Geocache(); + gcCache.setGeocode("GC123"); + gcCache.setType(CacheType.WEBCAM); + assertTrue(gcCache.getPossibleLogTypes().contains(LogType.WEBCAM_PHOTO_TAKEN)); + assertTrue("GC caches can have maintenance logs", gcCache.getPossibleLogTypes().contains(LogType.NEEDS_MAINTENANCE)); + + Geocache ocCache = new Geocache(); + ocCache.setGeocode("OC1234"); + ocCache.setType(CacheType.TRADITIONAL); + assertFalse("A traditional cache cannot have a webcam log", ocCache.getPossibleLogTypes().contains(LogType.WEBCAM_PHOTO_TAKEN)); + assertFalse("OC caches have no maintenance log type", ocCache.getPossibleLogTypes().contains(LogType.NEEDS_MAINTENANCE)); + } } |
