diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-02-17 21:13:04 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-02-17 21:13:04 +0100 |
| commit | 2e1bbe493a4763a36d382f03f81de58c1b2b675e (patch) | |
| tree | c6862fc13ace5d9d51632d755dd0f1833b48960f | |
| parent | c448e8243bf2f257619b84ee6c9f90705ba26d2d (diff) | |
| download | cgeo-2e1bbe493a4763a36d382f03f81de58c1b2b675e.zip cgeo-2e1bbe493a4763a36d382f03f81de58c1b2b675e.tar.gz cgeo-2e1bbe493a4763a36d382f03f81de58c1b2b675e.tar.bz2 | |
Proper use of schedulers with RxJava downloading
| -rw-r--r-- | main/src/cgeo/geocaching/network/HtmlImage.java | 21 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/ImagesList.java | 16 |
2 files changed, 16 insertions, 21 deletions
diff --git a/main/src/cgeo/geocaching/network/HtmlImage.java b/main/src/cgeo/geocaching/network/HtmlImage.java index 8040598..10181ed 100644 --- a/main/src/cgeo/geocaching/network/HtmlImage.java +++ b/main/src/cgeo/geocaching/network/HtmlImage.java @@ -26,6 +26,7 @@ import rx.Subscriber; import rx.schedulers.Schedulers; import rx.subjects.PublishSubject; import rx.subscriptions.CompositeSubscription; +import rx.util.functions.Func0; import rx.util.functions.Func1; import android.content.res.Resources; @@ -141,30 +142,30 @@ public class HtmlImage implements Html.ImageGetter { loadResult.getRight())); subscriber.onCompleted(); } - }).subscribeOn(Schedulers.computation()); + }); final Observable<BitmapDrawable> downloadAndSave = - Observable.create(new OnSubscribe<BitmapDrawable>() { + Observable.defer(new Func0<Observable<? extends BitmapDrawable>>() { @Override - public void call(final Subscriber<? super BitmapDrawable> subscriber) { + public Observable<? extends BitmapDrawable> call() { 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"); - subscriber.onCompleted(); + return Observable.empty(); } } else { if (subscription.isUnsubscribed() || downloadOrRefreshCopy(url, file)) { // The existing copy was fresh enough or we were unsubscribed earlier. - subscriber.onCompleted(); + return Observable.empty(); } } if (onlySave) { - subscriber.onCompleted(); + return Observable.empty(); } else { - loadFromDisk.map(new Func1<Pair<BitmapDrawable, Boolean>, BitmapDrawable>() { + return loadFromDisk.map(new Func1<Pair<BitmapDrawable, Boolean>, BitmapDrawable>() { @Override public BitmapDrawable call(final Pair<BitmapDrawable, Boolean> loadResult) { final BitmapDrawable image = loadResult.getLeft(); @@ -175,10 +176,10 @@ public class HtmlImage implements Html.ImageGetter { new BitmapDrawable(resources, BitmapFactory.decodeResource(resources, R.drawable.image_not_loaded)) : getTransparent1x1Image(resources); } - }).subscribe(subscriber); + }); } } - }).subscribeOn(downloadScheduler); + }); if (StringUtils.isBlank(url) || isCounter(url)) { return Observable.from(getTransparent1x1Image(resources)); @@ -193,7 +194,7 @@ public class HtmlImage implements Html.ImageGetter { } return bitmap != null && !onlySave ? downloadAndSave.startWith(bitmap) : downloadAndSave; } - }); + }).subscribeOn(downloadScheduler); } public void waitForBackgroundLoading(@Nullable final CancellableHandler handler) { diff --git a/main/src/cgeo/geocaching/ui/ImagesList.java b/main/src/cgeo/geocaching/ui/ImagesList.java index d380e6b..4058e15 100644 --- a/main/src/cgeo/geocaching/ui/ImagesList.java +++ b/main/src/cgeo/geocaching/ui/ImagesList.java @@ -100,17 +100,11 @@ public class ImagesList { assert(imageView != null); subscriptions.add(AndroidObservable.fromActivity(activity, imgGetter.fetchDrawable(img.getUrl())) .subscribe(new Action1<BitmapDrawable>() { - @Override - public void call(final BitmapDrawable image) { - display(imageView, image, img, rowView); - } - }, new Action1<Throwable>() { - @Override - public void call(final Throwable e) { - // Ignore error due to interruptions. - // FIXME: why is this necessary? - } - })); + @Override + public void call(final BitmapDrawable image) { + display(imageView, image, img, rowView); + } + })); rowView.addView(imageView); imagesView.addView(rowView); } |
