forked from upstream-mirrors/OpenTracks
@@ -50,6 +50,7 @@ import de.dennisguse.opentracks.services.handlers.EGM2008CorrectionManager;
|
|||||||
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
|
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
|
||||||
import de.dennisguse.opentracks.services.handlers.HandlerServer;
|
import de.dennisguse.opentracks.services.handlers.HandlerServer;
|
||||||
import de.dennisguse.opentracks.services.tasks.AnnouncementPeriodicTask;
|
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.services.tasks.PeriodicTaskExecutor;
|
||||||
import de.dennisguse.opentracks.settings.SettingsActivity;
|
import de.dennisguse.opentracks.settings.SettingsActivity;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
@@ -200,20 +201,6 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
return recordingStatus.isPaused();
|
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) {
|
public Marker.Id insertMarker(String name, String category, String description, String photoUrl) {
|
||||||
if (!isRecording() || isPaused()) {
|
if (!isRecording() || isPaused()) {
|
||||||
return null;
|
return null;
|
||||||
@@ -222,6 +209,10 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
return trackRecordingManager.insertMarker(name, category, description, photoUrl);
|
return trackRecordingManager.insertMarker(name, category, description, photoUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void run(@NonNull PeriodicTask periodicTask) {
|
||||||
|
periodicTask.run(recordingStatus.getTrackId(), trackRecordingManager.getTrackStatistics());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts a new track.
|
* Starts a new track.
|
||||||
*
|
*
|
||||||
@@ -264,7 +255,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
return;
|
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
|
// Need to remember the recordingTrackId before setting it to null
|
||||||
boolean wasPause = isPaused();
|
boolean wasPause = isPaused();
|
||||||
Track.Id trackId = getRecordingTrackId();
|
Track.Id trackId = recordingStatus.getTrackId();
|
||||||
|
|
||||||
// Set recording status
|
// Set recording status
|
||||||
updateRecordingStatus(STATUS_DEFAULT);
|
updateRecordingStatus(STATUS_DEFAULT);
|
||||||
@@ -323,7 +314,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set recording status
|
// Set recording status
|
||||||
updateRecordingStatus(new RecordingStatus(getRecordingTrackId(), true));
|
updateRecordingStatus(new RecordingStatus(recordingStatus.getTrackId(), true));
|
||||||
|
|
||||||
trackRecordingManager.pause(handlerServer);
|
trackRecordingManager.pause(handlerServer);
|
||||||
|
|
||||||
@@ -383,7 +374,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
|
|
||||||
trackRecordingManager.onNewTrackPoint(trackPoint, thresholdHorizontalAccuracy);
|
trackRecordingManager.onNewTrackPoint(trackPoint, thresholdHorizontalAccuracy);
|
||||||
notificationManager.updateTrackPoint(this, trackRecordingManager.getTrackStatistics(), trackPoint, thresholdHorizontalAccuracy);
|
notificationManager.updateTrackPoint(this, trackRecordingManager.getTrackStatistics(), trackPoint, thresholdHorizontalAccuracy);
|
||||||
voiceExecutor.update();
|
voiceExecutor.update(recordingStatus.getTrackId(), trackRecordingManager.getTrackStatistics());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -399,7 +390,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
private void showNotification(boolean isGpsStarted) {
|
private void showNotification(boolean isGpsStarted) {
|
||||||
if (isRecording()) {
|
if (isRecording()) {
|
||||||
Intent intent = IntentUtils.newIntent(this, TrackRecordingActivity.class)
|
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)
|
PendingIntent pendingIntent = TaskStackBuilder.create(this)
|
||||||
.addParentStack(TrackRecordingActivity.class)
|
.addParentStack(TrackRecordingActivity.class)
|
||||||
.addNextIntent(intent)
|
.addNextIntent(intent)
|
||||||
@@ -425,6 +416,10 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Duration getTotalTime() {
|
||||||
|
return trackRecordingManager.getTrackStatistics().getTotalTime();
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public HandlerServer getHandlerServer() {
|
public HandlerServer getHandlerServer() {
|
||||||
|
|||||||
+1
-16
@@ -32,7 +32,6 @@ import de.dennisguse.opentracks.content.data.Distance;
|
|||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
||||||
import de.dennisguse.opentracks.services.TrackRecordingService;
|
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.util.AnnouncementUtils;
|
import de.dennisguse.opentracks.util.AnnouncementUtils;
|
||||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
import de.dennisguse.opentracks.util.PreferencesUtils;
|
||||||
@@ -130,21 +129,7 @@ public class AnnouncementPeriodicTask implements PeriodicTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(@NonNull TrackRecordingService trackRecordingService) {
|
public void run(@NonNull Track.Id trackId, @NonNull TrackStatistics trackStatistics) {
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (!ttsReady) {
|
if (!ttsReady) {
|
||||||
ttsReady = ttsInitStatus == TextToSpeech.SUCCESS;
|
ttsReady = ttsInitStatus == TextToSpeech.SUCCESS;
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ package de.dennisguse.opentracks.services.tasks;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
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.
|
* 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.
|
* This method will be called periodically.
|
||||||
*
|
|
||||||
* @param trackRecordingService the track recording service
|
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
//TODO Pass actual data instead of TrackRecordingService
|
void run(@NonNull Track.Id trackId, @NonNull TrackStatistics trackStatistics);
|
||||||
void run(@NonNull TrackRecordingService trackRecordingService);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shuts down this task and clean up resources.
|
* Shuts down this task and clean up resources.
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.time.Duration;
|
|||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.content.data.Distance;
|
import de.dennisguse.opentracks.content.data.Distance;
|
||||||
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.services.TrackRecordingService;
|
import de.dennisguse.opentracks.services.TrackRecordingService;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
|
|
||||||
@@ -55,6 +56,7 @@ public class PeriodicTaskExecutor {
|
|||||||
|
|
||||||
private boolean metricUnits;
|
private boolean metricUnits;
|
||||||
|
|
||||||
|
private TrackStatistics trackStatistics;
|
||||||
private Distance nextTaskDistance = Distance.of(Double.MAX_VALUE);
|
private Distance nextTaskDistance = Distance.of(Double.MAX_VALUE);
|
||||||
|
|
||||||
public PeriodicTaskExecutor(@NonNull TrackRecordingService trackRecordingService, PeriodicTaskFactory periodicTaskFactory) {
|
public PeriodicTaskExecutor(@NonNull TrackRecordingService trackRecordingService, PeriodicTaskFactory periodicTaskFactory) {
|
||||||
@@ -84,12 +86,6 @@ public class PeriodicTaskExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
periodicTask = periodicTaskFactory.create(trackRecordingService);
|
periodicTask = periodicTaskFactory.create(trackRecordingService);
|
||||||
|
|
||||||
// Returning null is ok
|
|
||||||
if (periodicTask == null) {
|
|
||||||
Log.d(TAG, "Periodic task is null.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
periodicTask.start();
|
periodicTask.start();
|
||||||
|
|
||||||
if (isTimeFrequency()) {
|
if (isTimeFrequency()) {
|
||||||
@@ -120,18 +116,14 @@ public class PeriodicTaskExecutor {
|
|||||||
/**
|
/**
|
||||||
* Updates the executor.
|
* Updates the executor.
|
||||||
*/
|
*/
|
||||||
public void update() {
|
public void update(@NonNull Track.Id trackId, @NonNull TrackStatistics trackStatistics) {
|
||||||
if (!isDistanceFrequency() || periodicTask == null) {
|
if (!isDistanceFrequency() || periodicTask == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackStatistics trackStatistics = trackRecordingService.getTrackStatistics();
|
|
||||||
if (trackStatistics == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trackStatistics.getTotalDistance().greaterThan(nextTaskDistance)) {
|
if (trackStatistics.getTotalDistance().greaterThan(nextTaskDistance)) {
|
||||||
periodicTask.run(trackRecordingService);
|
periodicTask.run(trackId, trackStatistics);
|
||||||
|
this.trackStatistics = trackStatistics;
|
||||||
updateNextTaskDistance();
|
updateNextTaskDistance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,7 +149,6 @@ public class PeriodicTaskExecutor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackStatistics trackStatistics = trackRecordingService.getTrackStatistics();
|
|
||||||
if (trackStatistics == null) {
|
if (trackStatistics == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import java.util.Timer;
|
|||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.services.TrackRecordingService;
|
import de.dennisguse.opentracks.services.TrackRecordingService;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class will periodically perform a task.
|
* This class will periodically perform a task.
|
||||||
@@ -50,23 +49,18 @@ class TimerTaskExecutor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackStatistics trackStatistics = trackRecordingService.getTrackStatistics();
|
|
||||||
if (trackStatistics == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
shutdown();
|
shutdown();
|
||||||
periodicTask.start();
|
periodicTask.start();
|
||||||
timerTask = new TimerTask() {
|
timerTask = new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
periodicTask.run(trackRecordingService);
|
trackRecordingService.run(periodicTask);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
timer = new Timer(TimerTaskExecutor.class.getSimpleName());
|
timer = new Timer(TimerTaskExecutor.class.getSimpleName());
|
||||||
|
|
||||||
//TODO Simplify: far too complicated for it's purpose
|
//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());
|
timer.scheduleAtFixedRate(timerTask, new Date(next), interval.toMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user