forked from upstream-mirrors/OpenTracks
Merge pull request #1710 from OpenTracksApp/cleanup
Cleanup: use record if possible
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package de.dennisguse.opentracks;
|
package de.dennisguse.opentracks;
|
||||||
|
|
||||||
|
|
||||||
import static androidx.test.espresso.Espresso.onData;
|
|
||||||
import static androidx.test.espresso.Espresso.onView;
|
import static androidx.test.espresso.Espresso.onView;
|
||||||
import static androidx.test.espresso.action.ViewActions.click;
|
import static androidx.test.espresso.action.ViewActions.click;
|
||||||
import static androidx.test.espresso.action.ViewActions.longClick;
|
import static androidx.test.espresso.action.ViewActions.longClick;
|
||||||
@@ -12,7 +11,6 @@ import static androidx.test.espresso.matcher.ViewMatchers.withParent;
|
|||||||
import static androidx.test.espresso.matcher.ViewMatchers.withParentIndex;
|
import static androidx.test.espresso.matcher.ViewMatchers.withParentIndex;
|
||||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||||
import static org.hamcrest.Matchers.allOf;
|
import static org.hamcrest.Matchers.allOf;
|
||||||
import static org.hamcrest.Matchers.anything;
|
|
||||||
import static de.dennisguse.opentracks.util.EspressoUtils.childAtPosition;
|
import static de.dennisguse.opentracks.util.EspressoUtils.childAtPosition;
|
||||||
import static de.dennisguse.opentracks.util.EspressoUtils.waitFor;
|
import static de.dennisguse.opentracks.util.EspressoUtils.waitFor;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package de.dennisguse.opentracks;
|
package de.dennisguse.opentracks;
|
||||||
|
|
||||||
import static androidx.test.espresso.Espresso.onData;
|
|
||||||
import static androidx.test.espresso.Espresso.onView;
|
import static androidx.test.espresso.Espresso.onView;
|
||||||
import static androidx.test.espresso.action.ViewActions.click;
|
import static androidx.test.espresso.action.ViewActions.click;
|
||||||
import static androidx.test.espresso.action.ViewActions.longClick;
|
import static androidx.test.espresso.action.ViewActions.longClick;
|
||||||
@@ -11,7 +10,6 @@ import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
|||||||
import static androidx.test.espresso.matcher.ViewMatchers.withParent;
|
import static androidx.test.espresso.matcher.ViewMatchers.withParent;
|
||||||
import static androidx.test.espresso.matcher.ViewMatchers.withParentIndex;
|
import static androidx.test.espresso.matcher.ViewMatchers.withParentIndex;
|
||||||
import static org.hamcrest.Matchers.allOf;
|
import static org.hamcrest.Matchers.allOf;
|
||||||
import static org.hamcrest.Matchers.anything;
|
|
||||||
import static de.dennisguse.opentracks.util.EspressoUtils.selectTabAtIndex;
|
import static de.dennisguse.opentracks.util.EspressoUtils.selectTabAtIndex;
|
||||||
import static de.dennisguse.opentracks.util.EspressoUtils.waitFor;
|
import static de.dennisguse.opentracks.util.EspressoUtils.waitFor;
|
||||||
|
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ public class ChartPointTest {
|
|||||||
statistics.setTotalTime(Duration.ofSeconds(1000));
|
statistics.setTotalTime(Duration.ofSeconds(1000));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
ChartPoint point = new ChartPoint(statistics, TrackStubUtils.createDefaultTrackPoint(), Speed.of(0), false, UnitSystem.IMPERIAL_FEET);
|
ChartPoint point = ChartPoint.create(statistics, TrackStubUtils.createDefaultTrackPoint(), Speed.of(0), false, UnitSystem.IMPERIAL_FEET);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(1000000, (long) point.getTimeOrDistance());
|
assertEquals(1000000, (long) point.timeOrDistance());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -40,10 +40,10 @@ public class ChartPointTest {
|
|||||||
statistics.setTotalDistance(Distance.of(1000));
|
statistics.setTotalDistance(Distance.of(1000));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
ChartPoint point = new ChartPoint(statistics, TrackStubUtils.createDefaultTrackPoint(), Speed.of(0), true, UnitSystem.METRIC);
|
ChartPoint point = ChartPoint.create(statistics, TrackStubUtils.createDefaultTrackPoint(), Speed.of(0), true, UnitSystem.METRIC);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(1, (long) point.getTimeOrDistance());
|
assertEquals(1, (long) point.timeOrDistance());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -54,12 +54,12 @@ public class ChartPointTest {
|
|||||||
.setAltitude(Altitude.EGM2008.of(50));
|
.setAltitude(Altitude.EGM2008.of(50));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
ChartPoint point = new ChartPoint(statistics, trackPoint, Speed.of(10), false, UnitSystem.METRIC);
|
ChartPoint point = ChartPoint.create(statistics, trackPoint, Speed.of(10), false, UnitSystem.METRIC);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(50, point.getAltitude(), 0.01);
|
assertEquals(50, point.altitude(), 0.01);
|
||||||
assertEquals(36, point.getSpeed(), 0.01);
|
assertEquals(36, point.speed(), 0.01);
|
||||||
assertEquals(1.66, point.getPace(), 0.01);
|
assertEquals(1.66, point.pace(), 0.01);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -69,12 +69,12 @@ public class ChartPointTest {
|
|||||||
TrackPoint trackPoint = TrackStubUtils.createDefaultTrackPoint()
|
TrackPoint trackPoint = TrackStubUtils.createDefaultTrackPoint()
|
||||||
.setAltitude(Altitude.EGM2008.of(50));
|
.setAltitude(Altitude.EGM2008.of(50));
|
||||||
// when
|
// when
|
||||||
ChartPoint point = new ChartPoint(statistics, trackPoint, Speed.of(10), false, UnitSystem.METRIC);
|
ChartPoint point = ChartPoint.create(statistics, trackPoint, Speed.of(10), false, UnitSystem.METRIC);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertNull(point.getHeartRate());
|
assertNull(point.heartRate());
|
||||||
assertNull(point.getCadence());
|
assertNull(point.cadence());
|
||||||
assertNull(point.getPower());
|
assertNull(point.power());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -89,11 +89,11 @@ public class ChartPointTest {
|
|||||||
TrackStatistics statistics = new TrackStatistics();
|
TrackStatistics statistics = new TrackStatistics();
|
||||||
|
|
||||||
// when
|
// when
|
||||||
ChartPoint point = new ChartPoint(statistics, trackPoint, Speed.of(10), false, UnitSystem.METRIC);
|
ChartPoint point = ChartPoint.create(statistics, trackPoint, Speed.of(10), false, UnitSystem.METRIC);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(100.0, point.getHeartRate(), 0.01);
|
assertEquals(100.0, point.heartRate(), 0.01);
|
||||||
assertEquals(101.0, point.getCadence(), 0.01);
|
assertEquals(101.0, point.cadence(), 0.01);
|
||||||
assertEquals(102.0, point.getPower(), 0.01);
|
assertEquals(102.0, point.power(), 0.01);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ public class ChartValueSeriesTest {
|
|||||||
18) {
|
18) {
|
||||||
@Override
|
@Override
|
||||||
Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
||||||
return chartPoint.getAltitude();
|
return chartPoint.altitude();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -80,9 +80,9 @@ public class ChartValueSeriesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testVerySmallUpdates() {
|
public void testVerySmallUpdates() {
|
||||||
series.update(new ChartPoint(1f));
|
series.update(withAltitude(1f));
|
||||||
series.update(new ChartPoint(2f));
|
series.update(withAltitude(2f));
|
||||||
series.update(new ChartPoint(3f));
|
series.update(withAltitude(3f));
|
||||||
series.updateDimension();
|
series.updateDimension();
|
||||||
assertEquals(1, series.getInterval());
|
assertEquals(1, series.getInterval());
|
||||||
assertEquals(1, series.getMinMarkerValue());
|
assertEquals(1, series.getMinMarkerValue());
|
||||||
@@ -91,8 +91,8 @@ public class ChartValueSeriesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSmallUpdates() {
|
public void testSmallUpdates() {
|
||||||
series.update(new ChartPoint(0));
|
series.update(withAltitude(0));
|
||||||
series.update(new ChartPoint(10));
|
series.update(withAltitude(10));
|
||||||
series.updateDimension();
|
series.updateDimension();
|
||||||
assertEquals(100, series.getInterval());
|
assertEquals(100, series.getInterval());
|
||||||
assertEquals(0, series.getMinMarkerValue());
|
assertEquals(0, series.getMinMarkerValue());
|
||||||
@@ -101,8 +101,8 @@ public class ChartValueSeriesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBigUpdates() {
|
public void testBigUpdates() {
|
||||||
series.update(new ChartPoint(0));
|
series.update(withAltitude(0));
|
||||||
series.update(new ChartPoint(901));
|
series.update(withAltitude(901));
|
||||||
series.updateDimension();
|
series.updateDimension();
|
||||||
assertEquals(1000, series.getInterval());
|
assertEquals(1000, series.getInterval());
|
||||||
assertEquals(0, series.getMinMarkerValue());
|
assertEquals(0, series.getMinMarkerValue());
|
||||||
@@ -111,11 +111,23 @@ public class ChartValueSeriesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotZeroBasedUpdates() {
|
public void testNotZeroBasedUpdates() {
|
||||||
series.update(new ChartPoint(220));
|
series.update(withAltitude(220));
|
||||||
series.update(new ChartPoint(250));
|
series.update(withAltitude(250));
|
||||||
series.updateDimension();
|
series.updateDimension();
|
||||||
assertEquals(100, series.getInterval());
|
assertEquals(100, series.getInterval());
|
||||||
assertEquals(200, series.getMinMarkerValue());
|
assertEquals(200, series.getMinMarkerValue());
|
||||||
assertEquals(700, series.getMaxMarkerValue());
|
assertEquals(700, series.getMaxMarkerValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ChartPoint withAltitude(double altitude) {
|
||||||
|
return new ChartPoint(
|
||||||
|
0,
|
||||||
|
altitude,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-30
@@ -986,13 +986,13 @@ public class CustomContentProviderUtilsTest {
|
|||||||
|
|
||||||
// then
|
// then
|
||||||
assertTrue(sensorStatistics.hasHeartRate());
|
assertTrue(sensorStatistics.hasHeartRate());
|
||||||
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f);
|
assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f);
|
assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
|
||||||
assertTrue(sensorStatistics.hasCadence());
|
assertTrue(sensorStatistics.hasCadence());
|
||||||
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f);
|
assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f);
|
assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
|
||||||
assertTrue(sensorStatistics.hasPower());
|
assertTrue(sensorStatistics.hasPower());
|
||||||
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f);
|
assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1018,8 +1018,8 @@ public class CustomContentProviderUtilsTest {
|
|||||||
|
|
||||||
// then
|
// then
|
||||||
assertTrue(sensorStatistics.hasHeartRate());
|
assertTrue(sensorStatistics.hasHeartRate());
|
||||||
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f);
|
assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f);
|
assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
|
||||||
assertFalse(sensorStatistics.hasCadence());
|
assertFalse(sensorStatistics.hasCadence());
|
||||||
assertFalse(sensorStatistics.hasPower());
|
assertFalse(sensorStatistics.hasPower());
|
||||||
}
|
}
|
||||||
@@ -1048,8 +1048,8 @@ public class CustomContentProviderUtilsTest {
|
|||||||
// then
|
// then
|
||||||
assertFalse(sensorStatistics.hasHeartRate());
|
assertFalse(sensorStatistics.hasHeartRate());
|
||||||
assertTrue(sensorStatistics.hasCadence());
|
assertTrue(sensorStatistics.hasCadence());
|
||||||
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f);
|
assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f);
|
assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
|
||||||
assertFalse(sensorStatistics.hasPower());
|
assertFalse(sensorStatistics.hasPower());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1078,7 +1078,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertFalse(sensorStatistics.hasHeartRate());
|
assertFalse(sensorStatistics.hasHeartRate());
|
||||||
assertFalse(sensorStatistics.hasCadence());
|
assertFalse(sensorStatistics.hasCadence());
|
||||||
assertTrue(sensorStatistics.hasPower());
|
assertTrue(sensorStatistics.hasPower());
|
||||||
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f);
|
assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1111,11 +1111,11 @@ public class CustomContentProviderUtilsTest {
|
|||||||
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
|
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f);
|
assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f);
|
assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
|
||||||
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f);
|
assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f);
|
assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
|
||||||
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f);
|
assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1156,11 +1156,11 @@ public class CustomContentProviderUtilsTest {
|
|||||||
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
|
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f);
|
assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f);
|
assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
|
||||||
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f);
|
assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f);
|
assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
|
||||||
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f);
|
assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1201,11 +1201,11 @@ public class CustomContentProviderUtilsTest {
|
|||||||
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
|
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f);
|
assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f);
|
assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
|
||||||
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f);
|
assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
|
||||||
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f);
|
assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
|
||||||
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f);
|
assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testGetSensorStats_randomData(int totalPoints, boolean withStartSegments) {
|
private void testGetSensorStats_randomData(int totalPoints, boolean withStartSegments) {
|
||||||
@@ -1232,11 +1232,11 @@ public class CustomContentProviderUtilsTest {
|
|||||||
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
|
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0.01f);
|
assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0.01f);
|
||||||
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0.01f);
|
assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0.01f);
|
||||||
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0.01f);
|
assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0.01f);
|
||||||
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0.01f);
|
assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0.01f);
|
||||||
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0.01f);
|
assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0.01f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selection = filter.buildSelection();
|
SelectionData selection = filter.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertNull(selection.getSelection());
|
assertNull(selection.selection());
|
||||||
assertNull(selection.getSelectionArgs());
|
assertNull(selection.selectionArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -37,9 +37,9 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selection = filter.buildSelection();
|
SelectionData selection = filter.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals(selection.getSelection(), "_id IN (?)");
|
assertEquals(selection.selection(), "_id IN (?)");
|
||||||
assertEquals(selection.getSelectionArgs().length, 1);
|
assertEquals(selection.selectionArgs().length, 1);
|
||||||
assertEquals(selection.getSelectionArgs()[0], "1");
|
assertEquals(selection.selectionArgs()[0], "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -57,11 +57,11 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selection = filter.buildSelection();
|
SelectionData selection = filter.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals(selection.getSelection(), "_id IN (?,?,?)");
|
assertEquals(selection.selection(), "_id IN (?,?,?)");
|
||||||
assertEquals(selection.getSelectionArgs().length, 3);
|
assertEquals(selection.selectionArgs().length, 3);
|
||||||
assertEquals(selection.getSelectionArgs()[0], "1");
|
assertEquals(selection.selectionArgs()[0], "1");
|
||||||
assertEquals(selection.getSelectionArgs()[1], "2");
|
assertEquals(selection.selectionArgs()[1], "2");
|
||||||
assertEquals(selection.getSelectionArgs()[2], "3");
|
assertEquals(selection.selectionArgs()[2], "3");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -73,9 +73,9 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selection = filter.buildSelection();
|
SelectionData selection = filter.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals(selection.getSelection(), "category IN (?)");
|
assertEquals(selection.selection(), "category IN (?)");
|
||||||
assertEquals(selection.getSelectionArgs().length, 1);
|
assertEquals(selection.selectionArgs().length, 1);
|
||||||
assertEquals(selection.getSelectionArgs()[0], "running");
|
assertEquals(selection.selectionArgs()[0], "running");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -91,12 +91,12 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selection = filter.buildSelection();
|
SelectionData selection = filter.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals(selection.getSelection(), "category IN (?,?,?,?)");
|
assertEquals(selection.selection(), "category IN (?,?,?,?)");
|
||||||
assertEquals(selection.getSelectionArgs().length, 4);
|
assertEquals(selection.selectionArgs().length, 4);
|
||||||
assertEquals(selection.getSelectionArgs()[0], "running");
|
assertEquals(selection.selectionArgs()[0], "running");
|
||||||
assertEquals(selection.getSelectionArgs()[1], "road biking");
|
assertEquals(selection.selectionArgs()[1], "road biking");
|
||||||
assertEquals(selection.getSelectionArgs()[2], "mountain biking");
|
assertEquals(selection.selectionArgs()[2], "mountain biking");
|
||||||
assertEquals(selection.getSelectionArgs()[3], "trail walking");
|
assertEquals(selection.selectionArgs()[3], "trail walking");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -114,16 +114,16 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selectionOk = filterOk.buildSelection();
|
SelectionData selectionOk = filterOk.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertNull(selectionWrong1.getSelection());
|
assertNull(selectionWrong1.selection());
|
||||||
assertNull(selectionWrong1.getSelectionArgs());
|
assertNull(selectionWrong1.selectionArgs());
|
||||||
|
|
||||||
assertNull(selectionWrong2.getSelection());
|
assertNull(selectionWrong2.selection());
|
||||||
assertNull(selectionWrong2.getSelectionArgs());
|
assertNull(selectionWrong2.selectionArgs());
|
||||||
|
|
||||||
assertEquals(selectionOk.getSelection(), "starttime BETWEEN ? AND ?");
|
assertEquals(selectionOk.selection(), "starttime BETWEEN ? AND ?");
|
||||||
assertEquals(selectionOk.getSelectionArgs().length, 2);
|
assertEquals(selectionOk.selectionArgs().length, 2);
|
||||||
assertEquals(selectionOk.getSelectionArgs()[0], Long.toString(instant.toEpochMilli()));
|
assertEquals(selectionOk.selectionArgs()[0], Long.toString(instant.toEpochMilli()));
|
||||||
assertEquals(selectionOk.getSelectionArgs()[1], Long.toString(instant.toEpochMilli() + oneDay));
|
assertEquals(selectionOk.selectionArgs()[1], Long.toString(instant.toEpochMilli() + oneDay));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -143,13 +143,13 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selection = filter.buildSelection();
|
SelectionData selection = filter.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals(selection.getSelection(), "_id IN (?,?,?) AND category IN (?,?)");
|
assertEquals(selection.selection(), "_id IN (?,?,?) AND category IN (?,?)");
|
||||||
assertEquals(selection.getSelectionArgs().length, 5);
|
assertEquals(selection.selectionArgs().length, 5);
|
||||||
assertEquals(selection.getSelectionArgs()[0], "1");
|
assertEquals(selection.selectionArgs()[0], "1");
|
||||||
assertEquals(selection.getSelectionArgs()[1], "2");
|
assertEquals(selection.selectionArgs()[1], "2");
|
||||||
assertEquals(selection.getSelectionArgs()[2], "3");
|
assertEquals(selection.selectionArgs()[2], "3");
|
||||||
assertEquals(selection.getSelectionArgs()[3], "running");
|
assertEquals(selection.selectionArgs()[3], "running");
|
||||||
assertEquals(selection.getSelectionArgs()[4], "road biking");
|
assertEquals(selection.selectionArgs()[4], "road biking");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -172,13 +172,13 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selection = filter.buildSelection();
|
SelectionData selection = filter.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals(selection.getSelection(), "_id IN (?,?,?) AND starttime BETWEEN ? AND ?");
|
assertEquals(selection.selection(), "_id IN (?,?,?) AND starttime BETWEEN ? AND ?");
|
||||||
assertEquals(selection.getSelectionArgs().length, 5);
|
assertEquals(selection.selectionArgs().length, 5);
|
||||||
assertEquals(selection.getSelectionArgs()[0], "1");
|
assertEquals(selection.selectionArgs()[0], "1");
|
||||||
assertEquals(selection.getSelectionArgs()[1], "2");
|
assertEquals(selection.selectionArgs()[1], "2");
|
||||||
assertEquals(selection.getSelectionArgs()[2], "3");
|
assertEquals(selection.selectionArgs()[2], "3");
|
||||||
assertEquals(selection.getSelectionArgs()[3], Long.toString(instant.toEpochMilli()));
|
assertEquals(selection.selectionArgs()[3], Long.toString(instant.toEpochMilli()));
|
||||||
assertEquals(selection.getSelectionArgs()[4], Long.toString(instant.toEpochMilli() + oneDay));
|
assertEquals(selection.selectionArgs()[4], Long.toString(instant.toEpochMilli() + oneDay));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -196,11 +196,11 @@ public class TrackSelectionTest extends TestCase {
|
|||||||
SelectionData selection = filter.buildSelection();
|
SelectionData selection = filter.buildSelection();
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals(selection.getSelection(), "category IN (?,?) AND starttime BETWEEN ? AND ?");
|
assertEquals(selection.selection(), "category IN (?,?) AND starttime BETWEEN ? AND ?");
|
||||||
assertEquals(selection.getSelectionArgs().length, 4);
|
assertEquals(selection.selectionArgs().length, 4);
|
||||||
assertEquals(selection.getSelectionArgs()[0], "running");
|
assertEquals(selection.selectionArgs()[0], "running");
|
||||||
assertEquals(selection.getSelectionArgs()[1], "road biking");
|
assertEquals(selection.selectionArgs()[1], "road biking");
|
||||||
assertEquals(selection.getSelectionArgs()[2], Long.toString(instant.toEpochMilli()));
|
assertEquals(selection.selectionArgs()[2], Long.toString(instant.toEpochMilli()));
|
||||||
assertEquals(selection.getSelectionArgs()[3], Long.toString(instant.toEpochMilli() + oneDay));
|
assertEquals(selection.selectionArgs()[3], Long.toString(instant.toEpochMilli() + oneDay));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ public class ChartFragment extends Fragment implements TrackDataHub.Listener {
|
|||||||
|
|
||||||
public void onSampledInTrackPoint(@NonNull TrackPoint trackPoint, @NonNull TrackStatistics trackStatistics) {
|
public void onSampledInTrackPoint(@NonNull TrackPoint trackPoint, @NonNull TrackStatistics trackStatistics) {
|
||||||
if (isResumed()) {
|
if (isResumed()) {
|
||||||
ChartPoint point = new ChartPoint(trackStatistics, trackPoint, trackPoint.getSpeed(), chartByDistance, viewBinding.chartView.getUnitSystem());
|
ChartPoint point = ChartPoint.create(trackStatistics, trackPoint, trackPoint.getSpeed(), chartByDistance, viewBinding.chartView.getUnitSystem());
|
||||||
pendingPoints.add(point);
|
pendingPoints.add(point);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package de.dennisguse.opentracks.chart;
|
package de.dennisguse.opentracks.chart;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
|
||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.Distance;
|
import de.dennisguse.opentracks.data.models.Distance;
|
||||||
import de.dennisguse.opentracks.data.models.Speed;
|
import de.dennisguse.opentracks.data.models.Speed;
|
||||||
@@ -9,81 +8,43 @@ import de.dennisguse.opentracks.data.models.TrackPoint;
|
|||||||
import de.dennisguse.opentracks.settings.UnitSystem;
|
import de.dennisguse.opentracks.settings.UnitSystem;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
|
|
||||||
public class ChartPoint {
|
public record ChartPoint(
|
||||||
//X-axis
|
//X-axis
|
||||||
private double timeOrDistance;
|
double timeOrDistance,
|
||||||
|
|
||||||
//Y-axis
|
//Y-axis
|
||||||
private Double altitude;
|
Double altitude,
|
||||||
private Double speed;
|
Double speed,
|
||||||
private Double pace;
|
Double pace,
|
||||||
private Double heartRate;
|
Double heartRate,
|
||||||
private Double cadence;
|
Double cadence,
|
||||||
private Double power;
|
Double power
|
||||||
|
) {
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
@VisibleForTesting
|
|
||||||
ChartPoint(double altitude) {
|
|
||||||
this.altitude = altitude;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChartPoint(@NonNull TrackStatistics trackStatistics, @NonNull TrackPoint trackPoint, Speed smoothedSpeed, boolean chartByDistance, UnitSystem unitSystem) {
|
public static ChartPoint create(@NonNull TrackStatistics trackStatistics, @NonNull TrackPoint trackPoint, Speed smoothedSpeed, boolean chartByDistance, UnitSystem unitSystem) {
|
||||||
if (chartByDistance) {
|
return new ChartPoint(
|
||||||
timeOrDistance = trackStatistics.getTotalDistance().toKM_Miles(unitSystem);
|
chartByDistance
|
||||||
} else {
|
? trackStatistics.getTotalDistance().toKM_Miles(unitSystem)
|
||||||
timeOrDistance = trackStatistics.getTotalTime().toMillis();
|
: trackStatistics.getTotalTime().toMillis(),
|
||||||
}
|
trackPoint.hasAltitude()
|
||||||
|
? Distance.of(trackPoint.getAltitude().toM()).toM_FT(unitSystem)
|
||||||
if (trackPoint.hasAltitude()) {
|
: null,
|
||||||
altitude = Distance.of(trackPoint.getAltitude().toM()).toM_FT(unitSystem);
|
smoothedSpeed != null
|
||||||
}
|
? smoothedSpeed.to(unitSystem)
|
||||||
|
: null,
|
||||||
if (smoothedSpeed != null) {
|
smoothedSpeed != null
|
||||||
speed = smoothedSpeed.to(unitSystem);
|
? smoothedSpeed.toPace(unitSystem).toSeconds() / 60d
|
||||||
pace = smoothedSpeed.toPace(unitSystem).toSeconds() / 60d;
|
: null,
|
||||||
}
|
trackPoint.hasHeartRate()
|
||||||
if (trackPoint.hasHeartRate()) {
|
? (double) trackPoint.getHeartRate().getBPM()
|
||||||
heartRate = (double) trackPoint.getHeartRate().getBPM();
|
: null,
|
||||||
}
|
trackPoint.hasCadence()
|
||||||
if (trackPoint.hasCadence()) {
|
? (double) trackPoint.getCadence().getRPM()
|
||||||
cadence = (double) trackPoint.getCadence().getRPM();
|
: null,
|
||||||
}
|
trackPoint.hasPower()
|
||||||
if (trackPoint.hasPower()) {
|
? (double) trackPoint.getPower().getW()
|
||||||
power = (double) trackPoint.getPower().getW();
|
: null
|
||||||
}
|
);
|
||||||
}
|
|
||||||
|
|
||||||
public double getTimeOrDistance() {
|
|
||||||
return timeOrDistance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getAltitude() {
|
|
||||||
return altitude;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getSpeed() {
|
|
||||||
return speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getPace() {
|
|
||||||
return pace;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getHeartRate() {
|
|
||||||
return heartRate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getCadence() {
|
|
||||||
return cadence;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getPower() {
|
|
||||||
return power;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "ChartPoint{" + "timeOrDistance=" + timeOrDistance + '}';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ public class ChartView extends View {
|
|||||||
fontSizeMedium) {
|
fontSizeMedium) {
|
||||||
@Override
|
@Override
|
||||||
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
||||||
return chartPoint.getAltitude();
|
return chartPoint.altitude();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -232,7 +232,7 @@ public class ChartView extends View {
|
|||||||
fontSizeMedium) {
|
fontSizeMedium) {
|
||||||
@Override
|
@Override
|
||||||
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
||||||
return chartPoint.getSpeed();
|
return chartPoint.speed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -255,7 +255,7 @@ public class ChartView extends View {
|
|||||||
fontSizeMedium) {
|
fontSizeMedium) {
|
||||||
@Override
|
@Override
|
||||||
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
||||||
return chartPoint.getPace();
|
return chartPoint.pace();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -278,7 +278,7 @@ public class ChartView extends View {
|
|||||||
fontSizeMedium) {
|
fontSizeMedium) {
|
||||||
@Override
|
@Override
|
||||||
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
||||||
return chartPoint.getHeartRate();
|
return chartPoint.heartRate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -300,7 +300,7 @@ public class ChartView extends View {
|
|||||||
fontSizeMedium) {
|
fontSizeMedium) {
|
||||||
@Override
|
@Override
|
||||||
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
||||||
return chartPoint.getCadence();
|
return chartPoint.cadence();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -321,7 +321,7 @@ public class ChartView extends View {
|
|||||||
fontSizeMedium) {
|
fontSizeMedium) {
|
||||||
@Override
|
@Override
|
||||||
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
||||||
return chartPoint.getPower();
|
return chartPoint.power();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -425,7 +425,7 @@ public class ChartView extends View {
|
|||||||
synchronized (chartPoints) {
|
synchronized (chartPoints) {
|
||||||
chartPoints.addAll(dataPoints);
|
chartPoints.addAll(dataPoints);
|
||||||
for (ChartPoint dataPoint : dataPoints) {
|
for (ChartPoint dataPoint : dataPoints) {
|
||||||
xExtremityMonitor.update(dataPoint.getTimeOrDistance());
|
xExtremityMonitor.update(dataPoint.timeOrDistance());
|
||||||
for (ChartValueSeries i : seriesList) {
|
for (ChartValueSeries i : seriesList) {
|
||||||
i.update(dataPoint);
|
i.update(dataPoint);
|
||||||
}
|
}
|
||||||
@@ -887,7 +887,7 @@ public class ChartView extends View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double value = series.extractDataFromChartPoint(point);
|
double value = series.extractDataFromChartPoint(point);
|
||||||
int x = getX(point.getTimeOrDistance());
|
int x = getX(point.timeOrDistance());
|
||||||
int y = getY(series, value);
|
int y = getY(series, value);
|
||||||
|
|
||||||
// start from lower left corner
|
// start from lower left corner
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ public class ContentProviderUtils {
|
|||||||
public List<Track> getTracks(ContentProviderSelectionInterface selection) {
|
public List<Track> getTracks(ContentProviderSelectionInterface selection) {
|
||||||
SelectionData selectionData = selection.buildSelection();
|
SelectionData selectionData = selection.buildSelection();
|
||||||
ArrayList<Track> tracks = new ArrayList<>();
|
ArrayList<Track> tracks = new ArrayList<>();
|
||||||
try (Cursor cursor = getTrackCursor(selectionData.getSelection(), selectionData.getSelectionArgs(), TracksColumns._ID)) {
|
try (Cursor cursor = getTrackCursor(selectionData.selection(), selectionData.selectionArgs(), TracksColumns._ID)) {
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
tracks.ensureCapacity(cursor.getCount());
|
tracks.ensureCapacity(cursor.getCount());
|
||||||
do {
|
do {
|
||||||
|
|||||||
@@ -1,24 +1,11 @@
|
|||||||
package de.dennisguse.opentracks.data;
|
package de.dennisguse.opentracks.data;
|
||||||
|
|
||||||
public class SelectionData {
|
public record SelectionData(
|
||||||
private final String selection;
|
String selection,
|
||||||
private final String[] selectionArgs;
|
String[] selectionArgs
|
||||||
|
) {
|
||||||
|
|
||||||
public SelectionData() {
|
public SelectionData() {
|
||||||
selection = null;
|
this(null, null);
|
||||||
selectionArgs = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SelectionData(String selection, String[] selectionArgs) {
|
|
||||||
this.selection = selection;
|
|
||||||
this.selectionArgs = selectionArgs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSelection() {
|
|
||||||
return selection;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getSelectionArgs() {
|
|
||||||
return selectionArgs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -254,24 +254,24 @@ public class StatisticsRecordedFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sensorStatistics.hasHeartRate()) {
|
if (sensorStatistics.hasHeartRate()) {
|
||||||
String maxBPM = String.valueOf(Math.round(sensorStatistics.getMaxHeartRate().getBPM()));
|
String maxBPM = String.valueOf(Math.round(sensorStatistics.maxHeartRate().getBPM()));
|
||||||
String avgBPM = String.valueOf(Math.round(sensorStatistics.getAvgHeartRate().getBPM()));
|
String avgBPM = String.valueOf(Math.round(sensorStatistics.avgHeartRate().getBPM()));
|
||||||
|
|
||||||
viewBinding.statsHeartRateGroup.setVisibility(View.VISIBLE);
|
viewBinding.statsHeartRateGroup.setVisibility(View.VISIBLE);
|
||||||
viewBinding.statsMaxHeartRateValue.setText(maxBPM);
|
viewBinding.statsMaxHeartRateValue.setText(maxBPM);
|
||||||
viewBinding.statsAvgHeartRateValue.setText(avgBPM);
|
viewBinding.statsAvgHeartRateValue.setText(avgBPM);
|
||||||
}
|
}
|
||||||
if (sensorStatistics.hasCadence()) {
|
if (sensorStatistics.hasCadence()) {
|
||||||
String maxRPM = String.valueOf(Math.round(sensorStatistics.getMaxCadence().getRPM()));
|
String maxRPM = String.valueOf(Math.round(sensorStatistics.maxCadence().getRPM()));
|
||||||
String avgRPM = String.valueOf(Math.round(sensorStatistics.getAvgCadence().getRPM()));
|
String avgRPM = String.valueOf(Math.round(sensorStatistics.avgCadence().getRPM()));
|
||||||
|
|
||||||
viewBinding.statsCadenceGroup.setVisibility(View.VISIBLE);
|
viewBinding.statsCadenceGroup.setVisibility(View.VISIBLE);
|
||||||
viewBinding.statsMaxCadenceValue.setText(maxRPM);
|
viewBinding.statsMaxCadenceValue.setText(maxRPM);
|
||||||
viewBinding.statsAvgCadenceValue.setText(avgRPM);
|
viewBinding.statsAvgCadenceValue.setText(avgRPM);
|
||||||
}
|
}
|
||||||
if (sensorStatistics.hasPower()) {
|
if (sensorStatistics.hasPower()) {
|
||||||
String maxW = String.valueOf(Math.round(sensorStatistics.getMaxPower().getW()));
|
String maxW = String.valueOf(Math.round(sensorStatistics.maxPower().getW()));
|
||||||
String avgW = String.valueOf(Math.round(sensorStatistics.getAvgPower().getW()));
|
String avgW = String.valueOf(Math.round(sensorStatistics.avgPower().getW()));
|
||||||
|
|
||||||
viewBinding.statsPowerGroup.setVisibility(View.VISIBLE);
|
viewBinding.statsPowerGroup.setVisibility(View.VISIBLE);
|
||||||
viewBinding.statsMaxPowerValue.setText(maxW);
|
viewBinding.statsMaxPowerValue.setText(maxW);
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ public class KMLTrackExporter implements TrackExporter {
|
|||||||
|
|
||||||
private PrintWriter printWriter;
|
private PrintWriter printWriter;
|
||||||
|
|
||||||
private ArrayList<TrackPoint.Type> trackpointTypeList = new ArrayList<>();
|
private final ArrayList<TrackPoint.Type> trackpointTypeList = new ArrayList<>();
|
||||||
|
|
||||||
private final List<Float> speedList = new ArrayList<>();
|
private final List<Float> speedList = new ArrayList<>();
|
||||||
private final List<Float> distanceList = new ArrayList<>();
|
private final List<Float> distanceList = new ArrayList<>();
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
|
|||||||
if (notificationManager == null) {
|
if (notificationManager == null) {
|
||||||
|
|
||||||
StringWriter writer = new StringWriter();
|
StringWriter writer = new StringWriter();
|
||||||
Exception e = new RuntimeException("TrackRecording.newGpsStatus() called after onDestroy(); objectID: " + this + " with thread: " + Thread.currentThread().toString());
|
Exception e = new RuntimeException("TrackRecording.newGpsStatus() called after onDestroy(); objectID: " + this + " with thread: " + Thread.currentThread());
|
||||||
e.printStackTrace(new PrintWriter(writer));
|
e.printStackTrace(new PrintWriter(writer));
|
||||||
|
|
||||||
Log.e(TAG, e.getMessage() + " " + writer);
|
Log.e(TAG, e.getMessage() + " " + writer);
|
||||||
|
|||||||
+1
-1
@@ -138,7 +138,7 @@ class VoiceAnnouncementUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (shouldVoiceAnnounceAverageHeartRate() && sensorStatistics != null && sensorStatistics.hasHeartRate()) {
|
if (shouldVoiceAnnounceAverageHeartRate() && sensorStatistics != null && sensorStatistics.hasHeartRate()) {
|
||||||
int averageHeartRate = Math.round(sensorStatistics.getAvgHeartRate().getBPM());
|
int averageHeartRate = Math.round(sensorStatistics.avgHeartRate().getBPM());
|
||||||
|
|
||||||
builder.append(" ")
|
builder.append(" ")
|
||||||
.append(context.getString(R.string.average_heart_rate));
|
.append(context.getString(R.string.average_heart_rate));
|
||||||
|
|||||||
@@ -4,56 +4,24 @@ import de.dennisguse.opentracks.data.models.Cadence;
|
|||||||
import de.dennisguse.opentracks.data.models.HeartRate;
|
import de.dennisguse.opentracks.data.models.HeartRate;
|
||||||
import de.dennisguse.opentracks.data.models.Power;
|
import de.dennisguse.opentracks.data.models.Power;
|
||||||
|
|
||||||
public class SensorStatistics {
|
public record SensorStatistics(
|
||||||
private final HeartRate maxHr;
|
HeartRate maxHeartRate,
|
||||||
private final HeartRate avgHr;
|
HeartRate avgHeartRate,
|
||||||
private final Cadence maxCadence;
|
Cadence maxCadence,
|
||||||
private final Cadence avgCadence;
|
Cadence avgCadence,
|
||||||
private final Power maxPower;
|
Power maxPower,
|
||||||
private final Power avgPower;
|
Power avgPower
|
||||||
|
) {
|
||||||
public SensorStatistics(HeartRate maxHr, HeartRate avgHr, Cadence maxCadence, Cadence avgCadence, Power maxPower, Power avgPower) {
|
|
||||||
this.maxHr = maxHr;
|
|
||||||
this.avgHr = avgHr;
|
|
||||||
this.maxCadence = maxCadence;
|
|
||||||
this.avgCadence = avgCadence;
|
|
||||||
this.maxPower = maxPower;
|
|
||||||
this.avgPower = avgPower;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasHeartRate() {
|
public boolean hasHeartRate() {
|
||||||
return avgHr != null && maxHr != null;
|
return avgHeartRate != null && maxHeartRate != null;
|
||||||
}
|
|
||||||
|
|
||||||
public HeartRate getMaxHeartRate() {
|
|
||||||
return maxHr;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HeartRate getAvgHeartRate() {
|
|
||||||
return avgHr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasCadence() {
|
public boolean hasCadence() {
|
||||||
return avgCadence != null && maxCadence != null;
|
return avgCadence != null && maxCadence != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cadence getMaxCadence() {
|
|
||||||
return maxCadence;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Cadence getAvgCadence() {
|
|
||||||
return avgCadence;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasPower() {
|
public boolean hasPower() {
|
||||||
return avgPower != null;
|
return avgPower != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Power getMaxPower() {
|
|
||||||
return maxPower;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Power getAvgPower() {
|
|
||||||
return avgPower;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import android.view.MenuItem;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
@@ -23,9 +22,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.time.OffsetDateTime;
|
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user