From 82ce3d3788116b27a49633708987da653f087489 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Thu, 27 May 2021 21:44:17 -0700 Subject: [PATCH] Adds hit dice and has custom HP toggle to the edit basic info screen. --- .../monstercards/helpers/StringHelper.java | 8 ++++ .../ui/editmonster/EditBasicInfoFragment.java | 19 ++++++++- .../ui/editmonster/EditMonsterViewModel.java | 42 ++++++++++++++++++- .../res/layout/fragment_edit_basic_info.xml | 23 +++++++++- app/src/main/res/values/strings.xml | 2 + 5 files changed, 91 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java b/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java index fb20ff6..1966500 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java +++ b/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java @@ -58,4 +58,12 @@ public final class StringHelper { return sb.toString(); } } + + public static Integer parseInt(String s) { + try { + return Integer.parseInt(s); + } catch (NumberFormatException _ex) { + return null; + } + } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditBasicInfoFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditBasicInfoFragment.java index 10a4377..3b9b045 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditBasicInfoFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditBasicInfoFragment.java @@ -12,6 +12,7 @@ import androidx.navigation.NavBackStackEntry; import androidx.navigation.NavController; import androidx.navigation.Navigation; +import com.google.android.material.switchmaterial.SwitchMaterial; import com.majinnaibu.monstercards.R; import com.majinnaibu.monstercards.ui.MCFragment; import com.majinnaibu.monstercards.utils.Logger; @@ -20,6 +21,7 @@ import com.majinnaibu.monstercards.utils.TextChangedListener; /** * A simple {@link Fragment} subclass. */ +@SuppressWarnings("FieldCanBeLocal") public class EditBasicInfoFragment extends MCFragment { private EditMonsterViewModel mViewModel; private ViewHolder mHolder; @@ -71,6 +73,18 @@ public class EditBasicInfoFragment extends MCFragment { Logger.logDebug(String.format("Monster Custom Hit Points changed to %s", mViewModel.getCustomHitPoints().getValue())); }))); + mHolder.hitDice.setText(mViewModel.getHitDiceValueAsString()); + mHolder.hitDice.addTextChangedListener((new TextChangedListener((TextChangedListener.OnTextChangedCallback) (s, start, before, count) -> { + mViewModel.setHitDice(s.toString()); + Logger.logDebug(String.format("Monster Hit Dice changed to %s", mViewModel.getHitDiceValueAsString())); + }))); + + mHolder.hasCustomHitPoints.setChecked(mViewModel.getHasCustomHitPointsValueAsBoolean()); + mHolder.hasCustomHitPoints.setOnCheckedChangeListener((button, isChecked) -> { + mViewModel.setHasCustomHitPoints(isChecked); + Logger.logDebug(String.format("Monster Has Custom Hit Points changed to %s", isChecked ? "TRUE" : "FALSE")); + }); + return root; } @@ -81,6 +95,8 @@ public class EditBasicInfoFragment extends MCFragment { private final EditText subtype; private final EditText alignment; private final EditText customHitPoints; + private final EditText hitDice; + private final SwitchMaterial hasCustomHitPoints; ViewHolder(View root) { name = root.findViewById(R.id.name); @@ -89,7 +105,8 @@ public class EditBasicInfoFragment extends MCFragment { subtype = root.findViewById(R.id.subtype); alignment = root.findViewById(R.id.alignment); customHitPoints = root.findViewById(R.id.customHitPoints); - // TODO: add hitDice, hasCustomHitPoints, and customHitPoints + hitDice = root.findViewById(R.id.hitDice); + hasCustomHitPoints = root.findViewById(R.id.hasCustomHitPoints); } } } \ No newline at end of file diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java index 14a6e07..afb9bdf 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java @@ -5,6 +5,7 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import com.majinnaibu.monstercards.helpers.StringHelper; import com.majinnaibu.monstercards.models.Monster; import java.util.UUID; @@ -22,6 +23,8 @@ public class EditMonsterViewModel extends ViewModel { private final MutableLiveData mAlignment; private final MutableLiveData mCustomHitPoints; private final MutableLiveData mHasChanges; + private final MutableLiveData mHitDice; + private final MutableLiveData mHasCustomHitPoints; public EditMonsterViewModel() { @@ -35,6 +38,8 @@ public class EditMonsterViewModel extends ViewModel { mSubtype = new MutableLiveData<>(""); mAlignment = new MutableLiveData<>(""); mCustomHitPoints = new MutableLiveData<>(""); + mHitDice = new MutableLiveData<>(0); + mHasCustomHitPoints = new MutableLiveData<>(false); // TODO: consider initializing this to true so all new monsters need saving mHasChanges = new MutableLiveData<>(false); } @@ -48,6 +53,8 @@ public class EditMonsterViewModel extends ViewModel { mSubtype.setValue(monster.subtype); mAlignment.setValue(monster.alignment); mCustomHitPoints.setValue(monster.customHPDescription); + mHitDice.setValue(monster.hitDice); + mHasCustomHitPoints.setValue(monster.hasCustomHP); mHasChanges.setValue(false); } @@ -145,7 +152,7 @@ public class EditMonsterViewModel extends ViewModel { return mHasChanges; } - public void setHasChanges(@NonNull Boolean hasChanges) { + public void setHasChanges(boolean hasChanges) { mHasChanges.setValue(hasChanges); } @@ -153,6 +160,37 @@ public class EditMonsterViewModel extends ViewModel { return mHasChanges.getValue(); } + public LiveData getHitDice() { + return mHitDice; + } + + public void setHitDice(int hitDice) { + mHitDice.setValue(hitDice); + mHasChanges.setValue(true); + } + + public void setHitDice(String hitDice) { + Integer parsedHitDice = StringHelper.parseInt(hitDice); + this.setHitDice(parsedHitDice != null ? parsedHitDice : 0); + } + + public String getHitDiceValueAsString() { + return mHitDice.getValue().toString(); + } + + public LiveData getHasCustomHitPoints() { + return mHasCustomHitPoints; + } + + public void setHasCustomHitPoints(boolean hasCustomHitPoints) { + mHasCustomHitPoints.setValue(hasCustomHitPoints); + mHasChanges.setValue(true); + } + + public boolean getHasCustomHitPointsValueAsBoolean() { + return mHasCustomHitPoints.getValue(); + } + public Monster buildMonster() { Monster monster = new Monster(); @@ -163,6 +201,8 @@ public class EditMonsterViewModel extends ViewModel { monster.subtype = mSubtype.getValue(); monster.alignment = mAlignment.getValue(); monster.customHPDescription = mCustomHitPoints.getValue(); + monster.hitDice = mHitDice.getValue(); + monster.hasCustomHP = mHasCustomHitPoints.getValue(); return monster; } diff --git a/app/src/main/res/layout/fragment_edit_basic_info.xml b/app/src/main/res/layout/fragment_edit_basic_info.xml index 865ce01..2ae3f11 100644 --- a/app/src/main/res/layout/fragment_edit_basic_info.xml +++ b/app/src/main/res/layout/fragment_edit_basic_info.xml @@ -87,7 +87,28 @@ - + + + + + + Subtype Alignment Custom HP + Has Custom HP + Hit Dice \ No newline at end of file