Skip to content

Commit

Permalink
multi selection for delete finished workouts
Browse files Browse the repository at this point in the history
  • Loading branch information
avalax committed Jan 22, 2018
1 parent 08ce58d commit b73440a
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 30 deletions.
Expand Up @@ -329,11 +329,13 @@ public void aWorkout_shouldBeDeleted() throws Exception {
public void aFinishedWorkout_shouldBeDeleted() throws Exception {
Workout persistedWorkout = persistence.addWorkout(aWorkout().withExercise(anExercise().withSet(aSet())));
persistence.finishWorkout(persistedWorkout);

persistence.finishWorkout(persistedWorkout);
activityRule.launchActivity(null);

application.navigateToSummary();

application.deleteFinishedWorkout(0);
application.selectFinishedWorkout(1);
application.deleteSelectedFinishedWorkouts();

application.hasShownAddNoFinishedWorkoutsHint();
}
Expand Down
Expand Up @@ -85,6 +85,9 @@ public void navigateToSummary() {

public void deleteFinishedWorkout(int position) {
onView(withId(android.R.id.list)).perform(actionOnItemAtPosition(position, longClick()));
}

public void deleteSelectedFinishedWorkouts() {
onView(withId(R.id.toolbar_delete_finished_workout)).perform(click());
}

Expand Down
29 changes: 14 additions & 15 deletions src/main/java/de/avalax/fitbuddy/presentation/MainActivity.java
Expand Up @@ -21,7 +21,6 @@
import de.avalax.fitbuddy.application.edit.workout.EditWorkoutService;
import de.avalax.fitbuddy.application.summary.FinishedWorkoutService;
import de.avalax.fitbuddy.application.workout.WorkoutService;
import de.avalax.fitbuddy.domain.model.finished_workout.FinishedWorkout;
import de.avalax.fitbuddy.domain.model.workout.Workout;
import de.avalax.fitbuddy.domain.model.workout.WorkoutException;
import de.avalax.fitbuddy.presentation.edit.workout.EditWorkoutActivity;
Expand All @@ -33,6 +32,7 @@
import static android.widget.Toast.makeText;
import static de.avalax.fitbuddy.presentation.FitbuddyApplication.ADD_WORKOUT;
import static de.avalax.fitbuddy.presentation.FitbuddyApplication.EDIT_WORKOUT;
import static java.lang.String.valueOf;

public class MainActivity extends AppCompatActivity
implements BottomNavigationView.OnNavigationItemSelectedListener {
Expand Down Expand Up @@ -90,10 +90,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
return true;
}
if (item.getItemId() == R.id.toolbar_delete_finished_workout) {
FinishedWorkout workout = (FinishedWorkout) item.getIntent()
.getSerializableExtra("finishedWorkout");
finishedWorkoutService.delete(workout);
removeFinishedWorkoutFromList(workout);
removeSelectedFinishedWorkouts();
mainToolbar();
return true;
}
Expand Down Expand Up @@ -132,10 +129,10 @@ private void removeWorkoutFromList(Workout workout) {
workoutListFragment.removeWorkout(workout);
}

private void removeFinishedWorkoutFromList(FinishedWorkout workout) {
private void removeSelectedFinishedWorkouts() {
FinishedWorkoutListFragment workoutListFragment = (FinishedWorkoutListFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_content);
workoutListFragment.removeFinishedWorkout(workout);
workoutListFragment.removeFinishedWorkout();
}

public void updateEditToolbar(int position, Workout workout) {
Expand All @@ -150,14 +147,16 @@ public void updateEditToolbar(int position, Workout workout) {
itemDelete.setIntent(intent);
}

public void updateEditToolbar(int position, FinishedWorkout workout) {
menu.clear();
getMenuInflater().inflate(R.menu.menu_summary_edit, menu);
Intent intent = new Intent();
intent.putExtra("finishedWorkout", workout);
intent.putExtra("position", position);
MenuItem item = menu.findItem(R.id.toolbar_delete_finished_workout);
item.setIntent(intent);
public void updateEditToolbar(int selectionCount) {
if (selectionCount > 0) {
menu.clear();
getMenuInflater().inflate(R.menu.menu_summary_edit, menu);
MenuItem item = menu.findItem(R.id.toolbar_delete_finished_workout);
item.setTitle(valueOf(selectionCount));
} else {
menu.clear();
getMenuInflater().inflate(R.menu.menu_main, menu);
}
}

public void mainToolbar() {
Expand Down
@@ -1,15 +1,18 @@
package de.avalax.fitbuddy.presentation.summary;

import android.content.Intent;
import android.support.v4.util.ArraySet;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;
import java.util.Set;

import de.avalax.fitbuddy.R;
import de.avalax.fitbuddy.application.summary.FinishedWorkoutService;
import de.avalax.fitbuddy.domain.model.finished_workout.FinishedWorkout;
import de.avalax.fitbuddy.presentation.MainActivity;
import de.avalax.fitbuddy.presentation.edit.SelectableViewHolder;
Expand All @@ -21,15 +24,20 @@ public class FinishedWorkoutAdapter
extends RecyclerView.Adapter<FinishedWorkoutAdapter.ViewHolder> {
private MainActivity activity;
private List<FinishedWorkout> finishedWorkouts;
private FinishedWorkoutService finishedWorkoutService;
private FinishedWorkoutViewHelper finishedWorkoutViewHelper;
private Set<FinishedWorkout> selectedWorkouts;

FinishedWorkoutAdapter(MainActivity activity,
FinishedWorkoutViewHelper finishedWorkoutViewHelper,
List<FinishedWorkout> finishedWorkouts) {
List<FinishedWorkout> finishedWorkouts,
FinishedWorkoutService finishedWorkoutService) {
super();
this.activity = activity;
this.finishedWorkoutViewHelper = finishedWorkoutViewHelper;
this.finishedWorkouts = finishedWorkouts;
this.finishedWorkoutService = finishedWorkoutService;
this.selectedWorkouts = new ArraySet<>();
}

@Override
Expand All @@ -46,18 +54,39 @@ public void onBindViewHolder(ViewHolder holder, int position) {
FinishedWorkout workout = finishedWorkouts.get(position);
holder.getTitleTextView().setText(workout.getName());
holder.getSubtitleTextView().setText(finishedWorkoutViewHelper.creationDate(workout));
holder.setSelected(selectedWorkouts.contains(workout));
holder.getView().setOnClickListener(view -> {
Intent intent = new Intent(activity, FinishedWorkoutDetailActivity.class);
intent.putExtra(ARGS_FINISHED_WORKOUT, workout);
intent.putExtra("position", holder.getAdapterPosition());
activity.startActivityForResult(intent, FINISHED_WORKOUT_DETAILS);
if (selectedWorkouts.isEmpty()) {
Intent intent = new Intent(activity, FinishedWorkoutDetailActivity.class);
intent.putExtra(ARGS_FINISHED_WORKOUT, workout);
intent.putExtra("position", holder.getAdapterPosition());
activity.startActivityForResult(intent, FINISHED_WORKOUT_DETAILS);
} else {
if (holder.isSelected()) {
deselect(holder.getAdapterPosition(), workout);
} else {
select(holder.getAdapterPosition(), workout);
}
}
});
holder.getView().setOnLongClickListener(view -> {
activity.updateEditToolbar(position, workout);
select(holder.getAdapterPosition(), workout);
return true;
});
}

private void deselect(int position, FinishedWorkout workout) {
selectedWorkouts.remove(workout);
notifyItemChanged(position);
activity.updateEditToolbar(selectedWorkouts.size());
}

private void select(int position, FinishedWorkout workout) {
selectedWorkouts.add(workout);
notifyItemChanged(position);
activity.updateEditToolbar(selectedWorkouts.size());
}

@Override
public long getItemId(int position) {
return position;
Expand All @@ -68,6 +97,14 @@ public int getItemCount() {
return finishedWorkouts.size();
}

void removeSelections() {
for (FinishedWorkout finishedWorkout : selectedWorkouts) {
finishedWorkouts.remove(finishedWorkout);
finishedWorkoutService.delete(finishedWorkout);
}
notifyDataSetChanged();
}

static class ViewHolder extends SelectableViewHolder {
private final TextView titleTextView;
private final TextView subtitleTextView;
Expand Down
Expand Up @@ -48,7 +48,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
recyclerView.setEmptyView(view.findViewById(android.R.id.empty));
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), VERTICAL));
finishedWorkouts = finishedWorkoutService.loadAllFinishedWorkouts();
adapter = new FinishedWorkoutAdapter((MainActivity) getActivity(), finishedWorkoutViewHelper, finishedWorkouts);
adapter = new FinishedWorkoutAdapter((MainActivity) getActivity(),
finishedWorkoutViewHelper, finishedWorkouts, finishedWorkoutService);
recyclerView.setAdapter(adapter);
Toolbar toolbar = view.findViewById(R.id.toolbar_main);
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
Expand All @@ -57,9 +58,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
return view;
}

public void removeFinishedWorkout(FinishedWorkout workout) {
finishedWorkouts.remove(workout);
adapter.notifyDataSetChanged();
public void removeFinishedWorkout() {
adapter.removeSelections();
recyclerView.updateEmptyView();
}
}
5 changes: 2 additions & 3 deletions src/main/res/menu/menu_summary_edit.xml
Expand Up @@ -3,8 +3,7 @@
<item
android:id="@+id/toolbar_delete_finished_workout"
android:icon="@drawable/ic_action_delete"
app:showAsAction="ifRoom"
android:tint="?android:textColorPrimaryInverse"
android:title="@string/toolbar_item_delete"
android:tint="?android:textColorPrimaryInverse">
</item>
app:showAsAction="always|withText" />
</menu>

0 comments on commit b73440a

Please sign in to comment.