diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-02-16 12:38:52 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-02-16 22:19:43 +0100 |
| commit | 14ba161b7507480630d8ca9220e1b4099fc7d4d6 (patch) | |
| tree | 4440aa6a9c7bb40a8e75f64e1687acba3489f855 /main/src/cgeo/geocaching/network | |
| parent | 2919930439a3ff43efada3bcb5af34979fb8feac (diff) | |
| download | cgeo-14ba161b7507480630d8ca9220e1b4099fc7d4d6.zip cgeo-14ba161b7507480630d8ca9220e1b4099fc7d4d6.tar.gz cgeo-14ba161b7507480630d8ca9220e1b4099fc7d4d6.tar.bz2 | |
Update for RxJava 0.17.0-RC1
This is the release candidate version, which is being currently tested
at Netflix. In a few days, I'll update with the final version.
This release cleans up some bits of RxJava by integrating the
subscription inside a subscriber (which is an observer holding a
subscription) and fixes a leak with recurring tasks.
Diffstat (limited to 'main/src/cgeo/geocaching/network')
| -rw-r--r-- | main/src/cgeo/geocaching/network/HtmlImage.java | 32 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/network/StatusUpdater.java | 32 |
2 files changed, 27 insertions, 37 deletions
diff --git a/main/src/cgeo/geocaching/network/HtmlImage.java b/main/src/cgeo/geocaching/network/HtmlImage.java index f464e84..8040598 100644 --- a/main/src/cgeo/geocaching/network/HtmlImage.java +++ b/main/src/cgeo/geocaching/network/HtmlImage.java @@ -13,23 +13,19 @@ import cgeo.geocaching.utils.Log; import ch.boye.httpclientandroidlib.HttpResponse; import ch.boye.httpclientandroidlib.androidextra.Base64; - import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; - import rx.Observable; -import rx.Observable.OnSubscribeFunc; -import rx.Observer; +import rx.Observable.OnSubscribe; import rx.Scheduler; -import rx.Subscription; +import rx.Subscriber; import rx.schedulers.Schedulers; import rx.subjects.PublishSubject; import rx.subscriptions.CompositeSubscription; -import rx.subscriptions.Subscriptions; import rx.util.functions.Func1; import android.content.res.Resources; @@ -134,42 +130,39 @@ public class HtmlImage implements Html.ImageGetter { final String pseudoGeocode = shared ? SHARED : geocode; final Observable<Pair<BitmapDrawable, Boolean>> loadFromDisk = - Observable.create(new OnSubscribeFunc<Pair<BitmapDrawable, Boolean>>() { + Observable.create(new OnSubscribe<Pair<BitmapDrawable, Boolean>>() { @Override - public Subscription onSubscribe(final Observer<? super Pair<BitmapDrawable, Boolean>> observer) { + public void call(final Subscriber<? super Pair<BitmapDrawable, Boolean>> subscriber) { final Pair<Bitmap, Boolean> loadResult = loadImageFromStorage(url, pseudoGeocode, shared); final Bitmap bitmap = loadResult.getLeft(); - observer.onNext(new ImmutablePair<BitmapDrawable, Boolean>(bitmap != null ? + subscriber.onNext(new ImmutablePair<BitmapDrawable, Boolean>(bitmap != null ? ImageUtils.scaleBitmapToFitDisplay(bitmap) : null, loadResult.getRight())); - observer.onCompleted(); - return Subscriptions.empty(); + subscriber.onCompleted(); } }).subscribeOn(Schedulers.computation()); final Observable<BitmapDrawable> downloadAndSave = - Observable.create(new OnSubscribeFunc<BitmapDrawable>() { + Observable.create(new OnSubscribe<BitmapDrawable>() { @Override - public Subscription onSubscribe(final Observer<? super BitmapDrawable> observer) { + public void call(final Subscriber<? super BitmapDrawable> subscriber) { final File file = LocalStorage.getStorageFile(pseudoGeocode, url, true, true); if (url.startsWith("data:image/")) { if (url.contains(";base64,")) { saveBase64ToFile(url, file); } else { Log.e("HtmlImage.getDrawable: unable to decode non-base64 inline image"); - observer.onCompleted(); - return Subscriptions.empty(); + subscriber.onCompleted(); } } else { if (subscription.isUnsubscribed() || downloadOrRefreshCopy(url, file)) { // The existing copy was fresh enough or we were unsubscribed earlier. - observer.onCompleted(); - return Subscriptions.empty(); + subscriber.onCompleted(); } } if (onlySave) { - observer.onCompleted(); + subscriber.onCompleted(); } else { loadFromDisk.map(new Func1<Pair<BitmapDrawable, Boolean>, BitmapDrawable>() { @Override @@ -182,9 +175,8 @@ public class HtmlImage implements Html.ImageGetter { new BitmapDrawable(resources, BitmapFactory.decodeResource(resources, R.drawable.image_not_loaded)) : getTransparent1x1Image(resources); } - }).subscribe(observer); + }).subscribe(subscriber); } - return Subscriptions.empty(); } }).subscribeOn(downloadScheduler); diff --git a/main/src/cgeo/geocaching/network/StatusUpdater.java b/main/src/cgeo/geocaching/network/StatusUpdater.java index 84df168..838823b 100644 --- a/main/src/cgeo/geocaching/network/StatusUpdater.java +++ b/main/src/cgeo/geocaching/network/StatusUpdater.java @@ -5,11 +5,10 @@ import cgeo.geocaching.utils.Version; import org.json.JSONException; import org.json.JSONObject; - -import rx.Observable; +import rx.Scheduler; import rx.schedulers.Schedulers; import rx.subjects.BehaviorSubject; -import rx.util.functions.Func1; +import rx.util.functions.Action1; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; @@ -50,23 +49,22 @@ public class StatusUpdater { } } - final static private Observable<Status> statusObservable = - Observable.interval(1800, TimeUnit.SECONDS).startWith(-1L).flatMap(new Func1<Long, Observable<Status>>() { - @Override - public Observable<Status> call(Long id) { - final JSONObject response = - Network.requestJSON("http://status.cgeo.org/api/status.json", - new Parameters("version_code", String.valueOf(Version.getVersionCode(CgeoApplication.getInstance())), - "version_name", Version.getVersionName(CgeoApplication.getInstance()), - "locale", Locale.getDefault().toString())); - return response != null ? Observable.from(Status.defaultStatus((new Status(response)))) : Observable.<Status>empty(); - } - }).subscribeOn(Schedulers.io()); - final static public BehaviorSubject<Status> latestStatus = BehaviorSubject.create(Status.defaultStatus(null)); static { - statusObservable.subscribe(latestStatus); + Schedulers.io().schedulePeriodically(new Action1<Scheduler.Inner>() { + @Override + public void call(final Scheduler.Inner inner) { + final JSONObject response = + Network.requestJSON("http://status.cgeo.org/api/status.json", + new Parameters("version_code", String.valueOf(Version.getVersionCode(CgeoApplication.getInstance())), + "version_name", Version.getVersionName(CgeoApplication.getInstance()), + "locale", Locale.getDefault().toString())); + if (response != null) { + latestStatus.onNext(Status.defaultStatus(new Status(response))); + } + } + }, 0, 1800, TimeUnit.SECONDS); } private static String get(final JSONObject json, final String key) { |
