Refactors monster detail to use a view holder and partially corrects Regional Actions to Regional Effects.
This commit is contained in:
		| @@ -34,6 +34,7 @@ import java.util.UUID; | |||||||
| import io.reactivex.rxjava3.observers.DisposableSingleObserver; | import io.reactivex.rxjava3.observers.DisposableSingleObserver; | ||||||
|  |  | ||||||
| public class MonsterDetailFragment extends MCFragment { | public class MonsterDetailFragment extends MCFragment { | ||||||
|  |     private ViewHolder mHolder; | ||||||
|  |  | ||||||
|     private MonsterDetailViewModel monsterDetailViewModel; |     private MonsterDetailViewModel monsterDetailViewModel; | ||||||
|  |  | ||||||
| @@ -48,6 +49,8 @@ public class MonsterDetailFragment extends MCFragment { | |||||||
|         monsterDetailViewModel = new ViewModelProvider(this).get(MonsterDetailViewModel.class); |         monsterDetailViewModel = new ViewModelProvider(this).get(MonsterDetailViewModel.class); | ||||||
|         View root = inflater.inflate(R.layout.fragment_monster, container, false); |         View root = inflater.inflate(R.layout.fragment_monster, container, false); | ||||||
|  |  | ||||||
|  |         mHolder = new ViewHolder(root); | ||||||
|  |  | ||||||
|         repository.getMonster(monsterId).toObservable() |         repository.getMonster(monsterId).toObservable() | ||||||
|                 .firstOrError() |                 .firstOrError() | ||||||
|                 .subscribe(new DisposableSingleObserver<Monster>() { |                 .subscribe(new DisposableSingleObserver<Monster>() { | ||||||
| @@ -64,123 +67,82 @@ public class MonsterDetailFragment extends MCFragment { | |||||||
|                     } |                     } | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|         final TextView monsterName = root.findViewById(R.id.name); |         monsterDetailViewModel.getName().observe(getViewLifecycleOwner(), mHolder.name::setText); | ||||||
|         monsterDetailViewModel.getName().observe(getViewLifecycleOwner(), monsterName::setText); |         monsterDetailViewModel.getMeta().observe(getViewLifecycleOwner(), mHolder.meta::setText); | ||||||
|  |         monsterDetailViewModel.getArmorClass().observe(getViewLifecycleOwner(), armorText -> mHolder.armorClass.setText(Html.fromHtml("<b>Armor Class</b> " + armorText))); | ||||||
|         final TextView monsterMeta = root.findViewById(R.id.meta); |         monsterDetailViewModel.getHitPoints().observe(getViewLifecycleOwner(), hitPoints -> mHolder.hitPoints.setText(Html.fromHtml("<b>Hit Points</b> " + hitPoints))); | ||||||
|         monsterDetailViewModel.getMeta().observe(getViewLifecycleOwner(), monsterMeta::setText); |         monsterDetailViewModel.getSpeed().observe(getViewLifecycleOwner(), speed -> mHolder.speed.setText(Html.fromHtml("<b>Speed</b> " + speed))); | ||||||
|  |         monsterDetailViewModel.getStrength().observe(getViewLifecycleOwner(), mHolder.strength::setText); | ||||||
|         final TextView monsterArmorClass = root.findViewById(R.id.armor_class); |         monsterDetailViewModel.getDexterity().observe(getViewLifecycleOwner(), mHolder.dexterity::setText); | ||||||
|         monsterDetailViewModel.getArmorClass().observe(getViewLifecycleOwner(), armorText -> monsterArmorClass.setText(Html.fromHtml("<b>Armor Class</b> " + armorText))); |         monsterDetailViewModel.getConstitution().observe(getViewLifecycleOwner(), mHolder.constitution::setText); | ||||||
|  |         monsterDetailViewModel.getIntelligence().observe(getViewLifecycleOwner(), mHolder.intelligence::setText); | ||||||
|         final TextView monsterHitPoints = root.findViewById(R.id.hit_points); |         monsterDetailViewModel.getWisdom().observe(getViewLifecycleOwner(), mHolder.wisdom::setText); | ||||||
|         monsterDetailViewModel.getHitPoints().observe(getViewLifecycleOwner(), hitPoints -> monsterHitPoints.setText(Html.fromHtml("<b>Hit Points</b> " + hitPoints))); |         monsterDetailViewModel.getCharisma().observe(getViewLifecycleOwner(), mHolder.charisma::setText); | ||||||
|  |  | ||||||
|         final TextView monsterSpeed = root.findViewById(R.id.speed); |  | ||||||
|         monsterDetailViewModel.getSpeed().observe(getViewLifecycleOwner(), speed -> monsterSpeed.setText(Html.fromHtml("<b>Speed</b> " + speed))); |  | ||||||
|  |  | ||||||
|         final TextView monsterStrength = root.findViewById(R.id.strength); |  | ||||||
|         monsterDetailViewModel.getStrength().observe(getViewLifecycleOwner(), monsterStrength::setText); |  | ||||||
|  |  | ||||||
|         final TextView monsterDexterity = root.findViewById(R.id.dexterity); |  | ||||||
|         monsterDetailViewModel.getDexterity().observe(getViewLifecycleOwner(), monsterDexterity::setText); |  | ||||||
|  |  | ||||||
|         final TextView monsterConstitution = root.findViewById(R.id.constitution); |  | ||||||
|         monsterDetailViewModel.getConstitution().observe(getViewLifecycleOwner(), monsterConstitution::setText); |  | ||||||
|  |  | ||||||
|         final TextView monsterIntelligence = root.findViewById(R.id.intelligence); |  | ||||||
|         monsterDetailViewModel.getIntelligence().observe(getViewLifecycleOwner(), monsterIntelligence::setText); |  | ||||||
|  |  | ||||||
|         final TextView monsterWisdom = root.findViewById(R.id.wisdom); |  | ||||||
|         monsterDetailViewModel.getWisdom().observe(getViewLifecycleOwner(), monsterWisdom::setText); |  | ||||||
|  |  | ||||||
|         final TextView monsterCharisma = root.findViewById(R.id.charisma); |  | ||||||
|         monsterDetailViewModel.getCharisma().observe(getViewLifecycleOwner(), monsterCharisma::setText); |  | ||||||
|  |  | ||||||
|         final TextView monsterSavingThrows = root.findViewById(R.id.saving_throws); |  | ||||||
|         monsterDetailViewModel.getSavingThrows().observe(getViewLifecycleOwner(), savingThrows -> { |         monsterDetailViewModel.getSavingThrows().observe(getViewLifecycleOwner(), savingThrows -> { | ||||||
|             if (StringHelper.isNullOrEmpty(savingThrows)) { |             if (StringHelper.isNullOrEmpty(savingThrows)) { | ||||||
|                 monsterSavingThrows.setVisibility(View.GONE); |                 mHolder.savingThrows.setVisibility(View.GONE); | ||||||
|             } else { |             } else { | ||||||
|                 monsterSavingThrows.setVisibility(View.VISIBLE); |                 mHolder.savingThrows.setVisibility(View.VISIBLE); | ||||||
|             } |             } | ||||||
|             monsterSavingThrows.setText(Html.fromHtml("<b>Saving Throws</b> " + savingThrows)); |             mHolder.savingThrows.setText(Html.fromHtml("<b>Saving Throws</b> " + savingThrows)); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         final TextView monsterSkills = root.findViewById(R.id.skills); |  | ||||||
|         monsterDetailViewModel.getSkills().observe(getViewLifecycleOwner(), skills -> { |         monsterDetailViewModel.getSkills().observe(getViewLifecycleOwner(), skills -> { | ||||||
|             if (StringHelper.isNullOrEmpty(skills)) { |             if (StringHelper.isNullOrEmpty(skills)) { | ||||||
|                 monsterSkills.setVisibility(View.GONE); |                 mHolder.skills.setVisibility(View.GONE); | ||||||
|             } else { |             } else { | ||||||
|                 monsterSkills.setVisibility(View.VISIBLE); |                 mHolder.skills.setVisibility(View.VISIBLE); | ||||||
|             } |             } | ||||||
|             monsterSkills.setText(Html.fromHtml("<b>Skills</b> " + skills)); |             mHolder.skills.setText(Html.fromHtml("<b>Skills</b> " + skills)); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         final TextView monsterDamageVulnerabilities = root.findViewById(R.id.damage_vulnerabilities); |  | ||||||
|         monsterDetailViewModel.getDamageVulnerabilities().observe(getViewLifecycleOwner(), damageType -> { |         monsterDetailViewModel.getDamageVulnerabilities().observe(getViewLifecycleOwner(), damageType -> { | ||||||
|             if (StringHelper.isNullOrEmpty(damageType)) { |             if (StringHelper.isNullOrEmpty(damageType)) { | ||||||
|                 monsterDamageVulnerabilities.setVisibility(View.GONE); |                 mHolder.damageVulnerabilities.setVisibility(View.GONE); | ||||||
|             } else { |             } else { | ||||||
|                 monsterDamageVulnerabilities.setVisibility(View.VISIBLE); |                 mHolder.damageVulnerabilities.setVisibility(View.VISIBLE); | ||||||
|             } |             } | ||||||
|             monsterDamageVulnerabilities.setText(Html.fromHtml("<b>Damage Vulnerabilities</b> " + damageType)); |             mHolder.damageVulnerabilities.setText(Html.fromHtml("<b>Damage Vulnerabilities</b> " + damageType)); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         final TextView monsterDamageResistances = root.findViewById(R.id.damage_resistances); |  | ||||||
|         monsterDetailViewModel.getDamageResistances().observe(getViewLifecycleOwner(), damageType -> { |         monsterDetailViewModel.getDamageResistances().observe(getViewLifecycleOwner(), damageType -> { | ||||||
|             if (StringHelper.isNullOrEmpty(damageType)) { |             if (StringHelper.isNullOrEmpty(damageType)) { | ||||||
|                 monsterDamageResistances.setVisibility(View.GONE); |                 mHolder.damageResistances.setVisibility(View.GONE); | ||||||
|             } else { |             } else { | ||||||
|                 monsterDamageResistances.setVisibility(View.VISIBLE); |                 mHolder.damageResistances.setVisibility(View.VISIBLE); | ||||||
|             } |             } | ||||||
|             monsterDamageResistances.setText(Html.fromHtml("<b>Damage Resistances</b> " + damageType)); |             mHolder.damageResistances.setText(Html.fromHtml("<b>Damage Resistances</b> " + damageType)); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         final TextView monsterDamageImmunities = root.findViewById(R.id.damage_immunities); |  | ||||||
|         monsterDetailViewModel.getDamageImmunities().observe(getViewLifecycleOwner(), damageType -> { |         monsterDetailViewModel.getDamageImmunities().observe(getViewLifecycleOwner(), damageType -> { | ||||||
|             if (StringHelper.isNullOrEmpty(damageType)) { |             if (StringHelper.isNullOrEmpty(damageType)) { | ||||||
|                 monsterDamageImmunities.setVisibility(View.GONE); |                 mHolder.damageImmunities.setVisibility(View.GONE); | ||||||
|             } else { |             } else { | ||||||
|                 monsterDamageImmunities.setVisibility(View.VISIBLE); |                 mHolder.damageImmunities.setVisibility(View.VISIBLE); | ||||||
|             } |             } | ||||||
|             monsterDamageImmunities.setText(Html.fromHtml("<b>Damage Immunities</b> " + damageType)); |             mHolder.damageImmunities.setText(Html.fromHtml("<b>Damage Immunities</b> " + damageType)); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         final TextView monsterConditionImmunities = root.findViewById(R.id.condition_immunities); |  | ||||||
|         monsterDetailViewModel.getConditionImmunities().observe(getViewLifecycleOwner(), conditionImmunities -> { |         monsterDetailViewModel.getConditionImmunities().observe(getViewLifecycleOwner(), conditionImmunities -> { | ||||||
|             if (StringHelper.isNullOrEmpty(conditionImmunities)) { |             if (StringHelper.isNullOrEmpty(conditionImmunities)) { | ||||||
|                 monsterConditionImmunities.setVisibility(View.GONE); |                 mHolder.conditionImmunities.setVisibility(View.GONE); | ||||||
|             } else { |             } else { | ||||||
|                 monsterConditionImmunities.setVisibility(View.VISIBLE); |                 mHolder.conditionImmunities.setVisibility(View.VISIBLE); | ||||||
|             } |             } | ||||||
|             monsterConditionImmunities.setText(Html.fromHtml("<b>Condition Immunities</b> " + conditionImmunities)); |             mHolder.conditionImmunities.setText(Html.fromHtml("<b>Condition Immunities</b> " + conditionImmunities)); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         final TextView monsterSenses = root.findViewById(R.id.senses); |  | ||||||
|         monsterDetailViewModel.getSenses().observe(getViewLifecycleOwner(), senses -> { |         monsterDetailViewModel.getSenses().observe(getViewLifecycleOwner(), senses -> { | ||||||
|             if (StringHelper.isNullOrEmpty(senses)) { |             if (StringHelper.isNullOrEmpty(senses)) { | ||||||
|                 monsterSenses.setVisibility(View.GONE); |                 mHolder.senses.setVisibility(View.GONE); | ||||||
|             } else { |             } else { | ||||||
|                 monsterSenses.setVisibility(View.VISIBLE); |                 mHolder.senses.setVisibility(View.VISIBLE); | ||||||
|             } |             } | ||||||
|             monsterSenses.setText(Html.fromHtml("<b>Senses</b> " + senses)); |             mHolder.senses.setText(Html.fromHtml("<b>Senses</b> " + senses)); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         final TextView monsterLanguages = root.findViewById(R.id.languages); |  | ||||||
|         monsterDetailViewModel.getLanguages().observe(getViewLifecycleOwner(), languages -> { |         monsterDetailViewModel.getLanguages().observe(getViewLifecycleOwner(), languages -> { | ||||||
|             if (StringHelper.isNullOrEmpty(languages)) { |             if (StringHelper.isNullOrEmpty(languages)) { | ||||||
|                 monsterLanguages.setVisibility(View.GONE); |                 mHolder.languages.setVisibility(View.GONE); | ||||||
|             } else { |             } else { | ||||||
|                 monsterLanguages.setVisibility(View.VISIBLE); |                 mHolder.languages.setVisibility(View.VISIBLE); | ||||||
|             } |             } | ||||||
|             monsterLanguages.setText(Html.fromHtml("<b>Languages</b> " + languages)); |             mHolder.languages.setText(Html.fromHtml("<b>Languages</b> " + languages)); | ||||||
|         }); |         }); | ||||||
|  |         monsterDetailViewModel.getChallenge().observe(getViewLifecycleOwner(), challengeRating -> mHolder.challenge.setText(Html.fromHtml("<b>Challenge</b> " + challengeRating))); | ||||||
|         final TextView monsterChallenge = root.findViewById(R.id.challenge); |  | ||||||
|         monsterDetailViewModel.getChallenge().observe(getViewLifecycleOwner(), challengeRating -> monsterChallenge.setText(Html.fromHtml("<b>Challenge</b> " + challengeRating))); |  | ||||||
|  |  | ||||||
|         final LinearLayout monsterAbilities = root.findViewById(R.id.abilities); |  | ||||||
|         monsterDetailViewModel.getAbilities().observe(getViewLifecycleOwner(), abilities -> { |         monsterDetailViewModel.getAbilities().observe(getViewLifecycleOwner(), abilities -> { | ||||||
|             Context context = getContext(); |             Context context = getContext(); | ||||||
|             DisplayMetrics displayMetrics = null; |             DisplayMetrics displayMetrics = null; | ||||||
| @@ -190,7 +152,7 @@ public class MonsterDetailFragment extends MCFragment { | |||||||
|                     displayMetrics = resources.getDisplayMetrics(); |                     displayMetrics = resources.getDisplayMetrics(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             monsterAbilities.removeAllViews(); |             mHolder.abilities.removeAllViews(); | ||||||
|             if (abilities != null) { |             if (abilities != null) { | ||||||
|                 for (String ability : abilities) { |                 for (String ability : abilities) { | ||||||
|                     TextView tvAbility = new TextView(context); |                     TextView tvAbility = new TextView(context); | ||||||
| @@ -201,12 +163,10 @@ public class MonsterDetailFragment extends MCFragment { | |||||||
|                     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); |                     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); | ||||||
|                     layoutParams.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, displayMetrics); |                     layoutParams.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, displayMetrics); | ||||||
|                     tvAbility.setLayoutParams(layoutParams); |                     tvAbility.setLayoutParams(layoutParams); | ||||||
|                     monsterAbilities.addView(tvAbility); |                     mHolder.abilities.addView(tvAbility); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         final LinearLayout monsterActions = root.findViewById(R.id.actions); |  | ||||||
|         monsterDetailViewModel.getActions().observe(getViewLifecycleOwner(), actions -> { |         monsterDetailViewModel.getActions().observe(getViewLifecycleOwner(), actions -> { | ||||||
|             Context context = getContext(); |             Context context = getContext(); | ||||||
|             DisplayMetrics displayMetrics = null; |             DisplayMetrics displayMetrics = null; | ||||||
| @@ -216,7 +176,7 @@ public class MonsterDetailFragment extends MCFragment { | |||||||
|                     displayMetrics = resources.getDisplayMetrics(); |                     displayMetrics = resources.getDisplayMetrics(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             monsterActions.removeAllViews(); |             mHolder.actions.removeAllViews(); | ||||||
|             if (actions != null) { |             if (actions != null) { | ||||||
|                 for (String action : actions) { |                 for (String action : actions) { | ||||||
|                     TextView tvAction = new TextView(getContext()); |                     TextView tvAction = new TextView(getContext()); | ||||||
| @@ -224,7 +184,7 @@ public class MonsterDetailFragment extends MCFragment { | |||||||
|                     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); |                     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); | ||||||
|                     layoutParams.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, displayMetrics); |                     layoutParams.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, displayMetrics); | ||||||
|                     tvAction.setLayoutParams(layoutParams); |                     tvAction.setLayoutParams(layoutParams); | ||||||
|                     monsterActions.addView(tvAction); |                     mHolder.actions.addView(tvAction); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
| @@ -254,4 +214,62 @@ public class MonsterDetailFragment extends MCFragment { | |||||||
|         } |         } | ||||||
|         return super.onOptionsItemSelected(item); |         return super.onOptionsItemSelected(item); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private static class ViewHolder { | ||||||
|  |         final TextView name; | ||||||
|  |         final TextView meta; | ||||||
|  |         final TextView armorClass; | ||||||
|  |         final TextView hitPoints; | ||||||
|  |         final TextView speed; | ||||||
|  |         final TextView strength; | ||||||
|  |         final TextView dexterity; | ||||||
|  |         final TextView constitution; | ||||||
|  |         final TextView intelligence; | ||||||
|  |         final TextView wisdom; | ||||||
|  |         final TextView charisma; | ||||||
|  |         final TextView savingThrows; | ||||||
|  |         final TextView skills; | ||||||
|  |         final TextView damageVulnerabilities; | ||||||
|  |         final TextView damageResistances; | ||||||
|  |         final TextView damageImmunities; | ||||||
|  |         final TextView conditionImmunities; | ||||||
|  |         final TextView senses; | ||||||
|  |         final TextView languages; | ||||||
|  |         final TextView challenge; | ||||||
|  |         final LinearLayout abilities; | ||||||
|  |         final LinearLayout actions; | ||||||
|  |         final LinearLayout reactions; | ||||||
|  |         final LinearLayout legendaryActions; | ||||||
|  |         final LinearLayout lairActions; | ||||||
|  |         final LinearLayout regionalEffects; | ||||||
|  |  | ||||||
|  |         ViewHolder(View root) { | ||||||
|  |             name = root.findViewById(R.id.name); | ||||||
|  |             meta = root.findViewById(R.id.meta); | ||||||
|  |             armorClass = root.findViewById(R.id.armorClass); | ||||||
|  |             hitPoints = root.findViewById(R.id.hitPoints); | ||||||
|  |             speed = root.findViewById(R.id.speed); | ||||||
|  |             strength = root.findViewById(R.id.strength); | ||||||
|  |             dexterity = root.findViewById(R.id.dexterity); | ||||||
|  |             constitution = root.findViewById(R.id.constitution); | ||||||
|  |             intelligence = root.findViewById(R.id.intelligence); | ||||||
|  |             wisdom = root.findViewById(R.id.wisdom); | ||||||
|  |             charisma = root.findViewById(R.id.charisma); | ||||||
|  |             savingThrows = root.findViewById(R.id.savingThrows); | ||||||
|  |             skills = root.findViewById(R.id.skills); | ||||||
|  |             damageVulnerabilities = root.findViewById(R.id.damageVulnerabilities); | ||||||
|  |             damageResistances = root.findViewById(R.id.damageResistances); | ||||||
|  |             damageImmunities = root.findViewById(R.id.damageImmunities); | ||||||
|  |             conditionImmunities = root.findViewById(R.id.conditionImmunities); | ||||||
|  |             senses = root.findViewById(R.id.senses); | ||||||
|  |             languages = root.findViewById(R.id.languages); | ||||||
|  |             challenge = root.findViewById(R.id.challenge); | ||||||
|  |             abilities = root.findViewById(R.id.abilities); | ||||||
|  |             actions = root.findViewById(R.id.actions); | ||||||
|  |             reactions = root.findViewById(R.id.reactions); | ||||||
|  |             legendaryActions = root.findViewById(R.id.legendaryActions); | ||||||
|  |             lairActions = root.findViewById(R.id.lairActions); | ||||||
|  |             regionalEffects = root.findViewById(R.id.regionalEffects); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -181,7 +181,7 @@ | |||||||
|             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:layout_margin="@dimen/text_margin" | ||||||
|             android:text="@string/label_regional_actions" |             android:text="@string/label_regional_effects" | ||||||
|             android:textSize="@dimen/text_h4_size" |             android:textSize="@dimen/text_h4_size" | ||||||
|             app:drawableEndCompat="@drawable/ic_chevron_right_24" /> |             app:drawableEndCompat="@drawable/ic_chevron_right_24" /> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -56,7 +56,7 @@ | |||||||
|             app:layout_constraintTop_toBottomOf="@+id/meta" /> |             app:layout_constraintTop_toBottomOf="@+id/meta" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/armor_class" |             android:id="@+id/armorClass" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -69,7 +69,7 @@ | |||||||
|             tools:text="Armor Class 15" /> |             tools:text="Armor Class 15" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/hit_points" |             android:id="@+id/hitPoints" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -78,7 +78,7 @@ | |||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/armor_class" |             app:layout_constraintTop_toBottomOf="@+id/armorClass" | ||||||
|             tools:text="Hit Points 1 (1d4 - 1)" /> |             tools:text="Hit Points 1 (1d4 - 1)" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
| @@ -91,7 +91,7 @@ | |||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/hit_points" |             app:layout_constraintTop_toBottomOf="@+id/hitPoints" | ||||||
|             tools:text="10 ft., fly 30 ft." /> |             tools:text="10 ft., fly 30 ft." /> | ||||||
|  |  | ||||||
|         <ImageView |         <ImageView | ||||||
| @@ -111,7 +111,7 @@ | |||||||
|  |  | ||||||
|         <!-- Strength --> |         <!-- Strength --> | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/label_str" |             android:id="@+id/strength_label" | ||||||
|             android:layout_width="wrap_content" |             android:layout_width="wrap_content" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -121,7 +121,7 @@ | |||||||
|             android:text="@string/strength_abbreviation" |             android:text="@string/strength_abbreviation" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             android:textStyle="bold" |             android:textStyle="bold" | ||||||
|             app:layout_constraintEnd_toStartOf="@+id/label_dex" |             app:layout_constraintEnd_toStartOf="@+id/dexterity_label" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/divider2" /> |             app:layout_constraintTop_toBottomOf="@+id/divider2" /> | ||||||
|  |  | ||||||
| @@ -134,14 +134,14 @@ | |||||||
|             android:layout_marginEnd="8dp" |             android:layout_marginEnd="8dp" | ||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             app:layout_constraintEnd_toEndOf="@+id/label_str" |             app:layout_constraintEnd_toEndOf="@+id/strength_label" | ||||||
|             app:layout_constraintStart_toStartOf="@+id/label_str" |             app:layout_constraintStart_toStartOf="@+id/strength_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/label_str" |             app:layout_constraintTop_toBottomOf="@+id/strength_label" | ||||||
|             tools:text="2 (-4)" /> |             tools:text="2 (-4)" /> | ||||||
|  |  | ||||||
|         <!-- Dexterity --> |         <!-- Dexterity --> | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/label_dex" |             android:id="@+id/dexterity_label" | ||||||
|             android:layout_width="wrap_content" |             android:layout_width="wrap_content" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -151,8 +151,8 @@ | |||||||
|             android:text="@string/dexterity_abbreviation" |             android:text="@string/dexterity_abbreviation" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             android:textStyle="bold" |             android:textStyle="bold" | ||||||
|             app:layout_constraintEnd_toStartOf="@+id/label_con" |             app:layout_constraintEnd_toStartOf="@+id/constitution_label" | ||||||
|             app:layout_constraintStart_toEndOf="@+id/label_str" |             app:layout_constraintStart_toEndOf="@+id/strength_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/divider2" /> |             app:layout_constraintTop_toBottomOf="@+id/divider2" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
| @@ -164,14 +164,14 @@ | |||||||
|             android:layout_marginEnd="8dp" |             android:layout_marginEnd="8dp" | ||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             app:layout_constraintEnd_toEndOf="@+id/label_dex" |             app:layout_constraintEnd_toEndOf="@+id/dexterity_label" | ||||||
|             app:layout_constraintStart_toStartOf="@+id/label_dex" |             app:layout_constraintStart_toStartOf="@+id/dexterity_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/label_dex" |             app:layout_constraintTop_toBottomOf="@+id/dexterity_label" | ||||||
|             tools:text="20 (+5)" /> |             tools:text="20 (+5)" /> | ||||||
|  |  | ||||||
|         <!-- Constitution --> |         <!-- Constitution --> | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/label_con" |             android:id="@+id/constitution_label" | ||||||
|             android:layout_width="wrap_content" |             android:layout_width="wrap_content" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -181,8 +181,8 @@ | |||||||
|             android:text="@string/constitution_abbreviation" |             android:text="@string/constitution_abbreviation" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             android:textStyle="bold" |             android:textStyle="bold" | ||||||
|             app:layout_constraintEnd_toStartOf="@+id/label_int" |             app:layout_constraintEnd_toStartOf="@+id/intelligence_label" | ||||||
|             app:layout_constraintStart_toEndOf="@+id/label_dex" |             app:layout_constraintStart_toEndOf="@+id/dexterity_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/divider2" /> |             app:layout_constraintTop_toBottomOf="@+id/divider2" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
| @@ -194,14 +194,14 @@ | |||||||
|             android:layout_marginEnd="8dp" |             android:layout_marginEnd="8dp" | ||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             app:layout_constraintEnd_toEndOf="@+id/label_con" |             app:layout_constraintEnd_toEndOf="@+id/constitution_label" | ||||||
|             app:layout_constraintStart_toStartOf="@+id/label_con" |             app:layout_constraintStart_toStartOf="@+id/constitution_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/label_con" |             app:layout_constraintTop_toBottomOf="@+id/constitution_label" | ||||||
|             tools:text="8 (-1)" /> |             tools:text="8 (-1)" /> | ||||||
|  |  | ||||||
|         <!-- Intelligence --> |         <!-- Intelligence --> | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/label_int" |             android:id="@+id/intelligence_label" | ||||||
|             android:layout_width="wrap_content" |             android:layout_width="wrap_content" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -211,8 +211,8 @@ | |||||||
|             android:text="@string/intelligence_abbreviation" |             android:text="@string/intelligence_abbreviation" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             android:textStyle="bold" |             android:textStyle="bold" | ||||||
|             app:layout_constraintEnd_toStartOf="@+id/label_wis" |             app:layout_constraintEnd_toStartOf="@+id/wisdom_label" | ||||||
|             app:layout_constraintStart_toEndOf="@+id/label_con" |             app:layout_constraintStart_toEndOf="@+id/constitution_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/divider2" /> |             app:layout_constraintTop_toBottomOf="@+id/divider2" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
| @@ -224,14 +224,14 @@ | |||||||
|             android:layout_marginEnd="8dp" |             android:layout_marginEnd="8dp" | ||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             app:layout_constraintEnd_toEndOf="@+id/label_int" |             app:layout_constraintEnd_toEndOf="@+id/intelligence_label" | ||||||
|             app:layout_constraintStart_toStartOf="@+id/label_int" |             app:layout_constraintStart_toStartOf="@+id/intelligence_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/label_int" |             app:layout_constraintTop_toBottomOf="@+id/intelligence_label" | ||||||
|             tools:text="10 (+0)" /> |             tools:text="10 (+0)" /> | ||||||
|  |  | ||||||
|         <!-- Wisdom --> |         <!-- Wisdom --> | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/label_wis" |             android:id="@+id/wisdom_label" | ||||||
|             android:layout_width="wrap_content" |             android:layout_width="wrap_content" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -241,8 +241,8 @@ | |||||||
|             android:text="@string/wisdom_abbreviation" |             android:text="@string/wisdom_abbreviation" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             android:textStyle="bold" |             android:textStyle="bold" | ||||||
|             app:layout_constraintEnd_toStartOf="@+id/label_cha" |             app:layout_constraintEnd_toStartOf="@+id/charisma_label" | ||||||
|             app:layout_constraintStart_toEndOf="@+id/label_int" |             app:layout_constraintStart_toEndOf="@+id/intelligence_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/divider2" /> |             app:layout_constraintTop_toBottomOf="@+id/divider2" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
| @@ -254,14 +254,14 @@ | |||||||
|             android:layout_marginEnd="8dp" |             android:layout_marginEnd="8dp" | ||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             app:layout_constraintEnd_toEndOf="@+id/label_wis" |             app:layout_constraintEnd_toEndOf="@+id/wisdom_label" | ||||||
|             app:layout_constraintStart_toStartOf="@+id/label_wis" |             app:layout_constraintStart_toStartOf="@+id/wisdom_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/label_wis" |             app:layout_constraintTop_toBottomOf="@+id/wisdom_label" | ||||||
|             tools:text="14 (+2)" /> |             tools:text="14 (+2)" /> | ||||||
|  |  | ||||||
|         <!-- Charisma --> |         <!-- Charisma --> | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/label_cha" |             android:id="@+id/charisma_label" | ||||||
|             android:layout_width="wrap_content" |             android:layout_width="wrap_content" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -272,7 +272,7 @@ | |||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             android:textStyle="bold" |             android:textStyle="bold" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toEndOf="@+id/label_wis" |             app:layout_constraintStart_toEndOf="@+id/wisdom_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/divider2" /> |             app:layout_constraintTop_toBottomOf="@+id/divider2" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
| @@ -284,9 +284,9 @@ | |||||||
|             android:layout_marginEnd="8dp" |             android:layout_marginEnd="8dp" | ||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             android:textAlignment="center" |             android:textAlignment="center" | ||||||
|             app:layout_constraintEnd_toEndOf="@+id/label_cha" |             app:layout_constraintEnd_toEndOf="@+id/charisma_label" | ||||||
|             app:layout_constraintStart_toStartOf="@+id/label_cha" |             app:layout_constraintStart_toStartOf="@+id/charisma_label" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/label_cha" |             app:layout_constraintTop_toBottomOf="@+id/charisma_label" | ||||||
|             tools:text="15 (+2)" /> |             tools:text="15 (+2)" /> | ||||||
|  |  | ||||||
|         <ImageView |         <ImageView | ||||||
| @@ -305,7 +305,7 @@ | |||||||
|             app:layout_constraintTop_toBottomOf="@+id/strength" /> |             app:layout_constraintTop_toBottomOf="@+id/strength" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/saving_throws" |             android:id="@+id/savingThrows" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -327,11 +327,11 @@ | |||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/saving_throws" |             app:layout_constraintTop_toBottomOf="@+id/savingThrows" | ||||||
|             tools:text="Skills" /> |             tools:text="Skills" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/damage_vulnerabilities" |             android:id="@+id/damageVulnerabilities" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -344,7 +344,7 @@ | |||||||
|             tools:text="Damage Vulnerabilities" /> |             tools:text="Damage Vulnerabilities" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/damage_resistances" |             android:id="@+id/damageResistances" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -353,11 +353,11 @@ | |||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/damage_vulnerabilities" |             app:layout_constraintTop_toBottomOf="@+id/damageVulnerabilities" | ||||||
|             tools:text="Damage Resistances" /> |             tools:text="Damage Resistances" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/damage_immunities" |             android:id="@+id/damageImmunities" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -366,11 +366,11 @@ | |||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/damage_resistances" |             app:layout_constraintTop_toBottomOf="@+id/damageResistances" | ||||||
|             tools:text="Damage Immunities" /> |             tools:text="Damage Immunities" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/condition_immunities" |             android:id="@+id/conditionImmunities" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -379,7 +379,7 @@ | |||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/damage_immunities" |             app:layout_constraintTop_toBottomOf="@+id/damageImmunities" | ||||||
|             tools:text="Condition Immunities" /> |             tools:text="Condition Immunities" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
| @@ -392,7 +392,7 @@ | |||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/condition_immunities" |             app:layout_constraintTop_toBottomOf="@+id/conditionImmunities" | ||||||
|             tools:text="Senses" /> |             tools:text="Senses" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
| @@ -437,20 +437,20 @@ | |||||||
|             tools:text="Damage Vulnerabilities" /> |             tools:text="Damage Vulnerabilities" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/label_actions" |             android:id="@+id/actions_label" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
|             android:layout_marginTop="8dp" |             android:layout_marginTop="8dp" | ||||||
|             android:layout_marginEnd="8dp" |             android:layout_marginEnd="8dp" | ||||||
|             android:layout_marginBottom="8dp" |             android:layout_marginBottom="8dp" | ||||||
|             android:text="@string/actions_label" |             android:text="@string/label_actions" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/abilities" /> |             app:layout_constraintTop_toBottomOf="@+id/abilities" /> | ||||||
|  |  | ||||||
|         <ImageView |         <ImageView | ||||||
|             android:id="@+id/divider4" |             android:id="@+id/actions_divider" | ||||||
|             android:layout_width="0dp" |             android:layout_width="0dp" | ||||||
|             android:layout_height="8dp" |             android:layout_height="8dp" | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
| @@ -462,7 +462,7 @@ | |||||||
|             android:src="@drawable/ic_section_divider" |             android:src="@drawable/ic_section_divider" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/label_actions" /> |             app:layout_constraintTop_toBottomOf="@+id/actions_label" /> | ||||||
|  |  | ||||||
|         <!-- Actions --> |         <!-- Actions --> | ||||||
|         <LinearLayout |         <LinearLayout | ||||||
| @@ -476,8 +476,179 @@ | |||||||
|             android:orientation="vertical" |             android:orientation="vertical" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toStartOf="parent" |             app:layout_constraintStart_toStartOf="parent" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/divider4" |             app:layout_constraintTop_toBottomOf="@+id/actions_divider" | ||||||
|             tools:text="Damage Vulnerabilities" /> |             tools:text="Damage Vulnerabilities" /> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:id="@+id/reactions_label" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="8dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="8dp" | ||||||
|  |             android:text="@string/label_reactions" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/actions" /> | ||||||
|  |  | ||||||
|  |         <ImageView | ||||||
|  |             android:id="@+id/reactions_divider" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="8dp" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="8dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="8dp" | ||||||
|  |             android:contentDescription="@string/section_divider" | ||||||
|  |             android:scaleType="fitXY" | ||||||
|  |             android:src="@drawable/ic_section_divider" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/reactions_label" /> | ||||||
|  |  | ||||||
|  |         <!-- Reactions --> | ||||||
|  |         <LinearLayout | ||||||
|  |             android:id="@+id/reactions" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="0dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="0dp" | ||||||
|  |             android:orientation="vertical" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/reactions_divider" | ||||||
|  |             tools:text="Damage Vulnerabilities" /> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:id="@+id/legendaryActions_label" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="8dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="8dp" | ||||||
|  |             android:text="@string/label_legendary_actions" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/reactions" /> | ||||||
|  |  | ||||||
|  |         <ImageView | ||||||
|  |             android:id="@+id/legendaryActions_divider" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="8dp" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="8dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="8dp" | ||||||
|  |             android:contentDescription="@string/section_divider" | ||||||
|  |             android:scaleType="fitXY" | ||||||
|  |             android:src="@drawable/ic_section_divider" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/legendaryActions_label" /> | ||||||
|  |  | ||||||
|  |         <!-- Legendary Actions --> | ||||||
|  |         <LinearLayout | ||||||
|  |             android:id="@+id/legendaryActions" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="0dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="0dp" | ||||||
|  |             android:orientation="vertical" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/legendaryActions_divider" | ||||||
|  |             tools:text="Damage Vulnerabilities" /> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:id="@+id/lairActions_label" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="8dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="8dp" | ||||||
|  |             android:text="@string/label_lair_actions" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/legendaryActions" /> | ||||||
|  |  | ||||||
|  |         <ImageView | ||||||
|  |             android:id="@+id/lairActions_divider" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="8dp" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="8dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="8dp" | ||||||
|  |             android:contentDescription="@string/section_divider" | ||||||
|  |             android:scaleType="fitXY" | ||||||
|  |             android:src="@drawable/ic_section_divider" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/lairActions_label" /> | ||||||
|  |  | ||||||
|  |         <!-- Lair Actions --> | ||||||
|  |         <LinearLayout | ||||||
|  |             android:id="@+id/lairActions" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="0dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="0dp" | ||||||
|  |             android:orientation="vertical" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/lairActions_divider" | ||||||
|  |             tools:text="Damage Vulnerabilities" /> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:id="@+id/regionalEffects_label" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="8dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="8dp" | ||||||
|  |             android:text="@string/label_regional_effects" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/lairActions" /> | ||||||
|  |  | ||||||
|  |         <ImageView | ||||||
|  |             android:id="@+id/regionalEffects_divider" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="8dp" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="8dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="8dp" | ||||||
|  |             android:contentDescription="@string/section_divider" | ||||||
|  |             android:scaleType="fitXY" | ||||||
|  |             android:src="@drawable/ic_section_divider" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/regionalEffects_label" /> | ||||||
|  |  | ||||||
|  |         <!-- Regional Effects --> | ||||||
|  |         <LinearLayout | ||||||
|  |             android:id="@+id/regionalEffects" | ||||||
|  |             android:layout_width="0dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginStart="8dp" | ||||||
|  |             android:layout_marginTop="0dp" | ||||||
|  |             android:layout_marginEnd="8dp" | ||||||
|  |             android:layout_marginBottom="0dp" | ||||||
|  |             android:orientation="vertical" | ||||||
|  |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |             app:layout_constraintStart_toStartOf="parent" | ||||||
|  |             app:layout_constraintTop_toBottomOf="@+id/regionalEffects_divider" | ||||||
|  |             tools:text="Damage Vulnerabilities" /> | ||||||
|     </androidx.constraintlayout.widget.ConstraintLayout> |     </androidx.constraintlayout.widget.ConstraintLayout> | ||||||
| </ScrollView> | </ScrollView> | ||||||
|   | |||||||
| @@ -9,7 +9,6 @@ | |||||||
|     <string name="action_add_skill">Add Skill</string> |     <string name="action_add_skill">Add Skill</string> | ||||||
|     <string name="action_add_trait">Add Trait</string> |     <string name="action_add_trait">Add Trait</string> | ||||||
|     <string name="action_edit">Edit</string> |     <string name="action_edit">Edit</string> | ||||||
|     <string name="actions_label">Actions</string> |  | ||||||
|     <string name="app_name">MonsterCards</string> |     <string name="app_name">MonsterCards</string> | ||||||
|     <string name="charisma_abbreviation">CHA</string> |     <string name="charisma_abbreviation">CHA</string> | ||||||
|     <string name="constitution_abbreviation">CON</string> |     <string name="constitution_abbreviation">CON</string> | ||||||
| @@ -66,7 +65,7 @@ | |||||||
|     <string name="label_proficiency_none">None</string> |     <string name="label_proficiency_none">None</string> | ||||||
|     <string name="label_proficiency_proficient">Proficient</string> |     <string name="label_proficiency_proficient">Proficient</string> | ||||||
|     <string name="label_reactions">Reactions</string> |     <string name="label_reactions">Reactions</string> | ||||||
|     <string name="label_regional_actions">Regional Actions</string> |     <string name="label_regional_effects">Regional Effects</string> | ||||||
|     <string name="label_saving_throws">Saving Throws</string> |     <string name="label_saving_throws">Saving Throws</string> | ||||||
|     <string name="label_search_query">Query</string> |     <string name="label_search_query">Query</string> | ||||||
|     <string name="label_senses">Senses</string> |     <string name="label_senses">Senses</string> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tom Hicks
					Tom Hicks