diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManagerTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManagerTest.java index 7bb1a8140..badd4028e 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManagerTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManagerTest.java @@ -18,6 +18,7 @@ import org.mockito.junit.MockitoJUnitRunner; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Speed; +import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.settings.UnitSystem; import de.dennisguse.opentracks.stats.TrackStatistics; @@ -51,11 +52,15 @@ public class TrackRecordingServiceNotificationManagerTest { TrackRecordingServiceNotificationManager subject = new TrackRecordingServiceNotificationManager(notificationManager, notificationCompatBuilder); subject.setUnitSystem(UnitSystem.METRIC); + Track track = new Track(); + track.setTrackStatistics(trackStatisticsMock); + RecordingData data = new RecordingData(track, trackPointMock, null, null); + // when - subject.updateTrackPoint(context, trackStatisticsMock, trackPointMock, Distance.of(100)); - subject.updateTrackPoint(context, trackStatisticsMock, trackPointMock, Distance.of(100)); - subject.updateTrackPoint(context, trackStatisticsMock, trackPointMock, Distance.of(1000)); - subject.updateTrackPoint(context, trackStatisticsMock, trackPointMock, Distance.of(100)); + subject.updateTrackPoint(context, data, Distance.of(100)); + subject.updateTrackPoint(context, data, Distance.of(100)); + subject.updateTrackPoint(context, data, Distance.of(1000)); + subject.updateTrackPoint(context, data, Distance.of(100)); // then verify(notificationCompatBuilder, times(6)).setOnlyAlertOnce(true); diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 47d94035c..3a04ae1aa 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -268,7 +268,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. boolean stored = trackRecordingManager.onNewTrackPoint(trackPoint); //TODO Should be done during updateRecordingDataWhileRecording() - notificationManager.updateTrackPoint(this, trackRecordingManager.getTrackStatistics(), trackPoint, thresholdHorizontalAccuracy); + notificationManager.updateTrackPoint(this, trackRecordingManager.getDataForUI(), thresholdHorizontalAccuracy); return stored; } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java index 05221e793..37bc03217 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java @@ -21,10 +21,8 @@ import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.SpeedFormatter; import de.dennisguse.opentracks.data.models.Track; -import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; -import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.util.IntentUtils; /** @@ -103,24 +101,25 @@ class TrackRecordingServiceNotificationManager implements SharedPreferences.OnSh updateNotification(); } - void updateTrackPoint(Context context, TrackStatistics trackStatistics, TrackPoint trackPoint, Distance thresholdHorizontalAccuracy) { + void updateTrackPoint(Context context, RecordingData recordingData, Distance thresholdHorizontalAccuracy) { String formattedAccuracy = context.getString(R.string.value_none); DistanceFormatter formatter = DistanceFormatter.Builder() .setUnit(unitSystem) .build(context); - // The decision if a trackpoint is not accurate enough should happen in the sensor subsystem. - if (trackPoint.hasHorizontalAccuracy()) { - formattedAccuracy = formatter.formatDistance(trackPoint.getHorizontalAccuracy()); - boolean currentLocationWasAccurate = trackPoint.getHorizontalAccuracy().lessThan(thresholdHorizontalAccuracy); + //TODO The decision if a trackpoint is not accurate enough should happen in the TrackRecordingManager (via RecordingData). + if (recordingData.latestTrackPoint().hasHorizontalAccuracy()) { + formattedAccuracy = formatter.formatDistance(recordingData.latestTrackPoint().getHorizontalAccuracy()); + + boolean currentLocationWasAccurate = recordingData.latestTrackPoint().getHorizontalAccuracy().lessThan(thresholdHorizontalAccuracy); boolean shouldAlert = !currentLocationWasAccurate && previousLocationWasAccurate; notificationBuilder.setOnlyAlertOnce(!shouldAlert); previousLocationWasAccurate = currentLocationWasAccurate; } - notificationBuilder.setContentTitle(context.getString(R.string.track_distance_notification, formatter.formatDistance(trackStatistics.getTotalDistance()))); - String formattedSpeed = SpeedFormatter.Builder().setUnit(unitSystem).setReportSpeedOrPace(true).build(context).formatSpeed(trackPoint.getSpeed()); + notificationBuilder.setContentTitle(context.getString(R.string.track_distance_notification, formatter.formatDistance(recordingData.getStatisticsTrack().getTotalDistance()))); + 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)); updateNotification();