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 a7975bd..e461b0b 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 @@ -111,6 +111,11 @@ public class EditMonsterFragment extends MCFragment { Navigation.findNavController(requireView()).navigate(action); }); + mHolder.skills.setOnClickListener(v -> { + NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditSkillsFragment(); + Navigation.findNavController(requireView()).navigate(action); + }); + requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { 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 5c0c022..60e1a6b 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 @@ -5,6 +5,7 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import com.majinnaibu.monstercards.data.enums.AbilityScore; import com.majinnaibu.monstercards.data.enums.AdvantageType; import com.majinnaibu.monstercards.data.enums.ArmorType; import com.majinnaibu.monstercards.data.enums.ChallengeRating; @@ -16,7 +17,9 @@ import com.majinnaibu.monstercards.models.Skill; import com.majinnaibu.monstercards.models.Trait; import com.majinnaibu.monstercards.utils.ChangeTrackedLiveData; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.UUID; @@ -76,7 +79,7 @@ public class EditMonsterViewModel extends ViewModel { private final ChangeTrackedLiveData mTruesightRange; private final ChangeTrackedLiveData mTelepathyRange; private final ChangeTrackedLiveData mUnderstandsButDescription; - private final ChangeTrackedLiveData> mSkills; + private final ChangeTrackedLiveData> mSkills; private final ChangeTrackedLiveData> mDamageImmunities; private final ChangeTrackedLiveData> mDamageResistances; private final ChangeTrackedLiveData> mDamageVulnerabilities; @@ -146,7 +149,7 @@ public class EditMonsterViewModel extends ViewModel { mTruesightRange = new ChangeTrackedLiveData<>(0, onDirtied); mTelepathyRange = new ChangeTrackedLiveData<>(0, onDirtied); mUnderstandsButDescription = new ChangeTrackedLiveData<>("", onDirtied); - mSkills = new ChangeTrackedLiveData<>(new HashSet<>(), onDirtied); + mSkills = new ChangeTrackedLiveData<>(new ArrayList<>(), onDirtied); mDamageImmunities = new ChangeTrackedLiveData<>(new HashSet<>(), onDirtied); mDamageResistances = new ChangeTrackedLiveData<>(new HashSet<>(), onDirtied); mDamageVulnerabilities = new ChangeTrackedLiveData<>(new HashSet<>(), onDirtied); @@ -211,7 +214,15 @@ public class EditMonsterViewModel extends ViewModel { mTruesightRange.resetValue(monster.truesightRange); mTelepathyRange.resetValue(monster.telepathyRange); mUnderstandsButDescription.resetValue(monster.understandsButDescription); - mSkills.resetValue(monster.skills); + + if (monster.skills.size() == 0) { + ArrayList skills = new ArrayList<>(); + skills.add(new Skill("Acrobatics", AbilityScore.STRENGTH)); + skills.add(new Skill("Stealth", AbilityScore.DEXTERITY)); + mSkills.resetValue(skills); + } else { + mSkills.resetValue(new ArrayList<>(monster.skills)); + } mDamageImmunities.resetValue(monster.damageImmunities); mDamageResistances.resetValue(monster.damageResistances); mDamageVulnerabilities.resetValue(monster.damageVulnerabilities); @@ -794,6 +805,10 @@ public class EditMonsterViewModel extends ViewModel { mUnderstandsButDescription.setValue(understandsButDescription); } + public LiveData> getSkills() { + return mSkills; + } + /* // TODO: add getters and setters for Senses @@ -862,7 +877,7 @@ public class EditMonsterViewModel extends ViewModel { monster.truesightRange = mTruesightRange.getValue(); monster.telepathyRange = mTelepathyRange.getValue(); monster.understandsButDescription = mUnderstandsButDescription.getValue(); - monster.skills = mSkills.getValue(); + monster.skills = new HashSet<>(mSkills.getValue()); monster.damageImmunities = mDamageImmunities.getValue(); monster.damageResistances = mDamageResistances.getValue(); monster.damageVulnerabilities = mDamageVulnerabilities.getValue(); @@ -877,4 +892,8 @@ public class EditMonsterViewModel extends ViewModel { return monster; } + + public List getSkillsArray() { + return mSkills.getValue(); + } } diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsFragment.java index e4ccf85..30848d1 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsFragment.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsFragment.java @@ -6,87 +6,40 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import androidx.annotation.NonNull; +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.models.Skill; -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 EditSkillsFragment extends MCFragment { +public class EditSkillsFragment extends Fragment { private EditMonsterViewModel mViewModel; - private ViewHolder mHolder; - - private void navigateToEditSkill(@NonNull Skill skill) { - NavDirections action = EditSkillsFragmentDirections.actionEditSkillsFragmentToEditSkillFragment(skill.name, skill.abilityScore, skill.proficiencyType, skill.advantageType); - Navigation.findNavController(requireView()).navigate(action); - } +// private ViewHolder mHolder; @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_edit_skills_list, container, false); + 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_skills_list, container, false); - mHolder = new ViewHolder(root); - setupRecyclerView(mHolder.list); - setupAddSkillButton(mHolder.addSkill); - return root; - } - - private void setupRecyclerView(@NonNull RecyclerView recyclerView) { - Context context = requireContext(); - LinearLayoutManager layoutManager = new LinearLayoutManager(context); - recyclerView.setLayoutManager(layoutManager); - - mViewModel.getSkills().observe(getViewLifecycleOwner(), skills -> { - EditSkillsRecyclerViewAdapter adapter = new EditSkillsRecyclerViewAdapter(mViewModel.getSkillsArray(), skill -> { - if (skill != null) { - navigateToEditSkill(skill); - } else { - Logger.logError("Can't navigate to EditSkill with a null skill"); - } - }); - recyclerView.setAdapter(adapter); - }); - - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); - recyclerView.addItemDecoration(dividerItemDecoration); - - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, (position, direction) -> mViewModel.removeSkill(position), null)); - itemTouchHelper.attachToRecyclerView(recyclerView); - } - - private void setupAddSkillButton(@NonNull FloatingActionButton fab) { - fab.setOnClickListener(view -> { - Skill newSkill = mViewModel.addNewSkill(); - navigateToEditSkill(newSkill); - }); - } - - private static class ViewHolder { - RecyclerView list; - FloatingActionButton addSkill; - - ViewHolder(@NonNull View root) { - this.list = root.findViewById(R.id.list); - this.addSkill = root.findViewById(R.id.add_skill); + // Set the adapter + if (view instanceof RecyclerView) { + Context context = view.getContext(); + RecyclerView recyclerView = (RecyclerView) view; + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + mViewModel.getSkills().observe(getViewLifecycleOwner(), skills -> recyclerView.setAdapter(new EditSkillsRecyclerViewAdapter(mViewModel.getSkillsArray()))); } + + return view; } -} +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsRecyclerViewAdapter.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsRecyclerViewAdapter.java index f91b8ef..f443466 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsRecyclerViewAdapter.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsRecyclerViewAdapter.java @@ -4,7 +4,6 @@ import android.view.LayoutInflater; import android.view.ViewGroup; import android.widget.TextView; -import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.majinnaibu.monstercards.databinding.FragmentEditSkillsListItemBinding; @@ -14,31 +13,25 @@ import java.util.List; /** * {@link RecyclerView.Adapter} that can display a {@link Skill}. + * TODO: Replace the implementation with code for your data type. */ public class EditSkillsRecyclerViewAdapter extends RecyclerView.Adapter { - private final List mValues; - private final ItemCallback mOnClick; - public EditSkillsRecyclerViewAdapter(List items, ItemCallback onClick) { + private final List mValues; + + public EditSkillsRecyclerViewAdapter(List items) { mValues = items; - mOnClick = onClick; } - @NonNull @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(FragmentEditSkillsListItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); } @Override - public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { + public void onBindViewHolder(final ViewHolder holder, int position) { holder.mItem = mValues.get(position); holder.mContentView.setText(mValues.get(position).name); - holder.itemView.setOnClickListener(v -> { - if (mOnClick != null) { - mOnClick.onItemCallback(holder.mItem); - } - }); } @Override @@ -46,23 +39,18 @@ public class EditSkillsRecyclerViewAdapter extends RecyclerView.Adapter - - - - - - + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" + app:layoutManager="LinearLayoutManager" + tools:context=".ui.editmonster.EditSkillsFragment" + tools:listitem="@layout/fragment_edit_skills_list_item" /> \ No newline at end of file diff --git a/Android/app/src/main/res/layout/fragment_edit_skills_list_item.xml b/Android/app/src/main/res/layout/fragment_edit_skills_list_item.xml index ea0dc65..5ac69b4 100644 --- a/Android/app/src/main/res/layout/fragment_edit_skills_list_item.xml +++ b/Android/app/src/main/res/layout/fragment_edit_skills_list_item.xml @@ -1,13 +1,7 @@ - - - - + android:layout_margin="@dimen/text_margin" + android:textAppearance="?attr/textAppearanceListItem" /> diff --git a/Android/app/src/main/res/navigation/mobile_navigation.xml b/Android/app/src/main/res/navigation/mobile_navigation.xml index 56c5290..15ab555 100644 --- a/Android/app/src/main/res/navigation/mobile_navigation.xml +++ b/Android/app/src/main/res/navigation/mobile_navigation.xml @@ -90,6 +90,9 @@ + + \ No newline at end of file