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