aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-02-17 21:13:04 +0100
committerSamuel Tardieu <sam@rfc1149.net>2014-02-17 21:13:04 +0100
commit2e1bbe493a4763a36d382f03f81de58c1b2b675e (patch)
treec6862fc13ace5d9d51632d755dd0f1833b48960f /main
parentc448e8243bf2f257619b84ee6c9f90705ba26d2d (diff)
downloadcgeo-2e1bbe493a4763a36d382f03f81de58c1b2b675e.zip
cgeo-2e1bbe493a4763a36d382f03f81de58c1b2b675e.tar.gz
cgeo-2e1bbe493a4763a36d382f03f81de58c1b2b675e.tar.bz2
Proper use of schedulers with RxJava downloading
Diffstat (limited to 'main')
-rw-r--r--main/src/cgeo/geocaching/network/HtmlImage.java21
-rw-r--r--main/src/cgeo/geocaching/ui/ImagesList.java16
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);
}