From 25fbd9490c21aa013bb864cd0742ac6212b9db9d Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 22 Nov 2025 18:06:48 +0100 Subject: [PATCH] Cleanup RecordingData. --- ...TrackRecordingServiceStateMachineTest.java | 24 +++++++++---------- .../StatisticsRecordingFragment.java | 5 ++-- .../opentracks/services/RecordingData.java | 18 +++++++------- .../services/TrackRecordingService.java | 3 +-- ...ckRecordingServiceNotificationManager.java | 2 +- .../GenericStatisticsViewHolder.java | 22 ++++++++--------- 6 files changed, 36 insertions(+), 38 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceStateMachineTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceStateMachineTest.java index ca3c4b866..8bac0bcb9 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceStateMachineTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceStateMachineTest.java @@ -111,7 +111,7 @@ public class TrackRecordingServiceStateMachineTest { // then assertFalse(service.isRecording()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); - assertEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue()); } @@ -127,7 +127,7 @@ public class TrackRecordingServiceStateMachineTest { // then assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); - assertEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue()); // when @@ -136,7 +136,7 @@ public class TrackRecordingServiceStateMachineTest { // then assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); - assertEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); // assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue()); TODO BUG: GPS can only be stopped if a service is recording. } @@ -153,7 +153,7 @@ public class TrackRecordingServiceStateMachineTest { // then assertTrue(service.isRecording()); assertEquals(new RecordingStatus(trackId), service.getRecordingStatusObservable().getValue()); - assertNotEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertNotEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue()); service.endCurrentTrack(); @@ -165,7 +165,7 @@ public class TrackRecordingServiceStateMachineTest { // then assertTrue(service.isRecording()); assertEquals(new RecordingStatus(trackId), service.getRecordingStatusObservable().getValue()); - assertNotEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertNotEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue()); @@ -176,7 +176,7 @@ public class TrackRecordingServiceStateMachineTest { // then assertFalse(service.isRecording()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); - assertNotEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertNotEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue()); @@ -188,7 +188,7 @@ public class TrackRecordingServiceStateMachineTest { assertTrue(service.isRecording()); assertEquals(new RecordingStatus(trackId), service.getRecordingStatusObservable().getValue()); Thread.sleep(1000); //TODO Figure out why we need to wait here until the update is happening - assertNotEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertNotEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue()); } @@ -198,7 +198,7 @@ public class TrackRecordingServiceStateMachineTest { // given assertFalse(service.isRecording()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); - assertEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue()); // when @@ -207,7 +207,7 @@ public class TrackRecordingServiceStateMachineTest { // then assertFalse(service.isRecording()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); - assertEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue()); } @@ -217,7 +217,7 @@ public class TrackRecordingServiceStateMachineTest { // given assertFalse(service.isRecording()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); - assertEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue()); // when @@ -226,7 +226,7 @@ public class TrackRecordingServiceStateMachineTest { // then assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); - assertEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue()); } @@ -246,7 +246,7 @@ public class TrackRecordingServiceStateMachineTest { assertTrue(service.isRecording()); assertEquals(new RecordingStatus(trackId), service.getRecordingStatusObservable().getValue()); Thread.sleep(1000); //TODO Figure out why we need to wait here until the update is happening - assertNotEquals(TrackRecordingService.NOT_RECORDING, service.getRecordingDataObservable().getValue()); + assertNotEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue()); } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java index 848c8a323..52d3ea93e 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java @@ -21,7 +21,6 @@ import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.databinding.StatisticsRecordingBinding; import de.dennisguse.opentracks.services.RecordingData; -import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; @@ -46,7 +45,7 @@ public class StatisticsRecordingFragment extends Fragment { private TrackRecordingServiceConnection trackRecordingServiceConnection; - private RecordingData recordingData = TrackRecordingService.NOT_RECORDING; + private RecordingData recordingData = RecordingData.NOT_RECORDING; private final List> viewHolders = new LinkedList<>(); @@ -178,7 +177,7 @@ public class StatisticsRecordingFragment extends Fragment { } private void updateDataOnUI() { - if (isResumed()) { + if (isResumed() && !RecordingData.NOT_RECORDING.equals(recordingData)) { viewHolders.forEach(i -> i.onChanged(unitSystem, recordingData)); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/RecordingData.java b/src/main/java/de/dennisguse/opentracks/services/RecordingData.java index ff6895f70..ba9da7ce0 100644 --- a/src/main/java/de/dennisguse/opentracks/services/RecordingData.java +++ b/src/main/java/de/dennisguse/opentracks/services/RecordingData.java @@ -6,12 +6,18 @@ import de.dennisguse.opentracks.data.models.Statistics; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; -import de.dennisguse.opentracks.stats.SegmentStatisticUpdater; /** * {@link Track} and {@link TrackPoint} must be immutable (i.e., their content does not change). */ -public record RecordingData(Track track, TrackPoint latestTrackPoint, SensorDataSet sensorDataSet, Statistics currentSegment) { +public record RecordingData( + Track track, + TrackPoint latestTrackPoint, + SensorDataSet sensorDataSet, + Statistics currentSegment) { + + public static final RecordingData NOT_RECORDING = new RecordingData(null, null, null, null); + public String getTrackCategory() { if (track == null) { return ""; @@ -19,13 +25,7 @@ public record RecordingData(Track track, TrackPoint latestTrackPoint, SensorData return track.getActivityTypeLocalized(); } - @Deprecated - @NonNull - public Statistics getStatisticsTrack() { - if (track == null) { - return Statistics.DEFAULT; //TODO Refactor code that this is not necessary. - } - + public Statistics trackStatistics() { return track.getStatistics(); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index e16668b4c..dc3b6dc73 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -51,7 +51,6 @@ public class TrackRecordingService extends Service implements TrackPointCreator. private static final Duration RECORDING_DATA_UPDATE_INTERVAL = Duration.ofSeconds(1); public static final RecordingStatus STATUS_DEFAULT = RecordingStatus.notRecording(); - public static final RecordingData NOT_RECORDING = new RecordingData(null, null, null, null); public static final GpsStatusValue STATUS_GPS_DEFAULT = GpsStatusValue.GPS_NONE; public TrackPoint getLastStoredTrackPointWithLocation() { @@ -105,7 +104,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. recordingStatusObservable = new MutableLiveData<>(); updateRecordingStatus(STATUS_DEFAULT); gpsStatusObservable = new MutableLiveData<>(STATUS_GPS_DEFAULT); - recordingDataObservable = new MutableLiveData<>(NOT_RECORDING); + recordingDataObservable = new MutableLiveData<>(RecordingData.NOT_RECORDING); trackPointCreator = new TrackPointCreator(this); trackRecordingManager = new TrackRecordingManager(this, trackPointCreator, this, handler); diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java index 7e085a70a..0ed87d29f 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java @@ -118,7 +118,7 @@ class TrackRecordingServiceNotificationManager implements SharedPreferences.OnSh previousLocationWasAccurate = currentLocationWasAccurate; } - notificationBuilder.setContentTitle(context.getString(R.string.track_distance_notification, formatter.formatDistance(recordingData.getStatisticsTrack().totalDistance()))); + notificationBuilder.setContentTitle(context.getString(R.string.track_distance_notification, formatter.formatDistance(recordingData.trackStatistics().totalDistance()))); String formattedSpeed = SpeedFormatter.Builder().setUnit(unitSystem).setReportSpeedOrPace(true).build(context).formatSpeed(recordingData.latestTrackPoint().getSpeed()); notificationBuilder.setContentText(context.getString(R.string.track_speed_notification, formattedSpeed)); notificationBuilder.setSubText(context.getString(R.string.track_recording_notification_accuracy, formattedAccuracy)); diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java index 6b3d53fd0..f0efe2d66 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java @@ -34,7 +34,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = DistanceFormatter.Builder() .setUnit(unitSystem) - .build(getContext()).getDistanceParts(data.getStatisticsTrack().totalDistance()); + .build(getContext()).getDistanceParts(data.trackStatistics().totalDistance()); getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsUnit.setText(valueAndUnit.second); @@ -46,7 +46,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = new Pair<>(StringUtils.formatElapsedTime(data.getStatisticsTrack().totalDuration()), null); + Pair valueAndUnit = new Pair<>(StringUtils.formatElapsedTime(data.trackStatistics().totalDuration()), null); getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsUnit.setText(valueAndUnit.second); @@ -58,7 +58,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = speedFormatterSpeed.getSpeedParts(data.getStatisticsTrack().getAverageMovingSpeed()); + Pair valueAndUnit = speedFormatterSpeed.getSpeedParts(data.trackStatistics().getAverageMovingSpeed()); getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsUnit.setText(valueAndUnit.second); @@ -140,7 +140,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = speedFormatterSpeed.getSpeedParts(data.getStatisticsTrack().getAverageSpeed()); + Pair valueAndUnit = speedFormatterSpeed.getSpeedParts(data.trackStatistics().getAverageSpeed()); getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsUnit.setText(valueAndUnit.second); @@ -157,7 +157,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = speedFormatterSpeed.getSpeedParts(data.getStatisticsTrack().maxSpeed()); + Pair valueAndUnit = speedFormatterSpeed.getSpeedParts(data.trackStatistics().maxSpeed()); getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsUnit.setText(valueAndUnit.second); @@ -174,7 +174,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = speedFormatterSpeed.getSpeedParts(data.getStatisticsTrack().getAverageMovingSpeed()); + Pair valueAndUnit = speedFormatterSpeed.getSpeedParts(data.trackStatistics().getAverageMovingSpeed()); getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsUnit.setText(valueAndUnit.second); @@ -191,7 +191,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = speedFormatterSpeed.getSpeedParts(data.getStatisticsTrack().getAverageMovingSpeed()); + Pair valueAndUnit = speedFormatterSpeed.getSpeedParts(data.trackStatistics().getAverageMovingSpeed()); getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsUnit.setText(valueAndUnit.second); @@ -236,7 +236,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = speedFormatterSpeed.getSpeedParts(data.getStatisticsTrack().maxSpeed()); + Pair valueAndUnit = speedFormatterSpeed.getSpeedParts(data.trackStatistics().maxSpeed()); getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsUnit.setText(valueAndUnit.second); @@ -264,7 +264,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = StringUtils.getAltitudeParts(getContext(), gain, unitSystem); @@ -278,7 +278,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = StringUtils.getAltitudeParts(getContext(), loss, unitSystem);