Adds Edit Speed screen to the monster editor.

This commit is contained in:
2021-05-30 00:10:44 -07:00
parent f4dd3855d6
commit 84467dbb0d
6 changed files with 563 additions and 0 deletions

View File

@@ -80,12 +80,14 @@ public class EditMonsterFragment extends MCFragment {
}
});
}
mHolder.basicInfoButton.setOnClickListener(v -> {
NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditBasicInfoFragment();
View view = getView();
assert view != null;
Navigation.findNavController(view).navigate(action);
});
mHolder.armorButton.setOnClickListener(v -> {
NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditArmorFragment();
View view = getView();
@@ -93,6 +95,13 @@ public class EditMonsterFragment extends MCFragment {
Navigation.findNavController(view).navigate(action);
});
mHolder.speedButton.setOnClickListener(v -> {
NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditSpeedFragment();
View view = getView();
assert view != null;
Navigation.findNavController(view).navigate(action);
});
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
@@ -144,10 +153,12 @@ public class EditMonsterFragment extends MCFragment {
TextView basicInfoButton;
TextView armorButton;
TextView speedButton;
ViewHolder(View root) {
basicInfoButton = root.findViewById(R.id.basicInfo);
armorButton = root.findViewById(R.id.armor);
speedButton = root.findViewById(R.id.speed);
}
}
}

View File

@@ -21,10 +21,17 @@ public class EditMonsterViewModel extends ViewModel {
private final MutableLiveData<Boolean> mHasChanges;
private final MutableLiveData<Boolean> mHasCustomHitPoints;
private final MutableLiveData<Boolean> mHasShield;
private final MutableLiveData<Boolean> mCanHover;
private final MutableLiveData<Boolean> mHasCustomSpeed;
private final MutableLiveData<ArmorType> mArmorType;
private final MutableLiveData<Integer> mHitDice;
private final MutableLiveData<Integer> mNaturalArmorBonus;
private final MutableLiveData<Integer> mShieldBonus;
private final MutableLiveData<Integer> mWalkSpeed;
private final MutableLiveData<Integer> mBurrowSpeed;
private final MutableLiveData<Integer> mClimbSpeed;
private final MutableLiveData<Integer> mFlySpeed;
private final MutableLiveData<Integer> mSwimSpeed;
private final MutableLiveData<String> mName;
private final MutableLiveData<String> mErrorMessage;
private final MutableLiveData<String> mSize;
@@ -33,6 +40,7 @@ public class EditMonsterViewModel extends ViewModel {
private final MutableLiveData<String> mAlignment;
private final MutableLiveData<String> mCustomHitPoints;
private final MutableLiveData<String> mCustomArmor;
private final MutableLiveData<String> mCustomSpeed;
public EditMonsterViewModel() {
@@ -53,6 +61,14 @@ public class EditMonsterViewModel extends ViewModel {
mHasShield = new MutableLiveData<>(false);
mShieldBonus = new MutableLiveData<>(0);
mCustomArmor = new MutableLiveData<>("");
mWalkSpeed = new MutableLiveData<>(0);
mBurrowSpeed = new MutableLiveData<>(0);
mClimbSpeed = new MutableLiveData<>(0);
mFlySpeed = new MutableLiveData<>(0);
mSwimSpeed = new MutableLiveData<>(0);
mCanHover = new MutableLiveData<>(false);
mHasCustomSpeed = new MutableLiveData<>(false);
mCustomSpeed = new MutableLiveData<>("");
// TODO: consider initializing this to true so all new monsters need saving
mHasChanges = new MutableLiveData<>(false);
}
@@ -73,6 +89,15 @@ public class EditMonsterViewModel extends ViewModel {
mHasShield.setValue(monster.shieldBonus != 0);
mShieldBonus.setValue(monster.shieldBonus);
mCustomArmor.setValue(monster.otherArmorDescription);
mWalkSpeed.setValue(monster.walkSpeed);
mBurrowSpeed.setValue(monster.burrowSpeed);
mClimbSpeed.setValue(monster.climbSpeed);
mFlySpeed.setValue(monster.flySpeed);
mSwimSpeed.setValue(monster.swimSpeed);
mCanHover.setValue(monster.canHover);
mHasCustomSpeed.setValue(monster.hasCustomSpeed);
mCustomSpeed.setValue(monster.customSpeedDescription);
mHasChanges.setValue(false);
}
@@ -297,6 +322,136 @@ public class EditMonsterViewModel extends ViewModel {
return mShieldBonus.getValue().toString();
}
public LiveData<Integer> getWalkSpeed() {
return mWalkSpeed;
}
public void setWalkSpeed(int walkSpeed) {
if (!Objects.equals(mWalkSpeed.getValue(), walkSpeed)) {
mWalkSpeed.setValue(walkSpeed);
mHasChanges.setValue(true);
Logger.logDebug(String.format("Setting walk speed to %d ft.", walkSpeed));
}
}
public void incrementWalkSpeed() {
setWalkSpeed(mWalkSpeed.getValue() + 5);
}
public void decrementWalkSpeed() {
setWalkSpeed(mWalkSpeed.getValue() - 5);
}
public LiveData<Integer> getBurrowSpeed() {
return mBurrowSpeed;
}
public void setBurrowSpeed(int burrowSpeed) {
if (!Objects.equals(mBurrowSpeed.getValue(), burrowSpeed)) {
mBurrowSpeed.setValue(burrowSpeed);
mHasChanges.setValue(true);
}
}
public LiveData<Integer> getClimbSpeed() {
return mClimbSpeed;
}
public void setClimbSpeed(int climbSpeed) {
if (!Objects.equals(mClimbSpeed.getValue(), climbSpeed)) {
mClimbSpeed.setValue(climbSpeed);
mHasChanges.setValue(true);
}
}
public LiveData<Integer> getFlySpeed() {
return mFlySpeed;
}
public void setFlySpeed(int flySpeed) {
if (!Objects.equals(mFlySpeed.getValue(), flySpeed)) {
mFlySpeed.setValue(flySpeed);
mHasChanges.setValue(true);
}
}
public LiveData<Integer> getSwimSpeed() {
return mSwimSpeed;
}
public void setSwimSpeed(int swimSpeed) {
if (!Objects.equals(mSwimSpeed.getValue(), swimSpeed)) {
mSwimSpeed.setValue(swimSpeed);
mHasChanges.setValue(true);
}
}
public LiveData<Boolean> getCanHover() {
return mCanHover;
}
public void setCanHover(boolean canHover) {
if (!Objects.equals(mCanHover.getValue(), canHover)) {
mCanHover.setValue(canHover);
mHasChanges.setValue(true);
}
}
public LiveData<Boolean> getHasCustomSpeed() {
return mHasCustomSpeed;
}
public void setHasCustomSpeed(boolean hasCustomSpeed) {
if (!Objects.equals(mHasCustomSpeed.getValue(), hasCustomSpeed)) {
mHasCustomSpeed.setValue(hasCustomSpeed);
mHasChanges.setValue(true);
}
}
public LiveData<String> getCustomSpeed() {
return mCustomSpeed;
}
public void setCustomSpeed(String customSpeed) {
if (!Objects.equals(mCustomSpeed.getValue(), customSpeed)) {
mCustomSpeed.setValue(customSpeed);
mHasChanges.setValue(true);
}
}
public void incrementBurrowSpeed() {
setBurrowSpeed(mBurrowSpeed.getValue() + 5);
}
public void decrementBurrowSpeed() {
setBurrowSpeed(mBurrowSpeed.getValue() - 5);
}
public void incrementClimbSpeed() {
setClimbSpeed(mClimbSpeed.getValue() + 5);
}
public void decrementClimbSpeed() {
setClimbSpeed(mClimbSpeed.getValue() - 5);
}
public void incrementFlySpeed() {
setFlySpeed(mFlySpeed.getValue() + 5);
}
public void decrementFlySpeed() {
setFlySpeed(mFlySpeed.getValue() - 5);
}
public void incrementSwimSpeed() {
setSwimSpeed(mSwimSpeed.getValue() + 5);
}
public void decrementSwimSpeed() {
setSwimSpeed(mSwimSpeed.getValue() - 5);
}
public Monster buildMonster() {
Monster monster = new Monster();
@@ -313,6 +468,14 @@ public class EditMonsterViewModel extends ViewModel {
monster.naturalArmorBonus = mNaturalArmorBonus.getValue();
monster.shieldBonus = mShieldBonus.getValue();
monster.otherArmorDescription = mCustomArmor.getValue();
monster.walkSpeed = mWalkSpeed.getValue();
monster.burrowSpeed = mBurrowSpeed.getValue();
monster.climbSpeed = mClimbSpeed.getValue();
monster.flySpeed = mFlySpeed.getValue();
monster.swimSpeed = mSwimSpeed.getValue();
monster.canHover = mCanHover.getValue();
monster.hasCustomSpeed = mHasCustomSpeed.getValue();
monster.customSpeedDescription = mCustomSpeed.getValue();
return monster;
}

View File

@@ -0,0 +1,117 @@
package com.majinnaibu.monstercards.ui.editmonster;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.widget.SwitchCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavBackStackEntry;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import com.majinnaibu.monstercards.R;
import com.majinnaibu.monstercards.utils.TextChangedListener;
public class EditSpeedFragment extends Fragment {
private EditMonsterViewModel mViewModel;
private ViewHolder mHolder;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment);
NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation);
mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class);
// Inflate the layout for this fragment
View root = inflater.inflate(R.layout.fragment_edit_speed, container, false);
mHolder = new ViewHolder(root);
mViewModel.getWalkSpeed().observe(getViewLifecycleOwner(), value -> {
mHolder.baseSpeed.setText(String.format(getString(R.string.format_distance_in_feet), value));
});
mHolder.incrementBaseSpeed.setOnClickListener(v -> mViewModel.incrementWalkSpeed());
mHolder.decrementBaseSpeed.setOnClickListener(v -> mViewModel.decrementWalkSpeed());
mViewModel.getBurrowSpeed().observe(getViewLifecycleOwner(), value -> {
mHolder.burrowSpeed.setText(String.format(getString(R.string.format_distance_in_feet), value));
});
mHolder.incrementBurrowSpeed.setOnClickListener(v -> mViewModel.incrementBurrowSpeed());
mHolder.decrementBurrowSpeed.setOnClickListener(v -> mViewModel.decrementBurrowSpeed());
mViewModel.getClimbSpeed().observe(getViewLifecycleOwner(), value -> mHolder.climbSpeed.setText(String.format(getString(R.string.format_distance_in_feet), value)));
mHolder.incrementClimbSpeed.setOnClickListener(v -> mViewModel.incrementClimbSpeed());
mHolder.decrementBurrowSpeed.setOnClickListener(v -> mViewModel.decrementClimbSpeed());
mViewModel.getFlySpeed().observe(getViewLifecycleOwner(), value -> mHolder.flySpeed.setText(String.format(getString(R.string.format_distance_in_feet), value)));
mHolder.incrementFlySpeed.setOnClickListener(v -> mViewModel.incrementFlySpeed());
mHolder.decrementBurrowSpeed.setOnClickListener(v -> mViewModel.decrementFlySpeed());
mViewModel.getSwimSpeed().observe(getViewLifecycleOwner(), value -> mHolder.swimSpeed.setText(String.format(getString(R.string.format_distance_in_feet), value)));
mHolder.incrementSwimSpeed.setOnClickListener(v -> mViewModel.incrementSwimSpeed());
mHolder.decrementBurrowSpeed.setOnClickListener(v -> mViewModel.decrementSwimSpeed());
mViewModel.getCanHover().observe(getViewLifecycleOwner(), value -> mHolder.canHover.setChecked(value));
mHolder.canHover.setOnCheckedChangeListener((buttonView, isChecked) -> mViewModel.setCanHover(isChecked));
mViewModel.getHasCustomSpeed().observe(getViewLifecycleOwner(), value -> mHolder.hasCustomSpeed.setChecked(value));
mHolder.hasCustomSpeed.setOnCheckedChangeListener((buttonView, isChecked) -> mViewModel.setHasCustomSpeed(isChecked));
//mViewModel.getCustomSpeed().observe(getViewLifecycleOwner(), value -> mHolder.customSpeed.setText(value));
mHolder.customSpeed.setText(mViewModel.getCustomSpeed().getValue());
mHolder.customSpeed.addTextChangedListener(new TextChangedListener((TextChangedListener.OnTextChangedCallback) (s, start, before, count) -> mViewModel.setCustomSpeed(s.toString())));
return root;
}
private static class ViewHolder {
final TextView baseSpeed;
final Button incrementBaseSpeed;
final Button decrementBaseSpeed;
final TextView burrowSpeed;
final Button incrementBurrowSpeed;
final Button decrementBurrowSpeed;
final TextView climbSpeed;
final Button incrementClimbSpeed;
final Button decrementClimbSpeed;
final TextView flySpeed;
final Button incrementFlySpeed;
final Button decrementFlySpeed;
final TextView swimSpeed;
final Button incrementSwimSpeed;
final Button decrementSwimSpeed;
final SwitchCompat canHover;
final SwitchCompat hasCustomSpeed;
final EditText customSpeed;
ViewHolder(View root) {
baseSpeed = root.findViewById(R.id.baseSpeed);
incrementBaseSpeed = root.findViewById(R.id.baseSpeed_increment);
decrementBaseSpeed = root.findViewById(R.id.baseSpeed_decrement);
burrowSpeed = root.findViewById(R.id.burrowSpeed);
incrementBurrowSpeed = root.findViewById(R.id.burrowSpeed_increment);
decrementBurrowSpeed = root.findViewById(R.id.burrowSpeed_decrement);
climbSpeed = root.findViewById(R.id.climbSpeed);
incrementClimbSpeed = root.findViewById(R.id.climbSpeed_increment);
decrementClimbSpeed = root.findViewById(R.id.climbSpeed_decrement);
flySpeed = root.findViewById(R.id.flySpeed);
incrementFlySpeed = root.findViewById(R.id.flySpeed_increment);
decrementFlySpeed = root.findViewById(R.id.flySpeed_decrement);
swimSpeed = root.findViewById(R.id.swimSpeed);
incrementSwimSpeed = root.findViewById(R.id.swimSpeed_increment);
decrementSwimSpeed = root.findViewById(R.id.swimSpeed_decrement);
canHover = root.findViewById(R.id.canHover);
hasCustomSpeed = root.findViewById(R.id.hasCustomSpeed);
customSpeed = root.findViewById(R.id.customSpeed);
}
}
}

View File

@@ -0,0 +1,255 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.editmonster.EditBasicInfoFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin">
<TextView
android:id="@+id/baseSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="20 ft." />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_base_speed"
android:textAppearance="?attr/textAppearanceSubtitle1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/baseSpeed_decrement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_decrement_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/baseSpeed_increment"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/baseSpeed_increment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_increment_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin">
<TextView
android:id="@+id/burrowSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="20 ft." />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_burrow_speed"
android:textAppearance="?attr/textAppearanceSubtitle1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/burrowSpeed_decrement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_decrement_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/burrowSpeed_increment"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/burrowSpeed_increment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_increment_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin">
<TextView
android:id="@+id/climbSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="20 ft." />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_climb_speed"
android:textAppearance="?attr/textAppearanceSubtitle1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/climbSpeed_decrement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_decrement_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/climbSpeed_increment"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/climbSpeed_increment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_increment_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin">
<TextView
android:id="@+id/flySpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="20 ft." />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?attr/textAppearanceSubtitle1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Fly Speed" />
<Button
android:id="@+id/flySpeed_decrement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_decrement_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/flySpeed_increment"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/flySpeed_increment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_increment_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin">
<TextView
android:id="@+id/swimSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="20 ft." />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?attr/textAppearanceSubtitle1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Swim Speed" />
<Button
android:id="@+id/swimSpeed_decrement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_decrement_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/swimSpeed_increment"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/swimSpeed_increment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_increment_field"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/canHover"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:text="@string/label_can_hover"
android:textSize="@dimen/text_h4_size" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/hasCustomSpeed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:text="@string/label_has_custom_speed"
android:textSize="@dimen/text_h4_size" />
<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/customSpeed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/label_custom_speed"
android:importantForAutofill="no"
android:inputType="text"
tools:text="John Doe" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</ScrollView>

View File

@@ -78,6 +78,9 @@
<action
android:id="@+id/action_editMonsterFragment_to_editArmorFragment"
app:destination="@id/editArmorFragment" />
<action
android:id="@+id/action_editMonsterFragment_to_editSpeedFragment"
app:destination="@id/editSpeedFragment" />
</fragment>
<fragment
android:id="@+id/editBasicInfoFragment"
@@ -89,6 +92,11 @@
android:name="com.majinnaibu.monstercards.ui.editmonster.EditArmorFragment"
android:label="fragment_edit_armor"
tools:layout="@layout/fragment_edit_armor" />
<fragment
android:id="@+id/editSpeedFragment"
android:name="com.majinnaibu.monstercards.ui.editmonster.EditSpeedFragment"
android:label="fragment_edit_speed"
tools:layout="@layout/fragment_edit_speed" />
</navigation>
</navigation>

View File

@@ -7,23 +7,32 @@
<string name="constitution_abbreviation">CON</string>
<string name="default_monster_name">Unnamed Monster</string>
<string name="dexterity_abbreviation">DEX</string>
<string name="format_distance_in_feet">%d ft.</string>
<string name="intelligence_abbreviation">INT</string>
<string name="label_ability_scores">Ability Scores</string>
<string name="label_abilities">Abilities</string>
<string name="label_actions">Actions</string>
<string name="label_alignment">Alignment</string>
<string name="label_armor">Armor</string>
<string name="label_base_speed">Base Speed</string>
<string name="label_basic_info">Basic Info</string>
<string name="label_burrow_speed">Burrow Speed</string>
<string name="label_can_hover">Can Hover</string>
<string name="label_challenge_rating">Challenge Rating</string>
<string name="label_climb_speed">Climb Speed</string>
<string name="label_condition_immunities">Condition Immunities</string>
<string name="label_custom_armor">Custom Armor</string>
<string name="label_custom_hp">Custom HP</string>
<string name="label_custom_speed">Custom Speed</string>
<string name="label_damage_immunities">Damage Immunities</string>
<string name="label_damage_resistances">Damage Resistances</string>
<string name="label_damage_vulnerabilities">Damage Vulnerabilities</string>
<string name="label_decrement_field">-</string>
<string name="label_has_custom_hp">Has Custom HP</string>
<string name="label_has_custom_speed">Has Custom Speed</string>
<string name="label_has_a_shield">Has a Shield</string>
<string name="label_hit_dice">Hit Dice</string>
<string name="label_increment_field">+</string>
<string name="label_lair_actions">Lair Actions</string>
<string name="label_languages">Languages</string>
<string name="label_legendary_actions">Legendary Actions</string>