diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/sensors/ElevationSumManagerTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/sensors/ElevationSumManagerTest.java
index 720ebd749..6c1c2b40c 100644
--- a/src/androidTest/java/de/dennisguse/opentracks/services/sensors/ElevationSumManagerTest.java
+++ b/src/androidTest/java/de/dennisguse/opentracks/services/sensors/ElevationSumManagerTest.java
@@ -24,6 +24,9 @@ public class ElevationSumManagerTest {
@Test
public void getElevationGainLoss_downhill() {
+ // given
+ elevationSumManager.setConnected(true);
+
// then
addSensorValue(elevationSumManager, new float[]{1015f, 1015.01f, 1015.02f, 1015.03f, 1015.04f, 1015.05f, 1015.06f, 1015.07f, 1015.08f, 1015.09f, 1015.10f, 1015.11f, 1015.12f, 1015.13f, 1015.14f, 1015.15f});
@@ -31,4 +34,17 @@ public class ElevationSumManagerTest {
Assert.assertEquals(0f, elevationSumManager.getElevationGain_m(), 0.01);
Assert.assertEquals(-48.0, elevationSumManager.getElevationLoss_m(), 0.01);
}
+
+ @Test
+ public void sensorUnavailable() {
+ // given
+ elevationSumManager.setConnected(false);
+
+ // then
+ elevationSumManager.onSensorValueChanged(999f);
+
+ // then
+ Assert.assertNull(elevationSumManager.getElevationGain_m());
+ Assert.assertNull(elevationSumManager.getElevationLoss_m());
+ }
}
\ No newline at end of file
diff --git a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java
index 70fddb0a8..decb6a364 100644
--- a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java
+++ b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java
@@ -32,7 +32,7 @@ public class TrackPoint {
private Float heartRate_bpm = null;
private Float cyclingCadence_rpm = null;
private Float power = null;
- private float elevationGain = Float.NaN;
+ private Float elevationGain = null;
public TrackPoint() {
this.location = new Location("");
@@ -94,14 +94,14 @@ public class TrackPoint {
}
public boolean hasElevationGain() {
- return !Float.isNaN(elevationGain);
+ return elevationGain != null;
}
public float getElevationGain() {
return elevationGain;
}
- public void setElevationGain(float elevationGain) {
+ public void setElevationGain(Float elevationGain) {
this.elevationGain = elevationGain;
}
diff --git a/src/main/java/de/dennisguse/opentracks/services/sensors/ElevationSumManager.java b/src/main/java/de/dennisguse/opentracks/services/sensors/ElevationSumManager.java
index 516c29c3d..f8ab382b9 100644
--- a/src/main/java/de/dennisguse/opentracks/services/sensors/ElevationSumManager.java
+++ b/src/main/java/de/dennisguse/opentracks/services/sensors/ElevationSumManager.java
@@ -7,6 +7,7 @@ import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import de.dennisguse.opentracks.util.PressureSensorUtils;
@@ -37,9 +38,10 @@ public class ElevationSumManager implements SensorEventListener {
if (pressureSensor == null) {
Log.w(TAG, "No pressure sensor available.");
isConnected = false;
+ } else {
+ isConnected = sensorManager.registerListener(this, pressureSensor, SAMPLING_RATE);
}
- isConnected = sensorManager.registerListener(this, pressureSensor, SAMPLING_RATE);
lastAcceptedPressureValue_hPa = Float.NaN;
reset();
}
@@ -58,12 +60,19 @@ public class ElevationSumManager implements SensorEventListener {
return isConnected;
}
- public float getElevationGain_m() {
- return elevationGain_m;
+ @VisibleForTesting
+ public void setConnected(boolean isConnected) {
+ this.isConnected = isConnected;
}
- public float getElevationLoss_m() {
- return elevationLoss_m;
+ public @Nullable
+ Float getElevationGain_m() {
+ return isConnected ? elevationGain_m : null;
+ }
+
+ public @Nullable
+ Float getElevationLoss_m() {
+ return isConnected ? elevationLoss_m : null;
}
public void reset() {
@@ -79,6 +88,10 @@ public class ElevationSumManager implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent event) {
+ if (!isConnected) {
+ Log.w(TAG, "Not connected to sensor, cannot process data.");
+ return;
+ }
onSensorValueChanged(event.values[0]);
}
diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml
index bc72b78a6..fef1d4469 100644
--- a/src/main/res/values/settings.xml
+++ b/src/main/res/values/settings.xml
@@ -5,7 +5,7 @@
false
statsShowGradeElevation
- false
+ true
trackdetail_show_on_lockscreen_while_recording
false