aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/ui
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-02-20 09:09:59 +0100
committerSamuel Tardieu <sam@rfc1149.net>2014-02-20 09:09:59 +0100
commitb919faf0129ec76b34c85b0574e197949ccdaaff (patch)
tree8b4ad348ee378ceb6e1c6165c61a8c2ca1fa737a /main/src/cgeo/geocaching/ui
parent8b9b06dbb134d2ecd15ec9957ee0ca39739259fc (diff)
downloadcgeo-b919faf0129ec76b34c85b0574e197949ccdaaff.zip
cgeo-b919faf0129ec76b34c85b0574e197949ccdaaff.tar.gz
cgeo-b919faf0129ec76b34c85b0574e197949ccdaaff.tar.bz2
refactoring: makes unsubscribing from image loading easier
This is related to #3618.
Diffstat (limited to 'main/src/cgeo/geocaching/ui')
-rw-r--r--main/src/cgeo/geocaching/ui/ImagesList.java32
1 files changed, 26 insertions, 6 deletions
diff --git a/main/src/cgeo/geocaching/ui/ImagesList.java b/main/src/cgeo/geocaching/ui/ImagesList.java
index d2e7993..dcce969 100644
--- a/main/src/cgeo/geocaching/ui/ImagesList.java
+++ b/main/src/cgeo/geocaching/ui/ImagesList.java
@@ -9,9 +9,12 @@ import cgeo.geocaching.utils.Log;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
+import rx.Subscription;
import rx.android.observables.AndroidObservable;
-import rx.subscriptions.CompositeSubscription;
+import rx.functions.Action0;
import rx.functions.Action1;
+import rx.subscriptions.CompositeSubscription;
+import rx.subscriptions.Subscriptions;
import android.app.Activity;
import android.content.Intent;
@@ -42,7 +45,6 @@ public class ImagesList {
private BitmapDrawable currentDrawable;
private Image currentImage;
- private CompositeSubscription subscriptions = new CompositeSubscription();
public enum ImageType {
LogImages(R.string.cache_log_images_title),
@@ -76,7 +78,24 @@ public class ImagesList {
inflater = activity.getLayoutInflater();
}
- public void loadImages(final View parentView, final List<Image> images, final boolean offline) {
+ /**
+ * Load images into a view.
+ *
+ * @param parentView a view to load the images into
+ * @param images the images to load
+ * @param offline <tt>true</tt> if the images must be stored for offline use
+ * @return a subscription which, when unsubscribed, interrupts the loading and clears up resources
+ */
+ public Subscription loadImages(final View parentView, final List<Image> images, final boolean offline) {
+ // Start with a fresh subscription because of this method can be called several times if the
+ // englobing activity is stopped/restarted.
+ final CompositeSubscription subscriptions = new CompositeSubscription(Subscriptions.create(new Action0() {
+ @Override
+ public void call() {
+ removeAllViews();
+ }
+ }));
+
imagesView = (LinearLayout) parentView.findViewById(R.id.spoiler_list);
final HtmlImage imgGetter = new HtmlImage(geocode, true, offline ? StoredList.STANDARD_LIST_ID : StoredList.TEMPORARY_LIST_ID, false);
@@ -108,6 +127,8 @@ public class ImagesList {
rowView.addView(imageView);
imagesView.addView(rowView);
}
+
+ return subscriptions;
}
private void display(final ImageView imageView, final BitmapDrawable image, final Image img, final LinearLayout view) {
@@ -138,14 +159,13 @@ public class ImagesList {
}
}
- public void removeAllViews() {
+ private void removeAllViews() {
for (final Bitmap b : bitmaps) {
b.recycle();
}
bitmaps.clear();
+ images.clear();
- // Stop loading images if some are still in progress
- subscriptions.unsubscribe();
imagesView.removeAllViews();
}