aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/sensors/Sensors.java16
1 files changed, 7 insertions, 9 deletions
diff --git a/main/src/cgeo/geocaching/sensors/Sensors.java b/main/src/cgeo/geocaching/sensors/Sensors.java
index 80ed175..7a85ccb 100644
--- a/main/src/cgeo/geocaching/sensors/Sensors.java
+++ b/main/src/cgeo/geocaching/sensors/Sensors.java
@@ -89,18 +89,16 @@ public class Sensors {
}
// Combine the magnetic direction observable with the GPS when compass is disabled or speed is high enough.
-
final AtomicBoolean useDirectionFromGps = new AtomicBoolean(false);
- final Observable<Float> magneticDirectionObservable = RotationProvider.create(app, useLowPower).onErrorResumeNext(new Func1<Throwable, Observable<? extends Float>>() {
- @Override
- public Observable<? extends Float> call(final Throwable throwable) {
- return OrientationProvider.create(app);
- }
- }).onErrorResumeNext(new Func1<Throwable, Observable<? extends Float>>() {
+ // The rotation sensor seems to be bogus on some devices. We should start with the orientation one, except when we explicitely
+ // want to use the low-power geomagnetic rotation sensor or when we do not have an orientation sensor.
+ final boolean useRotationSensor = (Settings.useLowPowerMode() && RotationProvider.hasGeomagneticRotationSensor(app)) || !OrientationProvider.hasOrientationSensor(app);
+ final Observable<Float> sensorDirectionObservable = useRotationSensor ? RotationProvider.create(app, useLowPower) : OrientationProvider.create(app);
+ final Observable<Float> magneticDirectionObservable = sensorDirectionObservable.onErrorResumeNext(new Func1<Throwable, Observable<? extends Float>>() {
@Override
public Observable<? extends Float> call(final Throwable throwable) {
- Log.e("Device orientation will not be available as no suitable sensors were found, disabling compass");
+ Log.e("Device orientation is not available due to sensors error, disabling compass", throwable);
Settings.setUseCompass(false);
return Observable.<Float>never().startWith(0.0f);
}
@@ -111,7 +109,7 @@ public class Sensors {
}
});
- final Observable<Float> directionFromGpsObservable = geoDataObservable(true).filter(new Func1<GeoData, Boolean>() {
+ final Observable<Float> directionFromGpsObservable = geoDataObservableLowPower.filter(new Func1<GeoData, Boolean>() {
@Override
public Boolean call(final GeoData geoData) {
final boolean useGps = geoData.getSpeed() > 5.0f;