From d762e2f56e52329f48f81cca5095622d7f24463c Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Mon, 31 Mar 2014 23:48:27 +0200 Subject: Partially revert < 2.3 compatibility mode This reverts part of 46675dfdcb4c7b511b4c35e4a2242e47d4678fd4. However, since this commit did some cleanup and simplifications, we keep them. --- main/src/cgeo/geocaching/SearchResult.java | 45 +++++++++++------------------- 1 file changed, 16 insertions(+), 29 deletions(-) (limited to 'main/src') diff --git a/main/src/cgeo/geocaching/SearchResult.java b/main/src/cgeo/geocaching/SearchResult.java index a673785..12a2522 100644 --- a/main/src/cgeo/geocaching/SearchResult.java +++ b/main/src/cgeo/geocaching/SearchResult.java @@ -1,6 +1,5 @@ package cgeo.geocaching; -import android.os.Build; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.gc.GCLogin; import cgeo.geocaching.enumerations.CacheType; @@ -304,35 +303,23 @@ public class SearchResult implements Parcelable { public static SearchResult parallelCombineActive(final Collection connectors, final Func1 func) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { - return Observable.from(connectors).parallel(new Func1, Observable>() { - @Override - public Observable call(final Observable cObservable) { - return cObservable.flatMap(new Func1>() { - @Override - public Observable call(final C c) { - return c.isActive() ? Observable.from(func.call(c)) : Observable.empty(); - } - }); - } - }, Schedulers.io()).reduce(new SearchResult(), new Func2() { - @Override - public SearchResult call(final SearchResult searchResult, final SearchResult searchResult2) { - searchResult.addSearchResult(searchResult2); - return searchResult; - } - }).toBlockingObservable().first(); - } else { - // Use a slower, sequential version for Android < 2.3, where parallel() does not work correctly - // because of missing Java method (here, Dequeue#offerLast). - final SearchResult result = new SearchResult(); - for (final C connector : connectors) { - if (connector.isActive()) { - result.addSearchResult(func.call(connector)); - } + return Observable.from(connectors).parallel(new Func1, Observable>() { + @Override + public Observable call(final Observable cObservable) { + return cObservable.flatMap(new Func1>() { + @Override + public Observable call(final C c) { + return c.isActive() ? Observable.from(func.call(c)) : Observable.empty(); + } + }); } - return result; - } + }, Schedulers.io()).reduce(new SearchResult(), new Func2() { + @Override + public SearchResult call(final SearchResult searchResult, final SearchResult searchResult2) { + searchResult.addSearchResult(searchResult2); + return searchResult; + } + }).toBlockingObservable().first(); } } -- cgit v1.1 From a045c6edaebe4200835aeffcea977fc8245b6ad1 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Tue, 1 Apr 2014 23:21:45 +0200 Subject: fix #3721: NPE in Geocache.hashCode() Also, hash codes must be equal when the objects compare equal. Since equality compares only geocodes, the hash codes must also only take geocodes into consideration. --- main/src/cgeo/geocaching/Geocache.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'main/src') diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index a03f515..a224e4e 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -1414,19 +1414,14 @@ public class Geocache implements ICache, IWaypoint { @Override public int hashCode() { - return geocode.hashCode() * name.hashCode(); + return StringUtils.defaultString(geocode).hashCode(); } @Override public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof Geocache)) { - return false; - } + // TODO: explain the following line or remove this non-standard equality method // just compare the geocode even if that is not what "equals" normally does - return StringUtils.isNotBlank(geocode) && geocode.equals(((Geocache) obj).geocode); + return this == obj || (obj instanceof Geocache && StringUtils.isNotEmpty(geocode) && geocode.equals(((Geocache) obj).geocode)); } public void store(CancellableHandler handler) { -- cgit v1.1