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
	 Tom Hicks
						Tom Hicks