Android Open Source - opentraining Recovery Timer Manager






From Project

Back to project page opentraining.

License

The source code is released under:

GNU General Public License

If you think the Android project opentraining listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * /*w  ww .  j  a va  2s. co m*/
 * This is OpenTraining, an Android application for planning your your fitness training.
 * Copyright (C) 2012-2014 Christian Skubich
 * 
 * This program 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 version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 */


package de.skubware.opentraining.activity.start_training;

import java.util.Timer;
import java.util.TimerTask;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.media.RingtoneManager;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import de.skubware.opentraining.R;

/**
 * Singleton class for managing the recovery-time-notification.
 * Using the singleton pattern for making it easier to control the notification within the whole application.
 *
 */
public enum RecoveryTimerManager {
  INSTANCE;
  
  private static final String TAG = "RecoveryTimerManager";
  private static final int RECOVERY_TIMER_NOTIFICATION_ID = 0;

  private Context mContext;
  
  private NotificationCompat.Builder mNotificationBuilder;
  private NotificationManager mNotifyManager;
  private Timer mSetTimer = new Timer();;

  private boolean mVibrationEnabled = true;
  private boolean mNotificationSoundEnabled = true;
  
  
  private enum RecoveryTimerKind{
    SET_RECOVER_TIMER,
    EXERCISE_RECOVERY_TIMER;
    
    // not using getter/setter to avoid the boilerplate code
    // as this is a private enum this should not be a problem
    public int timerDurationInSec = 0;
    public String tickerRunning = "Erholungsphase ...";
    public String contentTitleRunning = "Erholungsphase ...";
    public String tickerFinished = "Ende Erholungsphase";
    public String contentTitleFinished = "Erholungsphase beendet";
  };

  
  /**
   * Starts the set recovery timer, the app will display a notification.
   * Deletes/stops already running recovery timers.
   * 
   * @param context Current application context.
   */
  public synchronized void startSetRecoveryTimer(Context context){
    if(!PreferenceManager.getDefaultSharedPreferences(context).getBoolean("training_timer_enabled", true)){
      Log.v(TAG, "Will not start training timer, as it has been disabled.");
      return;
    }
    
    setUp(context);

    // make sure to stop an already running recovery timer
    stopRecoveryTimer();
    startTimer(RecoveryTimerKind.SET_RECOVER_TIMER);
  }
  
  /**
   * Starts the exercise recovery timer, the app will display a notification.
   * Deletes/stops already running recovery timers.
   * 
   * @param context Current application context.
   */
  public synchronized void startExerciseRecoveryTimer(Context context){
    if(!PreferenceManager.getDefaultSharedPreferences(context).getBoolean("training_timer_enabled", true)){
      Log.v(TAG, "Will not start training timer, as it has been disabled.");
      return;
    }
    
    setUp(context);

    // make sure to stop an already running set timer
    stopRecoveryTimer();
    startTimer(RecoveryTimerKind.EXERCISE_RECOVERY_TIMER);

  }
  
  /** Updates context and user settings. */
  private void setUp(Context context){
    mContext = context;
    mNotifyManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
    
    // update user settings/preferences
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    mVibrationEnabled = prefs.getBoolean("training_timer_vibration_enabled", true);
    mNotificationSoundEnabled = prefs.getBoolean("training_timer_sound_enabled", true);

    RecoveryTimerKind.EXERCISE_RECOVERY_TIMER.timerDurationInSec = Integer.valueOf(prefs.getString("training_timer_exercise_recovery_time", "180"));
    RecoveryTimerKind.EXERCISE_RECOVERY_TIMER.contentTitleFinished = mContext.getString(R.string.exercise_recover_timer_content_title_finished);
    RecoveryTimerKind.EXERCISE_RECOVERY_TIMER.contentTitleRunning = mContext.getString(R.string.exercise_recover_timer_content_title_running);
    RecoveryTimerKind.EXERCISE_RECOVERY_TIMER.tickerFinished = mContext.getString(R.string.exercise_recover_timer_ticker_finished);
    RecoveryTimerKind.EXERCISE_RECOVERY_TIMER.tickerRunning = mContext.getString(R.string.exercise_recover_timer_ticker_running);
    
    RecoveryTimerKind.SET_RECOVER_TIMER.timerDurationInSec = Integer.valueOf(prefs.getString("training_timer_set_recovery_time", "30"));
    RecoveryTimerKind.SET_RECOVER_TIMER.contentTitleFinished = mContext.getString(R.string.set_recover_timer_content_title_finished);
    RecoveryTimerKind.SET_RECOVER_TIMER.contentTitleRunning = mContext.getString(R.string.set_recover_timer_content_title_running);
    RecoveryTimerKind.SET_RECOVER_TIMER.tickerFinished = mContext.getString(R.string.set_recover_timer_ticker_finished);
    RecoveryTimerKind.SET_RECOVER_TIMER.tickerRunning = mContext.getString(R.string.set_recover_timer_ticker_running);
  }
  
  
  private synchronized void startTimer(final RecoveryTimerKind timerKind) {    
    // create notification
    mNotificationBuilder = new NotificationCompat.Builder(mContext);
    mNotificationBuilder.setContentTitle(timerKind.contentTitleRunning)
    .setSmallIcon(R.drawable.icon_dumbbell_small)
    .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(),
                R.drawable.icon_dumbbell));

    final boolean doVibrate = mVibrationEnabled;
    final boolean doBeep = mNotificationSoundEnabled;
    int maxInSec = timerKind.timerDurationInSec;
    final int max = 10 * maxInSec; 
    mSetTimer = new Timer();

    TimerTask task = new TimerTask() {
      private int counter = 0;

      @Override
      public void run() {
        // update progress if still running
        if (counter < max) {
          mNotificationBuilder.setTicker(timerKind.tickerRunning);
          mNotificationBuilder.setProgress(max, counter, false);
          mNotificationBuilder.setUsesChronometer(true);
          // Displays the progress bar for the first time.
          mNotificationBuilder.setContentIntent(PendingIntent.getActivity(mContext.getApplicationContext(), 0, new Intent(), 0));
          mNotifyManager.notify(0, mNotificationBuilder.build());

          counter++;
        } else {
          mNotificationBuilder.setProgress(max, max, false);
          //mNotificationBuilder.setNumber(max);

          // change message if progress is finished
          mNotificationBuilder.setContentTitle(timerKind.contentTitleFinished);
          mNotificationBuilder.setTicker(timerKind.tickerFinished);

          // let phone vibrate (unless user disabled this feature)
          if (doVibrate) {
            long[] vibrationPattern = { 0, 300 };
            mNotificationBuilder.setVibrate(vibrationPattern);
          }
          // make a notification sound (unless user disabled this feature)
          if (doBeep) {
            Uri defaultSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            mNotificationBuilder.setSound(defaultSound);
          }
          mNotificationBuilder.setAutoCancel(true);
          
          mNotificationBuilder.setContentIntent(PendingIntent.getActivity(mContext.getApplicationContext(), 0, new Intent(), 0));


          mNotifyManager.notify(RECOVERY_TIMER_NOTIFICATION_ID, mNotificationBuilder.build());
          mSetTimer.cancel();

        }

      }
    };

    long period = 100;
    long delay = 0;
    mSetTimer.scheduleAtFixedRate(task, delay, period);
  }
  
  
  /**
   * Stops an already running recovery timer (SET_RECOVER_TIMER,
   * as well as EXERCISE_RECOVERY_TIMER).
   * 
   * Will do nothing if there's no set recovery timer running.
   */
  public synchronized void stopRecoveryTimer(Context context){
    setUp(context);
    stopRecoveryTimer();
  }
  
  /** @see #stopRecoveryTimer(Context) */
  private synchronized void stopRecoveryTimer(){    
    mSetTimer.cancel();
    mNotifyManager.cancel(RECOVERY_TIMER_NOTIFICATION_ID);
  }
    
}




Java Source Code List

at.technikum.mti.fancycoverflow.FancyCoverFlowAdapter.java
at.technikum.mti.fancycoverflow.FancyCoverFlowItemWrapper.java
at.technikum.mti.fancycoverflow.FancyCoverFlow.java
de.skubware.opentraining.activity.ChangeLogDialog.java
de.skubware.opentraining.activity.DisclaimerDialog.java
de.skubware.opentraining.activity.MainActivity.java
de.skubware.opentraining.activity.NavigationGalleryAdapter.java
de.skubware.opentraining.activity.SelectWorkoutDialogFragment.java
de.skubware.opentraining.activity.WhatsNewDialog.java
de.skubware.opentraining.activity.acra.ACRACrashReportMailer.java
de.skubware.opentraining.activity.acra.ACRAFeedbackMailer.java
de.skubware.opentraining.activity.acra.OpenTrainingApplication.java
de.skubware.opentraining.activity.acra.RequestExerciseUpdate.java
de.skubware.opentraining.activity.create_exercise.CreateExerciseActivity.java
de.skubware.opentraining.activity.create_exercise.CustomSpinner.java
de.skubware.opentraining.activity.create_exercise.DescriptionFragment.java
de.skubware.opentraining.activity.create_exercise.EditImageMetadataDialog.java
de.skubware.opentraining.activity.create_exercise.EquipmentDataFragment.java
de.skubware.opentraining.activity.create_exercise.ExerciseImageListAdapter.java
de.skubware.opentraining.activity.create_exercise.ImageFragment.java
de.skubware.opentraining.activity.create_exercise.MuscleDataFragment.java
de.skubware.opentraining.activity.create_exercise.NameFragment.java
de.skubware.opentraining.activity.create_exercise.SimpleDataFragment.java
de.skubware.opentraining.activity.create_exercise.SpinnerDataFragment.java
de.skubware.opentraining.activity.create_workout.DialogFilterMusclesAndEquipment.java
de.skubware.opentraining.activity.create_workout.DialogWorkoutOverviewFragment.java
de.skubware.opentraining.activity.create_workout.ExerciseDetailOnGestureListener.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeDetailActivity.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeDetailFragment.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeListActivity.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeListAdapter.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeListFragment.java
de.skubware.opentraining.activity.create_workout.SelectMuscleDialog.java
de.skubware.opentraining.activity.create_workout.SendExerciseFeedbackDialogFragment.java
de.skubware.opentraining.activity.create_workout.upload_exercise.ExerciseImage.java
de.skubware.opentraining.activity.create_workout.upload_exercise.UploadExerciseAsyncTask.java
de.skubware.opentraining.activity.create_workout.upload_exercise.UploadExerciseImagesAsyncTask.java
de.skubware.opentraining.activity.create_workout.upload_exercise.WgerRestService.java
de.skubware.opentraining.activity.manage_workouts.RenameWorkoutDialogFragment.java
de.skubware.opentraining.activity.manage_workouts.WorkoutDetailActivity.java
de.skubware.opentraining.activity.manage_workouts.WorkoutDetailFragment.java
de.skubware.opentraining.activity.manage_workouts.WorkoutListActivity.java
de.skubware.opentraining.activity.manage_workouts.WorkoutListFragment.java
de.skubware.opentraining.activity.settings.LicenseDialog.java
de.skubware.opentraining.activity.settings.SettingsActivity.java
de.skubware.opentraining.activity.settings.sync.OpenTrainingSyncResultReceiver.java
de.skubware.opentraining.activity.settings.sync.OpenTrainingSyncService.java
de.skubware.opentraining.activity.settings.sync.RestClient.java
de.skubware.opentraining.activity.settings.sync.SyncFinishedDialog.java
de.skubware.opentraining.activity.settings.sync.WgerImageDownloader.java
de.skubware.opentraining.activity.settings.sync.WgerJSONParser.java
de.skubware.opentraining.activity.start_training.DialogFragmentAddEntry.java
de.skubware.opentraining.activity.start_training.DialogFragmentTrainingEntryTable.java
de.skubware.opentraining.activity.start_training.FExDetailActivity.java
de.skubware.opentraining.activity.start_training.FExDetailFragment.java
de.skubware.opentraining.activity.start_training.FExListActivity.java
de.skubware.opentraining.activity.start_training.FExListAdapter.java
de.skubware.opentraining.activity.start_training.FExListFragment.java
de.skubware.opentraining.activity.start_training.RecoveryTimerManager.java
de.skubware.opentraining.activity.start_training.SwipeDismissListViewTouchListener.java
de.skubware.opentraining.activity.start_training.SwipeDismissTouchListener.java
de.skubware.opentraining.activity.start_training.TrainingEntryListAdapter.java
de.skubware.opentraining.basic.ActivationLevel.java
de.skubware.opentraining.basic.ExerciseTag.java
de.skubware.opentraining.basic.ExerciseType.java
de.skubware.opentraining.basic.FSet.java
de.skubware.opentraining.basic.FitnessExercise.java
de.skubware.opentraining.basic.IExercise.java
de.skubware.opentraining.basic.License.java
de.skubware.opentraining.basic.Muscle.java
de.skubware.opentraining.basic.SportsEquipment.java
de.skubware.opentraining.basic.TrainingEntry.java
de.skubware.opentraining.basic.Translatable.java
de.skubware.opentraining.basic.Workout.java
de.skubware.opentraining.db.Cache.java
de.skubware.opentraining.db.DataHelper.java
de.skubware.opentraining.db.DataProvider.java
de.skubware.opentraining.db.IDataProvider.java
de.skubware.opentraining.db.parser.AbstractJSONParser.java
de.skubware.opentraining.db.parser.ExerciseTagJSONParser.java
de.skubware.opentraining.db.parser.ExerciseTypeXMLParser.java
de.skubware.opentraining.db.parser.IParser.java
de.skubware.opentraining.db.parser.MuscleJSONParser.java
de.skubware.opentraining.db.parser.SportsEquipmentJSONParser.java
de.skubware.opentraining.db.parser.WorkoutXMLParser.java
de.skubware.opentraining.db.parser.XMLSaver.java
de.skubware.opentraining.db.rest.ExerciseImageGSONSerializer.java
de.skubware.opentraining.db.rest.ExerciseTypeGSONSerializer.java
de.skubware.opentraining.db.rest.LanguageGSONDeserializer.java
de.skubware.opentraining.db.rest.MuscleGSONDeserializer.java
de.skubware.opentraining.db.rest.ServerModel.java
de.skubware.opentraining.db.rest.SportsEquipmentGSONDeserializer.java
de.skubware.opentraining.exporter.HTMLExporter.java
de.skubware.opentraining.exporter.LaTeXExporter.java
de.skubware.opentraining.exporter.WorkoutExporter.java