Replaces condition immunities, damage immunities, damage resistances, damage vulnerabilities, and senses with a unified list of strings editor.
This commit is contained in:
		| @@ -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); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -19,6 +19,7 @@ import androidx.navigation.Navigation; | |||||||
| import com.google.android.material.snackbar.Snackbar; | import com.google.android.material.snackbar.Snackbar; | ||||||
| import com.majinnaibu.monstercards.R; | import com.majinnaibu.monstercards.R; | ||||||
| import com.majinnaibu.monstercards.data.MonsterRepository; | import com.majinnaibu.monstercards.data.MonsterRepository; | ||||||
|  | import com.majinnaibu.monstercards.data.enums.StringType; | ||||||
| import com.majinnaibu.monstercards.data.enums.TraitType; | import com.majinnaibu.monstercards.data.enums.TraitType; | ||||||
| import com.majinnaibu.monstercards.models.Monster; | import com.majinnaibu.monstercards.models.Monster; | ||||||
| import com.majinnaibu.monstercards.ui.monster.MonsterDetailFragmentArgs; | import com.majinnaibu.monstercards.ui.monster.MonsterDetailFragmentArgs; | ||||||
| @@ -117,27 +118,27 @@ public class EditMonsterFragment extends MCFragment { | |||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         mHolder.senses.setOnClickListener(v -> { |         mHolder.senses.setOnClickListener(v -> { | ||||||
|             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditSensesFragment(); |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.SENSE); | ||||||
|             Navigation.findNavController(requireView()).navigate(action); |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         mHolder.conditionImmunities.setOnClickListener(v -> { |         mHolder.conditionImmunities.setOnClickListener(v -> { | ||||||
|             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditConditionImmunitiesFragment(); |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.CONDITION_IMMUNITY); | ||||||
|             Navigation.findNavController(requireView()).navigate(action); |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         mHolder.damageImmunities.setOnClickListener(v -> { |         mHolder.damageImmunities.setOnClickListener(v -> { | ||||||
|             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageImmunitiesFragment(); |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.DAMAGE_IMMUNITY); | ||||||
|             Navigation.findNavController(requireView()).navigate(action); |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         mHolder.damageResistances.setOnClickListener(v -> { |         mHolder.damageResistances.setOnClickListener(v -> { | ||||||
|             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageResistancesFragment(); |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.DAMAGE_RESISTANCE); | ||||||
|             Navigation.findNavController(requireView()).navigate(action); |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         mHolder.damageVulnerabilities.setOnClickListener(v -> { |         mHolder.damageVulnerabilities.setOnClickListener(v -> { | ||||||
|             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageVulnerabilitiesFragment(); |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditStringsFragment(StringType.DAMAGE_VULNERABILITY); | ||||||
|             Navigation.findNavController(requireView()).navigate(action); |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import com.majinnaibu.monstercards.data.enums.AdvantageType; | |||||||
| import com.majinnaibu.monstercards.data.enums.ArmorType; | import com.majinnaibu.monstercards.data.enums.ArmorType; | ||||||
| import com.majinnaibu.monstercards.data.enums.ChallengeRating; | import com.majinnaibu.monstercards.data.enums.ChallengeRating; | ||||||
| import com.majinnaibu.monstercards.data.enums.ProficiencyType; | 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.data.enums.TraitType; | ||||||
| import com.majinnaibu.monstercards.helpers.StringHelper; | import com.majinnaibu.monstercards.helpers.StringHelper; | ||||||
| import com.majinnaibu.monstercards.models.Language; | import com.majinnaibu.monstercards.models.Language; | ||||||
| @@ -1004,7 +1005,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { | |||||||
|             case REGIONAL_ACTION: |             case REGIONAL_ACTION: | ||||||
|                 return mRegionalActions; |                 return mRegionalActions; | ||||||
|             default: |             default: | ||||||
|                 Logger.logWTF(String.format("Unrecognized TraitType: %s", type)); |                 Logger.logUnimplementedFeature(String.format("Unrecognized TraitType: %s", type)); | ||||||
|                 return null; |                 return null; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -1030,7 +1031,8 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { | |||||||
|                 Helpers.removeFromList(mRegionalActions, position); |                 Helpers.removeFromList(mRegionalActions, position); | ||||||
|                 break; |                 break; | ||||||
|             default: |             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); |                 Helpers.replaceItemInList(mRegionalActions, oldTrait, newTrait); | ||||||
|                 break; |                 break; | ||||||
|             default: |             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: |             case REGIONAL_ACTION: | ||||||
|                 return Helpers.addItemToList(mRegionalActions, newAction); |                 return Helpers.addItemToList(mRegionalActions, newAction); | ||||||
|             default: |             default: | ||||||
|                 Logger.logWTF(String.format("Unrecognized TraitType: %s", type)); |                 Logger.logUnimplementedFeature(String.format("Unrecognized TraitType: %s", type)); | ||||||
|                 return null; |                 return null; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public LiveData<List<String>> 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") |     @SuppressWarnings("SameParameterValue") | ||||||
|     private static class Helpers { |     private static class Helpers { | ||||||
|         static String addStringToList(String newString, MutableLiveData<List<String>> strings) { |         static String addStringToList(String newString, MutableLiveData<List<String>> strings) { | ||||||
|   | |||||||
| @@ -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); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -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); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -9,45 +9,49 @@ import android.widget.EditText; | |||||||
| import androidx.activity.OnBackPressedCallback; | import androidx.activity.OnBackPressedCallback; | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||||
| import androidx.fragment.app.Fragment; |  | ||||||
| import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||||
| import androidx.navigation.NavBackStackEntry; | import androidx.navigation.NavBackStackEntry; | ||||||
| import androidx.navigation.NavController; | import androidx.navigation.NavController; | ||||||
| import androidx.navigation.Navigation; | import androidx.navigation.Navigation; | ||||||
|  |  | ||||||
| import com.majinnaibu.monstercards.R; | 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.Logger; | ||||||
| import com.majinnaibu.monstercards.utils.TextChangedListener; | import com.majinnaibu.monstercards.utils.TextChangedListener; | ||||||
|  |  | ||||||
| public class EditConditionImmunityFragment extends Fragment { | public class EditStringFragment extends MCFragment { | ||||||
|     private EditMonsterViewModel mEditMonsterViewModel; |     private EditMonsterViewModel mEditMonsterViewModel; | ||||||
|     private EditStringViewModel mViewModel; |     private EditStringViewModel mViewModel; | ||||||
|     private ViewHolder mHolder; |     private ViewHolder mHolder; | ||||||
|     private String mOldValue; |     private String mOldValue; | ||||||
|  |     private StringType mStringType; | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void onCreate(@Nullable Bundle savedInstanceState) { |     public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { | ||||||
|         mViewModel = new ViewModelProvider(this).get(EditStringViewModel.class); |         mViewModel = new ViewModelProvider(this).get(EditStringViewModel.class); | ||||||
|         if (getArguments() != null) { |         if (getArguments() != null) { | ||||||
|             EditConditionImmunityFragmentArgs args = EditConditionImmunityFragmentArgs.fromBundle(getArguments()); |             EditStringFragmentArgs args = EditStringFragmentArgs.fromBundle(getArguments()); | ||||||
|             mOldValue = args.getCondition(); |             mOldValue = args.getValue(); | ||||||
|             mViewModel.resetValue(mOldValue); |             mViewModel.setValue(mOldValue); | ||||||
|  |             mStringType = args.getStringType(); | ||||||
|         } else { |         } else { | ||||||
|             Logger.logWTF("EditConditionImmunityFragment needs arguments"); |             Logger.logWTF("EditStringFragment needs arguments"); | ||||||
|             mOldValue = null; |             mOldValue = null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         super.onCreate(savedInstanceState); |         super.onCreate(savedInstanceState); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Nullable | ||||||
|  |     @org.jetbrains.annotations.Nullable | ||||||
|     @Override |     @Override | ||||||
|     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, |     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { | ||||||
|                              @Nullable Bundle savedInstanceState) { |  | ||||||
|         NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment); |         NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment); | ||||||
|         NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation); |         NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation); | ||||||
|         mEditMonsterViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class); |         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 = new ViewHolder(root); | ||||||
|  |  | ||||||
|         mHolder.description.setText(mViewModel.getValueAsString()); |         mHolder.description.setText(mViewModel.getValueAsString()); | ||||||
|         mHolder.description.addTextChangedListener(new TextChangedListener((TextChangedListener.OnTextChangedCallback) (s, start, before, count) -> mViewModel.setValue(s.toString()))); |         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 |             @Override | ||||||
|             public void handleOnBackPressed() { |             public void handleOnBackPressed() { | ||||||
|                 if (mViewModel.hasChanges()) { |                 if (mViewModel.hasChanges()) { | ||||||
|                     mEditMonsterViewModel.replaceConditionImmunity(mOldValue, mViewModel.getValueAsString()); |                     mEditMonsterViewModel.replaceString(mStringType, mOldValue, mViewModel.getValueAsString()); | ||||||
|                 } |                 } | ||||||
|                 Navigation.findNavController(requireView()).navigateUp(); |                 Navigation.findNavController(requireView()).navigateUp(); | ||||||
|             } |             } | ||||||
| @@ -64,11 +68,14 @@ public class EditConditionImmunityFragment extends Fragment { | |||||||
|         return root; |         return root; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     private static class ViewHolder { |     private static class ViewHolder { | ||||||
|         EditText description; |         EditText description; | ||||||
|  |         EditText name; | ||||||
|  |  | ||||||
|         ViewHolder(View root) { |         ViewHolder(View root) { | ||||||
|             description = root.findViewById(R.id.description); |             description = root.findViewById(R.id.description); | ||||||
|  |             name = root.findViewById(R.id.name); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -8,7 +8,11 @@ import android.view.ViewGroup; | |||||||
|  |  | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.annotation.Nullable; | 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; | 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.lifecycle.ViewModelProvider; | ||||||
| import androidx.navigation.NavBackStackEntry; | import androidx.navigation.NavBackStackEntry; | ||||||
| import androidx.navigation.NavController; | import androidx.navigation.NavController; | ||||||
| @@ -21,20 +25,39 @@ import androidx.recyclerview.widget.RecyclerView; | |||||||
|  |  | ||||||
| import com.google.android.material.floatingactionbutton.FloatingActionButton; | import com.google.android.material.floatingactionbutton.FloatingActionButton; | ||||||
| import com.majinnaibu.monstercards.R; | 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.data.enums.StringType; | ||||||
| import com.majinnaibu.monstercards.ui.shared.MCFragment; | 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.ui.shared.SwipeToDeleteCallback; | ||||||
| import com.majinnaibu.monstercards.utils.Logger; | 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; | import java.util.List; | ||||||
|  |  | ||||||
| public class EditStringsFragment extends MCFragment { | 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 EditMonsterViewModel mViewModel; | ||||||
|     private ViewHolder mHolder; |     private ViewHolder mHolder; | ||||||
|     private StringType mStringType; |     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 |     @Override | ||||||
|     public void onCreate(@Nullable Bundle savedInstanceState) { |     public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { | ||||||
|         Bundle arguments = getArguments(); |         Bundle arguments = getArguments(); | ||||||
|         if (arguments != null) { |         if (arguments != null) { | ||||||
|             EditStringsFragmentArgs args = EditStringsFragmentArgs.fromBundle(arguments); |             EditStringsFragmentArgs args = EditStringsFragmentArgs.fromBundle(arguments); | ||||||
| @@ -43,40 +66,23 @@ public class EditStringsFragment extends MCFragment { | |||||||
|             Logger.logWTF("EditStringsFragment needs arguments"); |             Logger.logWTF("EditStringsFragment needs arguments"); | ||||||
|         } |         } | ||||||
|         super.onCreate(savedInstanceState); |         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 |     @Nullable | ||||||
|  |     @org.jetbrains.annotations.Nullable | ||||||
|     @Override |     @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); |         NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment); | ||||||
|         NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation); |         NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation); | ||||||
|         mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class); |         mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class); | ||||||
|         View root = inflater.inflate(R.layout.fragment_edit_strings_list, container, false); |         View root = inflater.inflate(R.layout.fragment_edit_strings_list, container, false); | ||||||
|         mHolder = new ViewHolder(root); |         mHolder = new ViewHolder(root); | ||||||
|         setTitle(getTitleForStringType(mStringType)); |  | ||||||
|         setupRecyclerView(mHolder.list); |         setupRecyclerView(mHolder.list); | ||||||
|         setupAddButton(mHolder.addItem); |         setupAddButton(mHolder.addItem); | ||||||
|         return root; |         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) { |     private void setupRecyclerView(@NonNull RecyclerView recyclerView) { | ||||||
|         Context context = requireContext(); |         Context context = requireContext(); | ||||||
|         LinearLayoutManager layoutManager = new LinearLayoutManager(context); |         LinearLayoutManager layoutManager = new LinearLayoutManager(context); | ||||||
| @@ -99,7 +105,7 @@ public class EditStringsFragment extends MCFragment { | |||||||
|         DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); |         DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); | ||||||
|         recyclerView.addItemDecoration(dividerItemDecoration); |         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); |         itemTouchHelper.attachToRecyclerView(recyclerView); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -121,7 +127,7 @@ public class EditStringsFragment extends MCFragment { | |||||||
|         RecyclerView list; |         RecyclerView list; | ||||||
|         FloatingActionButton addItem; |         FloatingActionButton addItem; | ||||||
|  |  | ||||||
|         ViewHolder(@NonNull View root) { |         ViewHolder(View root) { | ||||||
|             list = root.findViewById(R.id.list); |             list = root.findViewById(R.id.list); | ||||||
|             addItem = root.findViewById(R.id.add_item); |             addItem = root.findViewById(R.id.add_item); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -6,20 +6,17 @@ import android.widget.TextView; | |||||||
|  |  | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
|  |  | ||||||
| import com.majinnaibu.monstercards.databinding.FragmentEditConditionImmunitiesListItemBinding; | import com.majinnaibu.monstercards.databinding.FragmentEditStringsListItemBinding; | ||||||
|  |  | ||||||
| import org.jetbrains.annotations.NotNull; | import org.jetbrains.annotations.NotNull; | ||||||
|  |  | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| /** | public class EditStringsRecyclerViewAdapter extends RecyclerView.Adapter<EditStringsRecyclerViewAdapter.ViewHolder> { | ||||||
|  * {@link RecyclerView.Adapter} that can display a {@link String}. |  | ||||||
|  */ |  | ||||||
| public class EditConditionImmunitiesRecyclerViewAdapter extends RecyclerView.Adapter<EditConditionImmunitiesRecyclerViewAdapter.ViewHolder> { |  | ||||||
|     private final List<String> mValues; |     private final List<String> mValues; | ||||||
|     private final ItemCallback mOnClick; |     private final ItemCallback mOnClick; | ||||||
|  |  | ||||||
|     public EditConditionImmunitiesRecyclerViewAdapter(List<String> items, ItemCallback onClick) { |     public EditStringsRecyclerViewAdapter(List<String> items, ItemCallback onClick) { | ||||||
|         mValues = items; |         mValues = items; | ||||||
|         mOnClick = onClick; |         mOnClick = onClick; | ||||||
|     } |     } | ||||||
| @@ -27,7 +24,7 @@ public class EditConditionImmunitiesRecyclerViewAdapter extends RecyclerView.Ada | |||||||
|     @NotNull |     @NotNull | ||||||
|     @Override |     @Override | ||||||
|     public ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) { |     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 |     @Override | ||||||
| @@ -47,14 +44,14 @@ public class EditConditionImmunitiesRecyclerViewAdapter extends RecyclerView.Ada | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public interface ItemCallback { |     public interface ItemCallback { | ||||||
|         void onItemCallback(String condition); |         void onItemCallback(String value); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static class ViewHolder extends RecyclerView.ViewHolder { |     public static class ViewHolder extends RecyclerView.ViewHolder { | ||||||
|         public final TextView mContentView; |         public final TextView mContentView; | ||||||
|         public String mItem; |         public String mItem; | ||||||
|  |  | ||||||
|         public ViewHolder(FragmentEditConditionImmunitiesListItemBinding binding) { |         public ViewHolder(FragmentEditStringsListItemBinding binding) { | ||||||
|             super(binding.getRoot()); |             super(binding.getRoot()); | ||||||
|             mContentView = binding.content; |             mContentView = binding.content; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -40,7 +40,6 @@ public class EditTraitFragment extends MCFragment { | |||||||
|             Logger.logWTF("EditTraitFragment needs arguments"); |             Logger.logWTF("EditTraitFragment needs arguments"); | ||||||
|             mOldValue = null; |             mOldValue = null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         super.onCreate(savedInstanceState); |         super.onCreate(savedInstanceState); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,22 +1,18 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" | <com.google.android.material.textfield.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|     xmlns:tools="http://schemas.android.com/tools" |     xmlns:tools="http://schemas.android.com/tools" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent" |     android:layout_height="wrap_content" | ||||||
|  |     android:layout_margin="@dimen/text_margin" | ||||||
|     tools:context=".ui.editmonster.EditStringFragment"> |     tools:context=".ui.editmonster.EditStringFragment"> | ||||||
|  |  | ||||||
|     <com.google.android.material.textfield.TextInputLayout |     <com.google.android.material.textfield.TextInputEditText | ||||||
|  |         android:id="@+id/description" | ||||||
|         android:layout_width="match_parent" |         android:layout_width="match_parent" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:layout_margin="@dimen/text_margin"> |         android:hint="@string/label_description" | ||||||
|  |         android:importantForAutofill="no" | ||||||
|  |         android:inputType="text" | ||||||
|  |         tools:text="blinded" /> | ||||||
|  |  | ||||||
|         <com.google.android.material.textfield.TextInputEditText | </com.google.android.material.textfield.TextInputLayout> | ||||||
|             android:id="@+id/description" |  | ||||||
|             android:layout_width="match_parent" |  | ||||||
|             android:layout_height="wrap_content" |  | ||||||
|             android:hint="@string/label_description" |  | ||||||
|             android:importantForAutofill="no" |  | ||||||
|             android:inputType="text" |  | ||||||
|             tools:text="blinded" /> |  | ||||||
|     </com.google.android.material.textfield.TextInputLayout> |  | ||||||
| </ScrollView> |  | ||||||
|   | |||||||
| @@ -3,7 +3,8 @@ | |||||||
|     xmlns:tools="http://schemas.android.com/tools" |     xmlns:tools="http://schemas.android.com/tools" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent" |     android:layout_height="match_parent" | ||||||
|     android:orientation="vertical"> |     android:orientation="vertical" | ||||||
|  |     tools:context=".ui.editmonster.EditTraitFragment"> | ||||||
|  |  | ||||||
|     <com.google.android.material.textfield.TextInputLayout |     <com.google.android.material.textfield.TextInputLayout | ||||||
|         android:layout_width="match_parent" |         android:layout_width="match_parent" | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|     xmlns:tools="http://schemas.android.com/tools" |     xmlns:tools="http://schemas.android.com/tools" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent" |     android:layout_height="match_parent" | ||||||
|     tools:context=".ui.editmonster.EditAbilitiesFragment"> |     tools:context=".ui.editmonster.EditTraitListFragment"> | ||||||
|  |  | ||||||
|     <androidx.recyclerview.widget.RecyclerView |     <androidx.recyclerview.widget.RecyclerView | ||||||
|         android:id="@+id/list" |         android:id="@+id/list" | ||||||
| @@ -17,7 +17,7 @@ | |||||||
|         app:layout_constraintEnd_toEndOf="parent" |         app:layout_constraintEnd_toEndOf="parent" | ||||||
|         app:layout_constraintStart_toStartOf="parent" |         app:layout_constraintStart_toStartOf="parent" | ||||||
|         app:layout_constraintTop_toTopOf="parent" |         app:layout_constraintTop_toTopOf="parent" | ||||||
|         tools:listitem="@layout/fragment_edit_abilities_list_item" /> |         tools:listitem="@layout/fragment_edit_traits_list_item" /> | ||||||
|  |  | ||||||
|     <com.google.android.material.floatingactionbutton.FloatingActionButton |     <com.google.android.material.floatingactionbutton.FloatingActionButton | ||||||
|         android:id="@+id/add_trait" |         android:id="@+id/add_trait" | ||||||
|   | |||||||
| @@ -93,27 +93,15 @@ | |||||||
|             <action |             <action | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editSkillsFragment" |                 android:id="@+id/action_editMonsterFragment_to_editSkillsFragment" | ||||||
|                 app:destination="@id/editSkillsFragment" /> |                 app:destination="@id/editSkillsFragment" /> | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editSensesFragment" |  | ||||||
|                 app:destination="@id/editSensesFragment" /> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editConditionImmunitiesFragment" |  | ||||||
|                 app:destination="@id/editConditionImmunitiesFragment" /> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editDamageResistancesFragment" |  | ||||||
|                 app:destination="@id/editDamageResistancesFragment" /> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editDamageVulnerabilitiesFragment" |  | ||||||
|                 app:destination="@id/editDamageVulnerabilitiesFragment" /> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editDamageImmunitiesFragment" |  | ||||||
|                 app:destination="@id/editDamageImmunitiesFragment" /> |  | ||||||
|             <action |             <action | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editLanguagesFragment" |                 android:id="@+id/action_editMonsterFragment_to_editLanguagesFragment" | ||||||
|                 app:destination="@id/editLanguagesFragment" /> |                 app:destination="@id/editLanguagesFragment" /> | ||||||
|             <action |             <action | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editTraitListFragment" |                 android:id="@+id/action_editMonsterFragment_to_editTraitListFragment" | ||||||
|                 app:destination="@id/editTraitListFragment" /> |                 app:destination="@id/editTraitListFragment" /> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editMonsterFragment_to_editStringsFragment" | ||||||
|  |                 app:destination="@id/editStringsFragment" /> | ||||||
|         </fragment> |         </fragment> | ||||||
|         <fragment |         <fragment | ||||||
|             android:id="@+id/editBasicInfoFragment" |             android:id="@+id/editBasicInfoFragment" | ||||||
| @@ -171,92 +159,6 @@ | |||||||
|                 android:name="advantage" |                 android:name="advantage" | ||||||
|                 app:argType="com.majinnaibu.monstercards.data.enums.AdvantageType" /> |                 app:argType="com.majinnaibu.monstercards.data.enums.AdvantageType" /> | ||||||
|         </fragment> |         </fragment> | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editSensesFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditSensesFragment" |  | ||||||
|             android:label="fragment_edit_senses_list" |  | ||||||
|             tools:layout="@layout/fragment_edit_senses_list"> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editSensesFragment_to_editSenseFragment" |  | ||||||
|                 app:destination="@id/editSenseFragment" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editSenseFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditSenseFragment" |  | ||||||
|             android:label="fragment_edit_sense" |  | ||||||
|             tools:layout="@layout/fragment_edit_sense"> |  | ||||||
|             <argument |  | ||||||
|                 android:name="sense" |  | ||||||
|                 app:argType="string" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editConditionImmunitiesFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditConditionImmunitiesFragment" |  | ||||||
|             android:label="fragment_edit_condition_immunities_list" |  | ||||||
|             tools:layout="@layout/fragment_edit_condition_immunities_list"> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editConditionImmunitiesFragment_to_editConditionImmunity" |  | ||||||
|                 app:destination="@id/editConditionImmunity" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editConditionImmunity" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditConditionImmunityFragment" |  | ||||||
|             android:label="fragment_edit_condition_immunity" |  | ||||||
|             tools:layout="@layout/fragment_edit_condition_immunity"> |  | ||||||
|             <argument |  | ||||||
|                 android:name="condition" |  | ||||||
|                 app:argType="string" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editDamageResistancesFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageResistancesFragment" |  | ||||||
|             android:label="fragment_edit_damage_resistances_list" |  | ||||||
|             tools:layout="@layout/fragment_edit_damage_resistances_list"> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editDamageResistancesFragment_to_editDamageResistanceFragment" |  | ||||||
|                 app:destination="@id/editDamageResistanceFragment" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editDamageResistanceFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageResistanceFragment" |  | ||||||
|             android:label="fragment_edit_damage_resistance" |  | ||||||
|             tools:layout="@layout/fragment_edit_damage_resistance"> |  | ||||||
|             <argument |  | ||||||
|                 android:name="damageType" |  | ||||||
|                 app:argType="string" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editDamageVulnerabilityFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageVulnerabilityFragment" |  | ||||||
|             android:label="EditDamageVulnerabilityFragment"> |  | ||||||
|             <argument |  | ||||||
|                 android:name="damageType" |  | ||||||
|                 app:argType="string" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editDamageImmunitiesFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageImmunitiesFragment" |  | ||||||
|             android:label="EditDamageImmunitiesFragment"> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editDamageImmunitiesFragment_to_editDamageImmunityFragment" |  | ||||||
|                 app:destination="@id/editDamageImmunityFragment" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editDamageImmunityFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageImmunityFragment" |  | ||||||
|             android:label="EditDamageImmunityFragment"> |  | ||||||
|             <argument |  | ||||||
|                 android:name="damageType" |  | ||||||
|                 app:argType="string" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |  | ||||||
|             android:id="@+id/editDamageVulnerabilitiesFragment" |  | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageVulnerabilitiesFragment" |  | ||||||
|             android:label="EditDamageVulnerabilitiesFragment"> |  | ||||||
|             <action |  | ||||||
|                 android:id="@+id/action_editDamageVulnerabilitiesFragment_to_editDamageVulnerabilityFragment" |  | ||||||
|                 app:destination="@id/editDamageVulnerabilityFragment" /> |  | ||||||
|         </fragment> |  | ||||||
|         <fragment |         <fragment | ||||||
|             android:id="@+id/editLanguagesFragment" |             android:id="@+id/editLanguagesFragment" | ||||||
|             android:name="com.majinnaibu.monstercards.ui.editmonster.EditLanguagesFragment" |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditLanguagesFragment" | ||||||
| @@ -303,5 +205,27 @@ | |||||||
|                 android:name="traitType" |                 android:name="traitType" | ||||||
|                 app:argType="com.majinnaibu.monstercards.data.enums.TraitType" /> |                 app:argType="com.majinnaibu.monstercards.data.enums.TraitType" /> | ||||||
|         </fragment> |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editStringsFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditStringsFragment" | ||||||
|  |             android:label="EditStringsFragment"> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editStringsFragment_to_editStringFragment" | ||||||
|  |                 app:destination="@id/editStringFragment" /> | ||||||
|  |             <argument | ||||||
|  |                 android:name="stringType" | ||||||
|  |                 app:argType="com.majinnaibu.monstercards.data.enums.StringType" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editStringFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditStringFragment" | ||||||
|  |             android:label="EditStringFragment"> | ||||||
|  |             <argument | ||||||
|  |                 android:name="stringType" | ||||||
|  |                 app:argType="com.majinnaibu.monstercards.data.enums.StringType" /> | ||||||
|  |             <argument | ||||||
|  |                 android:name="value" | ||||||
|  |                 app:argType="string" /> | ||||||
|  |         </fragment> | ||||||
|     </navigation> |     </navigation> | ||||||
| </navigation> | </navigation> | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
|     <string name="action_add_ability">Add Ability</string> |     <string name="action_add_ability">Add Ability</string> | ||||||
|     <string name="action_add_condition_immunity">Add Condition</string> |     <string name="action_add_condition_immunity">Add Condition</string> | ||||||
|     <string name="action_add_damage_type">Add Damage Type</string> |     <string name="action_add_damage_type">Add Damage Type</string> | ||||||
|  |     <string name="action_add_item">Add Item</string> | ||||||
|     <string name="action_add_language">Add Language</string> |     <string name="action_add_language">Add Language</string> | ||||||
|     <string name="action_add_monster">Add monster</string> |     <string name="action_add_monster">Add monster</string> | ||||||
|     <string name="action_add_sense">Add Sense</string> |     <string name="action_add_sense">Add Sense</string> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tom Hicks
					Tom Hicks