package de.avalax.fitbuddy.presentation.edit.exercise;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import javax.inject.Inject;
import de.avalax.fitbuddy.R;
import de.avalax.fitbuddy.application.edit.workout.EditWorkoutApplicationService;
import de.avalax.fitbuddy.domain.model.ResourceException;
import de.avalax.fitbuddy.domain.model.exercise.Exercise;
import de.avalax.fitbuddy.domain.model.set.Set;
import de.avalax.fitbuddy.domain.model.set.SetException;
import de.avalax.fitbuddy.domain.model.workout.WorkoutId;
import de.avalax.fitbuddy.presentation.FitbuddyApplication;
import de.avalax.fitbuddy.presentation.dialog.EditNameDialogFragment;
import de.avalax.fitbuddy.presentation.dialog.EditRepsDialogFragment;
import de.avalax.fitbuddy.presentation.dialog.EditSetsDialogFragment;
import de.avalax.fitbuddy.presentation.dialog.EditWeightDialogFragment;
public class EditExerciseActivity extends FragmentActivity implements
EditWeightDialogFragment.DialogListener,
EditSetsDialogFragment.DialogListener,
EditRepsDialogFragment.DialogListener,
EditNameDialogFragment.DialogListener {
@Inject
protected EditWorkoutApplicationService editWorkoutApplicationService;
private Exercise exercise;
private int position;
private EditExerciseDialogFragment editExerciseDialogFragment;
private WorkoutId workoutId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_workout);
((FitbuddyApplication) getApplication()).getComponent().inject(this);
workoutId = (WorkoutId) getIntent().getSerializableExtra("workoutId");
exercise = (Exercise) getIntent().getSerializableExtra("exercise");
position = getIntent().getIntExtra("position", -1);
editExerciseDialogFragment = EditExerciseDialogFragment.newInstance(exercise);
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, editExerciseDialogFragment).commit();
getActionBar().setTitle(exercise.getName());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.edit_exercise_actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_save_exercise) {
editWorkoutApplicationService.saveExercise(workoutId, exercise, position);
setResult(RESULT_OK);
finish();
}
return true;
}
@Override
public void onDialogPositiveClick(EditWeightDialogFragment editWeightDialogFragment) {
double weight = editWeightDialogFragment.getWeight();
int countOfSets = exercise.getSets().size();
for (int i = 0; i < countOfSets; i++) {
try {
Set set = exercise.getSets().get(i);
set.setWeight(weight);
} catch (SetException e) {
Log.d("can't update weight", e.getMessage(), e);
}
}
editExerciseDialogFragment.init(editExerciseDialogFragment.getView());
}
@Override
public void onDialogPositiveClick(EditSetsDialogFragment editSetsDialogFragment) {
int newSetAmount = editSetsDialogFragment.getSets();
try {
editWorkoutApplicationService.changeSetAmount(exercise, newSetAmount);
} catch (ResourceException e) {
Log.d("can't update set amount", e.getMessage(), e);
}
editExerciseDialogFragment.init(editExerciseDialogFragment.getView());
}
@Override
public void onDialogPositiveClick(EditRepsDialogFragment editRepsDialogFragment) {
int reps = editRepsDialogFragment.getReps();
int countOfSets = exercise.getSets().size();
for (int i = 0; i < countOfSets; i++) {
try {
Set set = exercise.getSets().get(i);
set.setMaxReps(reps);
} catch (SetException e) {
Log.d("can't update max reps", e.getMessage(), e);
}
}
editExerciseDialogFragment.init(editExerciseDialogFragment.getView());
}
@Override
public void onDialogPositiveClick(EditNameDialogFragment editNameDialogFragment) {
String name = editNameDialogFragment.getName();
exercise.setName(name);
editExerciseDialogFragment.init(editExerciseDialogFragment.getView());
getActionBar().setTitle(exercise.getName());
}
}