Adds hit dice and has custom HP toggle to the edit basic info screen.
This commit is contained in:
@@ -58,4 +58,12 @@ public final class StringHelper {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Integer parseInt(String s) {
|
||||||
|
try {
|
||||||
|
return Integer.parseInt(s);
|
||||||
|
} catch (NumberFormatException _ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import androidx.navigation.NavBackStackEntry;
|
|||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
import androidx.navigation.Navigation;
|
import androidx.navigation.Navigation;
|
||||||
|
|
||||||
|
import com.google.android.material.switchmaterial.SwitchMaterial;
|
||||||
import com.majinnaibu.monstercards.R;
|
import com.majinnaibu.monstercards.R;
|
||||||
import com.majinnaibu.monstercards.ui.MCFragment;
|
import com.majinnaibu.monstercards.ui.MCFragment;
|
||||||
import com.majinnaibu.monstercards.utils.Logger;
|
import com.majinnaibu.monstercards.utils.Logger;
|
||||||
@@ -20,6 +21,7 @@ import com.majinnaibu.monstercards.utils.TextChangedListener;
|
|||||||
/**
|
/**
|
||||||
* A simple {@link Fragment} subclass.
|
* A simple {@link Fragment} subclass.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("FieldCanBeLocal")
|
||||||
public class EditBasicInfoFragment extends MCFragment {
|
public class EditBasicInfoFragment extends MCFragment {
|
||||||
private EditMonsterViewModel mViewModel;
|
private EditMonsterViewModel mViewModel;
|
||||||
private ViewHolder mHolder;
|
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()));
|
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;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,6 +95,8 @@ public class EditBasicInfoFragment extends MCFragment {
|
|||||||
private final EditText subtype;
|
private final EditText subtype;
|
||||||
private final EditText alignment;
|
private final EditText alignment;
|
||||||
private final EditText customHitPoints;
|
private final EditText customHitPoints;
|
||||||
|
private final EditText hitDice;
|
||||||
|
private final SwitchMaterial hasCustomHitPoints;
|
||||||
|
|
||||||
ViewHolder(View root) {
|
ViewHolder(View root) {
|
||||||
name = root.findViewById(R.id.name);
|
name = root.findViewById(R.id.name);
|
||||||
@@ -89,7 +105,8 @@ public class EditBasicInfoFragment extends MCFragment {
|
|||||||
subtype = root.findViewById(R.id.subtype);
|
subtype = root.findViewById(R.id.subtype);
|
||||||
alignment = root.findViewById(R.id.alignment);
|
alignment = root.findViewById(R.id.alignment);
|
||||||
customHitPoints = root.findViewById(R.id.customHitPoints);
|
customHitPoints = root.findViewById(R.id.customHitPoints);
|
||||||
// TODO: add hitDice, hasCustomHitPoints, and customHitPoints
|
hitDice = root.findViewById(R.id.hitDice);
|
||||||
|
hasCustomHitPoints = root.findViewById(R.id.hasCustomHitPoints);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@ import androidx.lifecycle.LiveData;
|
|||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
import androidx.lifecycle.ViewModel;
|
import androidx.lifecycle.ViewModel;
|
||||||
|
|
||||||
|
import com.majinnaibu.monstercards.helpers.StringHelper;
|
||||||
import com.majinnaibu.monstercards.models.Monster;
|
import com.majinnaibu.monstercards.models.Monster;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -22,6 +23,8 @@ public class EditMonsterViewModel extends ViewModel {
|
|||||||
private final MutableLiveData<String> mAlignment;
|
private final MutableLiveData<String> mAlignment;
|
||||||
private final MutableLiveData<String> mCustomHitPoints;
|
private final MutableLiveData<String> mCustomHitPoints;
|
||||||
private final MutableLiveData<Boolean> mHasChanges;
|
private final MutableLiveData<Boolean> mHasChanges;
|
||||||
|
private final MutableLiveData<Integer> mHitDice;
|
||||||
|
private final MutableLiveData<Boolean> mHasCustomHitPoints;
|
||||||
|
|
||||||
public EditMonsterViewModel() {
|
public EditMonsterViewModel() {
|
||||||
|
|
||||||
@@ -35,6 +38,8 @@ public class EditMonsterViewModel extends ViewModel {
|
|||||||
mSubtype = new MutableLiveData<>("");
|
mSubtype = new MutableLiveData<>("");
|
||||||
mAlignment = new MutableLiveData<>("");
|
mAlignment = new MutableLiveData<>("");
|
||||||
mCustomHitPoints = 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
|
// TODO: consider initializing this to true so all new monsters need saving
|
||||||
mHasChanges = new MutableLiveData<>(false);
|
mHasChanges = new MutableLiveData<>(false);
|
||||||
}
|
}
|
||||||
@@ -48,6 +53,8 @@ public class EditMonsterViewModel extends ViewModel {
|
|||||||
mSubtype.setValue(monster.subtype);
|
mSubtype.setValue(monster.subtype);
|
||||||
mAlignment.setValue(monster.alignment);
|
mAlignment.setValue(monster.alignment);
|
||||||
mCustomHitPoints.setValue(monster.customHPDescription);
|
mCustomHitPoints.setValue(monster.customHPDescription);
|
||||||
|
mHitDice.setValue(monster.hitDice);
|
||||||
|
mHasCustomHitPoints.setValue(monster.hasCustomHP);
|
||||||
mHasChanges.setValue(false);
|
mHasChanges.setValue(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +152,7 @@ public class EditMonsterViewModel extends ViewModel {
|
|||||||
return mHasChanges;
|
return mHasChanges;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHasChanges(@NonNull Boolean hasChanges) {
|
public void setHasChanges(boolean hasChanges) {
|
||||||
mHasChanges.setValue(hasChanges);
|
mHasChanges.setValue(hasChanges);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,6 +160,37 @@ public class EditMonsterViewModel extends ViewModel {
|
|||||||
return mHasChanges.getValue();
|
return mHasChanges.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LiveData<Integer> 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<Boolean> getHasCustomHitPoints() {
|
||||||
|
return mHasCustomHitPoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHasCustomHitPoints(boolean hasCustomHitPoints) {
|
||||||
|
mHasCustomHitPoints.setValue(hasCustomHitPoints);
|
||||||
|
mHasChanges.setValue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getHasCustomHitPointsValueAsBoolean() {
|
||||||
|
return mHasCustomHitPoints.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
public Monster buildMonster() {
|
public Monster buildMonster() {
|
||||||
Monster monster = new Monster();
|
Monster monster = new Monster();
|
||||||
|
|
||||||
@@ -163,6 +201,8 @@ public class EditMonsterViewModel extends ViewModel {
|
|||||||
monster.subtype = mSubtype.getValue();
|
monster.subtype = mSubtype.getValue();
|
||||||
monster.alignment = mAlignment.getValue();
|
monster.alignment = mAlignment.getValue();
|
||||||
monster.customHPDescription = mCustomHitPoints.getValue();
|
monster.customHPDescription = mCustomHitPoints.getValue();
|
||||||
|
monster.hitDice = mHitDice.getValue();
|
||||||
|
monster.hasCustomHP = mHasCustomHitPoints.getValue();
|
||||||
|
|
||||||
return monster;
|
return monster;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,28 @@
|
|||||||
|
|
||||||
<!-- Hit Dice (int) -->
|
<!-- Hit Dice (int) -->
|
||||||
|
|
||||||
<!-- Has ustom HP (boolean) -->
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="@dimen/text_margin">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/hitDice"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:digits="0123456789"
|
||||||
|
android:hint="@string/label_hit_dice"
|
||||||
|
android:importantForAutofill="no"
|
||||||
|
android:inputType="number" />
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||||
|
android:id="@+id/hasCustomHitPoints"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="@dimen/text_margin"
|
||||||
|
android:text="@string/label_has_custom_hp"
|
||||||
|
android:textSize="@dimen/text_h4_size" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -44,4 +44,6 @@
|
|||||||
<string name="label_subtype">Subtype</string>
|
<string name="label_subtype">Subtype</string>
|
||||||
<string name="label_alignment">Alignment</string>
|
<string name="label_alignment">Alignment</string>
|
||||||
<string name="label_custom_hp">Custom HP</string>
|
<string name="label_custom_hp">Custom HP</string>
|
||||||
|
<string name="label_has_custom_hp">Has Custom HP</string>
|
||||||
|
<string name="label_hit_dice">Hit Dice</string>
|
||||||
</resources>
|
</resources>
|
||||||
Reference in New Issue
Block a user