diff options
Diffstat (limited to 'main/src/cgeo/geocaching/CgeoApplication.java')
| -rw-r--r-- | main/src/cgeo/geocaching/CgeoApplication.java | 100 |
1 files changed, 26 insertions, 74 deletions
diff --git a/main/src/cgeo/geocaching/CgeoApplication.java b/main/src/cgeo/geocaching/CgeoApplication.java index 2500d10..bb74b52 100644 --- a/main/src/cgeo/geocaching/CgeoApplication.java +++ b/main/src/cgeo/geocaching/CgeoApplication.java @@ -1,10 +1,15 @@ package cgeo.geocaching; -import cgeo.geocaching.network.StatusUpdater; +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.IObserver; 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; import android.app.ProgressDialog; @@ -14,13 +19,11 @@ import java.util.concurrent.atomic.AtomicBoolean; public class CgeoApplication extends Application { - private volatile GeoDataProvider geo; - private volatile DirectionProvider dir; private boolean forceRelog = false; // c:geo needs to log into cache providers public boolean showLoginToast = true; //login toast shown just once. - private boolean liveMapHintShown = false; // livemap hint has been shown - final private StatusUpdater statusUpdater = new StatusUpdater(); + private boolean liveMapHintShownInThisSession = false; // livemap hint has been shown private static CgeoApplication instance; + private Observable<ImmutablePair<IGeoData,Float>> geoDir; public CgeoApplication() { setInstance(this); @@ -35,26 +38,11 @@ public class CgeoApplication extends Application { } @Override - public void onCreate() { - new Thread(statusUpdater).start(); - } - - @Override public void onLowMemory() { Log.i("Cleaning applications cache."); DataStore.removeAllFromCache(); } - @Override - public void onTerminate() { - Log.d("Terminating c:geo…"); - - DataStore.clean(); - DataStore.closeDb(); - - super.onTerminate(); - } - /** * Move the database to/from external cgdata in a new thread, * showing a progress window @@ -82,72 +70,36 @@ public class CgeoApplication extends Application { }.start(); } - /** - * Register an observer to receive GeoData information. - * <br/> - * If there is a chance that no observers are registered before this - * method is called, it is necessary to call it from a task implementing - * a looper interface as the data provider will use listeners that - * require a looper thread to run. - * - * @param observer a geodata observer - */ - public void addGeoObserver(final IObserver<? super IGeoData> observer) { - currentGeoObject().addObserver(observer); - } - - public void deleteGeoObserver(final IObserver<? super IGeoData> observer) { - currentGeoObject().deleteObserver(observer); - } - - private GeoDataProvider currentGeoObject() { - if (geo == null) { - synchronized(this) { - if (geo == null) { - geo = new GeoDataProvider(this); + public synchronized Observable<ImmutablePair<IGeoData, Float>> geoDirObservable() { + 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; - } - - public IGeoData currentGeo() { - return currentGeoObject().getMemory(); - } - - public void addDirectionObserver(final IObserver<? super Float> observer) { - currentDirObject().addObserver(observer); + return geoDir; } - public void deleteDirectionObserver(final IObserver<? super Float> observer) { - currentDirObject().deleteObserver(observer); + private ImmutablePair<IGeoData, Float> currentGeoDir() { + return geoDirObservable().first().toBlockingObservable().single(); } - private DirectionProvider currentDirObject() { - if (dir == null) { - synchronized(this) { - if (dir == null) { - dir = new DirectionProvider(this); - } - } - } - return dir; + public IGeoData currentGeo() { + return currentGeoDir().left; } public Float currentDirection() { - return currentDirObject().getMemory(); - } - - public StatusUpdater getStatusUpdater() { - return statusUpdater; + return currentGeoDir().right; } - public boolean isLiveMapHintShown() { - return liveMapHintShown; + public boolean isLiveMapHintShownInThisSession() { + return liveMapHintShownInThisSession; } - public void setLiveMapHintShown() { - liveMapHintShown = true; + public void setLiveMapHintShownInThisSession() { + liveMapHintShownInThisSession = true; } /** |
