diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 1590af9b9..deffdd2bf 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -50,6 +50,7 @@ import de.dennisguse.opentracks.services.handlers.EGM2008CorrectionManager; import de.dennisguse.opentracks.services.handlers.GpsStatusValue; import de.dennisguse.opentracks.services.handlers.HandlerServer; import de.dennisguse.opentracks.services.tasks.AnnouncementPeriodicTask; +import de.dennisguse.opentracks.services.tasks.PeriodicTask; import de.dennisguse.opentracks.services.tasks.PeriodicTaskExecutor; import de.dennisguse.opentracks.settings.SettingsActivity; import de.dennisguse.opentracks.stats.TrackStatistics; @@ -200,20 +201,6 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand return recordingStatus.isPaused(); } - @Deprecated //TODO Only used by announcements; pass data instead of reference - public Track.Id getRecordingTrackId() { - return recordingStatus.getTrackId(); - } - - @Deprecated //TODO Only used by announcements; pass data instead of reference - public TrackStatistics getTrackStatistics() { - if (!isRecording()) { - return null; - } - - return trackRecordingManager.getTrackStatistics(); - } - public Marker.Id insertMarker(String name, String category, String description, String photoUrl) { if (!isRecording() || isPaused()) { return null; @@ -222,6 +209,10 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand return trackRecordingManager.insertMarker(name, category, description, photoUrl); } + public void run(@NonNull PeriodicTask periodicTask) { + periodicTask.run(recordingStatus.getTrackId(), trackRecordingManager.getTrackStatistics()); + } + /** * Starts a new track. * @@ -264,7 +255,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand return; } - resumeTrack(getRecordingTrackId()); + resumeTrack(recordingStatus.getTrackId()); } /** @@ -301,7 +292,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand // Need to remember the recordingTrackId before setting it to null boolean wasPause = isPaused(); - Track.Id trackId = getRecordingTrackId(); + Track.Id trackId = recordingStatus.getTrackId(); // Set recording status updateRecordingStatus(STATUS_DEFAULT); @@ -323,7 +314,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand } // Set recording status - updateRecordingStatus(new RecordingStatus(getRecordingTrackId(), true)); + updateRecordingStatus(new RecordingStatus(recordingStatus.getTrackId(), true)); trackRecordingManager.pause(handlerServer); @@ -383,7 +374,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand trackRecordingManager.onNewTrackPoint(trackPoint, thresholdHorizontalAccuracy); notificationManager.updateTrackPoint(this, trackRecordingManager.getTrackStatistics(), trackPoint, thresholdHorizontalAccuracy); - voiceExecutor.update(); + voiceExecutor.update(recordingStatus.getTrackId(), trackRecordingManager.getTrackStatistics()); } @Override @@ -399,7 +390,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand private void showNotification(boolean isGpsStarted) { if (isRecording()) { Intent intent = IntentUtils.newIntent(this, TrackRecordingActivity.class) - .putExtra(TrackRecordingActivity.EXTRA_TRACK_ID, getRecordingTrackId()); + .putExtra(TrackRecordingActivity.EXTRA_TRACK_ID, recordingStatus.getTrackId()); PendingIntent pendingIntent = TaskStackBuilder.create(this) .addParentStack(TrackRecordingActivity.class) .addNextIntent(intent) @@ -425,6 +416,10 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand } } + public Duration getTotalTime() { + return trackRecordingManager.getTrackStatistics().getTotalTime(); + } + @Deprecated @VisibleForTesting public HandlerServer getHandlerServer() { diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java index 06576e81b..073a1ce23 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java @@ -32,7 +32,6 @@ import de.dennisguse.opentracks.content.data.Distance; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.content.provider.TrackPointIterator; -import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.util.AnnouncementUtils; import de.dennisguse.opentracks.util.PreferencesUtils; @@ -130,21 +129,7 @@ public class AnnouncementPeriodicTask implements PeriodicTask { } @Override - public void run(@NonNull TrackRecordingService trackRecordingService) { - announce(trackRecordingService.getRecordingTrackId(), trackRecordingService.getTrackStatistics()); - } - - /** - * Runs this task. - * - * @param trackStatistics the track statistics - */ - private void announce(Track.Id trackId, TrackStatistics trackStatistics) { - if (trackStatistics == null) { - Log.e(TAG, "TrackStatistics is null."); - return; - } - + public void run(@NonNull Track.Id trackId, @NonNull TrackStatistics trackStatistics) { synchronized (this) { if (!ttsReady) { ttsReady = ttsInitStatus == TextToSpeech.SUCCESS; diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTask.java b/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTask.java index bae9a3207..f55754537 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTask.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTask.java @@ -18,7 +18,8 @@ package de.dennisguse.opentracks.services.tasks; import androidx.annotation.NonNull; -import de.dennisguse.opentracks.services.TrackRecordingService; +import de.dennisguse.opentracks.content.data.Track; +import de.dennisguse.opentracks.stats.TrackStatistics; /** * This is interface for a task that will be executed on some schedule. @@ -34,12 +35,9 @@ public interface PeriodicTask { /** * This method will be called periodically. - * - * @param trackRecordingService the track recording service */ @Deprecated - //TODO Pass actual data instead of TrackRecordingService - void run(@NonNull TrackRecordingService trackRecordingService); + void run(@NonNull Track.Id trackId, @NonNull TrackStatistics trackStatistics); /** * Shuts down this task and clean up resources. diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTaskExecutor.java b/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTaskExecutor.java index 623132288..30fbf9d36 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTaskExecutor.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTaskExecutor.java @@ -24,6 +24,7 @@ import java.time.Duration; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.data.Distance; +import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.stats.TrackStatistics; @@ -55,6 +56,7 @@ public class PeriodicTaskExecutor { private boolean metricUnits; + private TrackStatistics trackStatistics; private Distance nextTaskDistance = Distance.of(Double.MAX_VALUE); public PeriodicTaskExecutor(@NonNull TrackRecordingService trackRecordingService, PeriodicTaskFactory periodicTaskFactory) { @@ -84,12 +86,6 @@ public class PeriodicTaskExecutor { } periodicTask = periodicTaskFactory.create(trackRecordingService); - - // Returning null is ok - if (periodicTask == null) { - Log.d(TAG, "Periodic task is null."); - return; - } periodicTask.start(); if (isTimeFrequency()) { @@ -120,18 +116,14 @@ public class PeriodicTaskExecutor { /** * Updates the executor. */ - public void update() { + public void update(@NonNull Track.Id trackId, @NonNull TrackStatistics trackStatistics) { if (!isDistanceFrequency() || periodicTask == null) { return; } - TrackStatistics trackStatistics = trackRecordingService.getTrackStatistics(); - if (trackStatistics == null) { - return; - } - if (trackStatistics.getTotalDistance().greaterThan(nextTaskDistance)) { - periodicTask.run(trackRecordingService); + periodicTask.run(trackId, trackStatistics); + this.trackStatistics = trackStatistics; updateNextTaskDistance(); } } @@ -157,7 +149,6 @@ public class PeriodicTaskExecutor { return; } - TrackStatistics trackStatistics = trackRecordingService.getTrackStatistics(); if (trackStatistics == null) { return; } diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/TimerTaskExecutor.java b/src/main/java/de/dennisguse/opentracks/services/tasks/TimerTaskExecutor.java index d7ad7e4b8..f72e170ff 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/TimerTaskExecutor.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/TimerTaskExecutor.java @@ -22,7 +22,6 @@ import java.util.Timer; import java.util.TimerTask; import de.dennisguse.opentracks.services.TrackRecordingService; -import de.dennisguse.opentracks.stats.TrackStatistics; /** * This class will periodically perform a task. @@ -50,23 +49,18 @@ class TimerTaskExecutor { return; } - TrackStatistics trackStatistics = trackRecordingService.getTrackStatistics(); - if (trackStatistics == null) { - return; - } - shutdown(); periodicTask.start(); timerTask = new TimerTask() { @Override public void run() { - periodicTask.run(trackRecordingService); + trackRecordingService.run(periodicTask); } }; timer = new Timer(TimerTaskExecutor.class.getSimpleName()); //TODO Simplify: far too complicated for it's purpose - long next = System.currentTimeMillis() + interval.toMillis() - (trackStatistics.getTotalTime().toMillis() % interval.toMillis()); + long next = System.currentTimeMillis() + interval.toMillis() - (trackRecordingService.getTotalTime().toMillis() % interval.toMillis()); timer.scheduleAtFixedRate(timerTask, new Date(next), interval.toMillis()); }