diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-11-09 16:49:32 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-11-09 16:49:32 +0100 |
| commit | 2a38844294c70ea6382f0752edb57bb073010c95 (patch) | |
| tree | 43a0c271b487175134cf1069291148dc3b83ba5e /main | |
| parent | 4281e11bd1856cf7fd0e6467b009f23c9a78be77 (diff) | |
| download | cgeo-2a38844294c70ea6382f0752edb57bb073010c95.zip cgeo-2a38844294c70ea6382f0752edb57bb073010c95.tar.gz cgeo-2a38844294c70ea6382f0752edb57bb073010c95.tar.bz2 | |
fix #3396: crash on logging event cache
Diffstat (limited to 'main')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CacheListActivity.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CacheMenuHandler.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/DataStore.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/Geocache.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/LogCacheActivity.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/apps/AbstractLocusApp.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/CacheDetailsCreator.java | 18 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/CacheListAdapter.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/Formatter.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/utils/DateUtils.java | 12 |
11 files changed, 52 insertions, 28 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index ba8f470..f92245c 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -107,6 +107,7 @@ import android.widget.TextView.BufferType; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.EnumSet; import java.util.List; import java.util.Locale; @@ -971,8 +972,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } // cache hidden - if (cache.getHiddenDate() != null) { - final long time = cache.getHiddenDate().getTime(); + final Date hiddenDate = cache.getHiddenDate(); + if (hiddenDate != null) { + final long time = hiddenDate.getTime(); if (time > 0) { String dateString = Formatter.formatFullDate(time); if (cache.isEventCache()) { diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java index 59f7297..8226f38 100644 --- a/main/src/cgeo/geocaching/CacheListActivity.java +++ b/main/src/cgeo/geocaching/CacheListActivity.java @@ -78,7 +78,6 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -706,11 +705,8 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA public void deletePastEvents() { final List<Geocache> deletion = new ArrayList<Geocache>(); for (final Geocache cache : adapter.getCheckedOrAllCaches()) { - if (cache.isEventCache()) { - final Date eventDate = cache.getHiddenDate(); - if (DateUtils.daysSince(eventDate.getTime()) > 0) { - deletion.add(cache); - } + if (DateUtils.isPastEvent(cache)) { + deletion.add(cache); } } new DropDetailsTask(false).execute(deletion.toArray(new Geocache[deletion.size()])); diff --git a/main/src/cgeo/geocaching/CacheMenuHandler.java b/main/src/cgeo/geocaching/CacheMenuHandler.java index 9326a73..887f6cf 100644 --- a/main/src/cgeo/geocaching/CacheMenuHandler.java +++ b/main/src/cgeo/geocaching/CacheMenuHandler.java @@ -17,6 +17,8 @@ import android.net.Uri; import android.view.Menu; import android.view.MenuItem; +import java.util.Date; + /** * Shared menu handling for all activities having menu items related to a cache. * @@ -83,10 +85,11 @@ public class CacheMenuHandler extends AbstractUIFactory { final boolean calendarAddOnAvailable = ProcessUtils.isIntentAvailable(ICalendar.INTENT, Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST)); if (calendarAddOnAvailable) { + final Date hiddenDate = cache.getHiddenDate(); 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_HIDDEN_DATE, hiddenDate != null ? String.valueOf(hiddenDate.getTime()) : StringUtils.EMPTY, 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()), diff --git a/main/src/cgeo/geocaching/DataStore.java b/main/src/cgeo/geocaching/DataStore.java index 7c19a83..4677f03 100644 --- a/main/src/cgeo/geocaching/DataStore.java +++ b/main/src/cgeo/geocaching/DataStore.java @@ -1067,10 +1067,11 @@ public class DataStore { values.put("name", cache.getName()); values.put("owner", cache.getOwnerDisplayName()); values.put("owner_real", cache.getOwnerUserId()); - if (cache.getHiddenDate() == null) { + final Date hiddenDate = cache.getHiddenDate(); + if (hiddenDate == null) { values.put("hidden", 0); } else { - values.put("hidden", cache.getHiddenDate().getTime()); + values.put("hidden", hiddenDate.getTime()); } values.put("hint", cache.getHint()); values.put("size", cache.getSize() == null ? "" : cache.getSize().id); diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index 7c3a2d6..8cfedb3 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -37,6 +37,7 @@ import org.apache.commons.collections4.Predicate; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.Nullable; import android.app.Activity; import android.content.Intent; @@ -750,6 +751,7 @@ public class Geocache implements ICache, IWaypoint { } @Override + @Nullable public Date getHiddenDate() { return hidden; } diff --git a/main/src/cgeo/geocaching/LogCacheActivity.java b/main/src/cgeo/geocaching/LogCacheActivity.java index 34f036c..f17a008 100644 --- a/main/src/cgeo/geocaching/LogCacheActivity.java +++ b/main/src/cgeo/geocaching/LogCacheActivity.java @@ -344,7 +344,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia rating = GCVote.NO_RATING; if (cache.isEventCache()) { final Date eventDate = cache.getHiddenDate(); - boolean expired = DateUtils.daysSince(eventDate.getTime()) >= 0; + boolean expired = DateUtils.isPastEvent(cache); if (cache.hasOwnLog(LogType.WILL_ATTEND) || expired) { typeSelected = cache.hasOwnLog(LogType.ATTENDED) ? LogType.NOTE : LogType.ATTENDED; diff --git a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java index 4b524bf..d6c2fe6 100644 --- a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java +++ b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java @@ -20,6 +20,7 @@ import android.app.Activity; import android.location.Location; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Locale; @@ -119,8 +120,9 @@ public abstract class AbstractLocusApp extends AbstractApp { pg.premiumOnly = cache.isPremiumMembersOnly(); pg.name = cache.getName(); pg.placedBy = cache.getOwnerDisplayName(); - if (cache.getHiddenDate() != null) { - pg.hidden = ISO8601DATE.format(cache.getHiddenDate().getTime()); + final Date hiddenDate = cache.getHiddenDate(); + if (hiddenDate != null) { + pg.hidden = ISO8601DATE.format(hiddenDate.getTime()); } int locusId = toLocusType(cache.getType()); if (locusId != NO_LOCUS_ID) { diff --git a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java index 5db562e..f1cee05 100644 --- a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java +++ b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java @@ -22,6 +22,7 @@ import android.widget.RelativeLayout; import android.widget.TextView; import java.util.ArrayList; +import java.util.Date; import java.util.List; public final class CacheDetailsCreator { @@ -179,12 +180,17 @@ public final class CacheDetailsCreator { } public void addEventDate(@NonNull Geocache cache) { - if (cache.isEventCache() && cache.getHiddenDate() != null) { - final long time = cache.getHiddenDate().getTime(); - if (time > 0) { - final String dateString = DateUtils.formatDateTime(CgeoApplication.getInstance().getBaseContext(), time, DateUtils.FORMAT_SHOW_WEEKDAY) + ", " + Formatter.formatFullDate(time); - add(R.string.cache_event, dateString); - } + if (!cache.isEventCache()) { + return; + } + final Date hiddenDate = cache.getHiddenDate(); + if (hiddenDate == null) { + return; + } + final long time = hiddenDate.getTime(); + if (time > 0) { + final String dateString = DateUtils.formatDateTime(CgeoApplication.getInstance().getBaseContext(), time, DateUtils.FORMAT_SHOW_WEEKDAY) + ", " + Formatter.formatFullDate(time); + add(R.string.cache_event, dateString); } } } diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java index 56cc60a..9646c6a 100644 --- a/main/src/cgeo/geocaching/ui/CacheListAdapter.java +++ b/main/src/cgeo/geocaching/ui/CacheListAdapter.java @@ -400,7 +400,7 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { } Spannable spannable = null; - if (cache.isDisabled() || cache.isArchived() || isPastEvent(cache)) { // strike + if (cache.isDisabled() || cache.isArchived() || DateUtils.isPastEvent(cache)) { // strike spannable = Spannable.Factory.getInstance().newSpannable(cache.getName()); spannable.setSpan(new StrikethroughSpan(), 0, spannable.toString().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } @@ -489,10 +489,6 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { return v; } - private static boolean isPastEvent(final Geocache cache) { - return cache.isEventCache() && DateUtils.daysSince(cache.getHiddenDate().getTime()) > 0; - } - private static Drawable getCacheIcon(Geocache cache) { int hashCode = getIconHashCode(cache.getType(), cache.hasUserModifiedCoords() || cache.hasFinalDefined()); final Drawable drawable = gcIconDrawables.get(hashCode); diff --git a/main/src/cgeo/geocaching/ui/Formatter.java b/main/src/cgeo/geocaching/ui/Formatter.java index 49c7a50..9242b9a 100644 --- a/main/src/cgeo/geocaching/ui/Formatter.java +++ b/main/src/cgeo/geocaching/ui/Formatter.java @@ -15,6 +15,7 @@ import android.text.format.DateUtils; import java.text.DateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; public abstract class Formatter { @@ -110,7 +111,7 @@ public abstract class Formatter { /** * Generate a numeric date and time string according to system-wide settings (locale, * date format) such as "7 september at 12:35". - * + * * @param date * milliseconds since the epoch * @return the formatted string @@ -153,8 +154,11 @@ public abstract class Formatter { // don't show "not chosen" for events and virtuals, that should be the normal case if (cache.getSize() != CacheSize.UNKNOWN && cache.showSize()) { infos.add(cache.getSize().getL10n()); - } else if (cache.isEventCache() && cache.getHiddenDate() != null) { - infos.add(Formatter.formatShortDate(cache.getHiddenDate().getTime())); + } else if (cache.isEventCache()) { + final Date hiddenDate = cache.getHiddenDate(); + if (hiddenDate != null) { + infos.add(Formatter.formatShortDate(hiddenDate.getTime())); + } } } diff --git a/main/src/cgeo/geocaching/utils/DateUtils.java b/main/src/cgeo/geocaching/utils/DateUtils.java index b148979..9aa4222 100644 --- a/main/src/cgeo/geocaching/utils/DateUtils.java +++ b/main/src/cgeo/geocaching/utils/DateUtils.java @@ -1,6 +1,9 @@ package cgeo.geocaching.utils; +import cgeo.geocaching.Geocache; + import java.util.Calendar; +import java.util.Date; public final class DateUtils { @@ -20,4 +23,13 @@ public final class DateUtils { today.set(Calendar.HOUR_OF_DAY, 0); return (int) Math.round((today.getTimeInMillis() - logDate.getTimeInMillis()) / 86400000d); } + + public static boolean isPastEvent(final Geocache cache) { + if (!cache.isEventCache()) { + return false; + } + final Date hiddenDate = cache.getHiddenDate(); + return hiddenDate != null && DateUtils.daysSince(hiddenDate.getTime()) > 0; + } + } |
