Bugfix: update data for UI immediately after starting recording.

This commit is contained in:
Dennis Guse
2026-02-05 22:43:45 +01:00
parent e64792bf3f
commit 8fe0c3be7d
2 changed files with 6 additions and 17 deletions
@@ -52,7 +52,6 @@ import de.dennisguse.opentracks.sensors.GpsStatusValue;
/** /**
* Testing the states of TrackRecordingService. * Testing the states of TrackRecordingService.
* As states are checked against MutableLiveData that are updated via `postValue()` (is asynchronous to be inform other Threads), Thread.sleep() is required.
*/ */
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class TrackRecordingServiceStateMachineTest { public class TrackRecordingServiceStateMachineTest {
@@ -118,13 +117,12 @@ public class TrackRecordingServiceStateMachineTest {
@MediumTest @MediumTest
@Test @Test
public void gps_startStop() throws InterruptedException { public void gps_startStop() {
// given // given
assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue()); assertEquals(GpsStatusValue.GPS_NONE, service.getGpsStatusObservable().getValue());
// when // when
service.tryStartSensors(); service.tryStartSensors();
Thread.sleep(1000);
// then // then
assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue());
@@ -133,7 +131,6 @@ public class TrackRecordingServiceStateMachineTest {
// when // when
service.stopSensors(); service.stopSensors();
Thread.sleep(1000);
// then // then
assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue());
@@ -143,13 +140,12 @@ public class TrackRecordingServiceStateMachineTest {
@MediumTest @MediumTest
@Test @Test
public void recording_startStopResume_no_data() throws InterruptedException { public void recording_startStopResume_no_data() {
// given // given
assertFalse(service.isRecording()); assertFalse(service.isRecording());
// when // when
Track.Id trackId = service.startNewTrack(); Track.Id trackId = service.startNewTrack();
Thread.sleep(1000);
// then // then
assertTrue(service.isRecording()); assertTrue(service.isRecording());
@@ -161,7 +157,6 @@ public class TrackRecordingServiceStateMachineTest {
// when // when
service.resumeTrack(trackId); service.resumeTrack(trackId);
Thread.sleep(1000);
// then // then
assertTrue(service.isRecording()); assertTrue(service.isRecording());
@@ -172,7 +167,6 @@ public class TrackRecordingServiceStateMachineTest {
// when // when
service.endCurrentTrack(); service.endCurrentTrack();
Thread.sleep(1000);
// then // then
assertFalse(service.isRecording()); assertFalse(service.isRecording());
@@ -183,12 +177,10 @@ public class TrackRecordingServiceStateMachineTest {
// when // when
service.resumeTrack(trackId); service.resumeTrack(trackId);
Thread.sleep(1000);
// then // then
assertTrue(service.isRecording()); assertTrue(service.isRecording());
assertEquals(new RecordingStatus(trackId), service.getRecordingStatusObservable().getValue()); 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(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertNotEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue());
assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue()); assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue());
} }
@@ -214,7 +206,7 @@ public class TrackRecordingServiceStateMachineTest {
@MediumTest @MediumTest
@Test @Test
public void cannotEnd_without_starting() throws InterruptedException { public void cannotEnd_without_starting() {
// given // given
assertFalse(service.isRecording()); assertFalse(service.isRecording());
assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue());
@@ -223,7 +215,6 @@ public class TrackRecordingServiceStateMachineTest {
// when // when
service.endCurrentTrack(); service.endCurrentTrack();
Thread.sleep(1000);
// then // then
assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue()); assertEquals(TrackRecordingService.STATUS_DEFAULT, service.getRecordingStatusObservable().getValue());
@@ -234,33 +225,30 @@ public class TrackRecordingServiceStateMachineTest {
@Ignore("TODO Bug: GPS can be stopped although the current track is recording") @Ignore("TODO Bug: GPS can be stopped although the current track is recording")
@MediumTest @MediumTest
@Test @Test
public void recording_stopGPS_noop() throws InterruptedException { public void recording_stopGPS_noop() {
// given // given
Track.Id trackId = service.startNewTrack(); Track.Id trackId = service.startNewTrack();
assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue()); assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue());
// when // when
service.stopSensors(); //TODO Should be ignored as service is recording service.stopSensors(); //TODO Should be ignored as service is recording
Thread.sleep(1000);
// then // then
assertTrue(service.isRecording()); assertTrue(service.isRecording());
assertEquals(new RecordingStatus(trackId), service.getRecordingStatusObservable().getValue()); 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(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue()); assertNotEquals(RecordingData.NOT_RECORDING, service.getRecordingDataObservable().getValue());
assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue()); assertEquals(GpsStatusValue.GPS_ENABLED, service.getGpsStatusObservable().getValue());
} }
@MediumTest @MediumTest
@Test @Test
public void recording_startRecording_alreadyRecording() throws InterruptedException { public void recording_startRecording_alreadyRecording() {
// given // given
Track.Id trackId = service.startNewTrack(); Track.Id trackId = service.startNewTrack();
assertTrue(service.isRecording()); assertTrue(service.isRecording());
// when // when
Track.Id newTrackId = service.startNewTrack(); Track.Id newTrackId = service.startNewTrack();
Thread.sleep(1000);
// then // then
assertNotNull(trackId); assertNotNull(trackId);
@@ -192,6 +192,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
notificationManager.onRecordingStarted(this, recordingStatus.trackId()); notificationManager.onRecordingStarted(this, recordingStatus.trackId());
// Update instance variables // Update instance variables
updateRecordingData.run();
handler.postDelayed(updateRecordingData, RECORDING_DATA_UPDATE_INTERVAL.toMillis()); handler.postDelayed(updateRecordingData, RECORDING_DATA_UPDATE_INTERVAL.toMillis());
} }