diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/enums/StringType.java b/app/src/main/java/com/majinnaibu/monstercards/data/enums/StringType.java new file mode 100644 index 0000000..67b7497 --- /dev/null +++ b/app/src/main/java/com/majinnaibu/monstercards/data/enums/StringType.java @@ -0,0 +1,9 @@ +package com.majinnaibu.monstercards.data.enums; + +public enum StringType { + CONDITION_IMMUNITY, + DAMAGE_IMMUNITY, + DAMAGE_RESISTANCE, + DAMAGE_VULNERABILITY, + SENSE +} diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesRecyclerViewAdapter.java deleted file mode 100644 index a0cc370..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesRecyclerViewAdapter.java +++ /dev/null @@ -1,68 +0,0 @@ -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.FragmentEditConditionImmunitiesListItemBinding; - -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -/** - * {@link RecyclerView.Adapter} that can display a {@link String}. - */ -public class EditConditionImmunitiesRecyclerViewAdapter extends RecyclerView.Adapter { - private final List mValues; - private final ItemCallback mOnClick; - - public EditConditionImmunitiesRecyclerViewAdapter(List items, ItemCallback onClick) { - mValues = items; - mOnClick = onClick; - } - - @NotNull - @Override - public ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) { - return new ViewHolder(FragmentEditConditionImmunitiesListItemBinding.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 condition); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - public final TextView mContentView; - public String mItem; - - public ViewHolder(FragmentEditConditionImmunitiesListItemBinding 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/EditDamageImmunitiesFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageImmunitiesFragment.java deleted file mode 100644 index 379aaf7..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageImmunitiesFragment.java +++ /dev/null @@ -1,90 +0,0 @@ -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 EditDamageImmunitiesFragment extends MCFragment { - private EditMonsterViewModel mViewModel; - private ViewHolder mHolder; - - private void navigateToEditDamageImmunity(String damageImmunity) { - NavDirections action = EditDamageImmunitiesFragmentDirections.actionEditDamageImmunitiesFragmentToEditDamageImmunityFragment(damageImmunity); - Navigation.findNavController(requireView()).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_immunities_list, container, false); - mHolder = new ViewHolder(root); - setupRecyclerView(mHolder.list); - setupAddDamageImmunityButton(mHolder.addDamageImmunity); - return root; - } - - private void setupRecyclerView(@NonNull RecyclerView recyclerView) { - Context context = requireContext(); - LinearLayoutManager layoutManager = new LinearLayoutManager(context); - recyclerView.setLayoutManager(layoutManager); - - mViewModel.getDamageImmunities().observe(getViewLifecycleOwner(), damageImmunities -> { - EditDamageImmunitiesRecyclerViewAdapter adapter = new EditDamageImmunitiesRecyclerViewAdapter(mViewModel.getDamageImmunitiesArray(), damageImmunity -> { - if (damageImmunity != null) { - navigateToEditDamageImmunity(damageImmunity); - } else { - Logger.logError("Can't navigate to EditDamageImmunity with a null damageImmunity"); - } - }); - recyclerView.setAdapter(adapter); - }); - - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); - recyclerView.addItemDecoration(dividerItemDecoration); - - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, mViewModel::removeDamageImmunity)); - itemTouchHelper.attachToRecyclerView(recyclerView); - } - - private void setupAddDamageImmunityButton(@NonNull FloatingActionButton fab) { - fab.setOnClickListener(view -> { - String newDamageImmunity = mViewModel.addNewDamageImmunity(); - navigateToEditDamageImmunity(newDamageImmunity); - }); - } - - private static class ViewHolder { - RecyclerView list; - FloatingActionButton addDamageImmunity; - - ViewHolder(View root) { - list = root.findViewById(R.id.list); - addDamageImmunity = 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/EditDamageImmunitiesRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageImmunitiesRecyclerViewAdapter.java deleted file mode 100644 index 018705c..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageImmunitiesRecyclerViewAdapter.java +++ /dev/null @@ -1,71 +0,0 @@ -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.FragmentEditDamageImmunitiesListItemBinding; - -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -/** - * x - * {@link RecyclerView.Adapter} that can display a {@link String}. - */ -public class EditDamageImmunitiesRecyclerViewAdapter extends RecyclerView.Adapter { - private final List mValues; - private final ItemCallback mOnClick; - - public EditDamageImmunitiesRecyclerViewAdapter(List items, ItemCallback onClick) { - mValues = items; - mOnClick = onClick; - } - - - @NotNull - @Override - public ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) { - return new ViewHolder(FragmentEditDamageImmunitiesListItemBinding.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(FragmentEditDamageImmunitiesListItemBinding binding) { - super(binding.getRoot()); - mContentView = binding.content; - } - - - @NotNull - @Override - public String toString() { - return super.toString() + " '" + mContentView.getText() + "'"; - } - } -} diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageImmunityFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageImmunityFragment.java deleted file mode 100644 index e10a2b8..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageImmunityFragment.java +++ /dev/null @@ -1,76 +0,0 @@ -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 EditDamageImmunityFragment extends MCFragment { - private EditMonsterViewModel mEditMonsterViewModel; - private EditStringViewModel mViewModel; - private EditDamageImmunityFragment.ViewHolder mHolder; - private String mOldDamageImmunity; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - mViewModel = new ViewModelProvider(this).get(EditStringViewModel.class); - if (getArguments() != null) { - EditDamageImmunityFragmentArgs args = EditDamageImmunityFragmentArgs.fromBundle(getArguments()); - mOldDamageImmunity = args.getDamageType(); - mViewModel.resetValue(mOldDamageImmunity); - } else { - Logger.logWTF("EditDamageImmunityFragment needs arguments"); - mOldDamageImmunity = 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_immunity, container, false); - - mHolder = new EditDamageImmunityFragment.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.replaceDamageImmunity(mOldDamageImmunity, 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/EditDamageResistanceFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistanceFragment.java deleted file mode 100644 index 59982ae..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistanceFragment.java +++ /dev/null @@ -1,76 +0,0 @@ -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 deleted file mode 100644 index 6fb3bf2..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistancesFragment.java +++ /dev/null @@ -1,90 +0,0 @@ -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); - Navigation.findNavController(requireView()).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 deleted file mode 100644 index c823d20..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageResistancesRecyclerViewAdapter.java +++ /dev/null @@ -1,69 +0,0 @@ -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() + "'"; - } - } -} diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageVulnerabilitiesFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageVulnerabilitiesFragment.java deleted file mode 100644 index 68f854c..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageVulnerabilitiesFragment.java +++ /dev/null @@ -1,90 +0,0 @@ -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 EditDamageVulnerabilitiesFragment extends MCFragment { - private EditMonsterViewModel mViewModel; - private ViewHolder mHolder; - - private void navigateToEditDamageVulnerability(String damageVulnerability) { - NavDirections action = EditDamageVulnerabilitiesFragmentDirections.actionEditDamageVulnerabilitiesFragmentToEditDamageVulnerabilityFragment(damageVulnerability); - Navigation.findNavController(requireView()).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_vulnerabilities_list, container, false); - mHolder = new ViewHolder(root); - setupRecyclerView(mHolder.list); - setupAddDamageVulnerabilityButton(mHolder.addDamageVulnerability); - return root; - } - - private void setupRecyclerView(@NonNull RecyclerView recyclerView) { - Context context = requireContext(); - LinearLayoutManager layoutManager = new LinearLayoutManager(context); - recyclerView.setLayoutManager(layoutManager); - - mViewModel.getDamageVulnerabilities().observe(getViewLifecycleOwner(), damageVulnerabilities -> { - EditDamageVulnerabilitiesRecyclerViewAdapter adapter = new EditDamageVulnerabilitiesRecyclerViewAdapter(mViewModel.getDamageVulnerabilitiesArray(), damageVulnerability -> { - if (damageVulnerability != null) { - navigateToEditDamageVulnerability(damageVulnerability); - } else { - Logger.logError("Can't navigate to EditDamageVulnerability with a null damageVulnerability"); - } - }); - recyclerView.setAdapter(adapter); - }); - - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); - recyclerView.addItemDecoration(dividerItemDecoration); - - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, mViewModel::removeDamageVulnerability)); - itemTouchHelper.attachToRecyclerView(recyclerView); - } - - private void setupAddDamageVulnerabilityButton(@NonNull FloatingActionButton fab) { - fab.setOnClickListener(view -> { - String newDamageVulnerability = mViewModel.addNewDamageVulnerability(); - navigateToEditDamageVulnerability(newDamageVulnerability); - }); - } - - private static class ViewHolder { - RecyclerView list; - FloatingActionButton addDamageVulnerability; - - ViewHolder(View root) { - list = root.findViewById(R.id.list); - addDamageVulnerability = 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/EditDamageVulnerabilitiesRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageVulnerabilitiesRecyclerViewAdapter.java deleted file mode 100644 index c59d2d7..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageVulnerabilitiesRecyclerViewAdapter.java +++ /dev/null @@ -1,69 +0,0 @@ -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.FragmentEditDamageVulnerabilitiesListItemBinding; - -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -/** - * x - * {@link RecyclerView.Adapter} that can display a {@link String}. - */ -public class EditDamageVulnerabilitiesRecyclerViewAdapter extends RecyclerView.Adapter { - private final List mValues; - private final ItemCallback mOnClick; - - public EditDamageVulnerabilitiesRecyclerViewAdapter(List items, ItemCallback onClick) { - mValues = items; - mOnClick = onClick; - } - - @NotNull - @Override - public ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) { - return new ViewHolder(FragmentEditDamageVulnerabilitiesListItemBinding.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(FragmentEditDamageVulnerabilitiesListItemBinding 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/EditDamageVulnerabilityFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageVulnerabilityFragment.java deleted file mode 100644 index 4ce8238..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditDamageVulnerabilityFragment.java +++ /dev/null @@ -1,76 +0,0 @@ -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 EditDamageVulnerabilityFragment extends MCFragment { - private EditMonsterViewModel mEditMonsterViewModel; - private EditStringViewModel mViewModel; - private EditDamageVulnerabilityFragment.ViewHolder mHolder; - private String mOldDamageVulnerability; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - mViewModel = new ViewModelProvider(this).get(EditStringViewModel.class); - if (getArguments() != null) { - EditDamageVulnerabilityFragmentArgs args = EditDamageVulnerabilityFragmentArgs.fromBundle(getArguments()); - mOldDamageVulnerability = args.getDamageType(); - mViewModel.resetValue(mOldDamageVulnerability); - } else { - Logger.logWTF("EditDamageVulnerabilityFragment needs arguments"); - mOldDamageVulnerability = 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_vulnerability, container, false); - - mHolder = new EditDamageVulnerabilityFragment.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.replaceDamageVulnerability(mOldDamageVulnerability, 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/EditMonsterFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterFragment.java index f30614d..4d7a2ec 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 @@ -19,6 +19,7 @@ import androidx.navigation.Navigation; import com.google.android.material.snackbar.Snackbar; import com.majinnaibu.monstercards.R; import com.majinnaibu.monstercards.data.MonsterRepository; +import com.majinnaibu.monstercards.data.enums.StringType; import com.majinnaibu.monstercards.data.enums.TraitType; import com.majinnaibu.monstercards.models.Monster; import com.majinnaibu.monstercards.ui.monster.MonsterDetailFragmentArgs; @@ -117,27 +118,27 @@ public class EditMonsterFragment extends MCFragment { }); mHolder.senses.setOnClickListener(v -> { - NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditSensesFragment(); + NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.SENSE); Navigation.findNavController(requireView()).navigate(action); }); mHolder.conditionImmunities.setOnClickListener(v -> { - NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditConditionImmunitiesFragment(); + NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.CONDITION_IMMUNITY); Navigation.findNavController(requireView()).navigate(action); }); mHolder.damageImmunities.setOnClickListener(v -> { - NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageImmunitiesFragment(); + NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.DAMAGE_IMMUNITY); Navigation.findNavController(requireView()).navigate(action); }); mHolder.damageResistances.setOnClickListener(v -> { - NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageResistancesFragment(); + NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.DAMAGE_RESISTANCE); Navigation.findNavController(requireView()).navigate(action); }); mHolder.damageVulnerabilities.setOnClickListener(v -> { - NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageVulnerabilitiesFragment(); + NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.DAMAGE_VULNERABILITY); Navigation.findNavController(requireView()).navigate(action); }); 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 7cf7c32..e591526 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 @@ -9,6 +9,7 @@ import com.majinnaibu.monstercards.data.enums.AdvantageType; import com.majinnaibu.monstercards.data.enums.ArmorType; import com.majinnaibu.monstercards.data.enums.ChallengeRating; import com.majinnaibu.monstercards.data.enums.ProficiencyType; +import com.majinnaibu.monstercards.data.enums.StringType; import com.majinnaibu.monstercards.data.enums.TraitType; import com.majinnaibu.monstercards.helpers.StringHelper; import com.majinnaibu.monstercards.models.Language; @@ -1004,7 +1005,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { case REGIONAL_ACTION: return mRegionalActions; default: - Logger.logWTF(String.format("Unrecognized TraitType: %s", type)); + Logger.logUnimplementedFeature(String.format("Unrecognized TraitType: %s", type)); return null; } } @@ -1030,7 +1031,8 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { Helpers.removeFromList(mRegionalActions, position); break; default: - Logger.logWTF(String.format("Unrecognized TraitType: %s", type)); + Logger.logUnimplementedFeature(String.format("Unrecognized TraitType: %s", type)); + break; } } @@ -1055,7 +1057,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { Helpers.replaceItemInList(mRegionalActions, oldTrait, newTrait); break; default: - Logger.logWTF(String.format("Unrecognized TraitType: %s", type)); + Logger.logUnimplementedFeature(String.format("Unrecognized TraitType: %s", type)); } } @@ -1075,11 +1077,93 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { case REGIONAL_ACTION: return Helpers.addItemToList(mRegionalActions, newAction); default: - Logger.logWTF(String.format("Unrecognized TraitType: %s", type)); + Logger.logUnimplementedFeature(String.format("Unrecognized TraitType: %s", type)); return null; } } + public LiveData> getStrings(StringType type) { + switch (type) { + case CONDITION_IMMUNITY: + return mConditionImmunities; + case DAMAGE_IMMUNITY: + return mDamageImmunities; + case DAMAGE_RESISTANCE: + return mDamageResistances; + case DAMAGE_VULNERABILITY: + return mDamageVulnerabilities; + case SENSE: + return mSenses; + default: + Logger.logUnimplementedFeature(String.format("Unrecognized StringType: %s", type)); + return null; + } + } + + public void removeString(StringType type, int position) { + switch (type) { + case CONDITION_IMMUNITY: + Helpers.removeFromList(mConditionImmunities, position); + break; + case DAMAGE_IMMUNITY: + Helpers.removeFromList(mDamageImmunities, position); + break; + case DAMAGE_RESISTANCE: + Helpers.removeFromList(mDamageResistances, position); + break; + case DAMAGE_VULNERABILITY: + Helpers.removeFromList(mDamageVulnerabilities, position); + break; + case SENSE: + Helpers.removeFromList(mSenses, position); + break; + default: + Logger.logUnimplementedFeature(String.format("Unrecognized StringType: %s", type)); + break; + } + } + + public String addNewString(StringType type) { + String newString = ""; + switch (type) { + case CONDITION_IMMUNITY: + return Helpers.addItemToList(mConditionImmunities, newString); + case DAMAGE_IMMUNITY: + return Helpers.addItemToList(mDamageImmunities, newString); + case DAMAGE_RESISTANCE: + return Helpers.addItemToList(mDamageResistances, newString); + case DAMAGE_VULNERABILITY: + return Helpers.addItemToList(mDamageVulnerabilities, newString); + case SENSE: + return Helpers.addItemToList(mSenses, newString); + default: + Logger.logUnimplementedFeature(String.format("Unrecognized StringType: %s", type)); + return null; + } + } + + public void replaceString(StringType type, String oldValue, String newValue) { + switch (type) { + case CONDITION_IMMUNITY: + Helpers.replaceItemInList(mConditionImmunities, oldValue, newValue); + break; + case DAMAGE_IMMUNITY: + Helpers.replaceItemInList(mDamageImmunities, oldValue, newValue); + break; + case DAMAGE_RESISTANCE: + Helpers.replaceItemInList(mDamageResistances, oldValue, newValue); + break; + case DAMAGE_VULNERABILITY: + Helpers.replaceItemInList(mDamageVulnerabilities, oldValue, newValue); + break; + case SENSE: + Helpers.replaceItemInList(mSenses, oldValue, newValue); + break; + default: + Logger.logUnimplementedFeature(String.format("Unrecognized StringType: %s", type)); + } + } + @SuppressWarnings("SameParameterValue") private static class Helpers { static String addStringToList(String newString, MutableLiveData> strings) { 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 deleted file mode 100644 index 2f0c969..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSenseFragment.java +++ /dev/null @@ -1,76 +0,0 @@ -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 EditSenseFragment extends MCFragment { - private EditMonsterViewModel mEditMonsterViewModel; - private EditStringViewModel mViewModel; - private ViewHolder mHolder; - private String mOldSense; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - mViewModel = new ViewModelProvider(this).get(EditStringViewModel.class); - if (getArguments() != null) { - EditSenseFragmentArgs args = EditSenseFragmentArgs.fromBundle(getArguments()); - mOldSense = args.getSense(); - mViewModel.resetValue(mOldSense); - } else { - Logger.logWTF("EditSenseFragment needs arguments"); - mOldSense = 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_sense, container, false); - - mHolder = new ViewHolder(root); - - mHolder.description.setText(mViewModel.getValueAsString()); - mHolder.description.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.replaceSense(mOldSense, mViewModel.getValueAsString()); - } - Navigation.findNavController(requireView()).navigateUp(); - } - }); - - return root; - } - - private static class ViewHolder { - EditText description; - - ViewHolder(View root) { - description = root.findViewById(R.id.name); - } - } -} diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesFragment.java deleted file mode 100644 index 5b0d90a..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesFragment.java +++ /dev/null @@ -1,90 +0,0 @@ -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 EditSensesFragment extends MCFragment { - private EditMonsterViewModel mViewModel; - private ViewHolder mHolder; - - private void navigateToEditSense(String sense) { - NavDirections action = EditSensesFragmentDirections.actionEditSensesFragmentToEditSenseFragment(sense); - Navigation.findNavController(requireView()).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_senses_list, container, false); - mHolder = new ViewHolder(root); - setupRecyclerView(mHolder.list); - setupAddSenseButton(mHolder.addSense); - return root; - } - - private void setupRecyclerView(@NonNull RecyclerView recyclerView) { - Context context = requireContext(); - LinearLayoutManager layoutManager = new LinearLayoutManager(context); - recyclerView.setLayoutManager(layoutManager); - - mViewModel.getSenses().observe(getViewLifecycleOwner(), senses -> { - EditSensesRecyclerViewAdapter adapter = new EditSensesRecyclerViewAdapter(mViewModel.getSensesArray(), sense -> { - if (sense != null) { - navigateToEditSense(sense); - } else { - Logger.logError("Can't navigate to EditSense with a null sense"); - } - }); - recyclerView.setAdapter(adapter); - }); - - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); - recyclerView.addItemDecoration(dividerItemDecoration); - - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, mViewModel::removeSense)); - itemTouchHelper.attachToRecyclerView(recyclerView); - } - - private void setupAddSenseButton(@NonNull FloatingActionButton fab) { - fab.setOnClickListener(view -> { - String newSense = mViewModel.addNewSense(); - navigateToEditSense(newSense); - }); - } - - private static class ViewHolder { - RecyclerView list; - FloatingActionButton addSense; - - ViewHolder(View root) { - list = root.findViewById(R.id.list); - addSense = root.findViewById(R.id.add_sense); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunityFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringFragment.java similarity index 71% rename from app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunityFragment.java rename to app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringFragment.java index 7bbdc07..0610a18 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunityFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringFragment.java @@ -15,39 +15,43 @@ import androidx.navigation.NavController; import androidx.navigation.Navigation; import com.majinnaibu.monstercards.R; +import com.majinnaibu.monstercards.data.enums.StringType; import com.majinnaibu.monstercards.ui.shared.MCFragment; import com.majinnaibu.monstercards.utils.Logger; import com.majinnaibu.monstercards.utils.TextChangedListener; -public class EditConditionImmunityFragment extends MCFragment { +public class EditStringFragment extends MCFragment { private EditMonsterViewModel mEditMonsterViewModel; private EditStringViewModel mViewModel; private ViewHolder mHolder; private String mOldValue; + private StringType mStringType; @Override - public void onCreate(@Nullable Bundle savedInstanceState) { + public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { mViewModel = new ViewModelProvider(this).get(EditStringViewModel.class); if (getArguments() != null) { - EditConditionImmunityFragmentArgs args = EditConditionImmunityFragmentArgs.fromBundle(getArguments()); - mOldValue = args.getCondition(); - mViewModel.resetValue(mOldValue); + EditStringFragmentArgs args = EditStringFragmentArgs.fromBundle(getArguments()); + mOldValue = args.getValue(); + mViewModel.setValue(mOldValue); + mStringType = args.getStringType(); } else { - Logger.logWTF("EditConditionImmunityFragment needs arguments"); + Logger.logWTF("EditStringFragment needs arguments"); mOldValue = null; } - super.onCreate(savedInstanceState); } + @Nullable + @org.jetbrains.annotations.Nullable @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { + 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_condition_immunity, container, false); + View root = inflater.inflate(R.layout.fragment_edit_string, container, false); mHolder = new ViewHolder(root); + mHolder.description.setText(mViewModel.getValueAsString()); mHolder.description.addTextChangedListener(new TextChangedListener((TextChangedListener.OnTextChangedCallback) (s, start, before, count) -> mViewModel.setValue(s.toString()))); @@ -55,7 +59,7 @@ public class EditConditionImmunityFragment extends MCFragment { @Override public void handleOnBackPressed() { if (mViewModel.hasChanges()) { - mEditMonsterViewModel.replaceConditionImmunity(mOldValue, mViewModel.getValueAsString()); + mEditMonsterViewModel.replaceString(mStringType, mOldValue, mViewModel.getValueAsString()); } Navigation.findNavController(requireView()).navigateUp(); } @@ -64,11 +68,14 @@ public class EditConditionImmunityFragment extends MCFragment { return root; } + private static class ViewHolder { EditText description; + EditText name; ViewHolder(View root) { description = root.findViewById(R.id.description); + name = root.findViewById(R.id.name); } } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java similarity index 56% rename from app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java rename to app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java index ceb4b03..730bc05 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.NavBackStackEntry; import androidx.navigation.NavController; @@ -20,34 +21,43 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.majinnaibu.monstercards.R; +import com.majinnaibu.monstercards.data.enums.StringType; import com.majinnaibu.monstercards.ui.shared.MCFragment; import com.majinnaibu.monstercards.ui.shared.SwipeToDeleteCallback; import com.majinnaibu.monstercards.utils.Logger; import org.jetbrains.annotations.NotNull; -/** - * A fragment representing a list of Items. - */ -public class EditConditionImmunitiesFragment extends MCFragment { +import java.util.List; + +public class EditStringsFragment extends MCFragment { private EditMonsterViewModel mViewModel; private ViewHolder mHolder; + private StringType mStringType; - private void navigateToEditConditionImmunity(String condition) { - NavDirections action = EditConditionImmunitiesFragmentDirections.actionEditConditionImmunitiesFragmentToEditConditionImmunity(condition); - Navigation.findNavController(requireView()).navigate(action); + @Override + public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { + Bundle arguments = getArguments(); + if (arguments != null) { + EditStringsFragmentArgs args = EditStringsFragmentArgs.fromBundle(arguments); + mStringType = args.getStringType(); + } else { + Logger.logWTF("EditStringsFragment needs arguments"); + } + super.onCreate(savedInstanceState); } @Nullable + @org.jetbrains.annotations.Nullable @Override public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable 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_condition_immunities_list, container, false); + View root = inflater.inflate(R.layout.fragment_edit_strings_list, container, false); mHolder = new ViewHolder(root); setupRecyclerView(mHolder.list); - setupAddConditionImmunityButton(mHolder.addConditionImmunity); + setupAddButton(mHolder.addItem); return root; } @@ -56,38 +66,48 @@ public class EditConditionImmunitiesFragment extends MCFragment { LinearLayoutManager layoutManager = new LinearLayoutManager(context); recyclerView.setLayoutManager(layoutManager); - mViewModel.getConditionImmunities().observe(getViewLifecycleOwner(), conditionImmunities -> { - EditConditionImmunitiesRecyclerViewAdapter adapter = new EditConditionImmunitiesRecyclerViewAdapter(mViewModel.getConditionImmunitiesArray(), condition -> { - if (condition != null) { - navigateToEditConditionImmunity(condition); - } else { - Logger.logError("Can't navigate to EditConditionImmunityFragment with a null condition"); - } + LiveData> stringsData = mViewModel.getStrings(mStringType); + if (stringsData != null) { + stringsData.observe(getViewLifecycleOwner(), strings -> { + EditStringsRecyclerViewAdapter adapter = new EditStringsRecyclerViewAdapter(strings, value -> { + if (value != null) { + navigateToEditString(value); + } else { + Logger.logError("Can't navigate to EditStringFragment with a null trait"); + } + }); + recyclerView.setAdapter(adapter); }); - recyclerView.setAdapter(adapter); - }); + } DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); recyclerView.addItemDecoration(dividerItemDecoration); - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, mViewModel::removeConditionImmunity)); + ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, position -> mViewModel.removeString(mStringType, position))); itemTouchHelper.attachToRecyclerView(recyclerView); } - private void setupAddConditionImmunityButton(@NonNull FloatingActionButton fab) { + private void setupAddButton(@NonNull FloatingActionButton fab) { fab.setOnClickListener(view -> { - String condition = mViewModel.addNewConditionImmunity(); - navigateToEditConditionImmunity(condition); + String newValue = mViewModel.addNewString(mStringType); + if (newValue != null) { + navigateToEditString(newValue); + } }); } + protected void navigateToEditString(String value) { + NavDirections action = EditStringsFragmentDirections.actionEditStringsFragmentToEditStringFragment(mStringType, value); + Navigation.findNavController(requireView()).navigate(action); + } + private static class ViewHolder { RecyclerView list; - FloatingActionButton addConditionImmunity; + FloatingActionButton addItem; ViewHolder(View root) { list = root.findViewById(R.id.list); - addConditionImmunity = root.findViewById(R.id.add_condition_immunity); + addItem = root.findViewById(R.id.add_item); } } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsRecyclerViewAdapter.java similarity index 70% rename from app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesRecyclerViewAdapter.java rename to app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsRecyclerViewAdapter.java index 1710bcf..5c9ce7b 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesRecyclerViewAdapter.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsRecyclerViewAdapter.java @@ -6,21 +6,17 @@ import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; -import com.majinnaibu.monstercards.databinding.FragmentEditSensesListItemBinding; +import com.majinnaibu.monstercards.databinding.FragmentEditStringsListItemBinding; import org.jetbrains.annotations.NotNull; import java.util.List; -/** - * x - * {@link RecyclerView.Adapter} that can display a {@link String}. - */ -public class EditSensesRecyclerViewAdapter extends RecyclerView.Adapter { +public class EditStringsRecyclerViewAdapter extends RecyclerView.Adapter { private final List mValues; private final ItemCallback mOnClick; - public EditSensesRecyclerViewAdapter(List items, ItemCallback onClick) { + public EditStringsRecyclerViewAdapter(List items, ItemCallback onClick) { mValues = items; mOnClick = onClick; } @@ -28,7 +24,7 @@ public class EditSensesRecyclerViewAdapter extends RecyclerView.Adapter - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_edit_damage_immunities_list.xml b/app/src/main/res/layout/fragment_edit_damage_immunities_list.xml deleted file mode 100644 index a80156d..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_immunities_list.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/layout/fragment_edit_damage_immunities_list_item.xml b/app/src/main/res/layout/fragment_edit_damage_immunities_list_item.xml deleted file mode 100644 index 6e9049a..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_immunities_list_item.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_edit_damage_immunity.xml b/app/src/main/res/layout/fragment_edit_damage_immunity.xml deleted file mode 100644 index a1456f2..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_immunity.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/fragment_edit_damage_resistance.xml b/app/src/main/res/layout/fragment_edit_damage_resistance.xml deleted file mode 100644 index a1456f2..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_resistance.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - 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 deleted file mode 100644 index a80156d..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_resistances_list.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - 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 deleted file mode 100644 index 6e9049a..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_resistances_list_item.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_edit_damage_vulnerabilities_list.xml b/app/src/main/res/layout/fragment_edit_damage_vulnerabilities_list.xml deleted file mode 100644 index a80156d..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_vulnerabilities_list.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/layout/fragment_edit_damage_vulnerabilities_list_item.xml b/app/src/main/res/layout/fragment_edit_damage_vulnerabilities_list_item.xml deleted file mode 100644 index 6e9049a..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_vulnerabilities_list_item.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_edit_damage_vulnerability.xml b/app/src/main/res/layout/fragment_edit_damage_vulnerability.xml deleted file mode 100644 index a1456f2..0000000 --- a/app/src/main/res/layout/fragment_edit_damage_vulnerability.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/fragment_edit_sense.xml b/app/src/main/res/layout/fragment_edit_sense.xml deleted file mode 100644 index 4f26026..0000000 --- a/app/src/main/res/layout/fragment_edit_sense.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/fragment_edit_senses_list_item.xml b/app/src/main/res/layout/fragment_edit_senses_list_item.xml deleted file mode 100644 index 6e9049a..0000000 --- a/app/src/main/res/layout/fragment_edit_senses_list_item.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_edit_condition_immunity.xml b/app/src/main/res/layout/fragment_edit_string.xml similarity index 84% rename from app/src/main/res/layout/fragment_edit_condition_immunity.xml rename to app/src/main/res/layout/fragment_edit_string.xml index 49aba4b..a45f2f7 100644 --- a/app/src/main/res/layout/fragment_edit_condition_immunity.xml +++ b/app/src/main/res/layout/fragment_edit_string.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/text_margin" - tools:context=".ui.editmonster.EditConditionImmunityFragment"> + tools:context=".ui.editmonster.EditStringFragment"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/fragment_edit_senses_list.xml b/app/src/main/res/layout/fragment_edit_strings_list.xml similarity index 86% rename from app/src/main/res/layout/fragment_edit_senses_list.xml rename to app/src/main/res/layout/fragment_edit_strings_list.xml index 3c1ca94..765d3e9 100644 --- a/app/src/main/res/layout/fragment_edit_senses_list.xml +++ b/app/src/main/res/layout/fragment_edit_strings_list.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.editmonster.EditSensesFragment"> + tools:context=".ui.editmonster.EditStringsFragment"> + tools:listitem="@layout/fragment_edit_traits_list_item" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/fragment_edit_trait.xml b/app/src/main/res/layout/fragment_edit_trait.xml index a055046..4f637c8 100644 --- a/app/src/main/res/layout/fragment_edit_trait.xml +++ b/app/src/main/res/layout/fragment_edit_trait.xml @@ -3,7 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + tools:context=".ui.editmonster.EditTraitFragment"> + tools:context=".ui.editmonster.EditTraitListFragment"> + tools:listitem="@layout/fragment_edit_traits_list_item" /> - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bd8f358..9b8e778 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,6 +2,7 @@ Add Ability Add Condition Add Damage Type + Add Item Add Language Add monster Add Sense