From 28535f653a8c5384657cc743830b520544e192f3 Mon Sep 17 00:00:00 2001 From: jannis Date: Wed, 21 Aug 2019 10:25:14 +0200 Subject: [PATCH] #12 Save workout when App is being closed --- .../activity/RecordWorkoutActivity.java | 21 +++++++++++++++---- .../fitness/location/WorkoutRecorder.java | 10 ++++++++- .../fitness/util/WorkoutTypeCalculator.java | 4 ++-- .../tadris/fitness/view/WorkoutAdapter.java | 12 +++++++---- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/de/tadris/fitness/activity/RecordWorkoutActivity.java b/app/src/main/java/de/tadris/fitness/activity/RecordWorkoutActivity.java index 04cf94c..c2d2bac 100644 --- a/app/src/main/java/de/tadris/fitness/activity/RecordWorkoutActivity.java +++ b/app/src/main/java/de/tadris/fitness/activity/RecordWorkoutActivity.java @@ -6,7 +6,7 @@ * FitoTrack is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later velocationListener= new LocationListener(context);rsion. + * (at your option) any later version. * * FitoTrack is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -71,6 +71,7 @@ public class RecordWorkoutActivity extends FitoTrackActivity implements Location private Handler mHandler= new Handler(); PowerManager.WakeLock wakeLock; Intent locationListener; + private boolean saved= false; @Override protected void onCreate(Bundle savedInstanceState) { @@ -163,20 +164,31 @@ public class RecordWorkoutActivity extends FitoTrackActivity implements Location } private void saveAndClose(){ + save(); + finish(); + } + + private void save(){ if(recorder.getSampleCount() > 3){ recorder.save(); + saved= true; + } + } + + private void saveIfNotSaved(){ + if(!saved){ + save(); } - finish(); } private void showEnterDescriptionDialog(){ final EditText editText= new EditText(this); editText.setSingleLine(true); new AlertDialog.Builder(this).setTitle(R.string.enterComment).setPositiveButton(R.string.okay, (dialog, which) -> { - dialog.cancel(); + dialog.dismiss(); recorder.setComment(editText.getText().toString()); saveAndClose(); - }).setView(editText).setCancelable(false).create().show(); + }).setView(editText).setOnCancelListener(dialog -> saveAndClose()).create().show(); } private void showAreYouSureToStopDialog(){ @@ -234,6 +246,7 @@ public class RecordWorkoutActivity extends FitoTrackActivity implements Location @Override protected void onDestroy() { recorder.stop(); + saveIfNotSaved(); // Important mapView.destroyAll(); AndroidGraphicFactory.clearResourceMemoryCache(); super.onDestroy(); diff --git a/app/src/main/java/de/tadris/fitness/location/WorkoutRecorder.java b/app/src/main/java/de/tadris/fitness/location/WorkoutRecorder.java index 2f95b63..fa95550 100644 --- a/app/src/main/java/de/tadris/fitness/location/WorkoutRecorder.java +++ b/app/src/main/java/de/tadris/fitness/location/WorkoutRecorder.java @@ -59,12 +59,17 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener private long lastPause= 0; private long lastSampleTime= 0; private double distance= 0; + private boolean hasBegan = false; public WorkoutRecorder(Context context, String workoutType) { this.context= context; this.state= RecordingState.IDLE; this.workout= new Workout(); + + // Default values + this.workout.comment= ""; + this.workout.workoutType= workoutType; } @@ -178,13 +183,16 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener } lastSampleTime= System.currentTimeMillis(); if(state == RecordingState.RUNNING && location.getTime() > workout.start){ - if(samples.size() == 2){ + if(samples.size() == 2 && !hasBegan){ lastResume= System.currentTimeMillis(); workout.start= System.currentTimeMillis(); lastPause= 0; time= 0; pauseTime= 0; this.distance= 0; + samples.clear(); + + hasBegan = true; // Do not clear a second time } this.distance+= distance; WorkoutSample sample= new WorkoutSample(); diff --git a/app/src/main/java/de/tadris/fitness/util/WorkoutTypeCalculator.java b/app/src/main/java/de/tadris/fitness/util/WorkoutTypeCalculator.java index 2cf7ab7..6e8ac7c 100644 --- a/app/src/main/java/de/tadris/fitness/util/WorkoutTypeCalculator.java +++ b/app/src/main/java/de/tadris/fitness/util/WorkoutTypeCalculator.java @@ -26,9 +26,9 @@ public class WorkoutTypeCalculator { public static int getType(Workout workout){ if(workout.workoutType.equals(Workout.WORKOUT_TYPE_RUNNING)){ - if(workout.avgSpeed < 7){ + if(workout.avgSpeed < 1.9){ return R.string.workoutTypeWalking; - }else if(workout.avgSpeed < 9.6){ + }else if(workout.avgSpeed < 2.7){ return R.string.workoutTypeJogging; }else{ return R.string.workoutTypeRunning; diff --git a/app/src/main/java/de/tadris/fitness/view/WorkoutAdapter.java b/app/src/main/java/de/tadris/fitness/view/WorkoutAdapter.java index e8555c2..a84c797 100644 --- a/app/src/main/java/de/tadris/fitness/view/WorkoutAdapter.java +++ b/app/src/main/java/de/tadris/fitness/view/WorkoutAdapter.java @@ -32,8 +32,8 @@ import java.util.Date; import de.tadris.fitness.R; import de.tadris.fitness.data.Workout; -import de.tadris.fitness.util.unit.UnitUtils; import de.tadris.fitness.util.WorkoutTypeCalculator; +import de.tadris.fitness.util.unit.UnitUtils; public class WorkoutAdapter extends RecyclerView.Adapter{ @@ -75,10 +75,14 @@ public class WorkoutAdapter extends RecyclerView.Adapter 33){ - holder.commentText.setText(workout.comment.substring(0, 30) + "..."); + if(workout.comment != null){ + if(workout.comment.length() > 33){ + holder.commentText.setText(workout.comment.substring(0, 30) + "..."); + }else{ + holder.commentText.setText(workout.comment); + } }else{ - holder.commentText.setText(workout.comment); + holder.commentText.setText(""); } holder.lengthText.setText(UnitUtils.getDistance(workout.length)); holder.timeText.setText(UnitUtils.getHourMinuteTime(workout.duration));