#23 Automatic Timeout Stop

This commit is contained in:
jannis 2019-12-04 22:05:48 +01:00
parent a2354e5725
commit 7a61b94696
2 changed files with 24 additions and 8 deletions

View File

@ -62,7 +62,7 @@ import de.tadris.fitness.recording.WorkoutRecorder;
import de.tadris.fitness.util.ThemeManager;
import de.tadris.fitness.util.unit.UnitUtils;
public class RecordWorkoutActivity extends FitoTrackActivity implements LocationListener.LocationChangeListener, WorkoutRecorder.GpsStateChangedListener {
public class RecordWorkoutActivity extends FitoTrackActivity implements LocationListener.LocationChangeListener, WorkoutRecorder.WorkoutRecorderListener {
public static String ACTIVITY= Workout.WORKOUT_TYPE_RUNNING;
@ -379,5 +379,8 @@ public class RecordWorkoutActivity extends FitoTrackActivity implements Location
}
}
@Override
public void onAutoStop() {
finish();
}
}

View File

@ -50,6 +50,11 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener
private static final int PAUSE_TIME= 10000;
/**
* Time after which the workout is stopped and saved automatically because there is no activity anymore
*/
private static final int AUTO_STOP_TIMEOUT= 1000*60*60*20;
private Context context;
private Workout workout;
private RecordingState state;
@ -65,13 +70,13 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener
private static final double SIGNAL_BAD_THRESHOLD= 20; // In meters
private static final int SIGNAL_LOST_THRESHOLD= 10000; // In milliseconds
private Location lastFix= null;
private GpsStateChangedListener gpsStateChangedListener;
private WorkoutRecorderListener workoutRecorderListener;
private GpsState gpsState= GpsState.SIGNAL_LOST;
public WorkoutRecorder(Context context, String workoutType, GpsStateChangedListener gpsStateChangedListener) {
public WorkoutRecorder(Context context, String workoutType, WorkoutRecorderListener workoutRecorderListener) {
this.context= context;
this.state= RecordingState.IDLE;
this.gpsStateChangedListener= gpsStateChangedListener;
this.workoutRecorderListener = workoutRecorderListener;
this.workout= new Workout();
@ -107,7 +112,14 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener
synchronized (samples){
if(samples.size() > 2){
WorkoutSample lastSample= samples.get(samples.size()-1);
if(System.currentTimeMillis() - lastSampleTime > PAUSE_TIME){
long timeDiff= System.currentTimeMillis() - lastSampleTime;
if(timeDiff > AUTO_STOP_TIMEOUT){
if(isActive()){
stop();
save();
workoutRecorderListener.onAutoStop();
}
}else if(timeDiff > PAUSE_TIME){
if(state == RecordingState.RUNNING){
pause();
}
@ -139,7 +151,7 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener
state= GpsState.SIGNAL_OKAY;
}
if(state != gpsState){
gpsStateChangedListener.onGPSStateChanged(gpsState, state);
workoutRecorderListener.onGPSStateChanged(gpsState, state);
gpsState= state;
}
}
@ -307,8 +319,9 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener
}
}
public interface GpsStateChangedListener{
public interface WorkoutRecorderListener {
void onGPSStateChanged(GpsState oldState, GpsState state);
void onAutoStop();
}
}