Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
avalax committed Jun 7, 2018
1 parent ac9fec0 commit 1618d97
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import de.avalax.fitbuddy.domain.model.ResourceException;
import de.avalax.fitbuddy.domain.model.exercise.BasicExercise;
import de.avalax.fitbuddy.domain.model.exercise.Exercise;
import de.avalax.fitbuddy.domain.model.exercise.ExerciseException;
import de.avalax.fitbuddy.domain.model.workout.Workout;
import de.avalax.fitbuddy.presentation.FitbuddyApplication;
import de.avalax.fitbuddy.presentation.edit.exercise.EditExerciseActivity;
Expand All @@ -31,7 +32,7 @@
import static de.avalax.fitbuddy.presentation.FitbuddyApplication.EDIT_EXERCISE;
import static java.lang.String.valueOf;

public class EditWorkoutActivity extends AppCompatActivity {
public class EditWorkoutActivity extends AppCompatActivity implements ExerciseAdapter.ItemClickListener {
@Inject
EditWorkoutService editWorkoutService;
private Workout workout;
Expand Down Expand Up @@ -145,4 +146,17 @@ public void show(Workout workout) {
.setTransition(TRANSIT_NONE)
.commit();
}

@Override
public void onItemClick(View view, int position) {
try {
Exercise exercise = workout.getExercises().get(position);
Intent intent = new Intent(this, EditExerciseActivity.class);
intent.putExtra("exercise", exercise);
intent.putExtra("position", position);
startActivityForResult(intent, EDIT_EXERCISE);
} catch (ExerciseException e) {
Log.e("ExerciseException", e.getMessage(), e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Workout workout = (Workout) getArguments().getSerializable(KEY_WORKOUT);
viewModel.init(getActivity(), workout);
viewModel.init(getActivity(), (EditWorkoutActivity) getActivity(), workout);
binding.list.setAdapter(viewModel.getExerciseAdapter());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ public class EditWorkoutViewModel extends ViewModel {
private ExerciseAdapter exerciseAdapter;
private Workout workout;

public void init(Activity activity, Workout workout) {
exerciseAdapter = new ExerciseAdapter(activity, workout.getExercises());
public void init(Activity activity,
ExerciseAdapter.ItemClickListener clickListener, Workout workout) {
exerciseAdapter = new ExerciseAdapter(activity, workout.getExercises(), clickListener);
this.workout = workout;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package de.avalax.fitbuddy.presentation.edit.workout;

import android.app.Activity;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v4.util.ArraySet;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
Expand All @@ -17,35 +17,36 @@
import de.avalax.fitbuddy.domain.model.exercise.ExerciseException;
import de.avalax.fitbuddy.domain.model.exercise.Exercises;
import de.avalax.fitbuddy.presentation.edit.SelectableViewHolder;
import de.avalax.fitbuddy.presentation.edit.exercise.EditExerciseActivity;

import static android.graphics.Color.TRANSPARENT;
import static de.avalax.fitbuddy.presentation.FitbuddyApplication.EDIT_EXERCISE;
import static de.avalax.fitbuddy.presentation.edit.workout.ExerciseBindingAdapter.setTitleFromExercise;

public class ExerciseAdapter extends RecyclerView.Adapter<ExerciseAdapter.ExerciseViewHolder> {
private ItemClickListener clickListener;
private Exercises exercises;
private Activity activity;
private Set<Exercise> selections;
private Set<SelectableViewHolder> selections;

ExerciseAdapter(Activity activity,
Exercises exercises) {
Exercises exercises,
ItemClickListener clickListener) {
super();
this.activity = activity;
this.exercises = exercises;
this.clickListener = clickListener;
this.selections = new ArraySet<>();
}

@Override
public ExerciseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
public ExerciseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(activity);
View view = inflater.inflate(R.layout.item_exercise, parent, false);
int highlightColor = view.getResources().getColor(R.color.primaryLightColor);
return new ExerciseViewHolder(view, TRANSPARENT, highlightColor);
}

@Override
public void onBindViewHolder(ExerciseViewHolder holder, int position) {
public void onBindViewHolder(@NonNull ExerciseViewHolder holder, int position) {
try {
Exercise exercise = exercises.get(position);

Expand All @@ -54,46 +55,11 @@ public void onBindViewHolder(ExerciseViewHolder holder, int position) {
ExerciseBindingAdapter.setWeightFromExercise(holder.getWeightTextView(), exercise);

holder.setSelected(selections.contains(exercise));

holder.getView().setOnClickListener(view -> {
if (selections.isEmpty()) {
Intent intent = new Intent(activity, EditExerciseActivity.class);
intent.putExtra("exercise", exercise);
intent.putExtra("position", holder.getAdapterPosition());
activity.startActivityForResult(intent, EDIT_EXERCISE);
} else {
if (isSelected(exercise)) {
deselect(holder.getAdapterPosition(), exercise);
} else {
select(holder.getAdapterPosition(), exercise);
}
}
});
holder.getView().setOnLongClickListener(view -> {
select(holder.getAdapterPosition(), exercise);
return true;
});
} catch (ExerciseException e) {
Log.e("ExerciseException", e.getMessage(), e);
}
}

private boolean isSelected(Exercise exercise) {
return selections.contains(exercise);
}

private void deselect(int position, Exercise exercise) {
selections.remove(exercise);
notifyItemChanged(position);
((EditWorkoutActivity) activity).updateToolbar(selections.size());
}

private void select(int position, Exercise exercise) {
selections.add(exercise);
notifyItemChanged(position);
((EditWorkoutActivity) activity).updateToolbar(selections.size());
}

@Override
public long getItemId(int position) {
return position;
Expand All @@ -105,14 +71,18 @@ public int getItemCount() {
}

void removeSelections() {
for (Exercise exercise : selections) {
exercises.remove(exercise);
for (SelectableViewHolder selection : selections) {
try {
exercises.remove(exercises.get(selection.getAdapterPosition()));
} catch (ExerciseException e) {
Log.e("ExerciseException", e.getMessage(), e);
}
}
selections.clear();
notifyDataSetChanged();
}

static class ExerciseViewHolder extends SelectableViewHolder {
public class ExerciseViewHolder extends SelectableViewHolder implements View.OnClickListener, View.OnLongClickListener {
private final TextView weightTextView;
private final TextView titleTextView;
private final TextView subtitleTextView;
Expand All @@ -122,6 +92,8 @@ static class ExerciseViewHolder extends SelectableViewHolder {
weightTextView = view.findViewById(R.id.item_weight);
titleTextView = view.findViewById(R.id.item_title);
subtitleTextView = view.findViewById(R.id.item_subtitle);
view.setOnClickListener(this);
view.setOnLongClickListener(this);
}

TextView getWeightTextView() {
Expand All @@ -135,5 +107,36 @@ TextView getTitleTextView() {
TextView getSubtitleTextView() {
return subtitleTextView;
}

@Override
public void onClick(View view) {
if (selections.isEmpty()) {
clickListener.onItemClick(view, getAdapterPosition());
} else {
setSelected(!isSelected());
((EditWorkoutActivity) activity).updateToolbar(selections.size());
}
}

@Override
public boolean onLongClick(View view) {
setSelected(true);
((EditWorkoutActivity) activity).updateToolbar(selections.size());
return true;
}

@Override
public void setSelected(boolean selected) {
if (selected) {
selections.add(this);
} else {
selections.remove(this);
}
super.setSelected(selected);
}
}

public interface ItemClickListener {
void onItemClick(View view, int position);
}
}

0 comments on commit 1618d97

Please sign in to comment.