Skip to content

Commit

Permalink
added EditWorkoutViewModel
Browse files Browse the repository at this point in the history
  • Loading branch information
avalax committed Jun 6, 2018
1 parent 3425705 commit 0d79874
Show file tree
Hide file tree
Showing 10 changed files with 192 additions and 127 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.avalax.fitbuddy.presentation.edit.workout;

import android.app.Activity;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
Expand All @@ -23,6 +24,7 @@
import de.avalax.fitbuddy.presentation.FitbuddyApplication;
import de.avalax.fitbuddy.presentation.edit.exercise.EditExerciseActivity;

import static android.support.v4.app.FragmentTransaction.TRANSIT_NONE;
import static android.widget.Toast.LENGTH_SHORT;
import static android.widget.Toast.makeText;
import static de.avalax.fitbuddy.presentation.FitbuddyApplication.ADD_EXERCISE;
Expand All @@ -32,21 +34,20 @@
public class EditWorkoutActivity extends AppCompatActivity {
@Inject
EditWorkoutService editWorkoutService;
private EditText nameEditText;
private Workout workout;
private Menu menu;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_workout);
ViewModelProviders.of(this).get(EditWorkoutViewModel.class);
((FitbuddyApplication) getApplication()).getComponent().inject(this);
Toolbar toolbar = findViewById(R.id.toolbar_workout_edit);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
nameEditText = findViewById(R.id.edit_text_workout_name);
workout = (Workout) getIntent().getSerializableExtra("workout");
nameEditText.setText(workout.getName());
show(workout);
}

@Override
Expand All @@ -69,17 +70,17 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ADD_EXERCISE && resultCode == Activity.RESULT_OK) {
Exercise exercise = (Exercise) data.getSerializableExtra("exercise");
workout.getExercises().add(exercise);
ExerciseListFragment exerciseListFragment = (ExerciseListFragment)
EditWorkoutFragment editWorkoutFragment = (EditWorkoutFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_content);
exerciseListFragment.notifyItemInserted();
editWorkoutFragment.notifyItemInserted();
}
if (requestCode == EDIT_EXERCISE && resultCode == Activity.RESULT_OK) {
Integer position = data.getIntExtra("position", -1);
Exercise exercise = (Exercise) data.getSerializableExtra("exercise");
workout.getExercises().set(position, exercise);
ExerciseListFragment exerciseListFragment = (ExerciseListFragment)
EditWorkoutFragment editWorkoutFragment = (EditWorkoutFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_content);
exerciseListFragment.notifyItemChanged(position);
editWorkoutFragment.notifyItemChanged(position);
}

}
Expand All @@ -92,6 +93,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
makeText(context, R.string.message_save_workout_without_exercices, LENGTH_SHORT)
.show();
} else {
EditText nameEditText = findViewById(R.id.edit_text_workout_name);
workout.setName(nameEditText.getText().toString());
try {
editWorkoutService.saveWorkout(workout);
Expand All @@ -108,7 +110,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
}
}
if (item.getItemId() == R.id.toolbar_delete_exercices) {
ExerciseListFragment setListFragment = (ExerciseListFragment)
EditWorkoutFragment setListFragment = (EditWorkoutFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_content);
setListFragment.removeSelections();
return true;
Expand All @@ -132,4 +134,15 @@ public void onCancelButtonClick(View view) {
setResult(RESULT_CANCELED);
finish();
}

public void show(Workout workout) {
EditWorkoutFragment fragment = EditWorkoutFragment.forWorkout(workout);

getSupportFragmentManager()
.beginTransaction()
.addToBackStack("workout")
.replace(R.id.fragment_content, fragment, null)
.setTransition(TRANSIT_NONE)
.commit();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package de.avalax.fitbuddy.presentation.edit.workout;

import android.arch.lifecycle.ViewModelProviders;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DividerItemDecoration;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import de.avalax.fitbuddy.R;
import de.avalax.fitbuddy.databinding.EditWorkoutBinding;
import de.avalax.fitbuddy.domain.model.workout.Workout;

import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class EditWorkoutFragment extends Fragment {

private static final String KEY_WORKOUT = "workout";
private EditWorkoutViewModel viewModel;
private EditWorkoutBinding binding;

public static EditWorkoutFragment forWorkout(Workout workout) {
EditWorkoutFragment fragment = new EditWorkoutFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(KEY_WORKOUT, workout);
fragment.setArguments(bundle);
return fragment;
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.edit_workout, container, false);
viewModel = ViewModelProviders.of(getActivity()).get(EditWorkoutViewModel.class);
binding.setEditWorkoutViewModel(viewModel);
binding.setLifecycleOwner(this);

binding.list.setEmptyView(binding.getRoot().findViewById(android.R.id.empty));
binding.list.addItemDecoration(new DividerItemDecoration(getActivity(), VERTICAL));

return binding.getRoot();
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Workout workout = (Workout) getArguments().getSerializable(KEY_WORKOUT);
viewModel.init(getActivity(), workout);
binding.list.setAdapter(viewModel.getExerciseAdapter());
}

public void notifyItemInserted() {
viewModel.getExerciseAdapter().notifyItemInserted(viewModel.getExerciseAdapter().getItemCount() - 1);
binding.list.updateEmptyView();
}

public void notifyItemChanged(int position) {
viewModel.getExerciseAdapter().notifyItemChanged(position);
binding.list.updateEmptyView();
}

public void removeSelections() {
viewModel.getExerciseAdapter().removeSelections();
binding.list.updateEmptyView();
((EditWorkoutActivity) getActivity()).updateToolbar(0);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package de.avalax.fitbuddy.presentation.edit.workout;

import android.app.Activity;
import android.arch.lifecycle.ViewModel;

import de.avalax.fitbuddy.domain.model.workout.Workout;

public class EditWorkoutViewModel extends ViewModel {
private ExerciseAdapter exerciseAdapter;
private Workout workout;

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

public ExerciseAdapter getExerciseAdapter() {
return exerciseAdapter;
}

public String getName() {
return workout.getName();
}
}

This file was deleted.

3 changes: 1 addition & 2 deletions src/main/res/layout/activity_edit_workout.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,8 @@

</android.support.design.widget.AppBarLayout>

<fragment
<FrameLayout
android:id="@+id/fragment_content"
android:name="de.avalax.fitbuddy.presentation.edit.workout.ExerciseListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
Expand Down
72 changes: 72 additions & 0 deletions src/main/res/layout/edit_workout.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<data>
<variable
name="editWorkoutViewModel"
type="de.avalax.fitbuddy.presentation.edit.workout.EditWorkoutViewModel" />
</data>

<LinearLayout
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".presentation.edit.workout.EditWorkoutActivity">

<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
card_view:cardBackgroundColor="@color/cardsColor"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="2dp">

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/edit_text_workout_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/edit_text_workout_name_hint"
android:inputType="text"
android:text="@{editWorkoutViewModel.name}"/>
</android.support.design.widget.TextInputLayout>
</android.support.v7.widget.CardView>

<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
card_view:cardBackgroundColor="@color/cardsColor"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="2dp">

<de.avalax.fitbuddy.presentation.welcome_screen.WorkoutRecyclerView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="54dp"
android:layout_marginLeft="@dimen/shr_list_margin"
android:layout_marginRight="@dimen/shr_list_margin"
android:scrollbars="vertical"
app:layoutManager="GridLayoutManager"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:spanCount="@integer/list_columns" />

<TextView
android:id="@android:id/empty"
style="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:onClick="onAddExerciseButtonClick"
android:text="@string/empty_exercise_list" />
</android.support.v7.widget.CardView>

</LinearLayout>
</layout>
62 changes: 0 additions & 62 deletions src/main/res/layout/fragment_edit_workout.xml

This file was deleted.

Loading

0 comments on commit 0d79874

Please sign in to comment.