diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-02-16 15:07:39 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-02-16 22:21:37 +0100 |
| commit | bc1d72e7adfa783dfad9baee72c22d2bbcfb2153 (patch) | |
| tree | d18de16b5ba2c78b36fb5fec38ef6536b83e6d3e | |
| parent | 14ba161b7507480630d8ca9220e1b4099fc7d4d6 (diff) | |
| download | cgeo-bc1d72e7adfa783dfad9baee72c22d2bbcfb2153.zip cgeo-bc1d72e7adfa783dfad9baee72c22d2bbcfb2153.tar.gz cgeo-bc1d72e7adfa783dfad9baee72c22d2bbcfb2153.tar.bz2 | |
refactoring: use RxJava to download preview map
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 71 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/StaticMapsProvider.java | 4 |
2 files changed, 32 insertions, 43 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 54202a7..9f39637 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -78,7 +78,6 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.net.Uri; -import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -934,7 +933,17 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc view = (ScrollView) getLayoutInflater().inflate(R.layout.cachedetail_details_page, null); // Start loading preview map - new PreviewMapTask().execute((Void) null); + AndroidObservable.fromActivity(CacheDetailActivity.this, previewMap.subscribeOn(Schedulers.io())).subscribe(new Action1<BitmapDrawable>() { + @Override + public void call(final BitmapDrawable image) { + final Bitmap bitmap = image.getBitmap(); + if (bitmap != null && bitmap.getWidth() > 10) { + final ImageView imageView = (ImageView) view.findViewById(R.id.map_preview); + imageView.setImageDrawable(image); + view.findViewById(R.id.map_preview_box).setVisibility(View.VISIBLE); + } + } + }); detailsList = (LinearLayout) view.findViewById(R.id.details_list); final CacheDetailsCreator details = new CacheDetailsCreator(CacheDetailActivity.this, detailsList); @@ -1421,53 +1430,33 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc box.setVisibility(View.GONE); } } + } - private class PreviewMapTask extends AsyncTask<Void, Void, BitmapDrawable> { - @Override - protected BitmapDrawable doInBackground(Void... parameters) { - try { - // persistent preview from storage - Bitmap image = decode(cache); - - if (image == null) { - if (Settings.isStoreOfflineMaps()) { - StaticMapsProvider.storeCachePreviewMap(cache); - image = decode(cache); - } - } - - return image != null ? ImageUtils.scaleBitmapToFitDisplay(image) : null; - } catch (final Exception e) { - Log.w("CacheDetailActivity.PreviewMapTask", e); - return null; - } - } - - private Bitmap decode(final Geocache cache) { - return StaticMapsProvider.getPreviewMap(cache.getGeocode()); - } + private Observable<BitmapDrawable> previewMap = Observable.create(new OnSubscribe<BitmapDrawable>() { + @Override + public void call(final Subscriber<? super BitmapDrawable> subscriber) { + try { + // persistent preview from storage + Bitmap image = StaticMapsProvider.getPreviewMap(cache); - @Override - protected void onPostExecute(BitmapDrawable image) { if (image == null) { - return; - } - - try { - final Bitmap bitmap = image.getBitmap(); - if (bitmap == null || bitmap.getWidth() <= 10) { - return; + if (Settings.isStoreOfflineMaps()) { + StaticMapsProvider.storeCachePreviewMap(cache); + image = StaticMapsProvider.getPreviewMap(cache); } + } - final ImageView imageView = (ImageView) view.findViewById(R.id.map_preview); - imageView.setImageDrawable(image); - view.findViewById(R.id.map_preview_box).setVisibility(View.VISIBLE); - } catch (final Exception e) { - Log.e("CacheDetailActivity.PreviewMapTask", e); + if (image != null) { + subscriber.onNext(ImageUtils.scaleBitmapToFitDisplay(image)); } + subscriber.onCompleted(); + } catch (final Exception e) { + Log.w("CacheDetailActivity.previewMap", e); + subscriber.onError(e); } } - } + + }); protected class DescriptionViewCreator extends AbstractCachingPageViewCreator<ScrollView> { diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java index d5cbb13..eaab159 100644 --- a/main/src/cgeo/geocaching/StaticMapsProvider.java +++ b/main/src/cgeo/geocaching/StaticMapsProvider.java @@ -298,8 +298,8 @@ public final class StaticMapsProvider { return true; } - public static Bitmap getPreviewMap(final String geocode) { - return decodeFile(StaticMapsProvider.getMapFile(geocode, PREFIX_PREVIEW, false)); + public static Bitmap getPreviewMap(final Geocache cache) { + return decodeFile(StaticMapsProvider.getMapFile(cache.getGeocode(), PREFIX_PREVIEW, false)); } public static Bitmap getWaypointMap(final String geocode, final Waypoint waypoint, final int level) { |
