From 4c69721ce513f121cd5079277788cfb0f66572d8 Mon Sep 17 00:00:00 2001 From: Christopher Beckmann Date: Mon, 14 May 2018 23:06:28 +0200 Subject: [PATCH] Added warnings if the set exercise time is not sufficient to complete the exercises. --- .../activities/ExerciseActivity.java | 1 - .../activities/TimerActivity.java | 72 ++++++++++++++++--- .../adapter/ExerciseSetListAdapter.java | 8 +-- .../adapter/ExerciseSetSpinnerAdapter.java | 8 +-- .../database/data/ExerciseSet.java | 14 ++++ app/src/main/res/values/strings.xml | 3 + 6 files changed, 82 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java index 3517193..bb02f07 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java @@ -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); diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/TimerActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/TimerActivity.java index d502353..af6962b 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/TimerActivity.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/TimerActivity.java @@ -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> loader) {} + + public ExerciseSet getCurrentSelectedExerciseSet() { + return currentExerciseSet; + } } diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseSetListAdapter.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseSetListAdapter.java index 306ecff..66e8417 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseSetListAdapter.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseSetListAdapter.java @@ -172,13 +172,7 @@ public class ExerciseSetListAdapter extends RecyclerView.Adapter { 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))); } diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/data/ExerciseSet.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/data/ExerciseSet.java index 9ec7c66..f7f8064 100644 --- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/data/ExerciseSet.java +++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/data/ExerciseSet.java @@ -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); + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c298ee0..e196de7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -153,6 +153,9 @@ start timers automatically start timers manually Execise Time:\n%s + The chosen exercise time is too short to finish the selected exercise set. Are you sure you want to start the timer? + Warning + The currently selected exercise time is not sufficient to complete the chosen exercise set.