package de.avalax.fitbuddy.application.workout; import android.content.Context; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import de.avalax.fitbuddy.domain.model.workout.Workout; import de.avalax.fitbuddy.domain.model.workout.WorkoutException; public class WorkoutSession { private Workout workout; private Context context; public WorkoutSession(Context context) { this.context = context; this.workout = readCurrentWorkoutFromFile(); } public void switchWorkout(Workout workout) throws WorkoutException { this.workout = workout; try { writeCurrentWorkoutToFile(); } catch (IOException e) { throw new WorkoutException(e); } } public void saveCurrentWorkout() throws WorkoutException { try { writeCurrentWorkoutToFile(); } catch (IOException e) { throw new WorkoutException(e); } } public Workout getWorkout() throws WorkoutException { if (workout == null) { throw new WorkoutException(); } return workout; } private Workout readCurrentWorkoutFromFile() { Workout workout; File file = new File(context.getDir("data", Context.MODE_PRIVATE), "currentWorkout"); try { FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); workout = (Workout) ois.readObject(); ois.close(); fis.close(); } catch (IOException | ClassNotFoundException e) { workout = null; } return workout; } protected void writeCurrentWorkoutToFile() throws IOException { File file = new File(context.getDir("data", Context.MODE_PRIVATE), "currentWorkout"); ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file)); outputStream.writeObject(workout); outputStream.flush(); outputStream.close(); } public boolean hasWorkout() { return workout != null; } }