diff options
Diffstat (limited to 'main/src/cgeo/geocaching/CgeoApplication.java')
| -rw-r--r-- | main/src/cgeo/geocaching/CgeoApplication.java | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/main/src/cgeo/geocaching/CgeoApplication.java b/main/src/cgeo/geocaching/CgeoApplication.java index 7bee97e..cbe81fa 100644 --- a/main/src/cgeo/geocaching/CgeoApplication.java +++ b/main/src/cgeo/geocaching/CgeoApplication.java @@ -1,9 +1,14 @@ package cgeo.geocaching; +import cgeo.geocaching.sensors.DirectionProvider; +import cgeo.geocaching.sensors.GeoDataProvider; +import cgeo.geocaching.sensors.IGeoData; import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.Log; +import org.apache.commons.lang3.tuple.ImmutablePair; import rx.Observable; +import rx.functions.Func2; import android.app.Activity; import android.app.Application; @@ -20,6 +25,7 @@ public class CgeoApplication extends Application { public boolean showLoginToast = true; //login toast shown just once. private boolean liveMapHintShownInThisSession = false; // livemap hint has been shown private static CgeoApplication instance; + private Observable<ImmutablePair<IGeoData,Float>> geoDir; public CgeoApplication() { setInstance(this); @@ -66,34 +72,32 @@ public class CgeoApplication extends Application { }.start(); } - public Observable<IGeoData> currentGeoObject() { - if (geo == null) { + public Observable<ImmutablePair<IGeoData, Float>> geoDirObservable() { + if (geoDir == null) { synchronized(this) { - if (geo == null) { - geo = GeoDataProvider.create(this); + if (geoDir == null) { + geoDir = Observable.combineLatest(GeoDataProvider.create(this), DirectionProvider.create(this), new Func2<IGeoData, Float, ImmutablePair<IGeoData, Float>>() { + @Override + public ImmutablePair<IGeoData, Float> call(final IGeoData geoData, final Float dir) { + return new ImmutablePair<IGeoData, Float>(geoData, dir); + } + }); } } } - return geo; + return geoDir; } - public IGeoData currentGeo() { - return currentGeoObject().first().toBlockingObservable().single(); + private ImmutablePair<IGeoData, Float> currentGeoDir() { + return geoDirObservable().first().toBlockingObservable().single(); } - public Observable<Float> currentDirObject() { - if (dir == null) { - synchronized(this) { - if (dir == null) { - dir = DirectionProvider.create(this); - } - } - } - return dir; + public IGeoData currentGeo() { + return currentGeoDir().left; } public Float currentDirection() { - return currentDirObject().first().toBlockingObservable().single(); + return currentGeoDir().right; } public boolean isLiveMapHintShownInThisSession() { |
