diff options
Diffstat (limited to 'main/src/cgeo/geocaching/CacheDetailActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 74 |
1 files changed, 45 insertions, 29 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index a8fa8ee..a66d181 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -8,6 +8,7 @@ import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.AbstractViewPagerActivity; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; +import cgeo.geocaching.apps.cachelist.MapsWithMeCacheListApp; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; @@ -45,7 +46,6 @@ import cgeo.geocaching.utils.CryptUtils; import cgeo.geocaching.utils.ImageUtils; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.MatcherWrapper; -import cgeo.geocaching.utils.RxUtils; import cgeo.geocaching.utils.SimpleCancellableHandler; import cgeo.geocaching.utils.SimpleHandler; import cgeo.geocaching.utils.TextUtils; @@ -56,14 +56,16 @@ import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; + import rx.Observable; import rx.Observable.OnSubscribe; import rx.Observer; import rx.Scheduler.Inner; import rx.Subscriber; -import rx.Subscription; +import rx.android.observables.AndroidObservable; import rx.functions.Action1; import rx.schedulers.Schedulers; +import rx.subscriptions.CompositeSubscription; import android.R.color; import android.app.AlertDialog; @@ -143,19 +145,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private SearchResult search; - private final GeoDirHandler locationUpdater = new GeoDirHandler() { - @Override - public void updateGeoData(final IGeoData geo) { - if (cacheDistanceView == null) { - return; - } - - if (geo.getCoords() != null && cache != null && cache.getCoords() != null) { - cacheDistanceView.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(cache.getCoords()))); - cacheDistanceView.bringToFront(); - } - } - }; + private GeoDirHandler locationUpdater; private CharSequence clickedItemText = null; @@ -168,7 +158,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private TextView cacheDistanceView; protected ImagesList imagesList; - private Subscription imagesSubscription; + private CompositeSubscription createSubscriptions; /** * waypoint selected in context menu. This variable will be gone when the waypoint context menu is a fragment. */ @@ -178,6 +168,8 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.cachedetail_activity); + createSubscriptions = new CompositeSubscription(); + // set title in code, as the activity needs a hard coded title due to the intent filters setTitle(res.getString(R.string.cache)); @@ -195,6 +187,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc guid = extras.getString(Intents.EXTRA_GUID); } + // When clicking a cache in MapsWithMe, we get back a PendingIntent + if (StringUtils.isEmpty(geocode)) { + geocode = MapsWithMeCacheListApp.getCacheFromMapsWithMe(this, getIntent()); + } + // try to get data from URI if (geocode == null && guid == null && uri != null) { final String uriHost = uri.getHost().toLowerCase(Locale.US); @@ -310,6 +307,8 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc loadCacheHandler.sendMessage(Message.obtain()); } }); + + locationUpdater = new CacheDetailsGeoDirHandler(this); } @Override @@ -330,9 +329,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void onDestroy() { - if (imagesList != null) { - imagesSubscription.unsubscribe(); - } + createSubscriptions.unsubscribe(); super.onDestroy(); } @@ -345,11 +342,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } @Override - public void onPause() { - super.onPause(); - } - - @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { super.onCreateContextMenu(menu, view, info); final int viewId = view.getId(); @@ -521,6 +513,30 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return true; } + private static final class CacheDetailsGeoDirHandler extends GeoDirHandler { + private final WeakReference<CacheDetailActivity> activityRef; + + public CacheDetailsGeoDirHandler(final CacheDetailActivity activity) { + this.activityRef = new WeakReference<CacheDetailActivity>(activity); + } + + @Override + public void updateGeoData(final IGeoData geo) { + final CacheDetailActivity activity = activityRef.get(); + if (activity == null) { + return; + } + if (activity.cacheDistanceView == null) { + return; + } + + if (geo.getCoords() != null && activity.cache != null && activity.cache.getCoords() != null) { + activity.cacheDistanceView.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(activity.cache.getCoords()))); + activity.cacheDistanceView.bringToFront(); + } + } + } + private final static class LoadCacheHandler extends SimpleCancellableHandler { public LoadCacheHandler(CacheDetailActivity activity, Progress progress) { @@ -649,7 +665,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return; } imagesList = new ImagesList(this, cache.getGeocode()); - imagesSubscription = imagesList.loadImages(imageView, cache.getImages(), false); + createSubscriptions.add(imagesList.loadImages(imageView, cache.getImages(), false)); } public static void startActivity(final Context context, final String geocode) { @@ -878,7 +894,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc view = (ScrollView) getLayoutInflater().inflate(R.layout.cachedetail_details_page, null); // Start loading preview map - RxUtils.subscribeOnIOThenUI(previewMap, new Action1<BitmapDrawable>() { + AndroidObservable.bindActivity(CacheDetailActivity.this, previewMap).subscribe(new Action1<BitmapDrawable>() { @Override public void call(final BitmapDrawable image) { final Bitmap bitmap = image.getBitmap(); @@ -888,7 +904,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc view.findViewById(R.id.map_preview_box).setVisibility(View.VISIBLE); } } - }); + }, Schedulers.io()); detailsList = (LinearLayout) view.findViewById(R.id.details_list); final CacheDetailsCreator details = new CacheDetailsCreator(CacheDetailActivity.this, detailsList); @@ -1605,7 +1621,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } }); - RxUtils.subscribeOnIOThenUI(producer, new Observer<Spanned>() { + AndroidObservable.bindActivity(this, producer).subscribe(new Observer<Spanned>() { @Override public void onCompleted() { if (null != loadingIndicatorView) { @@ -1668,7 +1684,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } descriptionView.setBackgroundResource(backcolor); } - }); + }, Schedulers.io()); } private class WaypointsViewCreator extends AbstractCachingPageViewCreator<ListView> { |
