diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java deleted file mode 100644 index ac3e605..0000000 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java +++ /dev/null @@ -1,95 +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.annotation.Nullable; -import androidx.fragment.app.Fragment; -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.SwipeToDeleteCallback; -import com.majinnaibu.monstercards.utils.Logger; - -import org.jetbrains.annotations.NotNull; - -/** - * A fragment representing a list of Items. - */ -public class EditConditionImmunitiesFragment extends Fragment { - private EditMonsterViewModel mViewModel; - private ViewHolder mHolder; - - private void navigateToEditConditionImmunity(String condition) { - NavDirections action = EditConditionImmunitiesFragmentDirections.actionEditConditionImmunitiesFragmentToEditConditionImmunity(condition); - View view = getView(); - assert view != null; - Navigation.findNavController(view).navigate(action); - } - - @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); - mHolder = new ViewHolder(root); - setupRecyclerView(mHolder.list); - setupAddConditionImmunityButton(mHolder.addConditionImmunity); - return root; - } - - private void setupRecyclerView(@NonNull RecyclerView recyclerView) { - Context context = requireContext(); - 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"); - } - }); - recyclerView.setAdapter(adapter); - }); - - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); - recyclerView.addItemDecoration(dividerItemDecoration); - - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, mViewModel::removeConditionImmunity)); - itemTouchHelper.attachToRecyclerView(recyclerView); - } - - private void setupAddConditionImmunityButton(@NonNull FloatingActionButton fab) { - fab.setOnClickListener(view -> { - String condition = mViewModel.addNewConditionImmunity(); - navigateToEditConditionImmunity(condition); - }); - } - - private static class ViewHolder { - RecyclerView list; - FloatingActionButton addConditionImmunity; - - ViewHolder(View root) { - list = root.findViewById(R.id.list); - addConditionImmunity = root.findViewById(R.id.add_condition_immunity); - } - } -} \ No newline at end of file diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterFragment.java index f30614d..4d7a2ec 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterFragment.java +++ b/Android/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/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java index 9973a34..46ebc38 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java +++ b/Android/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/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSenseFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSenseFragment.java deleted file mode 100644 index 4d99588..0000000 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSenseFragment.java +++ /dev/null @@ -1,77 +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); - } - } - -} \ No newline at end of file diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesFragment.java deleted file mode 100644 index 5c7482a..0000000 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSensesFragment.java +++ /dev/null @@ -1,92 +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); - 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_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/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringFragment.java index 4a37439..0610a18 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringFragment.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringFragment.java @@ -9,45 +9,49 @@ import android.widget.EditText; import androidx.activity.OnBackPressedCallback; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -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.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 Fragment { +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 Fragment { @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 Fragment { 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); } } -} \ No newline at end of file +} diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java index b3bfaa5..6ee2b80 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java @@ -8,7 +8,11 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +<<<<<<<< HEAD:Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java +import androidx.fragment.app.Fragment; +======== import androidx.lifecycle.LiveData; +>>>>>>>> f924bdd (Replaces condition immunities, damage immunities, damage resistances, damage vulnerabilities, and senses with a unified list of strings editor.):Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java import androidx.lifecycle.ViewModelProvider; import androidx.navigation.NavBackStackEntry; import androidx.navigation.NavController; @@ -21,20 +25,39 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.majinnaibu.monstercards.R; +<<<<<<<< HEAD:Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java +======== import com.majinnaibu.monstercards.data.enums.StringType; import com.majinnaibu.monstercards.ui.shared.MCFragment; +>>>>>>>> f924bdd (Replaces condition immunities, damage immunities, damage resistances, damage vulnerabilities, and senses with a unified list of strings editor.):Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java import com.majinnaibu.monstercards.ui.shared.SwipeToDeleteCallback; import com.majinnaibu.monstercards.utils.Logger; +import org.jetbrains.annotations.NotNull; + +<<<<<<<< HEAD:Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java +/** + * A fragment representing a list of Items. + */ +public class EditConditionImmunitiesFragment extends Fragment { +======== import java.util.List; public class EditStringsFragment extends MCFragment { +>>>>>>>> f924bdd (Replaces condition immunities, damage immunities, damage resistances, damage vulnerabilities, and senses with a unified list of strings editor.):Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java private EditMonsterViewModel mViewModel; private ViewHolder mHolder; private StringType mStringType; +<<<<<<<< HEAD:Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditConditionImmunitiesFragment.java + private void navigateToEditConditionImmunity(String condition) { + NavDirections action = EditConditionImmunitiesFragmentDirections.actionEditConditionImmunitiesFragmentToEditConditionImmunity(condition); + View view = getView(); + assert view != null; + Navigation.findNavController(view).navigate(action); +======== @Override - public void onCreate(@Nullable Bundle savedInstanceState) { + public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { Bundle arguments = getArguments(); if (arguments != null) { EditStringsFragmentArgs args = EditStringsFragmentArgs.fromBundle(arguments); @@ -43,40 +66,23 @@ public class EditStringsFragment extends MCFragment { Logger.logWTF("EditStringsFragment needs arguments"); } super.onCreate(savedInstanceState); +>>>>>>>> f924bdd (Replaces condition immunities, damage immunities, damage resistances, damage vulnerabilities, and senses with a unified list of strings editor.):Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsFragment.java } @Nullable + @org.jetbrains.annotations.Nullable @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + 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_strings_list, container, false); mHolder = new ViewHolder(root); - setTitle(getTitleForStringType(mStringType)); setupRecyclerView(mHolder.list); setupAddButton(mHolder.addItem); return root; } - @NonNull - private String getTitleForStringType(StringType type) { - switch (type) { - case CONDITION_IMMUNITY: - return getString(R.string.title_editConditionImmunities); - case DAMAGE_IMMUNITY: - return getString(R.string.title_editDamageImmunities); - case DAMAGE_RESISTANCE: - return getString(R.string.title_editDamageResistances); - case DAMAGE_VULNERABILITY: - return getString(R.string.title_editDamageVulnerabilities); - case SENSE: - return getString(R.string.title_editSenses); - default: - return getString(R.string.title_editStrings); - } - } - private void setupRecyclerView(@NonNull RecyclerView recyclerView) { Context context = requireContext(); LinearLayoutManager layoutManager = new LinearLayoutManager(context); @@ -99,7 +105,7 @@ public class EditStringsFragment extends MCFragment { DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); recyclerView.addItemDecoration(dividerItemDecoration); - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, (position, direction) -> mViewModel.removeString(mStringType, position), null)); + ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, position -> mViewModel.removeString(mStringType, position))); itemTouchHelper.attachToRecyclerView(recyclerView); } @@ -121,9 +127,9 @@ public class EditStringsFragment extends MCFragment { RecyclerView list; FloatingActionButton addItem; - ViewHolder(@NonNull View root) { + ViewHolder(View root) { list = root.findViewById(R.id.list); addItem = root.findViewById(R.id.add_item); } } -} +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsRecyclerViewAdapter.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsRecyclerViewAdapter.java index a0cc370..5c9ce7b 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsRecyclerViewAdapter.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditStringsRecyclerViewAdapter.java @@ -6,20 +6,17 @@ import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; -import com.majinnaibu.monstercards.databinding.FragmentEditConditionImmunitiesListItemBinding; +import com.majinnaibu.monstercards.databinding.FragmentEditStringsListItemBinding; import org.jetbrains.annotations.NotNull; import java.util.List; -/** - * {@link RecyclerView.Adapter} that can display a {@link String}. - */ -public class EditConditionImmunitiesRecyclerViewAdapter extends RecyclerView.Adapter { +public class EditStringsRecyclerViewAdapter extends RecyclerView.Adapter { private final List mValues; private final ItemCallback mOnClick; - public EditConditionImmunitiesRecyclerViewAdapter(List items, ItemCallback onClick) { + public EditStringsRecyclerViewAdapter(List items, ItemCallback onClick) { mValues = items; mOnClick = onClick; } @@ -27,7 +24,7 @@ public class EditConditionImmunitiesRecyclerViewAdapter extends RecyclerView.Ada @NotNull @Override public ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) { - return new ViewHolder(FragmentEditConditionImmunitiesListItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + return new ViewHolder(FragmentEditStringsListItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); } @Override @@ -47,14 +44,14 @@ public class EditConditionImmunitiesRecyclerViewAdapter extends RecyclerView.Ada } public interface ItemCallback { - void onItemCallback(String condition); + void onItemCallback(String value); } public static class ViewHolder extends RecyclerView.ViewHolder { public final TextView mContentView; public String mItem; - public ViewHolder(FragmentEditConditionImmunitiesListItemBinding binding) { + public ViewHolder(FragmentEditStringsListItemBinding binding) { super(binding.getRoot()); mContentView = binding.content; } @@ -65,4 +62,4 @@ public class EditConditionImmunitiesRecyclerViewAdapter extends RecyclerView.Ada return super.toString() + " '" + mContentView.getText() + "'"; } } -} \ No newline at end of file +} diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditTraitFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditTraitFragment.java index e227340..f315d95 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditTraitFragment.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditTraitFragment.java @@ -40,7 +40,6 @@ public class EditTraitFragment extends MCFragment { Logger.logWTF("EditTraitFragment needs arguments"); mOldValue = null; } - super.onCreate(savedInstanceState); } diff --git a/Android/app/src/main/res/layout/fragment_edit_string.xml b/Android/app/src/main/res/layout/fragment_edit_string.xml index 4c8ebf3..a45f2f7 100644 --- a/Android/app/src/main/res/layout/fragment_edit_string.xml +++ b/Android/app/src/main/res/layout/fragment_edit_string.xml @@ -1,22 +1,18 @@ - - + android:hint="@string/label_description" + android:importantForAutofill="no" + android:inputType="text" + tools:text="blinded" /> - - - + diff --git a/Android/app/src/main/res/layout/fragment_edit_trait.xml b/Android/app/src/main/res/layout/fragment_edit_trait.xml index a055046..4f637c8 100644 --- a/Android/app/src/main/res/layout/fragment_edit_trait.xml +++ b/Android/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/Android/app/src/main/res/values/strings.xml b/Android/app/src/main/res/values/strings.xml index bd8f358..9b8e778 100644 --- a/Android/app/src/main/res/values/strings.xml +++ b/Android/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