Skip to content

Commit

Permalink
Implemented "android.arch.lifecycle" for EditSetFragment
Browse files Browse the repository at this point in the history
  • Loading branch information
avalax committed May 20, 2018
1 parent ce14108 commit 8ff18e2
Show file tree
Hide file tree
Showing 14 changed files with 235 additions and 149 deletions.
10 changes: 9 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
}

dataBinding {
enabled = true
}

packagingOptions {
exclude 'LICENSE.txt'
exclude 'META-INF/LICENSE'
Expand Down Expand Up @@ -95,10 +99,14 @@ dependencies {
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.google.android.gms:play-services-ads:15.0.0'
implementation 'com.google.android.gms:play-services-ads:15.0.1'
implementation 'com.google.dagger:dagger:2.15'
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'

implementation "android.arch.lifecycle:runtime:1.1.1"
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

annotationProcessor 'com.google.dagger:dagger-compiler:2.15'
androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.15'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class FitbuddyApplication extends Application {
public static final int ADD_SET = 5;
public static final int EDIT_SET = 6;
public static final int FINISHED_WORKOUT_DETAILS = 7;
public static final int EDIT_REPS = 8;
public static final int EDIT_WEIGHT = 9;

private ApplicationComponent component;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public static EditRepsDialogFragment newInstance(int reps) {
public void onAttach(Context context) {
super.onAttach(context);
try {
listener = (DialogListener) context;
listener = (DialogListener) getTargetFragment();
} catch (ClassCastException e) {
throw new DialogListenerException(context.toString()
+ " must implement EditRepsDialogFragment.DialogListener", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public static EditWeightDialogFragment newInstance(double weight) {
public void onAttach(Context context) {
super.onAttach(context);
try {
listener = (DialogListener) context;
listener = (DialogListener) getTargetFragment();
} catch (ClassCastException e) {
throw new DialogListenerException(context.toString()
+ " must implement EditWeightDialogFragment.DialogListener", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,23 +34,23 @@ private DecimalFormatSymbols formatSymbols(String decimalSeparator, String group
return otherSymbols;
}

public String title(Set set) {
return titleValue(set) + repsSuffix;
public String repsFrom(Set set) {
return repsValue(set) + repsSuffix;
}

public String titleValue(Set set) {
public String repsValue(Set set) {
return valueOf(set.getMaxReps());
}

public String subtitle(Set set) {
String weight = subtitleValue(set);
public String weightFrom(Set set) {
String weight = weightValue(set);
if ("0".equals(weight)) {
return defaultWeight;
}
return weight + weightSuffix;
}

public String subtitleValue(Set set) {
public String weightValue(Set set) {
return decimalFormat.format(set.getWeight());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ public SetViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
public void onBindViewHolder(SetViewHolder holder, int position) {
try {
Set set = sets.get(position);
String title = editExerciseViewHelper.title(set);
String subtitle = editExerciseViewHelper.subtitle(set);
String title = editExerciseViewHelper.repsFrom(set);
String subtitle = editExerciseViewHelper.weightFrom(set);

holder.getTitleTextView().setText(title);
holder.getSubtitleTextView().setText(subtitle);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,18 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

import javax.inject.Inject;

import de.avalax.fitbuddy.R;
import de.avalax.fitbuddy.domain.model.set.Set;
import de.avalax.fitbuddy.presentation.FitbuddyApplication;
import de.avalax.fitbuddy.presentation.dialog.EditRepsDialogFragment;
import de.avalax.fitbuddy.presentation.dialog.EditWeightDialogFragment;
import de.avalax.fitbuddy.presentation.edit.exercise.EditExerciseViewHelper;

public class EditSetActivity extends AppCompatActivity implements
EditWeightDialogFragment.DialogListener,
EditRepsDialogFragment.DialogListener {
import static android.support.v4.app.FragmentTransaction.TRANSIT_NONE;

public class EditSetActivity extends AppCompatActivity {

private TextView weightTextView;
private TextView repsTextView;
private Set set;

@Inject
Expand All @@ -39,8 +34,14 @@ public void onCreate(Bundle savedInstanceState) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
set = (Set) getIntent().getSerializableExtra("set");
repsTextView = findViewById(R.id.set_reps_text_view);
weightTextView = findViewById(R.id.set_weight_text_view);
EditSetFragment fragment = new EditSetFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("set", set);
fragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_content, fragment)
.setTransition(TRANSIT_NONE)
.commit();
}

@Override
Expand All @@ -64,20 +65,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
return false;
}

@Override
public void onDialogPositiveClick(EditRepsDialogFragment editRepsDialogFragment) {
int reps = editRepsDialogFragment.getReps();
set.setMaxReps(reps);
repsTextView.setText(editExerciseViewHelper.title(set));
}

@Override
public void onDialogPositiveClick(EditWeightDialogFragment editWeightDialogFragment) {
double weight = editWeightDialogFragment.getWeight();
set.setWeight(weight);
weightTextView.setText(editExerciseViewHelper.subtitle(set));
}

public void onCancelButtonClick(View view) {
setResult(RESULT_CANCELED);
finish();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,54 +1,80 @@
package de.avalax.fitbuddy.presentation.edit.set;

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

import javax.inject.Inject;

import de.avalax.fitbuddy.R;
import de.avalax.fitbuddy.databinding.EditSetBinding;
import de.avalax.fitbuddy.domain.model.set.Set;
import de.avalax.fitbuddy.presentation.FitbuddyApplication;
import de.avalax.fitbuddy.presentation.dialog.EditRepsDialogFragment;
import de.avalax.fitbuddy.presentation.dialog.EditWeightDialogFragment;
import de.avalax.fitbuddy.presentation.edit.exercise.EditExerciseViewHelper;

public class EditSetFragment extends Fragment {
import static de.avalax.fitbuddy.presentation.FitbuddyApplication.EDIT_REPS;
import static de.avalax.fitbuddy.presentation.FitbuddyApplication.EDIT_WEIGHT;

private Set set;
public class EditSetFragment extends Fragment implements
EditWeightDialogFragment.DialogListener,
EditRepsDialogFragment.DialogListener {

private EditSetViewModel viewModel;

@Inject
protected EditExerciseViewHelper editExerciseViewHelper;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_edit_set, container, false);
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Set set = (Set) getArguments().getSerializable("set");
viewModel.init(editExerciseViewHelper, set);
}

@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
EditSetBinding binding = DataBindingUtil.inflate(inflater, R.layout.edit_set, container, false);
((FitbuddyApplication) getActivity().getApplication()).getComponent().inject(this);
viewModel = ViewModelProviders.of(this).get(EditSetViewModel.class);
binding.setEditSetViewModel(viewModel);
binding.setLifecycleOwner(this);

view.findViewById(R.id.set_weight).setOnClickListener(onClickListener -> changeWeight());
view.findViewById(R.id.set_reps).setOnClickListener(onClickListener -> changeMaxReps());
set = (Set) getActivity().getIntent().getSerializableExtra("set");
TextView repsTextView = view.findViewById(R.id.set_reps_text_view);
repsTextView.setText(editExerciseViewHelper.title(set));
TextView weightTextView = view.findViewById(R.id.set_weight_text_view);
weightTextView.setText(editExerciseViewHelper.subtitle(set));
return view;
binding.getRoot().findViewById(R.id.set_weight).setOnClickListener(onClickListener -> changeWeight());
binding.getRoot().findViewById(R.id.set_reps).setOnClickListener(onClickListener -> changeMaxReps());
return binding.getRoot();
}

private void changeWeight() {
double weight = set.getWeight();
FragmentManager fm = getActivity().getSupportFragmentManager();
EditWeightDialogFragment.newInstance(weight).show(fm, "fragment_edit_weight");
double weight = viewModel.getSet().getWeight();
EditWeightDialogFragment editWeightDialogFragment = EditWeightDialogFragment.newInstance(weight);
editWeightDialogFragment.setTargetFragment(this, EDIT_WEIGHT);
editWeightDialogFragment.show(getFragmentManager(), "fragment_edit_weight");
}

private void changeMaxReps() {
FragmentManager fm = getActivity().getSupportFragmentManager();
int reps = set.getMaxReps();
EditRepsDialogFragment.newInstance(reps).show(fm, "fragment_edit_max_reps");
int reps = viewModel.getSet().getMaxReps();
EditRepsDialogFragment editRepsDialogFragment = EditRepsDialogFragment.newInstance(reps);
editRepsDialogFragment.setTargetFragment(this, EDIT_REPS);
editRepsDialogFragment.show(getFragmentManager(), "fragment_edit_max_reps");
}

@Override
public void onDialogPositiveClick(EditRepsDialogFragment editRepsDialogFragment) {
int reps = editRepsDialogFragment.getReps();
viewModel.setReps(reps);
}

@Override
public void onDialogPositiveClick(EditWeightDialogFragment editWeightDialogFragment) {
double weight = editWeightDialogFragment.getWeight();
viewModel.setWeight(weight);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package de.avalax.fitbuddy.presentation.edit.set;

import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;

import de.avalax.fitbuddy.domain.model.set.Set;
import de.avalax.fitbuddy.presentation.edit.exercise.EditExerciseViewHelper;

public class EditSetViewModel extends ViewModel {
private EditExerciseViewHelper editExerciseViewHelper;
private Set set;
private MutableLiveData<String> weight;
private MutableLiveData<String> reps;

public void init(EditExerciseViewHelper editExerciseViewHelper, Set set) {
this.editExerciseViewHelper = editExerciseViewHelper;
this.set = set;
this.weight = new MutableLiveData<>();
this.reps = new MutableLiveData<>();

setWeightFromSet();
setRepsFromSet();
}

private void setRepsFromSet() {
this.reps.setValue(this.editExerciseViewHelper.repsFrom(this.set));
}

private void setWeightFromSet() {
this.weight.setValue(this.editExerciseViewHelper.weightFrom(this.set));
}

public Set getSet() {
return set;
}

public LiveData<String> getWeight() {
return weight;
}

public LiveData<String> getReps() {
return reps;
}

public void setReps(int reps) {
set.setMaxReps(reps);
setRepsFromSet();
}

public void setWeight(double weight) {
set.setWeight(weight);
setWeightFromSet();
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public String weight(Exercise exercise) {
double setWeight = set.getWeight();
if (setWeight > exerciseWeight) {
exerciseWeight = setWeight;
weight = editExerciseViewHelper.subtitle(set);
weight = editExerciseViewHelper.weightFrom(set);
}
}
return weight;
Expand Down
3 changes: 1 addition & 2 deletions src/main/res/layout/activity_edit_set.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.set.EditSetFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
Expand Down
Loading

0 comments on commit 8ff18e2

Please sign in to comment.