diff options
Diffstat (limited to 'main')
| -rw-r--r-- | main/src/cgeo/geocaching/LogCacheActivity.java | 25 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/gcvote/GCVote.java | 33 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/gcvote/GCVoteRating.java | 2 |
3 files changed, 36 insertions, 24 deletions
diff --git a/main/src/cgeo/geocaching/LogCacheActivity.java b/main/src/cgeo/geocaching/LogCacheActivity.java index d009378..433aec5 100644 --- a/main/src/cgeo/geocaching/LogCacheActivity.java +++ b/main/src/cgeo/geocaching/LogCacheActivity.java @@ -46,7 +46,6 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; -import java.util.Locale; public class LogCacheActivity extends AbstractLoggingActivity implements DateDialog.DateDialogParent { static final String EXTRAS_GEOCODE = "geocode"; @@ -79,7 +78,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia private ILoggingManager loggingManager; // Data to be saved while reconfiguring - private double rating; + private float rating; private LogType typeSelected; private Calendar date; private String imageCaption; @@ -217,10 +216,10 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia if (!Settings.isGCvoteLogin() || !cache.supportsGCVote()) { return res.getString(R.string.log_post); } - if (rating == 0) { - return res.getString(R.string.log_post_no_rate); + if (GCVote.isValidRating(rating)) { + return res.getString(R.string.log_post_rate) + " " + GCVote.getRatingText(rating) + "*"; } - return res.getString(R.string.log_post_rate) + " " + ratingTextValue(rating) + "*"; + return res.getString(R.string.log_post_no_rate); } @Override @@ -261,7 +260,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia // Restore previous state if (savedInstanceState != null) { - rating = savedInstanceState.getDouble(SAVED_STATE_RATING); + rating = savedInstanceState.getFloat(SAVED_STATE_RATING); typeSelected = LogType.getById(savedInstanceState.getInt(SAVED_STATE_TYPE)); date.setTimeInMillis(savedInstanceState.getLong(SAVED_STATE_DATE)); imageCaption = savedInstanceState.getString(SAVED_STATE_IMAGE_CAPTION); @@ -341,7 +340,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia private void setDefaultValues() { date = Calendar.getInstance(); - rating = 0.0; + rating = GCVote.NO_RATING; if (cache.isEventCache()) { final Date eventDate = cache.getHiddenDate(); boolean expired = DateUtils.daysSince(eventDate.getTime()) > 0; @@ -438,9 +437,9 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia final int id = item.getItemId(); if (id >= 10 && id <= 19) { - rating = (id - 9) / 2.0; - if (rating < 1) { - rating = 0; + rating = (id - 9) / 2.0f; + if (!GCVote.isValidRating(rating)) { + rating = GCVote.NO_RATING; } updatePostButtonText(); return true; @@ -449,10 +448,6 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia return false; } - private static String ratingTextValue(final double rating) { - return String.format(Locale.getDefault(), "%.1f", rating); - } - @Override protected void onSaveInstanceState(final Bundle outState) { super.onSaveInstanceState(outState); @@ -556,7 +551,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia Twitter.postTweetCache(geocode); } } - if (rating > 0) { + if (GCVote.isValidRating(rating)) { GCVote.setRating(cache, rating); } diff --git a/main/src/cgeo/geocaching/gcvote/GCVote.java b/main/src/cgeo/geocaching/gcvote/GCVote.java index c3c7b8d..15d0024 100644 --- a/main/src/cgeo/geocaching/gcvote/GCVote.java +++ b/main/src/cgeo/geocaching/gcvote/GCVote.java @@ -16,10 +16,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.regex.Pattern; public final class GCVote { + public static final float NO_RATING = 0; private static final Pattern PATTERN_LOG_IN = Pattern.compile("loggedIn='([^']+)'", Pattern.CASE_INSENSITIVE); private static final Pattern PATTERN_GUID = Pattern.compile("cacheId='([^']+)'", Pattern.CASE_INSENSITIVE); private static final Pattern PATTERN_WAYPOINT = Pattern.compile("waypoint='([^']+)'", Pattern.CASE_INSENSITIVE); @@ -30,6 +32,12 @@ public final class GCVote { private static final int MAX_CACHED_RATINGS = 1000; private static final LeastRecentlyUsedMap<String, GCVoteRating> RATINGS_CACHE = new LeastRecentlyUsedMap.LruCache<String, GCVoteRating>(MAX_CACHED_RATINGS); + private static final float MIN_RATING = 1; + private static final float MAX_RATING = 5; + + private GCVote() { + // utility class + } /** * Get user rating for a given guid or geocode. For a guid first the ratings cache is checked @@ -39,7 +47,7 @@ public final class GCVote { * @param geocode * @return */ - public static GCVoteRating getRating(String guid, String geocode) { + public static GCVoteRating getRating(final String guid, final String geocode) { if (StringUtils.isNotBlank(guid) && RATINGS_CACHE.containsKey(guid)) { return RATINGS_CACHE.get(guid); } @@ -59,7 +67,7 @@ public final class GCVote { * @param geocodes * @return */ - public static Map<String, GCVoteRating> getRating(List<String> guids, List<String> geocodes) { + public static Map<String, GCVoteRating> getRating(final List<String> guids, final List<String> geocodes) { if (guids == null && geocodes == null) { return null; } @@ -128,7 +136,7 @@ public final class GCVote { } } - float rating = 0; + float rating = NO_RATING; try { final MatcherWrapper matcherRating = new MatcherWrapper(PATTERN_RATING, voteData); if (matcherRating.find()) { @@ -137,7 +145,7 @@ public final class GCVote { } catch (NumberFormatException e) { Log.w("GCVote.getRating: Failed to parse rating"); } - if (rating <= 0) { + if (!isValidRating(rating)) { continue; } @@ -154,7 +162,7 @@ public final class GCVote { continue; } - float myVote = 0; + float myVote = NO_RATING; if (loggedIn) { try { final MatcherWrapper matcherVote = new MatcherWrapper(PATTERN_VOTE, voteData); @@ -186,7 +194,7 @@ public final class GCVote { * @param vote * @return {@code true} if the rating was submitted successfully */ - public static boolean setRating(Geocache cache, double vote) { + public static boolean setRating(final Geocache cache, final float vote) { if (!Settings.isGCvoteLogin()) { return false; } @@ -197,7 +205,7 @@ public final class GCVote { if (StringUtils.isBlank(guid)) { return false; } - if (vote <= 0.0 || vote > 5.0) { + if (!isValidRating(vote)) { return false; } @@ -218,7 +226,7 @@ public final class GCVote { return result.trim().equalsIgnoreCase("ok"); } - public static void loadRatings(ArrayList<Geocache> caches) { + public static void loadRatings(final ArrayList<Geocache> caches) { if (!Settings.isRatingWanted()) { return; } @@ -254,4 +262,13 @@ public final class GCVote { Log.e("GCvote.loadRatings", e); } } + + public static boolean isValidRating(final float rating) { + return rating >= MIN_RATING && rating <= MAX_RATING; + } + + public static String getRatingText(final float rating) { + return String.format(Locale.getDefault(), "%.1f", rating); + } + } diff --git a/main/src/cgeo/geocaching/gcvote/GCVoteRating.java b/main/src/cgeo/geocaching/gcvote/GCVoteRating.java index f6813a2..1e65589 100644 --- a/main/src/cgeo/geocaching/gcvote/GCVoteRating.java +++ b/main/src/cgeo/geocaching/gcvote/GCVoteRating.java @@ -5,7 +5,7 @@ public final class GCVoteRating { private final int votes; private final float myVote; - public GCVoteRating(float rating, int votes, float myVote) { + public GCVoteRating(final float rating, final int votes, final float myVote) { this.rating = rating; this.votes = votes; this.myVote = myVote; |
