aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-08-24 15:40:21 +0200
committerSamuel Tardieu <sam@rfc1149.net>2014-08-24 15:47:19 +0200
commit61d37bf56dd1601b6debd22e3b97cb269c1fdd14 (patch)
tree357251992ec85ef3e8c6e79dfd4d4874c366c463 /main/src
parentcf39e48c0eb9dc5770e75202846ce2f51dc9939f (diff)
downloadcgeo-61d37bf56dd1601b6debd22e3b97cb269c1fdd14.zip
cgeo-61d37bf56dd1601b6debd22e3b97cb269c1fdd14.tar.gz
cgeo-61d37bf56dd1601b6debd22e3b97cb269c1fdd14.tar.bz2
Allow the use of low-power rotation sensor on KitKat
If the user has chosen to use the low-power mode, the more noisy but lower power geomagnetic rotation sensor will be used. Both settings might be separated later, but at this time, this is so to allow easy testing.
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/sensors/RotationProvider.java19
1 files changed, 15 insertions, 4 deletions
diff --git a/main/src/cgeo/geocaching/sensors/RotationProvider.java b/main/src/cgeo/geocaching/sensors/RotationProvider.java
index 131b9b8..fc434bf 100644
--- a/main/src/cgeo/geocaching/sensors/RotationProvider.java
+++ b/main/src/cgeo/geocaching/sensors/RotationProvider.java
@@ -1,10 +1,12 @@
package cgeo.geocaching.sensors;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.RxUtils.LooperCallbacks;
import rx.Observable;
+import android.annotation.TargetApi;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
@@ -18,13 +20,22 @@ public class RotationProvider extends LooperCallbacks<Float> implements SensorEv
private final float[] rotationMatrix = new float[16];
private final float[] orientation = new float[4];
+ @TargetApi(19)
protected RotationProvider(final Context context) {
sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
- rotationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
- if (rotationSensor != null) {
- Log.d("RotationProvider: sensor found");
+ // The geomagnetic rotation vector introduced in Android 4.4 (API 19) requires less power. Favour it
+ // even if it is more sensible to noise in low-power settings.
+ final Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR);
+ if (sensor != null && Settings.useLowPowerMode()) {
+ rotationSensor = sensor;
+ Log.d("RotationProvider: geomagnetic (low-power) sensor found");
} else {
- Log.w("RotationProvider: no rotation sensor on this device");
+ rotationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
+ if (rotationSensor != null) {
+ Log.d("RotationProvider: sensor found");
+ } else {
+ Log.w("RotationProvider: no rotation sensor on this device");
+ }
}
}