diff options
Diffstat (limited to 'main/src/cgeo/geocaching/Geocache.java')
| -rw-r--r-- | main/src/cgeo/geocaching/Geocache.java | 90 |
1 files changed, 47 insertions, 43 deletions
diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index 23a65c6..77efd7e 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -102,6 +102,7 @@ public class Geocache implements ICache, IWaypoint { private Boolean found = null; private Boolean favorite = null; private Boolean onWatchlist = null; + private Boolean logOffline = null; private int favoritePoints = 0; private float rating = 0; // valid ratings are larger than zero private int votes = 0; @@ -128,7 +129,6 @@ public class Geocache implements ICache, IWaypoint { }; private List<Trackable> inventory = null; private Map<LogType, Integer> logCounts = new HashMap<LogType, Integer>(); - private boolean logOffline = false; private boolean userModifiedCoords = false; // temporary values private boolean statusChecked = false; @@ -197,46 +197,37 @@ public class Geocache implements ICache, IWaypoint { detailed = other.detailed; detailedUpdate = other.detailedUpdate; coords = other.coords; - cacheType = other.cacheType; + // merge cache type only if really available from other + if (null != other.cacheType && CacheType.UNKNOWN != other.cacheType) { + cacheType = other.cacheType; + } zoomlevel = other.zoomlevel; // boolean values must be enumerated here. Other types are assigned outside this if-statement - // TODO: check whether a search or a live map systematically returns those, in which case - // we want to keep the most recent one instead of getting information from the previously - // stored data. This is the case for "archived" for example which has been taken out of this - // list. - if (other.premiumMembersOnly != null) { - premiumMembersOnly = other.premiumMembersOnly; - } reliableLatLon = other.reliableLatLon; - if (other.found != null) { - found = other.found; - } - if (other.disabled != null) { - disabled = other.disabled; - } - if (other.favorite != null) { - favorite = other.favorite; - } - if (other.archived != null) { - archived = other.archived; - } - if (other.onWatchlist != null) { - onWatchlist = other.onWatchlist; - } - logOffline = other.logOffline; finalDefined = other.finalDefined; } - /* - * No gathering for boolean members if other cache is not-detailed - * and does not have information with higher reliability (denoted by zoomlevel) - * - found - * - own - * - disabled - * - favorite - * - onWatchlist - * - logOffline - */ + if (premiumMembersOnly == null) { + premiumMembersOnly = other.premiumMembersOnly; + } + if (found == null) { + found = other.found; + } + if (disabled == null) { + disabled = other.disabled; + } + if (favorite == null) { + favorite = other.favorite; + } + if (archived == null) { + archived = other.archived; + } + if (onWatchlist == null) { + onWatchlist = other.onWatchlist; + } + if (logOffline == null) { + logOffline = other.logOffline; + } if (visitedDate == 0) { visitedDate = other.visitedDate; } @@ -421,7 +412,7 @@ public class Geocache implements ICache, IWaypoint { logs == other.logs && inventory == other.inventory && logCounts == other.logCounts && - logOffline == other.logOffline && + ObjectUtils.equals(logOffline, other.logOffline) && finalDefined == other.finalDefined; } @@ -496,7 +487,7 @@ public class Geocache implements ICache, IWaypoint { if (status) { ActivityMixin.showToast(fromActivity, res.getString(R.string.info_log_saved)); cgData.saveVisitDate(geocode); - logOffline = true; + logOffline = Boolean.TRUE; notifyChange(); } else { @@ -932,8 +923,25 @@ public class Geocache implements ICache, IWaypoint { return coords; } + /** + * Set reliable coordinates + * + * @param coords + */ public void setCoords(Geopoint coords) { this.coords = coords; + this.zoomlevel = Tile.ZOOMLEVEL_MAX + 1; + } + + /** + * Set unreliable coordinates from a certain map zoom level + * + * @param coords + * @param zoomlevel + */ + public void setCoords(Geopoint coords, int zoomlevel) { + this.coords = coords; + this.zoomlevel = zoomlevel; } /** @@ -1062,11 +1070,11 @@ public class Geocache implements ICache, IWaypoint { } public boolean isLogOffline() { - return logOffline; + return (logOffline != null && logOffline.booleanValue()); } public void setLogOffline(boolean logOffline) { - this.logOffline = logOffline; + this.logOffline = Boolean.valueOf(logOffline); } public boolean isStatusChecked() { @@ -1490,10 +1498,6 @@ public class Geocache implements ICache, IWaypoint { return this.zoomlevel; } - public void setZoomlevel(int zoomlevel) { - this.zoomlevel = zoomlevel; - } - @Override public int getId() { return 0; |
