package de.avalax.fitbuddy.presentation.workout; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.ProgressBar; import javax.inject.Inject; import de.avalax.fitbuddy.R; import de.avalax.fitbuddy.application.workout.WorkoutApplicationService; import de.avalax.fitbuddy.domain.model.ResourceException; import de.avalax.fitbuddy.domain.model.exercise.Exercise; import de.avalax.fitbuddy.presentation.FitbuddyApplication; import de.avalax.fitbuddy.presentation.dialog.EditWeightDialogFragment; import de.avalax.fitbuddy.presentation.dialog.EditWeightDialogFragment.DialogListener; import de.avalax.fitbuddy.presentation.edit.workout.EditWorkoutActivity; import de.avalax.fitbuddy.presentation.helper.ExerciseViewHelper; import de.avalax.fitbuddy.presentation.summary.FinishedWorkoutActivity; public class WorkoutActivity extends FragmentActivity implements DialogListener { private static final int MANAGE_WORKOUT = 1; private ViewPager viewPager; private ProgressBar workoutProgressBar; @Inject WorkoutApplicationService workoutApplicationService; @Inject ExerciseViewHelper exerciseViewHelper; private MenuItem menuItem; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_pager); ((FitbuddyApplication) getApplication()).getComponent().inject(this); init(); } private void init() { ActionBar actionBar = getActionBar(); actionBar.setDisplayShowHomeEnabled(false); actionBar.setBackgroundDrawable(null); viewPager = (ViewPager) findViewById(R.id.pager); workoutProgressBar = (ProgressBar) findViewById(R.id.workoutProgressBar); viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { updatePage(position); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.workout_actions, menu); this.menuItem = menu.findItem(R.id.action_change_weight); try { initWorkoutActivity(); } catch (ResourceException e) { Log.d("workout not found", e.getMessage(), e); startManageWorkoutActivity(); } return super.onCreateOptionsMenu(menu); } private void initWorkoutActivity() throws ResourceException { int countOfExercises = workoutApplicationService.countOfExercises(); viewPager.setAdapter(new ExercisePager(getSupportFragmentManager(), countOfExercises)); viewPager.setCurrentItem(workoutApplicationService.indexOfCurrentExercise()); updatePage(workoutApplicationService.indexOfCurrentExercise()); } protected void updatePage(int index) { try { workoutApplicationService.setCurrentExercise(index); Exercise exercise = workoutApplicationService.requestExercise(index); setTitle(exerciseViewHelper.nameOfExercise(exercise)); if (menuItem != null) { menuItem.setTitle(exerciseViewHelper.weightOfExercise(exercise)); updateWorkoutProgress(index); } } catch (ResourceException e) { Log.d("can't update page", e.getMessage(), e); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_switch_workout) { startManageWorkoutActivity(); } if (item.getItemId() == R.id.action_change_weight) { showEditDialog(); } if (item.getItemId() == R.id.action_finish_workout) { finishActiveWorkout(); } if (item.getItemId() == R.id.action_display_finished_workouts) { displayFinishedWorkouts(); } return super.onOptionsItemSelected(item); } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == MANAGE_WORKOUT && resultCode == Activity.RESULT_OK) { try { initWorkoutActivity(); } catch (ResourceException e) { Log.d("workout not found", e.getMessage(), e); } } } private void showEditDialog() { FragmentManager fm = getSupportFragmentManager(); try { int index = workoutApplicationService.indexOfCurrentExercise(); double weight = workoutApplicationService.weightOfCurrentSet(index); EditWeightDialogFragment.newInstance(weight).show(fm, "fragment_edit_name"); } catch (ResourceException e) { Log.d("Can't edit weight", e.getMessage(), e); } } private void displayFinishedWorkouts() { Intent intent = new Intent(this, FinishedWorkoutActivity.class); startActivity(intent); } protected void updateWorkoutProgress(int exerciseIndex) { try { int workoutProgress = workoutApplicationService.workoutProgress(exerciseIndex); workoutProgressBar.setProgress(workoutProgress); } catch (ResourceException e) { Log.d("Can't change progress", e.getMessage(), e); } } @Override public void onDialogPositiveClick(EditWeightDialogFragment editWeightDialogFragment) { try { int index = workoutApplicationService.indexOfCurrentExercise(); double weight = editWeightDialogFragment.getWeight(); workoutApplicationService.updateWeightOfCurrentSet(index, weight); updatePage(index); } catch (ResourceException e) { Log.d("Can't edit weight", e.getMessage(), e); } } private void startManageWorkoutActivity() { Intent intent = new Intent(this, EditWorkoutActivity.class); startActivityForResult(intent, MANAGE_WORKOUT); } private void finishActiveWorkout() { try { workoutApplicationService.finishCurrentWorkout(); initWorkoutActivity(); } catch (ResourceException e) { Log.d("Can not finish workout", e.getMessage(), e); } } }