diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-08-24 15:40:21 +0200 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-08-24 15:47:19 +0200 |
| commit | 61d37bf56dd1601b6debd22e3b97cb269c1fdd14 (patch) | |
| tree | 357251992ec85ef3e8c6e79dfd4d4874c366c463 /main/src | |
| parent | cf39e48c0eb9dc5770e75202846ce2f51dc9939f (diff) | |
| download | cgeo-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.java | 19 |
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"); + } } } |
