From 46675dfdcb4c7b511b4c35e4a2242e47d4678fd4 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Mon, 31 Mar 2014 15:06:25 +0200 Subject: fix #3707: missing method in Android < 2.3 --- main/src/cgeo/geocaching/SearchResult.java | 45 +++++++++++++++++++----------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'main/src/cgeo/geocaching/SearchResult.java') diff --git a/main/src/cgeo/geocaching/SearchResult.java b/main/src/cgeo/geocaching/SearchResult.java index 12a2522..a673785 100644 --- a/main/src/cgeo/geocaching/SearchResult.java +++ b/main/src/cgeo/geocaching/SearchResult.java @@ -1,5 +1,6 @@ package cgeo.geocaching; +import android.os.Build; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.gc.GCLogin; import cgeo.geocaching.enumerations.CacheType; @@ -303,23 +304,35 @@ public class SearchResult implements Parcelable { public static SearchResult parallelCombineActive(final Collection connectors, final Func1 func) { - 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; + 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)); + } } - }).toBlockingObservable().first(); + return result; + } } } -- cgit v1.1