From c00d7691889a3c77f6b07f8ef65c2f84bee6091d Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 13 May 2021 08:17:17 +0200 Subject: [PATCH] SensorDataCycling: use Distance. --- .../opentracks/content/sensor/SensorDataCyclingTest.java | 5 +++-- .../java/de/dennisguse/opentracks/content/data/Distance.java | 4 ++++ .../opentracks/content/sensor/SensorDataCycling.java | 4 ++-- .../services/sensors/BluetoothRemoteSensorManager.java | 3 ++- .../java/de/dennisguse/opentracks/util/PreferencesUtils.java | 4 ++-- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/sensor/SensorDataCyclingTest.java b/src/androidTest/java/de/dennisguse/opentracks/content/sensor/SensorDataCyclingTest.java index ae9af596e..d18eb079b 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/sensor/SensorDataCyclingTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/sensor/SensorDataCyclingTest.java @@ -5,6 +5,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; +import de.dennisguse.opentracks.content.data.Distance; import de.dennisguse.opentracks.util.UintUtils; import static org.junit.Assert.assertEquals; @@ -100,7 +101,7 @@ public class SensorDataCyclingTest { SensorDataCycling.DistanceSpeed current = new SensorDataCycling.DistanceSpeed("sensorAddress", "sensorName", 2, 8016); // when - current.compute(previous, 2150); + current.compute(previous, Distance.ofMM(2150)); // then assertEquals(2.15, current.getValue().distance.toM(), 0.01); @@ -114,7 +115,7 @@ public class SensorDataCyclingTest { SensorDataCycling.DistanceSpeed current = new SensorDataCycling.DistanceSpeed("sensorAddress", "sensorName", 0, 2048); // when - current.compute(previous, 2000); + current.compute(previous, Distance.ofMM(2000)); // then assertEquals(2, current.getValue().distance.toM(), 0.01); diff --git a/src/main/java/de/dennisguse/opentracks/content/data/Distance.java b/src/main/java/de/dennisguse/opentracks/content/data/Distance.java index 365e5188e..071244992 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/Distance.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/Distance.java @@ -24,6 +24,10 @@ public class Distance { return of(distance_km * UnitConversions.KM_TO_M); } + public static Distance ofMM(double distance_mm) { + return of(distance_mm * UnitConversions.MM_TO_M); + } + public static Distance one(boolean metricUnit) { if (metricUnit) { return Distance.ofKilometer(1); diff --git a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataCycling.java b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataCycling.java index a5b6cfabd..b5275829c 100644 --- a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataCycling.java +++ b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataCycling.java @@ -123,7 +123,7 @@ public final class SensorDataCycling { return wheelRevolutionsTime; } - public void compute(DistanceSpeed previous, int wheel_circumference_mm) { + public void compute(DistanceSpeed previous, Distance wheelCircumference) { if (hasData() && previous != null && previous.hasData()) { float timeDiff_ms = UintUtils.diff(wheelRevolutionsTime, previous.wheelRevolutionsTime, UintUtils.UINT16_MAX) / 1024f * UnitConversions.S_TO_MS; Duration timeDiff = Duration.ofMillis((long) timeDiff_ms); @@ -134,7 +134,7 @@ public final class SensorDataCycling { long wheelDiff = UintUtils.diff(wheelRevolutionsCount, previous.wheelRevolutionsCount, UintUtils.UINT16_MAX); wheelDiff = Math.abs(wheelDiff); //HACK for Garmin Speed 2 as some of those seem to count backwards - Distance distance = Distance.of(wheelDiff * wheel_circumference_mm * UnitConversions.MM_TO_M); + Distance distance = wheelCircumference.multipliedBy(wheelDiff); Distance distanceOverall = distance; if (previous.hasValue()) { distanceOverall = distance.plus(previous.getValue().distanceOverall); diff --git a/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java b/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java index 85b1a43b3..47ca8814f 100644 --- a/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java @@ -25,6 +25,7 @@ import android.util.Log; import java.time.Duration; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.content.data.Distance; import de.dennisguse.opentracks.content.sensor.SensorData; import de.dennisguse.opentracks.content.sensor.SensorDataCycling; import de.dennisguse.opentracks.content.sensor.SensorDataSet; @@ -57,7 +58,7 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. private boolean started = false; private final SharedPreferences sharedPreferences; - private int preferenceWheelCircumference; + private Distance preferenceWheelCircumference; private final BluetoothConnectionManager.HeartRate heartRate = new BluetoothConnectionManager.HeartRate(this); private final BluetoothConnectionManager.CyclingCadence cyclingCadence = new BluetoothConnectionManager.CyclingCadence(this); diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index 6807a324e..5fdad16fb 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -142,9 +142,9 @@ public class PreferencesUtils { return getString(sharedPreferences, context, R.string.settings_sensor_bluetooth_cycling_speed_key, getBluetoothSensorAddressNone(context)); } - public static int getWheelCircumference(SharedPreferences sharedPreferences, Context context) { + public static Distance getWheelCircumference(SharedPreferences sharedPreferences, Context context) { final int DEFAULT = Integer.parseInt(context.getResources().getString(R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_default)); - return getInt(sharedPreferences, context, R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_key, DEFAULT); + return Distance.ofMM(getInt(sharedPreferences, context, R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_key, DEFAULT)); } public static String getBluetoothCyclingPowerSensorAddress(SharedPreferences sharedPreferences, Context context) {