From e082db43f87a0202f44bdc44e67406813f67425d Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Sun, 20 Jun 2021 00:44:20 -0700 Subject: [PATCH] Makes addNewSkill return the new skill. Adds replaceSkill to replace an existing skill in the skills array. --- .../ui/editmonster/EditMonsterViewModel.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java index 8493b70..bfb2855 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditMonsterViewModel.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.UUID; @@ -812,7 +813,6 @@ public class EditMonsterViewModel extends ViewModel { /* // TODO: add getters and setters for Senses - Skills Damage Immunities DamageResistances DamageVulnerabilities @@ -897,12 +897,13 @@ public class EditMonsterViewModel extends ViewModel { return mSkills.getValue(); } - public void addNewSkill() { + public Skill addNewSkill() { Skill newSkill = new Skill("Unnamed Skill", AbilityScore.DEXTERITY); ArrayList newSkills = new ArrayList<>(mSkills.getValue()); newSkills.add(newSkill); Collections.sort(newSkills, (skill1, skill2) -> skill1.name.compareToIgnoreCase(skill2.name)); mSkills.setValue(newSkills); + return newSkill; } public void removeSkill(int position) { @@ -911,4 +912,26 @@ public class EditMonsterViewModel extends ViewModel { newSkills.remove(position); mSkills.setValue(newSkills); } + + public void replaceSkill(Skill newSkill, Skill oldSkill) { + List oldSkills = mSkills.getValue(); + if (oldSkills == null) { + oldSkills = new ArrayList<>(); + } + boolean hasReplaced = false; + ArrayList newSkills = new ArrayList<>(oldSkills.size()); + for (Skill skill : oldSkills) { + if (Objects.equals(skill, oldSkill)) { + newSkills.add(newSkill); + hasReplaced = true; + } else { + newSkills.add(skill); + } + } + if (!hasReplaced) { + newSkills.add(newSkill); + } + Collections.sort(newSkills, (skill1, skill2) -> skill1.name.compareToIgnoreCase(skill2.name)); + mSkills.setValue(newSkills); + } }