Added warnings if the set exercise time is not sufficient to complete the exercises.

This commit is contained in:
Christopher Beckmann 2018-05-14 23:06:28 +02:00
commit 4c69721ce5
6 changed files with 83 additions and 25 deletions

View file

@ -672,7 +672,6 @@ public class ExerciseActivity extends AppCompatActivity implements android.suppo
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}, 1000 * 5);

View file

@ -5,15 +5,19 @@ import android.animation.AnimatorListenerAdapter;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
@ -21,6 +25,7 @@ import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import org.secuso.privacyfriendlybreakreminder.activities.tutorial.FirstLaunchManager;
import org.secuso.privacyfriendlybreakreminder.exercises.ExerciseLocale;
@ -64,7 +69,6 @@ public class TimerActivity extends BaseActivity implements android.support.v4.ap
private Spinner exerciseSetSpinner;
private ExerciseSetSpinnerAdapter exerciseSetAdapter;
private boolean isActivityVisible = false;
// animation
@ -88,6 +92,7 @@ public class TimerActivity extends BaseActivity implements android.support.v4.ap
mTimerService = null;
}
};
private ExerciseSet currentExerciseSet;
private void onServiceConnected() {
updateUI();
@ -191,7 +196,16 @@ public class TimerActivity extends BaseActivity implements android.support.v4.ap
exerciseSetSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
currentExerciseSet = (ExerciseSet) exerciseSetSpinner.getAdapter().getItem(position);
pref.edit().putLong(DEFAULT_EXERCISE_SET, id).apply();
if(mTimerService != null && mTimerService.isRunning()) {
if(currentExerciseSet.getExerciseSetTime(TimerActivity.this)*1000 > getCurrentSetBreakTime()) {
Toast toast = Toast.makeText(TimerActivity.this, R.string.toast_not_enough_exercise_time, Toast.LENGTH_SHORT);
toast.setGravity(toast.getGravity(), 0, 250);
toast.show();
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
@ -266,20 +280,54 @@ public class TimerActivity extends BaseActivity implements android.support.v4.ap
mTimerService.pauseTimer();
} else {
long duration = getCurrentSetDuration();
final long duration = getCurrentSetDuration();
saveCurrentSetDuration();
mTimerService.startTimer(duration);
progressBar.setMax((int) duration);
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.edit()
.putInt(FirstLaunchManager.PREF_BREAK_PICKER_SECONDS, secondsBreakPicker.getValue())
.putInt(FirstLaunchManager.PREF_BREAK_PICKER_MINUTES, minutesBreakPicker.getValue())
.putLong(PAUSE_TIME, getCurrentSetBreakTime()).apply();
ExerciseSet set = getCurrentSelectedExerciseSet();
long seconds = set.getExerciseSetTime(this);
if(seconds * 1000 > getCurrentSetBreakTime()) {
showTimeWarningDialog(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
mTimerService.startTimer(duration);
progressBar.setMax((int) duration);
saveCurrentSetBreakTime();
}
});
} else {
mTimerService.startTimer(duration);
progressBar.setMax((int) duration);
saveCurrentSetBreakTime();
}
}
}
}
private void showTimeWarningDialog(DialogInterface.OnClickListener listener) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.warning);
builder.setMessage(R.string.dialog_warning_not_enough_exercise_time);
Drawable icon = getDrawable(R.drawable.ic_about);
if (icon != null) {
icon.setTint(ActivityCompat.getColor(this, R.color.yellow));
builder.setIcon(icon);
}
builder.setPositiveButton(R.string.start, listener);
builder.setNegativeButton(R.string.cancel, null);
builder.create().show();
}
private void saveCurrentSetBreakTime() {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.edit()
.putInt(FirstLaunchManager.PREF_BREAK_PICKER_SECONDS, secondsBreakPicker.getValue())
.putInt(FirstLaunchManager.PREF_BREAK_PICKER_MINUTES, minutesBreakPicker.getValue())
.putLong(PAUSE_TIME, getCurrentSetBreakTime()).apply();
}
private void saveCurrentSetDuration() {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.edit().putInt(FirstLaunchManager.PREF_PICKER_SECONDS, secondsPicker.getValue())
@ -424,6 +472,8 @@ public class TimerActivity extends BaseActivity implements android.support.v4.ap
if(e.getId() == defaultId) {
exerciseSetSpinner.setSelection(i);
if(exerciseSetSpinner.getOnItemSelectedListener() != null)
exerciseSetSpinner.getOnItemSelectedListener().onItemSelected(null, null, i, e.getId());
break;
}
}
@ -431,4 +481,8 @@ public class TimerActivity extends BaseActivity implements android.support.v4.ap
@Override
public void onLoaderReset(Loader<List<ExerciseSet>> loader) {}
public ExerciseSet getCurrentSelectedExerciseSet() {
return currentExerciseSet;
}
}

View file

@ -172,13 +172,7 @@ public class ExerciseSetListAdapter extends RecyclerView.Adapter<RecyclerView.Vi
vh.noExercisesText.setVisibility(View.GONE);
vh.exerciseTime.setVisibility(View.VISIBLE);
int result = 0;
for(Exercise e : set.getExercises()) {
result += e.getImageID().split(",").length;
}
long exerciseDuration = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(mContext).getString(FirstLaunchManager.EXERCISE_DURATION, "30"));
int seconds = (int) (result * exerciseDuration);
int seconds = (int) set.getExerciseSetTime(mContext);
vh.exerciseTime.setText(String.format(Locale.getDefault(), "%02d:%02d", (seconds / 60), (seconds % 60)));
}
}

View file

@ -96,13 +96,7 @@ public class ExerciseSetSpinnerAdapter extends ArrayAdapter<ExerciseSet> {
noExercisesText.setVisibility(View.GONE);
exerciseTime.setVisibility(View.VISIBLE);
int result = 0;
for(Exercise e : set.getExercises()) {
result += e.getImageID().split(",").length;
}
long exerciseDuration = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(getContext()).getString(FirstLaunchManager.EXERCISE_DURATION, "30"));
int seconds = (int) (result * exerciseDuration);
int seconds = (int) set.getExerciseSetTime(getContext());
exerciseTime.setText(String.format(Locale.getDefault(), "%02d:%02d", (seconds / 60), (seconds % 60)));
}

View file

@ -1,5 +1,10 @@
package org.secuso.privacyfriendlybreakreminder.database.data;
import android.content.Context;
import android.preference.PreferenceManager;
import org.secuso.privacyfriendlybreakreminder.activities.tutorial.FirstLaunchManager;
import java.util.ArrayList;
import java.util.List;
@ -71,4 +76,13 @@ public class ExerciseSet {
public void setDefaultSet(boolean defaultSet) {
isDefaultSet = defaultSet;
}
public long getExerciseSetTime(Context context) {
int result = 0;
for(Exercise e : getExercises()) {
result += e.getImageID().split(",").length;
}
long exerciseDuration = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(context).getString(FirstLaunchManager.EXERCISE_DURATION, "30"));
return (result * exerciseDuration);
}
}

View file

@ -153,6 +153,9 @@
<string name="activity_exercise_button_continuous_on">start timers automatically</string>
<string name="activity_exercise_button_continuous_off">start timers manually</string>
<string name="exercise_time">Execise Time:\n%s</string>
<string name="dialog_warning_not_enough_exercise_time">The chosen exercise time is too short to finish the selected exercise set. Are you sure you want to start the timer?</string>
<string name="warning">Warning</string>
<string name="toast_not_enough_exercise_time">The currently selected exercise time is not sufficient to complete the chosen exercise set.</string>
</resources>