diff --git a/app/src/main/java/com/majinnaibu/monstercards/placeholder/PlaceholderContent.java b/app/src/main/java/com/majinnaibu/monstercards/placeholder/PlaceholderContent.java
deleted file mode 100644
index 8a7120e..0000000
--- a/app/src/main/java/com/majinnaibu/monstercards/placeholder/PlaceholderContent.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.majinnaibu.monstercards.placeholder;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Helper class for providing sample content for user interfaces created by
- * Android template wizards.
- *
- * TODO: Replace all uses of this class before publishing your app.
- */
-public class PlaceholderContent {
-
- /**
- * An array of sample (placeholder) items.
- */
- public static final List ITEMS = new ArrayList();
-
- /**
- * A map of sample (placeholder) items, by ID.
- */
- public static final Map ITEM_MAP = new HashMap();
-
- private static final int COUNT = 25;
-
- static {
- // Add some sample items.
- for (int i = 1; i <= COUNT; i++) {
- addItem(createPlaceholderItem(i));
- }
- }
-
- private static void addItem(PlaceholderItem item) {
- ITEMS.add(item);
- ITEM_MAP.put(item.id, item);
- }
-
- private static PlaceholderItem createPlaceholderItem(int position) {
- return new PlaceholderItem(String.valueOf(position), "Item " + position, makeDetails(position));
- }
-
- private static String makeDetails(int position) {
- StringBuilder builder = new StringBuilder();
- builder.append("Details about Item: ").append(position);
- for (int i = 0; i < position; i++) {
- builder.append("\nMore details information here.");
- }
- return builder.toString();
- }
-
- /**
- * A placeholder item representing a piece of content.
- */
- public static class PlaceholderItem {
- public final String id;
- public final String content;
- public final String details;
-
- public PlaceholderItem(String id, String content, String details) {
- this.id = id;
- this.content = content;
- this.details = details;
- }
-
- @Override
- public String toString() {
- return content;
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistanceFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistanceFragment.java
new file mode 100644
index 0000000..59982ae
--- /dev/null
+++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistanceFragment.java
@@ -0,0 +1,76 @@
+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.EditText;
+
+import androidx.activity.OnBackPressedCallback;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+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.ui.shared.MCFragment;
+import com.majinnaibu.monstercards.utils.Logger;
+import com.majinnaibu.monstercards.utils.TextChangedListener;
+
+public class EditDamageResistanceFragment extends MCFragment {
+ private EditMonsterViewModel mEditMonsterViewModel;
+ private EditStringViewModel mViewModel;
+ private EditDamageResistanceFragment.ViewHolder mHolder;
+ private String mOldDamageResistance;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ mViewModel = new ViewModelProvider(this).get(EditStringViewModel.class);
+ if (getArguments() != null) {
+ EditDamageResistanceFragmentArgs args = EditDamageResistanceFragmentArgs.fromBundle(getArguments());
+ mOldDamageResistance = args.getDamageType();
+ mViewModel.resetValue(mOldDamageResistance);
+ } else {
+ Logger.logWTF("EditDamageResistanceFragment needs arguments");
+ mOldDamageResistance = null;
+ }
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment);
+ NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation);
+ mEditMonsterViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class);
+
+ View root = inflater.inflate(R.layout.fragment_edit_damage_resistance, container, false);
+
+ mHolder = new EditDamageResistanceFragment.ViewHolder(root);
+
+ mHolder.value.setText(mViewModel.getValueAsString());
+ mHolder.value.addTextChangedListener(new TextChangedListener((TextChangedListener.OnTextChangedCallback) (s, start, before, count) -> mViewModel.setValue(s.toString())));
+
+ requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) {
+ @Override
+ public void handleOnBackPressed() {
+ if (mViewModel.hasChanges()) {
+ mEditMonsterViewModel.replaceDamageResistance(mOldDamageResistance, mViewModel.getValueAsString());
+ }
+ Navigation.findNavController(requireView()).navigateUp();
+ }
+ });
+
+ return root;
+ }
+
+ private static class ViewHolder {
+ EditText value;
+
+ ViewHolder(View root) {
+ value = root.findViewById(R.id.value);
+ }
+ }
+}
diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistancesFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistancesFragment.java
new file mode 100644
index 0000000..56c2234
--- /dev/null
+++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistancesFragment.java
@@ -0,0 +1,92 @@
+package com.majinnaibu.monstercards.ui.editmonster;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.navigation.NavBackStackEntry;
+import androidx.navigation.NavController;
+import androidx.navigation.NavDirections;
+import androidx.navigation.Navigation;
+import androidx.recyclerview.widget.DividerItemDecoration;
+import androidx.recyclerview.widget.ItemTouchHelper;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+import com.majinnaibu.monstercards.R;
+import com.majinnaibu.monstercards.ui.shared.MCFragment;
+import com.majinnaibu.monstercards.ui.shared.SwipeToDeleteCallback;
+import com.majinnaibu.monstercards.utils.Logger;
+
+/**
+ * A fragment representing a list of Items.
+ */
+public class EditDamageResistancesFragment extends MCFragment {
+ private EditMonsterViewModel mViewModel;
+ private ViewHolder mHolder;
+
+ private void navigateToEditDamageResistance(String damageResistance) {
+ NavDirections action = EditDamageResistancesFragmentDirections.actionEditDamageResistancesFragmentToEditDamageResistanceFragment(damageResistance);
+ View view = getView();
+ assert view != null;
+ Navigation.findNavController(view).navigate(action);
+ }
+
+ @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);
+ View root = inflater.inflate(R.layout.fragment_edit_damage_resistances_list, container, false);
+ mHolder = new ViewHolder(root);
+ setupRecyclerView(mHolder.list);
+ setupAddDamageResistanceButton(mHolder.addDamageResistance);
+ return root;
+ }
+
+ private void setupRecyclerView(@NonNull RecyclerView recyclerView) {
+ Context context = requireContext();
+ LinearLayoutManager layoutManager = new LinearLayoutManager(context);
+ recyclerView.setLayoutManager(layoutManager);
+
+ mViewModel.getDamageResistances().observe(getViewLifecycleOwner(), damageResistances -> {
+ EditDamageResistancesRecyclerViewAdapter adapter = new EditDamageResistancesRecyclerViewAdapter(mViewModel.getDamageResistancesArray(), damageResistance -> {
+ if (damageResistance != null) {
+ navigateToEditDamageResistance(damageResistance);
+ } else {
+ Logger.logError("Can't navigate to EditDamageResistance with a null damageResistance");
+ }
+ });
+ recyclerView.setAdapter(adapter);
+ });
+
+ DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation());
+ recyclerView.addItemDecoration(dividerItemDecoration);
+
+ ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, mViewModel::removeDamageResistance));
+ itemTouchHelper.attachToRecyclerView(recyclerView);
+ }
+
+ private void setupAddDamageResistanceButton(@NonNull FloatingActionButton fab) {
+ fab.setOnClickListener(view -> {
+ String newDamageResistance = mViewModel.addNewDamageResistance();
+ navigateToEditDamageResistance(newDamageResistance);
+ });
+ }
+
+ private static class ViewHolder {
+ RecyclerView list;
+ FloatingActionButton addDamageResistance;
+
+ ViewHolder(View root) {
+ list = root.findViewById(R.id.list);
+ addDamageResistance = root.findViewById(R.id.add_damage_type);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistancesRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistancesRecyclerViewAdapter.java
new file mode 100644
index 0000000..fd05efb
--- /dev/null
+++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistancesRecyclerViewAdapter.java
@@ -0,0 +1,69 @@
+package com.majinnaibu.monstercards.ui.editmonster;
+
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.majinnaibu.monstercards.databinding.FragmentEditDamageResistancesListItemBinding;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+/**
+ * x
+ * {@link RecyclerView.Adapter} that can display a {@link String}.
+ */
+public class EditDamageResistancesRecyclerViewAdapter extends RecyclerView.Adapter {
+ private final List mValues;
+ private final ItemCallback mOnClick;
+
+ public EditDamageResistancesRecyclerViewAdapter(List items, ItemCallback onClick) {
+ mValues = items;
+ mOnClick = onClick;
+ }
+
+ @NotNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) {
+ return new ViewHolder(FragmentEditDamageResistancesListItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(final ViewHolder holder, int position) {
+ holder.mItem = mValues.get(position);
+ holder.mContentView.setText(mValues.get(position));
+ holder.itemView.setOnClickListener(v -> {
+ if (mOnClick != null) {
+ mOnClick.onItemCallback(holder.mItem);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return mValues.size();
+ }
+
+ public interface ItemCallback {
+ void onItemCallback(String sense);
+ }
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+ public final TextView mContentView;
+ public String mItem;
+
+ public ViewHolder(FragmentEditDamageResistancesListItemBinding binding) {
+ super(binding.getRoot());
+ mContentView = binding.content;
+ }
+
+ @NotNull
+ @Override
+ public String toString() {
+ return super.toString() + " '" + mContentView.getText() + "'";
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterFragment.java
index fa020e8..83d50b5 100644
--- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterFragment.java
+++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterFragment.java
@@ -125,6 +125,11 @@ public class EditMonsterFragment extends MCFragment {
Navigation.findNavController(requireView()).navigate(action);
});
+ mHolder.damageResistances.setOnClickListener(v -> {
+ NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageResistancesFragment();
+ Navigation.findNavController(requireView()).navigate(action);
+ });
+
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSenseFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSenseFragment.java
index 4d99588..2f0c969 100644
--- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSenseFragment.java
+++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSenseFragment.java
@@ -73,5 +73,4 @@ public class EditSenseFragment extends MCFragment {
description = root.findViewById(R.id.name);
}
}
-
-}
\ No newline at end of file
+}
diff --git a/app/src/main/res/layout/fragment_edit_damage_resistance.xml b/app/src/main/res/layout/fragment_edit_damage_resistance.xml
new file mode 100644
index 0000000..a1456f2
--- /dev/null
+++ b/app/src/main/res/layout/fragment_edit_damage_resistance.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_edit_damage_resistances_list.xml b/app/src/main/res/layout/fragment_edit_damage_resistances_list.xml
new file mode 100644
index 0000000..26b1fbd
--- /dev/null
+++ b/app/src/main/res/layout/fragment_edit_damage_resistances_list.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_edit_damage_resistances_list_item.xml b/app/src/main/res/layout/fragment_edit_damage_resistances_list_item.xml
new file mode 100644
index 0000000..6e9049a
--- /dev/null
+++ b/app/src/main/res/layout/fragment_edit_damage_resistances_list_item.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index 72089fb..3873941 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -99,6 +99,9 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 08ad2fe..cd89ea4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -81,4 +81,6 @@
Search
WIS
Description
+ Damage Type
+ Add Damage Type
\ No newline at end of file