diff --git a/.idea/misc.xml b/.idea/misc.xml index 860da66..6c2e59d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,48 @@ + + + + diff --git a/app/src/main/java/com/majinnaibu/monstercards/MainActivity.java b/app/src/main/java/com/majinnaibu/monstercards/MainActivity.java index 88ca743..2df5ace 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/MainActivity.java +++ b/app/src/main/java/com/majinnaibu/monstercards/MainActivity.java @@ -6,6 +6,7 @@ import android.os.Bundle; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.navigation.NavController; import androidx.navigation.NavDirections; @@ -54,9 +55,7 @@ public class MainActivity extends AppCompatActivity { .build(); NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); NavController navController = navHostFragment.getNavController(); - navController.addOnDestinationChangedListener((controller, destination, arguments) -> { - FlipperInitializer.sendNavigationEvent(controller, destination, arguments); - }); + navController.addOnDestinationChangedListener(FlipperInitializer::sendNavigationEvent); NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); NavigationUI.setupWithNavController(navView, navController); onNewIntent(getIntent()); @@ -68,14 +67,15 @@ public class MainActivity extends AppCompatActivity { String json = readMonsterJSONFromIntent(intent); if (!StringHelper.isNullOrEmpty(json)) { - NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); + NavHostFragment navHostFragment = Objects.requireNonNull((NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment)); NavController navController = navHostFragment.getNavController(); NavDirections action = MobileNavigationDirections.actionGlobalMonsterImportFragment(json); navController.navigate(action); } } - private String readMonsterJSONFromIntent(Intent intent) { + @Nullable + private String readMonsterJSONFromIntent(@NonNull Intent intent) { String action = intent.getAction(); Bundle extras = intent.getExtras(); String type = intent.getType(); @@ -86,7 +86,7 @@ public class MainActivity extends AppCompatActivity { } else if ("android.intent.action.VIEW".equals(action) && ("text/plain".equals(type) || "application/octet-stream".equals(type))) { uri = intent.getData(); } else { - Logger.logError(String.format("unexpected launch configuration action: %s, type: %s, uri: %s", action, type, uri)); + Logger.logError(String.format("unexpected launch configuration action: %s, type: %s", action, type)); } if (uri == null) { return null; @@ -98,6 +98,7 @@ public class MainActivity extends AppCompatActivity { return json; } + @Nullable private String readContentsOfUri(Uri uri) { StringBuilder builder = new StringBuilder(); try (InputStream inputStream = diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/DevContent.java b/app/src/main/java/com/majinnaibu/monstercards/data/DevContent.java index 5a3fc5f..0145afe 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/data/DevContent.java +++ b/app/src/main/java/com/majinnaibu/monstercards/data/DevContent.java @@ -1,5 +1,7 @@ package com.majinnaibu.monstercards.data; +import androidx.annotation.NonNull; + import com.majinnaibu.monstercards.data.enums.AbilityScore; import com.majinnaibu.monstercards.data.enums.AdvantageType; import com.majinnaibu.monstercards.data.enums.ArmorType; @@ -12,6 +14,7 @@ import com.majinnaibu.monstercards.models.Trait; @SuppressWarnings("unused") public final class DevContent { + @NonNull public static Monster createSampleMonster() { Monster monster = new Monster(); // Name diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java b/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java index db97c95..842fb2d 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java +++ b/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java @@ -47,7 +47,7 @@ public class MonsterRepository { .observeOn(AndroidSchedulers.mainThread()); } - public Flowable getMonster(UUID monsterId) { + public Flowable getMonster(@NonNull UUID monsterId) { return m_db.monsterDAO() .loadAllByIds(new String[]{monsterId.toString()}) .map( diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/converters/ArmorTypeConverter.java b/app/src/main/java/com/majinnaibu/monstercards/data/converters/ArmorTypeConverter.java index d3b63a3..d6d1d59 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/data/converters/ArmorTypeConverter.java +++ b/app/src/main/java/com/majinnaibu/monstercards/data/converters/ArmorTypeConverter.java @@ -1,5 +1,6 @@ package com.majinnaibu.monstercards.data.converters; +import androidx.annotation.NonNull; import androidx.room.TypeConverter; import com.majinnaibu.monstercards.data.enums.ArmorType; @@ -7,7 +8,7 @@ import com.majinnaibu.monstercards.data.enums.ArmorType; public class ArmorTypeConverter { @TypeConverter - public static String fromArmorType(ArmorType armorType) { + public static String fromArmorType(@NonNull ArmorType armorType) { return armorType.stringValue; } diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/converters/ChallengeRatingConverter.java b/app/src/main/java/com/majinnaibu/monstercards/data/converters/ChallengeRatingConverter.java index 47b375b..3d9712c 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/data/converters/ChallengeRatingConverter.java +++ b/app/src/main/java/com/majinnaibu/monstercards/data/converters/ChallengeRatingConverter.java @@ -1,5 +1,6 @@ package com.majinnaibu.monstercards.data.converters; +import androidx.annotation.NonNull; import androidx.room.TypeConverter; import com.majinnaibu.monstercards.data.enums.ChallengeRating; @@ -7,7 +8,7 @@ import com.majinnaibu.monstercards.data.enums.ChallengeRating; public class ChallengeRatingConverter { @TypeConverter - public static String fromChallengeRating(ChallengeRating challengeRating) { + public static String fromChallengeRating(@NonNull ChallengeRating challengeRating) { return challengeRating.stringValue; } diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/converters/UUIDConverter.java b/app/src/main/java/com/majinnaibu/monstercards/data/converters/UUIDConverter.java index 07d5375..d775179 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/data/converters/UUIDConverter.java +++ b/app/src/main/java/com/majinnaibu/monstercards/data/converters/UUIDConverter.java @@ -1,13 +1,15 @@ package com.majinnaibu.monstercards.data.converters; +import androidx.annotation.NonNull; import androidx.room.TypeConverter; import java.util.UUID; public class UUIDConverter { + @NonNull @TypeConverter - public static String fromUUID(UUID uuid) { + public static String fromUUID(@NonNull UUID uuid) { return uuid.toString(); } diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/enums/AbilityScore.java b/app/src/main/java/com/majinnaibu/monstercards/data/enums/AbilityScore.java index a155d8a..5a0b24e 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/data/enums/AbilityScore.java +++ b/app/src/main/java/com/majinnaibu/monstercards/data/enums/AbilityScore.java @@ -5,7 +5,7 @@ public enum AbilityScore { STRENGTH("strength", "Strength", "STR"), DEXTERITY("dexterity", "Dexterity", "DEX"), CONSTITUTION("constitution", "Constitution", "CON"), - INTELLIGENCE("intellligence", "Intelligence", "INT"), + INTELLIGENCE("intelligence", "Intelligence", "INT"), WISDOM("wisdom", "Wisdom", "WIS"), CHARISMA("charisma", "Charisma", "CHA"), ; diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/enums/ProficiencyType.java b/app/src/main/java/com/majinnaibu/monstercards/data/enums/ProficiencyType.java index 76754bc..9236ad0 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/data/enums/ProficiencyType.java +++ b/app/src/main/java/com/majinnaibu/monstercards/data/enums/ProficiencyType.java @@ -3,7 +3,7 @@ package com.majinnaibu.monstercards.data.enums; public enum ProficiencyType { NONE("none", "None", ""), PROFICIENT("proficient", "Proficient", "P"), - EXPERTISE("experties", "Expertise", "Ex"), + EXPERTISE("expertise", "Expertise", "Ex"), ; public final String displayName; diff --git a/app/src/main/java/com/majinnaibu/monstercards/helpers/ArrayHelper.java b/app/src/main/java/com/majinnaibu/monstercards/helpers/ArrayHelper.java index 961db8d..2a5d044 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/helpers/ArrayHelper.java +++ b/app/src/main/java/com/majinnaibu/monstercards/helpers/ArrayHelper.java @@ -1,9 +1,11 @@ package com.majinnaibu.monstercards.helpers; +import androidx.annotation.NonNull; + import java.util.Objects; public final class ArrayHelper { - public static int indexOf(Object[] array, Object target) { + public static int indexOf(@NonNull Object[] array, Object target) { for (int index = 0; index < array.length; index++) { if (Objects.equals(array[index], target)) { return index; diff --git a/app/src/main/java/com/majinnaibu/monstercards/helpers/CommonMarkHelper.java b/app/src/main/java/com/majinnaibu/monstercards/helpers/CommonMarkHelper.java index 8e8c910..bf1e931 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/helpers/CommonMarkHelper.java +++ b/app/src/main/java/com/majinnaibu/monstercards/helpers/CommonMarkHelper.java @@ -4,9 +4,6 @@ import org.commonmark.node.Document; import org.commonmark.node.Node; import org.commonmark.node.Paragraph; import org.commonmark.parser.Parser; -import org.commonmark.renderer.NodeRenderer; -import org.commonmark.renderer.html.HtmlNodeRendererContext; -import org.commonmark.renderer.html.HtmlNodeRendererFactory; import org.commonmark.renderer.html.HtmlRenderer; public final class CommonMarkHelper { @@ -27,12 +24,4 @@ public final class CommonMarkHelper { HtmlRenderer renderer = HtmlRenderer.builder().build(); return renderer.render(document); } - - private static final class MyNodeRendererFactory implements HtmlNodeRendererFactory { - - @Override - public NodeRenderer create(HtmlNodeRendererContext context) { - return null; - } - } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/helpers/MonsterImportHelper.java b/app/src/main/java/com/majinnaibu/monstercards/helpers/MonsterImportHelper.java index d2a62b1..de7e0e8 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/helpers/MonsterImportHelper.java +++ b/app/src/main/java/com/majinnaibu/monstercards/helpers/MonsterImportHelper.java @@ -1,5 +1,7 @@ package com.majinnaibu.monstercards.helpers; +import androidx.annotation.NonNull; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -15,17 +17,16 @@ import com.majinnaibu.monstercards.models.Monster; import com.majinnaibu.monstercards.models.Skill; import com.majinnaibu.monstercards.models.Trait; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Set; public class MonsterImportHelper { + @NonNull public static Monster fromJSON(String json) { - JsonParser parser = new JsonParser(); - JsonObject rootDict = parser.parse(json).getAsJsonObject(); + JsonObject rootDict = JsonParser.parseString(json).getAsJsonObject(); Monster monster = new Monster(); monster.name = Helpers.getString(rootDict, "name"); @@ -110,7 +111,7 @@ public class MonsterImportHelper { return getString(dict, name, ""); } - public static String getString(@NotNull JsonObject dict, String name, String defaultValue) { + public static String getString(@NonNull JsonObject dict, String name, String defaultValue) { if (dict.has(name)) { return dict.get(name).getAsString(); } @@ -122,13 +123,19 @@ public class MonsterImportHelper { return getInt(dict, name, 0); } - public static int getInt(@NotNull JsonObject dict, String name, int defaultValue) { + public static int getInt(@NonNull JsonObject dict, String name, int defaultValue) { if (dict.has(name)) { JsonElement element = dict.get(name); if (element.isJsonPrimitive()) { - JsonPrimitive rawValue = element.getAsJsonPrimitive();//dict.getAsJsonPrimitive(name); + JsonPrimitive rawValue = element.getAsJsonPrimitive(); if (rawValue.isNumber()) { return rawValue.getAsInt(); + } else { + try { + return rawValue.getAsInt(); + } catch (Exception ex) { + return defaultValue; + } } } } @@ -139,22 +146,29 @@ public class MonsterImportHelper { return getBool(dict, name, false); } - public static boolean getBool(@NotNull JsonObject dict, String name, boolean defaultValue) { + public static boolean getBool(@NonNull JsonObject dict, String name, boolean defaultValue) { if (dict.has(name)) { JsonElement element = dict.get(name); if (element.isJsonPrimitive()) { JsonPrimitive rawValue = element.getAsJsonPrimitive(); if (rawValue.isBoolean()) { return rawValue.getAsBoolean(); + } else { + try { + return rawValue.getAsBoolean(); + } catch (Exception ex) { + return defaultValue; + } } } } return defaultValue; } - @NotNull + @NonNull public static String formatDistance(String name, int distance) { - return String.format("%s %d ft.", name, distance); + // TODO: consider moving this to a string resource so it can be localized + return String.format(Locale.getDefault(), "%s %d ft.", name, distance); } public static void addSense(Monster monster, JsonObject root, String name) { @@ -164,8 +178,8 @@ public class MonsterImportHelper { } } - @NotNull - public static List getListOfTraits(@NotNull JsonObject dict, String name) { + @NonNull + public static List getListOfTraits(@NonNull JsonObject dict, String name) { ArrayList traits = new ArrayList<>(); if (dict.has(name)) { JsonElement arrayElement = dict.get(name); @@ -187,7 +201,7 @@ public class MonsterImportHelper { return traits; } - public static void addSavingThrows(Monster monster, JsonObject root) { + public static void addSavingThrows(Monster monster, @NonNull JsonObject root) { if (root.has("sthrows")) { JsonElement arrayElement = root.get("sthrows"); if (arrayElement.isJsonArray()) { @@ -217,7 +231,8 @@ public class MonsterImportHelper { } } - public static Set getSetOfSkills(JsonObject root) { + @NonNull + public static Set getSetOfSkills(@NonNull JsonObject root) { HashSet skills = new HashSet<>(); if (root.has("skills")) { JsonElement arrayElement = root.get("skills"); @@ -241,11 +256,13 @@ public class MonsterImportHelper { return skills; } + @NonNull public static Set getSetOfDamageTypes(JsonObject rootDict, String name) { return getSetOfDamageTypes(rootDict, name, null); } - public static Set getSetOfDamageTypes(JsonObject root, String name, String type) { + @NonNull + public static Set getSetOfDamageTypes(@NonNull JsonObject root, String name, String type) { HashSet damageTypes = new HashSet<>(); if (root.has(name)) { JsonElement arrayElement = root.get(name); @@ -268,7 +285,8 @@ public class MonsterImportHelper { return damageTypes; } - public static Set getSetOfLanguages(JsonObject root, String name) { + @NonNull + public static Set getSetOfLanguages(@NonNull JsonObject root, String name) { HashSet languages = new HashSet<>(); if (root.has(name)) { JsonElement arrayElement = root.get(name); diff --git a/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java b/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java index b407000..bdad3b2 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java +++ b/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java @@ -1,5 +1,8 @@ package com.majinnaibu.monstercards.helpers; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import java.util.Collection; @SuppressWarnings({"RedundantIfStatement"}) @@ -16,7 +19,8 @@ public final class StringHelper { return false; } - public static String join(String delimiter, Collection strings) { + @NonNull + public static String join(String delimiter, @NonNull Collection strings) { int length = strings.size(); if (length < 1) { return ""; @@ -36,7 +40,7 @@ public final class StringHelper { } } - public static String oxfordJoin(String delimiter, String lastDelimiter, String onlyDelimiter, Collection strings) { + public static String oxfordJoin(String delimiter, String lastDelimiter, String onlyDelimiter, @NonNull Collection strings) { int length = strings.size(); if (length < 1) { return ""; @@ -59,6 +63,7 @@ public final class StringHelper { } } + @Nullable public static Integer parseInt(String s) { try { return Integer.parseInt(s); @@ -67,7 +72,7 @@ public final class StringHelper { } } - public static boolean containsCaseInsensitive(String text, String search) { + public static boolean containsCaseInsensitive(@NonNull String text, @NonNull String search) { // TODO: find a locale independent way to do this return text.toLowerCase().contains(search.toLowerCase()); } diff --git a/app/src/main/java/com/majinnaibu/monstercards/models/Language.java b/app/src/main/java/com/majinnaibu/monstercards/models/Language.java index 60e765c..a670740 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/models/Language.java +++ b/app/src/main/java/com/majinnaibu/monstercards/models/Language.java @@ -1,5 +1,6 @@ package com.majinnaibu.monstercards.models; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.util.Comparator; @@ -43,7 +44,7 @@ public class Language implements Comparator, Comparable { } @Override - public int compare(Language o1, Language o2) { + public int compare(@NonNull Language o1, Language o2) { if (o1.mSpeaks && !o2.mSpeaks) { return -1; } @@ -54,7 +55,7 @@ public class Language implements Comparator, Comparable { } @Override - public boolean equals(@Nullable @org.jetbrains.annotations.Nullable Object obj) { + public boolean equals(@Nullable Object obj) { if (obj == null) { return false; } diff --git a/app/src/main/java/com/majinnaibu/monstercards/models/Monster.java b/app/src/main/java/com/majinnaibu/monstercards/models/Monster.java index 1575501..aa04826 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/models/Monster.java +++ b/app/src/main/java/com/majinnaibu/monstercards/models/Monster.java @@ -16,8 +16,6 @@ import com.majinnaibu.monstercards.data.enums.ProficiencyType; import com.majinnaibu.monstercards.helpers.StringHelper; import com.majinnaibu.monstercards.utils.Logger; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -306,7 +304,7 @@ public class Monster { return sb.toString(); } - public int getAbilityScore(@NotNull AbilityScore abilityScore) { + public int getAbilityScore(@NonNull AbilityScore abilityScore) { switch (abilityScore) { case STRENGTH: return strengthScore; @@ -325,7 +323,7 @@ public class Monster { } } - public int getAbilityModifier(@NotNull AbilityScore abilityScore) { + public int getAbilityModifier(@NonNull AbilityScore abilityScore) { switch (abilityScore) { case STRENGTH: return getStrengthModifier(); @@ -344,7 +342,7 @@ public class Monster { } } - public AdvantageType getSavingThrowAdvantageType(@NotNull AbilityScore abilityScore) { + public AdvantageType getSavingThrowAdvantageType(@NonNull AbilityScore abilityScore) { switch (abilityScore) { case STRENGTH: return strengthSavingThrowAdvantage; @@ -363,7 +361,7 @@ public class Monster { } } - public ProficiencyType getSavingThrowProficiencyType(@NotNull AbilityScore abilityScore) { + public ProficiencyType getSavingThrowProficiencyType(@NonNull AbilityScore abilityScore) { switch (abilityScore) { case STRENGTH: return strengthSavingThrowProficiency; @@ -609,7 +607,7 @@ public class Monster { } } - public int getProficiencyBonus(@NotNull ProficiencyType proficiencyType) { + public int getProficiencyBonus(@NonNull ProficiencyType proficiencyType) { switch (proficiencyType) { case PROFICIENT: return getProficiencyBonus(); @@ -753,7 +751,7 @@ public class Monster { return abilityDescriptions; } - public String getPlaceholderReplacedText(@NotNull String rawText) { + public String getPlaceholderReplacedText(@NonNull String rawText) { return rawText .replaceAll("\\[STR SAVE]", String.format("%+d", getSpellSaveDC(AbilityScore.STRENGTH))) .replaceAll("\\[STR ATK]", String.format("%+d", getAttackBonus(AbilityScore.STRENGTH))) @@ -818,7 +816,7 @@ public class Monster { } @Override - public boolean equals(@Nullable @org.jetbrains.annotations.Nullable Object obj) { + public boolean equals(@Nullable Object obj) { if (obj == null) { return false; } diff --git a/app/src/main/java/com/majinnaibu/monstercards/models/SavingThrow.java b/app/src/main/java/com/majinnaibu/monstercards/models/SavingThrow.java deleted file mode 100644 index 85a2798..0000000 --- a/app/src/main/java/com/majinnaibu/monstercards/models/SavingThrow.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.majinnaibu.monstercards.models; - -import java.util.Comparator; - -public class SavingThrow implements Comparator, Comparable { - - private String mName; - private int mOrder; - - public SavingThrow(String name, int order) { - mName = name; - mOrder = order; - } - - public String getName() { - return mName; - } - - public void setName(String value) { - mName = value; - } - - public int getOrder() { - return mOrder; - } - - public void setOrder(int value) { - mOrder = value; - } - - @Override - public int compareTo(SavingThrow o) { - return Integer.compare(this.getOrder(), o.getOrder()); - } - - @Override - public int compare(SavingThrow o1, SavingThrow o2) { - return o1.getOrder() - o2.getOrder(); - } -} diff --git a/app/src/main/java/com/majinnaibu/monstercards/models/Skill.java b/app/src/main/java/com/majinnaibu/monstercards/models/Skill.java index 9b15f08..9730cc5 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/models/Skill.java +++ b/app/src/main/java/com/majinnaibu/monstercards/models/Skill.java @@ -70,7 +70,7 @@ public class Skill implements Comparator, Comparable { } @Override - public boolean equals(@Nullable @org.jetbrains.annotations.Nullable Object obj) { + public boolean equals(@Nullable Object obj) { if (obj == null) { return false; } diff --git a/app/src/main/java/com/majinnaibu/monstercards/models/Trait.java b/app/src/main/java/com/majinnaibu/monstercards/models/Trait.java index 48d2516..f6a5703 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/models/Trait.java +++ b/app/src/main/java/com/majinnaibu/monstercards/models/Trait.java @@ -30,7 +30,7 @@ public class Trait implements Comparator, Comparable { } @Override - public boolean equals(@Nullable @org.jetbrains.annotations.Nullable Object obj) { + public boolean equals(@Nullable Object obj) { if (obj == null) { return false; } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsFragment.java index 1245bcb..a0fd733 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsFragment.java @@ -7,8 +7,6 @@ import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.majinnaibu.monstercards.R; @@ -23,12 +21,7 @@ public class CollectionsFragment extends MCFragment { collectionsViewModel = new ViewModelProvider(this).get(CollectionsViewModel.class); View root = inflater.inflate(R.layout.fragment_collections, container, false); final TextView textView = root.findViewById(R.id.text_collections); - collectionsViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); + collectionsViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); return root; } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsViewModel.java index d81c4c5..1ea5b1a 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsViewModel.java @@ -6,7 +6,7 @@ import androidx.lifecycle.ViewModel; public class CollectionsViewModel extends ViewModel { - private MutableLiveData mText; + private final MutableLiveData mText; public CollectionsViewModel() { mText = new MutableLiveData<>(); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/components/AbilityScorePicker.java b/app/src/main/java/com/majinnaibu/monstercards/ui/components/AbilityScorePicker.java index 63111ee..6d15709 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/components/AbilityScorePicker.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/components/AbilityScorePicker.java @@ -35,11 +35,12 @@ public class AbilityScorePicker extends LinearLayout { // TODO: use this as default but allow setting via attribute mLabel = "Ability Score"; - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Stepper, 0, 0); - String label = a.getString(R.styleable.Stepper_label); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AbilityScorePicker, 0, 0); + String label = a.getString(R.styleable.AbilityScorePicker_label); if (label != null) { mLabel = label; } + a.recycle(); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View root = inflater.inflate(R.layout.component_ability_score_picker, this, true); @@ -124,7 +125,7 @@ public class AbilityScorePicker extends LinearLayout { private final Spinner spinner; private final TextView label; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { spinner = root.findViewById(R.id.spinner); label = root.findViewById(R.id.label); } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/components/AdvantagePicker.java b/app/src/main/java/com/majinnaibu/monstercards/ui/components/AdvantagePicker.java index 3bb427f..7ac572f 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/components/AdvantagePicker.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/components/AdvantagePicker.java @@ -88,7 +88,7 @@ public class AdvantagePicker extends ConstraintLayout { final MaterialRadioButton advantage; final MaterialRadioButton disadvantage; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { group = root.findViewById(R.id.group); none = root.findViewById(R.id.hasNoAdvantage); advantage = root.findViewById(R.id.hasAdvantage); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/components/ProficiencyPicker.java b/app/src/main/java/com/majinnaibu/monstercards/ui/components/ProficiencyPicker.java index abba324..8b33849 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/components/ProficiencyPicker.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/components/ProficiencyPicker.java @@ -88,7 +88,7 @@ public class ProficiencyPicker extends ConstraintLayout { final MaterialRadioButton proficient; final MaterialRadioButton expertise; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { group = root.findViewById(R.id.group); none = root.findViewById(R.id.none); proficient = root.findViewById(R.id.proficient); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/components/Stepper.java b/app/src/main/java/com/majinnaibu/monstercards/ui/components/Stepper.java index fc78071..911a5b9 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/components/Stepper.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/components/Stepper.java @@ -17,6 +17,7 @@ import com.majinnaibu.monstercards.R; import java.util.Objects; +@SuppressWarnings("unused") public class Stepper extends ConstraintLayout { private final ViewHolder mHolder; private int mCurrentValue; @@ -138,7 +139,7 @@ public class Stepper extends ConstraintLayout { final Button increment; final Button decrement; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { text = root.findViewById(R.id.text); label = root.findViewById(R.id.label); increment = root.findViewById(R.id.increment); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/dashboard/DashboardFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/dashboard/DashboardFragment.java index f2a4ba3..92e61ce 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/dashboard/DashboardFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/dashboard/DashboardFragment.java @@ -20,12 +20,12 @@ import com.majinnaibu.monstercards.ui.shared.MCFragment; import com.majinnaibu.monstercards.utils.Logger; import java.util.List; +import java.util.Locale; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.schedulers.Schedulers; public class DashboardFragment extends MCFragment { - private static final String MODIFIER_FORMAT = "%+d"; private DashboardViewModel mViewModel; private ViewHolder mHolder; private DashboardRecyclerViewAdapter mAdapter; @@ -42,16 +42,14 @@ public class DashboardFragment extends MCFragment { .getMonsters() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(monsters -> { - mViewModel.setMonsters(monsters); - }); + .subscribe(monsters -> mViewModel.setMonsters(monsters)); return root; } private void setupRecyclerView(@NonNull RecyclerView recyclerView) { - int columnCount = Math.max(1, (int) Math.floor(getResources().getConfiguration().screenWidthDp / 396)); - Logger.logWTF(String.format("Setting column count to %d", columnCount)); + int columnCount = Math.max(1, getResources().getConfiguration().screenWidthDp / 396); + Logger.logWTF(String.format(Locale.US, "Setting column count to %d", columnCount)); Context context = requireContext(); GridLayoutManager layoutManager = new GridLayoutManager(context, columnCount); recyclerView.setLayoutManager(layoutManager); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/dashboard/DashboardRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/dashboard/DashboardRecyclerViewAdapter.java index 6052a66..d6e6149 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/dashboard/DashboardRecyclerViewAdapter.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/dashboard/DashboardRecyclerViewAdapter.java @@ -11,6 +11,7 @@ import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.RecyclerView; +import com.majinnaibu.monstercards.R; import com.majinnaibu.monstercards.data.enums.AbilityScore; import com.majinnaibu.monstercards.data.enums.AdvantageType; import com.majinnaibu.monstercards.data.enums.ChallengeRating; @@ -21,17 +22,17 @@ import com.majinnaibu.monstercards.models.Monster; import com.majinnaibu.monstercards.models.Trait; import com.majinnaibu.monstercards.utils.Logger; -import org.jetbrains.annotations.NotNull; +import java.util.Locale; public class DashboardRecyclerViewAdapter extends ListAdapter { private static final DiffUtil.ItemCallback DIFF_CALLBACK = new DiffUtil.ItemCallback() { @Override - public boolean areItemsTheSame(@NonNull @NotNull Monster oldItem, @NonNull @NotNull Monster newItem) { + public boolean areItemsTheSame(@NonNull Monster oldItem, @NonNull Monster newItem) { return oldItem.id.equals(newItem.id); } @Override - public boolean areContentsTheSame(@NonNull @NotNull Monster oldItem, @NonNull @NotNull Monster newItem) { + public boolean areContentsTheSame(@NonNull Monster oldItem, @NonNull Monster newItem) { return oldItem.equals(newItem); } }; @@ -43,14 +44,13 @@ public class DashboardRecyclerViewAdapter extends ListAdapter 0) { @@ -170,7 +170,7 @@ public class DashboardRecyclerViewAdapter extends ListAdapter mHolder.strength.setValue(value)); mHolder.strength.setOnValueChangeListener((newValue, oldValue) -> mViewModel.setStrength(newValue)); - mHolder.strength.setOnFormatValueCallback(value -> String.format(ABILITY_SCORE_FORMAT, value, getModifier(value))); + mHolder.strength.setOnFormatValueCallback(value -> String.format(Locale.getDefault(), ABILITY_SCORE_FORMAT, value, getModifier(value))); mViewModel.getDexterity().observe(getViewLifecycleOwner(), value -> mHolder.dexterity.setValue(value)); mHolder.dexterity.setOnValueChangeListener((newValue, oldValue) -> mViewModel.setDexterity(newValue)); - mHolder.dexterity.setOnFormatValueCallback(value -> String.format(ABILITY_SCORE_FORMAT, value, getModifier(value))); + mHolder.dexterity.setOnFormatValueCallback(value -> String.format(Locale.getDefault(), ABILITY_SCORE_FORMAT, value, getModifier(value))); mViewModel.getConstitution().observe(getViewLifecycleOwner(), value -> mHolder.constitution.setValue(value)); mHolder.constitution.setOnValueChangeListener((newValue, oldValue) -> mViewModel.setConstitution(newValue)); - mHolder.constitution.setOnFormatValueCallback(value -> String.format(ABILITY_SCORE_FORMAT, value, getModifier(value))); + mHolder.constitution.setOnFormatValueCallback(value -> String.format(Locale.getDefault(), ABILITY_SCORE_FORMAT, value, getModifier(value))); mViewModel.getIntelligence().observe(getViewLifecycleOwner(), value -> mHolder.intelligence.setValue(value)); mHolder.intelligence.setOnValueChangeListener((newValue, oldValue) -> mViewModel.setIntelligence(newValue)); - mHolder.intelligence.setOnFormatValueCallback(value -> String.format(ABILITY_SCORE_FORMAT, value, getModifier(value))); + mHolder.intelligence.setOnFormatValueCallback(value -> String.format(Locale.getDefault(), ABILITY_SCORE_FORMAT, value, getModifier(value))); mViewModel.getWisdom().observe(getViewLifecycleOwner(), value -> mHolder.wisdom.setValue(value)); mHolder.wisdom.setOnValueChangeListener((newValue, oldValue) -> mViewModel.setWisdom(newValue)); - mHolder.wisdom.setOnFormatValueCallback(value -> String.format(ABILITY_SCORE_FORMAT, value, getModifier(value))); + mHolder.wisdom.setOnFormatValueCallback(value -> String.format(Locale.getDefault(), ABILITY_SCORE_FORMAT, value, getModifier(value))); mViewModel.getCharisma().observe(getViewLifecycleOwner(), value -> mHolder.charisma.setValue(value)); mHolder.charisma.setOnValueChangeListener((newValue, oldValue) -> mViewModel.setCharisma(newValue)); - mHolder.charisma.setOnFormatValueCallback(value -> String.format(ABILITY_SCORE_FORMAT, value, getModifier(value))); + mHolder.charisma.setOnFormatValueCallback(value -> String.format(Locale.getDefault(), ABILITY_SCORE_FORMAT, value, getModifier(value))); return root; } @@ -67,7 +70,7 @@ public class EditAbilityScoresFragment extends MCFragment { final Stepper wisdom; final Stepper charisma; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { strength = root.findViewById(R.id.strength); dexterity = root.findViewById(R.id.dexterity); constitution = root.findViewById(R.id.constitution); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditArmorFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditArmorFragment.java index 6abfe4e..a50534e 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditArmorFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditArmorFragment.java @@ -30,7 +30,7 @@ public class EditArmorFragment extends MCFragment { private ViewHolder mHolder; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull 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); @@ -93,7 +93,7 @@ public class EditArmorFragment extends MCFragment { private final Stepper shieldBonus; private final EditText customArmor; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { armorType = root.findViewById(R.id.armorType); naturalArmorBonus = root.findViewById(R.id.naturalArmorBonus); hasShield = root.findViewById(R.id.hasShield); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditBasicInfoFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditBasicInfoFragment.java index b2aae02..3fba542 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditBasicInfoFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditBasicInfoFragment.java @@ -6,6 +6,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.EditText; +import androidx.annotation.NonNull; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.NavBackStackEntry; import androidx.navigation.NavController; @@ -28,7 +29,7 @@ public class EditBasicInfoFragment extends MCFragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull 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); @@ -73,7 +74,7 @@ public class EditBasicInfoFragment extends MCFragment { private final Stepper hitDice; private final SwitchMaterial hasCustomHitPoints; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { name = root.findViewById(R.id.name); size = root.findViewById(R.id.size); type = root.findViewById(R.id.type); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditChallengeRatingFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditChallengeRatingFragment.java index 23c1365..33196cd 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditChallengeRatingFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditChallengeRatingFragment.java @@ -28,7 +28,7 @@ public class EditChallengeRatingFragment extends MCFragment { private ViewHolder mHolder; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull 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); @@ -82,7 +82,7 @@ public class EditChallengeRatingFragment extends MCFragment { final EditText customChallengeRatingDescription; final EditText customProficiencyBonus; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { challengeRating = root.findViewById(R.id.challengeRating); customChallengeRatingDescription = root.findViewById(R.id.customChallengeRatingDescription); customProficiencyBonus = root.findViewById(R.id.customProficiencyBonus); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguageFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguageFragment.java index 35f258c..bc39d8d 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguageFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguageFragment.java @@ -44,7 +44,7 @@ public class EditLanguageFragment extends MCFragment { @Nullable @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.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); @@ -80,7 +80,7 @@ public class EditLanguageFragment extends MCFragment { EditText name; SwitchCompat canSpeak; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { name = root.findViewById(R.id.name); canSpeak = root.findViewById(R.id.canSpeak); } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguageViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguageViewModel.java index 4a8632e..1b38692 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguageViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguageViewModel.java @@ -1,5 +1,6 @@ package com.majinnaibu.monstercards.ui.editmonster; +import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import com.majinnaibu.monstercards.models.Language; @@ -18,7 +19,7 @@ public class EditLanguageViewModel extends ChangeTrackedViewModel { mLanguage = new ChangeTrackedLiveData<>(makeLanguage(), this::makeDirty); } - public void copyFromLanguage(Language language) { + public void copyFromLanguage(@NonNull Language language) { mName.resetValue(language.getName()); mCanSpeak.resetValue(language.getSpeaks()); makeClean(); @@ -58,9 +59,10 @@ public class EditLanguageViewModel extends ChangeTrackedViewModel { return getCanSpeakValue(false); } + @NonNull private Language makeLanguage() { Boolean boxedValue = mCanSpeak.getValue(); boolean canSpeak = boxedValue != null && boxedValue; return new Language(mName.getValue(), canSpeak); } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguagesFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguagesFragment.java index fbc802a..de9d70c 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguagesFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguagesFragment.java @@ -30,13 +30,13 @@ public class EditLanguagesFragment extends MCFragment { private EditMonsterViewModel mViewModel; private ViewHolder mHolder; - private void navigateToEditLanguage(Language language) { + private void navigateToEditLanguage(@NonNull Language language) { NavDirections action = EditLanguagesFragmentDirections.actionEditLanguagesFragmentToEditLanguageFragment(language.getName(), language.getSpeaks()); Navigation.findNavController(requireView()).navigate(action); } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull 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); @@ -93,7 +93,7 @@ public class EditLanguagesFragment extends MCFragment { RecyclerView list; FloatingActionButton addLanguage; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { this.list = root.findViewById(R.id.list); this.addLanguage = root.findViewById(R.id.add_language); } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguagesRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguagesRecyclerViewAdapter.java index 662dcd3..e9163c6 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguagesRecyclerViewAdapter.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditLanguagesRecyclerViewAdapter.java @@ -6,6 +6,7 @@ import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.majinnaibu.monstercards.databinding.FragmentEditLanguagesListHeaderBinding; @@ -13,9 +14,8 @@ import com.majinnaibu.monstercards.databinding.FragmentEditLanguagesListItemBind import com.majinnaibu.monstercards.models.Language; import com.majinnaibu.monstercards.ui.components.Stepper; -import org.jetbrains.annotations.NotNull; - import java.util.List; +import java.util.Locale; public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter { private final List mValues; @@ -29,18 +29,18 @@ public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter items, ItemCallback onClick, int telepathyRange, Stepper.OnValueChangeListener telepathyRangeChangedListener, String undderstandsBut, TextWatcher understandsButChangedListener) { + public EditLanguagesRecyclerViewAdapter(List items, ItemCallback onClick, int telepathyRange, Stepper.OnValueChangeListener telepathyRangeChangedListener, String understandsBut, TextWatcher understandsButChangedListener) { mValues = items; mOnClick = onClick; mTelepathyRange = telepathyRange; mOnTelepathyRangeChanged = telepathyRangeChangedListener; - mUnderstandsBut = undderstandsBut; + mUnderstandsBut = understandsBut; mOnUnderstandsButChanged = understandsButChangedListener; } - @NotNull + @NonNull @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) { + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { if (viewType == HEADER_VIEW_TYPE) { return new HeaderViewHolder(FragmentEditLanguagesListHeaderBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); } @@ -48,10 +48,10 @@ public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter String.format(DISTANCE_IN_FEET_FORMAT, value)); + headerViewHolder.telepathy.setOnFormatValueCallback(value -> String.format(Locale.getDefault(), DISTANCE_IN_FEET_FORMAT, value)); headerViewHolder.telepathy.setValue(mTelepathyRange); headerViewHolder.telepathy.setOnValueChangeListener(mOnTelepathyRangeChanged); headerViewHolder.understandsBut.setText(mUnderstandsBut); @@ -89,7 +89,7 @@ public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter(new ArrayList<>(), this::makeDirty); } - public void copyFromMonster(Monster monster) { + public void copyFromMonster(@NonNull Monster monster) { mMonsterId.resetValue(monster.id); mName.resetValue(monster.name); mSize.resetValue(monster.size); @@ -787,7 +787,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { return monster; } - public LiveData> getTraits(TraitType type) { + public LiveData> getTraits(@NonNull TraitType type) { switch (type) { case ABILITY: return mAbilities; @@ -807,7 +807,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { } } - public void removeTrait(TraitType type, int position) { + public void removeTrait(@NonNull TraitType type, int position) { switch (type) { case ABILITY: Helpers.removeFromList(mAbilities, position); @@ -833,7 +833,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { } } - public void replaceTrait(TraitType type, Trait oldTrait, Trait newTrait) { + public void replaceTrait(@NonNull TraitType type, Trait oldTrait, Trait newTrait) { switch (type) { case ABILITY: Helpers.replaceItemInList(mAbilities, oldTrait, newTrait); @@ -858,7 +858,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { } } - public Trait addNewTrait(TraitType type) { + public Trait addNewTrait(@NonNull TraitType type) { Trait newAction = new Trait("", ""); switch (type) { case ABILITY: @@ -879,7 +879,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { } } - public LiveData> getStrings(StringType type) { + public LiveData> getStrings(@NonNull StringType type) { switch (type) { case CONDITION_IMMUNITY: return mConditionImmunities; @@ -897,7 +897,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { } } - public void removeString(StringType type, int position) { + public void removeString(@NonNull StringType type, int position) { switch (type) { case CONDITION_IMMUNITY: Helpers.removeFromList(mConditionImmunities, position); @@ -920,7 +920,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { } } - public String addNewString(StringType type) { + public String addNewString(@NonNull StringType type) { String newString = ""; switch (type) { case CONDITION_IMMUNITY: @@ -939,7 +939,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { } } - public void replaceString(StringType type, String oldValue, String newValue) { + public void replaceString(@NonNull StringType type, String oldValue, String newValue) { switch (type) { case CONDITION_IMMUNITY: Helpers.replaceItemInList(mConditionImmunities, oldValue, newValue); @@ -961,7 +961,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { } } - public boolean moveTrait(TraitType type, int from, int to) { + public boolean moveTrait(@NonNull TraitType type, int from, int to) { switch (type) { case ABILITY: return Helpers.moveItemInList(mAbilities, from, to); @@ -989,7 +989,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { return addItemToList(listData, newItem, null); } - static T addItemToList(MutableLiveData> listData, T newItem, Comparator comparator) { + static T addItemToList(@NonNull MutableLiveData> listData, T newItem, Comparator comparator) { ArrayList newList = new ArrayList<>(listData.getValue()); newList.add(newItem); if (comparator != null) { @@ -999,14 +999,14 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { return newItem; } - static void removeFromList(MutableLiveData> listData, int position) { + static void removeFromList(@NonNull MutableLiveData> listData, int position) { List oldList = listData.getValue(); ArrayList newList = new ArrayList<>(oldList); newList.remove(position); listData.setValue(newList); } - static void replaceItemInList(MutableLiveData> listData, int position, T newItem, Comparator comparator) { + static void replaceItemInList(@NonNull MutableLiveData> listData, int position, T newItem, Comparator comparator) { List oldList = listData.getValue(); if (oldList == null) { oldList = new ArrayList<>(); @@ -1036,7 +1036,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { replaceItemInList(listData, position, newItem, null); } - static void replaceItemInList(MutableLiveData> listData, T oldItem, T newItem, Comparator comparator) { + static void replaceItemInList(@NonNull MutableLiveData> listData, T oldItem, T newItem, Comparator comparator) { List oldList = listData.getValue(); if (oldList == null) { oldList = new ArrayList<>(); @@ -1071,7 +1071,7 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { return value; } - static boolean moveItemInList(ChangeTrackedLiveData> listData, int from, int to) { + static boolean moveItemInList(@NonNull ChangeTrackedLiveData> listData, int from, int to) { List oldList = listData.getValue(); if (oldList == null) { oldList = new ArrayList<>(); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSavingThrowsFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSavingThrowsFragment.java index 7e66172..340e9f5 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSavingThrowsFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSavingThrowsFragment.java @@ -5,6 +5,7 @@ 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; @@ -20,7 +21,7 @@ public class EditSavingThrowsFragment extends MCFragment { private ViewHolder mViewHolder; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull 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); @@ -75,7 +76,7 @@ public class EditSavingThrowsFragment extends MCFragment { AdvantagePicker charismaAdvantage; ProficiencyPicker charismaProficiency; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { strengthAdvantage = root.findViewById(R.id.strengthAdvantage); strengthProficiency = root.findViewById(R.id.strengthProficiency); dexterityAdvantage = root.findViewById(R.id.dexterityAdvantage); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillFragment.java index 9c5ba50..0e5a93e 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillFragment.java @@ -89,7 +89,7 @@ public class EditSkillFragment extends MCFragment { ProficiencyPicker proficiency; EditText name; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { abilityScore = root.findViewById(R.id.abilityScore); advantage = root.findViewById(R.id.advantage); proficiency = root.findViewById(R.id.proficiency); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillViewModel.java index b2604dd..dd53c77 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillViewModel.java @@ -1,5 +1,6 @@ package com.majinnaibu.monstercards.ui.editmonster; +import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import com.majinnaibu.monstercards.data.enums.AbilityScore; @@ -25,7 +26,7 @@ public class EditSkillViewModel extends ChangeTrackedViewModel { mSkill = new ChangeTrackedLiveData<>(makeSkill(), this::makeDirty); } - public void copyFromSkill(Skill skill) { + public void copyFromSkill(@NonNull Skill skill) { mAbilityScore.resetValue(skill.abilityScore); mAdvantageType.resetValue(skill.advantageType); mProficiencyType.resetValue(skill.proficiencyType); @@ -73,6 +74,7 @@ public class EditSkillViewModel extends ChangeTrackedViewModel { mSkill.setValue(makeSkill()); } + @NonNull private Skill makeSkill() { return new Skill(mName.getValue(), mAbilityScore.getValue(), mAdvantageType.getValue(), mProficiencyType.getValue()); } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsFragment.java index af49bae..e4ccf85 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsFragment.java @@ -31,13 +31,13 @@ public class EditSkillsFragment extends MCFragment { private EditMonsterViewModel mViewModel; private ViewHolder mHolder; - private void navigateToEditSkill(Skill skill) { + private void navigateToEditSkill(@NonNull Skill skill) { NavDirections action = EditSkillsFragmentDirections.actionEditSkillsFragmentToEditSkillFragment(skill.name, skill.abilityScore, skill.proficiencyType, skill.advantageType); Navigation.findNavController(requireView()).navigate(action); } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull 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); @@ -84,7 +84,7 @@ public class EditSkillsFragment extends MCFragment { RecyclerView list; FloatingActionButton addSkill; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { this.list = root.findViewById(R.id.list); this.addSkill = root.findViewById(R.id.add_skill); } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsRecyclerViewAdapter.java index 2c9e87f..f91b8ef 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsRecyclerViewAdapter.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/editmonster/EditSkillsRecyclerViewAdapter.java @@ -4,13 +4,12 @@ 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; import com.majinnaibu.monstercards.models.Skill; -import org.jetbrains.annotations.NotNull; - import java.util.List; /** @@ -25,14 +24,14 @@ public class EditSkillsRecyclerViewAdapter extends RecyclerView.Adapter { @@ -55,15 +54,15 @@ public class EditSkillsRecyclerViewAdapter extends RecyclerView.Adapter { @@ -21,14 +20,14 @@ public class EditStringsRecyclerViewAdapter extends RecyclerView.Adapter { @@ -51,12 +50,12 @@ public class EditStringsRecyclerViewAdapter extends RecyclerView.Adapter { private static final DiffUtil.ItemCallback DIFF_CALLBACK = new DiffUtil.ItemCallback() { @Override - public boolean areItemsTheSame(@NonNull @NotNull Trait oldItem, @NonNull @NotNull Trait newItem) { + public boolean areItemsTheSame(@NonNull Trait oldItem, @NonNull Trait newItem) { return oldItem.equals(newItem); } @Override - public boolean areContentsTheSame(@NonNull @NotNull Trait oldItem, @NonNull @NotNull Trait newItem) { + public boolean areContentsTheSame(@NonNull Trait oldItem, @NonNull Trait newItem) { return oldItem.equals(newItem); } }; @@ -34,14 +32,14 @@ public class EditTraitsRecyclerViewAdapter extends ListAdapter { @@ -59,12 +57,12 @@ public class EditTraitsRecyclerViewAdapter extends ListAdapter> mItemsObservable; private final View.OnClickListener mOnClickListener = new View.OnClickListener() { @Override - public void onClick(View view) { + public void onClick(@NonNull View view) { Monster monster = (Monster) view.getTag(); if (mOnClick != null) { mOnClick.onItemCallback(monster); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterDetailFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterDetailFragment.java index 9968ce0..f910dfa 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterDetailFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterDetailFragment.java @@ -99,7 +99,7 @@ public class MonsterDetailFragment extends MCFragment { return root; } - private void setupLabeledTextView(TextView view, String text, int titleId) { + private void setupLabeledTextView(@NonNull TextView view, String text, int titleId) { String title = getString(titleId); String fullText = String.format("%s %s", title, text); view.setText(Html.fromHtml(fullText)); @@ -214,7 +214,7 @@ public class MonsterDetailFragment extends MCFragment { final TextView regionalEffects_label; final ImageView regionalEffects_divider; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { name = root.findViewById(R.id.name); meta = root.findViewById(R.id.meta); armorClass = root.findViewById(R.id.armorClass); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterDetailViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterDetailViewModel.java index a91a5f9..38e5d13 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterDetailViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterDetailViewModel.java @@ -1,5 +1,6 @@ package com.majinnaibu.monstercards.ui.monster; +import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; @@ -180,7 +181,7 @@ public class MonsterDetailViewModel extends ViewModel { return mMonsterId; } - public void setMonster(Monster monster) { + public void setMonster(@NonNull Monster monster) { mMonster = monster; mAbilities.setValue(mMonster.getAbilityDescriptions()); mActions.setValue(mMonster.getActionDescriptions()); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterImportFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterImportFragment.java index edb973c..a4912f7 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterImportFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterImportFragment.java @@ -88,7 +88,7 @@ public class MonsterImportFragment extends MCFragment { return root; } - private void setupLabeledTextView(TextView view, String text, int titleId) { + private void setupLabeledTextView(@NonNull TextView view, String text, int titleId) { String title = getString(titleId); String fullText = String.format("%s %s", title, text); view.setText(Html.fromHtml(fullText)); @@ -184,7 +184,7 @@ public class MonsterImportFragment extends MCFragment { return super.onOptionsItemSelected(item); } - private void navigateToEditMonster(UUID monsterId) { + private void navigateToEditMonster(@NonNull UUID monsterId) { NavController navController = Navigation.findNavController(requireView()); NavDirections action; action = MonsterImportFragmentDirections.actionMonsterImportFragmentToNavigationLibrary(); @@ -234,7 +234,7 @@ public class MonsterImportFragment extends MCFragment { final TextView regionalEffects_label; final ImageView regionalEffects_divider; - ViewHolder(View root) { + ViewHolder(@NonNull View root) { this.root = root; name = root.findViewById(R.id.name); meta = root.findViewById(R.id.meta); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterImportViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterImportViewModel.java index 31e1a80..ae13d15 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterImportViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterImportViewModel.java @@ -1,5 +1,6 @@ package com.majinnaibu.monstercards.ui.monster; +import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; @@ -183,7 +184,7 @@ public class MonsterImportViewModel extends ViewModel { return mMonster; } - public void setMonster(Monster monster) { + public void setMonster(@NonNull Monster monster) { mMonster = monster; mAbilities.setValue(mMonster.getAbilityDescriptions()); mActions.setValue(mMonster.getActionDescriptions()); diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchResultsRecyclerViewAdapter.java b/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchResultsRecyclerViewAdapter.java index 9e11992..93c546a 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchResultsRecyclerViewAdapter.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchResultsRecyclerViewAdapter.java @@ -13,8 +13,6 @@ import com.majinnaibu.monstercards.data.MonsterRepository; import com.majinnaibu.monstercards.models.Monster; import com.majinnaibu.monstercards.utils.Logger; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -52,7 +50,7 @@ public class SearchResultsRecyclerViewAdapter extends RecyclerView.Adapter Logger.logError("Error performing search", throwable)); } - @NotNull + @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) @@ -61,7 +59,7 @@ public class SearchResultsRecyclerViewAdapter extends RecyclerView.Adapter extends MutableLiveData { private final OnValueChangedCallback mOnValueChangedCallback; private final OnValueDirtiedCallback mOnValueDirtiedCallback; diff --git a/app/src/main/java/com/majinnaibu/monstercards/utils/Logger.java b/app/src/main/java/com/majinnaibu/monstercards/utils/Logger.java index 622f141..535b0d1 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/utils/Logger.java +++ b/app/src/main/java/com/majinnaibu/monstercards/utils/Logger.java @@ -2,6 +2,7 @@ package com.majinnaibu.monstercards.utils; import android.util.Log; +@SuppressWarnings("unused") public class Logger { public static final String LOG_TAG = "MonsterCards"; @@ -37,7 +38,7 @@ public class Logger { StackTraceElement stackTraceElement = throwable.getStackTrace()[0]; String location = stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber(); - String message = String.format("Unexpected error occured at %s.", location); + String message = String.format("Unexpected error occurred at %s.", location); Log.wtf(LOG_TAG, message, throwable); } @@ -55,7 +56,7 @@ public class Logger { StackTraceElement stackTraceElement = throwable.getStackTrace()[0]; String location = stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber(); - String message = String.format("Unexpected error occured at %s.", location); + String message = String.format("Unexpected error occurred at %s.", location); Log.e(LOG_TAG, message, throwable); } @@ -73,7 +74,7 @@ public class Logger { StackTraceElement stackTraceElement = throwable.getStackTrace()[0]; String location = stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber(); - String message = String.format("Unexpected error occured at %s.", location); + String message = String.format("Unexpected error occurred at %s.", location); Log.w(LOG_TAG, message, throwable); } @@ -91,7 +92,7 @@ public class Logger { StackTraceElement stackTraceElement = throwable.getStackTrace()[0]; String location = stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber(); - String message = String.format("Unexpected error occured at %s.", location); + String message = String.format("Unexpected error occurred at %s.", location); Log.i(LOG_TAG, message, throwable); } @@ -109,7 +110,7 @@ public class Logger { StackTraceElement stackTraceElement = throwable.getStackTrace()[0]; String location = stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber(); - String message = String.format("Unexpected error occured at %s.", location); + String message = String.format("Unexpected error occurred at %s.", location); Log.d(LOG_TAG, message, throwable); } @@ -127,7 +128,7 @@ public class Logger { StackTraceElement stackTraceElement = throwable.getStackTrace()[0]; String location = stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber(); - String message = String.format("Unexpected error occured at %s.", location); + String message = String.format("Unexpected error occurred at %s.", location); Log.v(LOG_TAG, message, throwable); } diff --git a/app/src/main/java/com/majinnaibu/monstercards/utils/TextChangedListener.java b/app/src/main/java/com/majinnaibu/monstercards/utils/TextChangedListener.java index 5f3cbbd..8034dd3 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/utils/TextChangedListener.java +++ b/app/src/main/java/com/majinnaibu/monstercards/utils/TextChangedListener.java @@ -3,6 +3,7 @@ package com.majinnaibu.monstercards.utils; import android.text.Editable; import android.text.TextWatcher; +@SuppressWarnings("unused") public class TextChangedListener implements TextWatcher { private final BeforeTextChangedCallback mBeforeTextChangedCallback; diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 32679d2..3cb13c9 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,9 +1,14 @@ + + - + - \ No newline at end of file + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2922318..a03db83 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -34,6 +34,7 @@ Can Hover Can Speak Challenge Rating + CR %s CR Charisma Climb Speed