aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/CacheDetailActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/CacheDetailActivity.java')
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java74
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> {