Adds ability to edit languages.
This commit is contained in:
		| @@ -4,12 +4,12 @@ import android.os.Bundle; | |||||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||||
|  | import android.widget.CheckBox; | ||||||
| import android.widget.EditText; | import android.widget.EditText; | ||||||
|  |  | ||||||
| import androidx.activity.OnBackPressedCallback; | import androidx.activity.OnBackPressedCallback; | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||||
| import androidx.appcompat.widget.SwitchCompat; |  | ||||||
| import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||||
| import androidx.navigation.NavBackStackEntry; | import androidx.navigation.NavBackStackEntry; | ||||||
| import androidx.navigation.NavController; | import androidx.navigation.NavController; | ||||||
| @@ -44,11 +44,14 @@ public class EditLanguageFragment extends MCFragment { | |||||||
|  |  | ||||||
|     @Nullable |     @Nullable | ||||||
|     @Override |     @Override | ||||||
|     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { |     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { | ||||||
|         NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment); |         NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment); | ||||||
|         NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation); |         NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation); | ||||||
|         mEditMonsterViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class); |         mEditMonsterViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class); | ||||||
|  |  | ||||||
|         View root = inflater.inflate(R.layout.fragment_edit_language, container, false); |         View root = inflater.inflate(R.layout.fragment_edit_language, container, false); | ||||||
|  |  | ||||||
|  |  | ||||||
|         mHolder = new ViewHolder(root); |         mHolder = new ViewHolder(root); | ||||||
|  |  | ||||||
|         mHolder.name.setText(mViewModel.getName().getValue()); |         mHolder.name.setText(mViewModel.getName().getValue()); | ||||||
| @@ -70,17 +73,11 @@ public class EditLanguageFragment extends MCFragment { | |||||||
|         return root; |         return root; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public void onStart() { |  | ||||||
|         super.onStart(); |  | ||||||
|         mHolder.name.requestFocus(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private static class ViewHolder { |     private static class ViewHolder { | ||||||
|         EditText name; |         EditText name; | ||||||
|         SwitchCompat canSpeak; |         CheckBox canSpeak; | ||||||
|  |  | ||||||
|         ViewHolder(@NonNull View root) { |         ViewHolder(View root) { | ||||||
|             name = root.findViewById(R.id.name); |             name = root.findViewById(R.id.name); | ||||||
|             canSpeak = root.findViewById(R.id.canSpeak); |             canSpeak = root.findViewById(R.id.canSpeak); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| package com.majinnaibu.monstercards.ui.editmonster; | package com.majinnaibu.monstercards.ui.editmonster; | ||||||
|  |  | ||||||
| import androidx.annotation.NonNull; |  | ||||||
| import androidx.lifecycle.LiveData; | import androidx.lifecycle.LiveData; | ||||||
|  |  | ||||||
| import com.majinnaibu.monstercards.models.Language; | import com.majinnaibu.monstercards.models.Language; | ||||||
| @@ -19,7 +18,7 @@ public class EditLanguageViewModel extends ChangeTrackedViewModel { | |||||||
|         mLanguage = new ChangeTrackedLiveData<>(makeLanguage(), this::makeDirty); |         mLanguage = new ChangeTrackedLiveData<>(makeLanguage(), this::makeDirty); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void copyFromLanguage(@NonNull Language language) { |     public void copyFromLanguage(Language language) { | ||||||
|         mName.resetValue(language.getName()); |         mName.resetValue(language.getName()); | ||||||
|         mCanSpeak.resetValue(language.getSpeaks()); |         mCanSpeak.resetValue(language.getSpeaks()); | ||||||
|         makeClean(); |         makeClean(); | ||||||
| @@ -59,10 +58,9 @@ public class EditLanguageViewModel extends ChangeTrackedViewModel { | |||||||
|         return getCanSpeakValue(false); |         return getCanSpeakValue(false); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @NonNull |  | ||||||
|     private Language makeLanguage() { |     private Language makeLanguage() { | ||||||
|         Boolean boxedValue = mCanSpeak.getValue(); |         Boolean boxedValue = mCanSpeak.getValue(); | ||||||
|         boolean canSpeak = boxedValue != null && boxedValue; |         boolean canSpeak = boxedValue != null && boxedValue; | ||||||
|         return new Language(mName.getValue(), canSpeak); |         return new Language(mName.getValue(), canSpeak); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -26,22 +26,23 @@ import com.majinnaibu.monstercards.utils.Logger; | |||||||
| import com.majinnaibu.monstercards.utils.TextChangedListener; | import com.majinnaibu.monstercards.utils.TextChangedListener; | ||||||
|  |  | ||||||
| public class EditLanguagesFragment extends MCFragment { | public class EditLanguagesFragment extends MCFragment { | ||||||
|     // TODO: Make the swipe to delete not happen for the header |  | ||||||
|     private EditMonsterViewModel mViewModel; |     private EditMonsterViewModel mViewModel; | ||||||
|     private ViewHolder mHolder; |     private ViewHolder mHolder; | ||||||
|  |  | ||||||
|     private void navigateToEditLanguage(@NonNull Language language) { |     private void navigateToEditLanguage(Language language) { | ||||||
|         NavDirections action = EditLanguagesFragmentDirections.actionEditLanguagesFragmentToEditLanguageFragment(language.getName(), language.getSpeaks()); |         NavDirections action = EditLanguagesFragmentDirections.actionEditLanguagesFragmentToEditLanguageFragment(language.getName(), language.getSpeaks()); | ||||||
|         Navigation.findNavController(requireView()).navigate(action); |         Navigation.findNavController(requireView()).navigate(action); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, |     public View onCreateView(LayoutInflater inflater, ViewGroup container, | ||||||
|                              Bundle savedInstanceState) { |                              Bundle savedInstanceState) { | ||||||
|         NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment); |         NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment); | ||||||
|         NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation); |         NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation); | ||||||
|         mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class); |         mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class); | ||||||
|  |  | ||||||
|         View root = inflater.inflate(R.layout.fragment_edit_languages_list, container, false); |         View root = inflater.inflate(R.layout.fragment_edit_languages_list, container, false); | ||||||
|  |  | ||||||
|         mHolder = new ViewHolder(root); |         mHolder = new ViewHolder(root); | ||||||
|         setupRecyclerView(mHolder.list); |         setupRecyclerView(mHolder.list); | ||||||
|         setupAddLanguageButton(mHolder.addLanguage); |         setupAddLanguageButton(mHolder.addLanguage); | ||||||
| @@ -74,11 +75,7 @@ public class EditLanguagesFragment extends MCFragment { | |||||||
|         DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); |         DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); | ||||||
|         recyclerView.addItemDecoration(dividerItemDecoration); |         recyclerView.addItemDecoration(dividerItemDecoration); | ||||||
|  |  | ||||||
|         ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, (position, direction) -> { |         ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, mViewModel::removeLanguage)); | ||||||
|             if (position > 0) { |  | ||||||
|                 mViewModel.removeLanguage(position - 1); |  | ||||||
|             } |  | ||||||
|         }, null)); |  | ||||||
|         itemTouchHelper.attachToRecyclerView(recyclerView); |         itemTouchHelper.attachToRecyclerView(recyclerView); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -93,9 +90,9 @@ public class EditLanguagesFragment extends MCFragment { | |||||||
|         RecyclerView list; |         RecyclerView list; | ||||||
|         FloatingActionButton addLanguage; |         FloatingActionButton addLanguage; | ||||||
|  |  | ||||||
|         ViewHolder(@NonNull View root) { |         ViewHolder(View root) { | ||||||
|             this.list = root.findViewById(R.id.list); |             this.list = root.findViewById(R.id.list); | ||||||
|             this.addLanguage = root.findViewById(R.id.add_language); |             this.addLanguage = root.findViewById(R.id.add_language); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -6,7 +6,6 @@ import android.view.ViewGroup; | |||||||
| import android.widget.EditText; | import android.widget.EditText; | ||||||
| import android.widget.TextView; | import android.widget.TextView; | ||||||
|  |  | ||||||
| import androidx.annotation.NonNull; |  | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
|  |  | ||||||
| import com.majinnaibu.monstercards.databinding.FragmentEditLanguagesListHeaderBinding; | import com.majinnaibu.monstercards.databinding.FragmentEditLanguagesListHeaderBinding; | ||||||
| @@ -14,8 +13,9 @@ import com.majinnaibu.monstercards.databinding.FragmentEditLanguagesListItemBind | |||||||
| import com.majinnaibu.monstercards.models.Language; | import com.majinnaibu.monstercards.models.Language; | ||||||
| import com.majinnaibu.monstercards.ui.components.Stepper; | import com.majinnaibu.monstercards.ui.components.Stepper; | ||||||
|  |  | ||||||
|  | import org.jetbrains.annotations.NotNull; | ||||||
|  |  | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.Locale; |  | ||||||
|  |  | ||||||
| public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | ||||||
|     private final List<Language> mValues; |     private final List<Language> mValues; | ||||||
| @@ -29,18 +29,18 @@ public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter<Recyc | |||||||
|     private final int ITEM_VIEW_TYPE = 2; |     private final int ITEM_VIEW_TYPE = 2; | ||||||
|     private final String DISTANCE_IN_FEET_FORMAT = "%d ft."; |     private final String DISTANCE_IN_FEET_FORMAT = "%d ft."; | ||||||
|  |  | ||||||
|     public EditLanguagesRecyclerViewAdapter(List<Language> items, ItemCallback onClick, int telepathyRange, Stepper.OnValueChangeListener telepathyRangeChangedListener, String understandsBut, TextWatcher understandsButChangedListener) { |     public EditLanguagesRecyclerViewAdapter(List<Language> items, ItemCallback onClick, int telepathyRange, Stepper.OnValueChangeListener telepathyRangeChangedListener, String undderstandsBut, TextWatcher understandsButChangedListener) { | ||||||
|         mValues = items; |         mValues = items; | ||||||
|         mOnClick = onClick; |         mOnClick = onClick; | ||||||
|         mTelepathyRange = telepathyRange; |         mTelepathyRange = telepathyRange; | ||||||
|         mOnTelepathyRangeChanged = telepathyRangeChangedListener; |         mOnTelepathyRangeChanged = telepathyRangeChangedListener; | ||||||
|         mUnderstandsBut = understandsBut; |         mUnderstandsBut = undderstandsBut; | ||||||
|         mOnUnderstandsButChanged = understandsButChangedListener; |         mOnUnderstandsButChanged = understandsButChangedListener; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @NonNull |     @NotNull | ||||||
|     @Override |     @Override | ||||||
|     public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { |     public RecyclerView.ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) { | ||||||
|         if (viewType == HEADER_VIEW_TYPE) { |         if (viewType == HEADER_VIEW_TYPE) { | ||||||
|             return new HeaderViewHolder(FragmentEditLanguagesListHeaderBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); |             return new HeaderViewHolder(FragmentEditLanguagesListHeaderBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); | ||||||
|         } |         } | ||||||
| @@ -48,17 +48,17 @@ public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter<Recyc | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) { |     public void onBindViewHolder(@NotNull final RecyclerView.ViewHolder holder, int position) { | ||||||
|         if (holder instanceof HeaderViewHolder) { |         if (holder instanceof HeaderViewHolder) { | ||||||
|             HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; |             HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; | ||||||
|             headerViewHolder.telepathy.setOnFormatValueCallback(value -> String.format(Locale.getDefault(), DISTANCE_IN_FEET_FORMAT, value)); |             headerViewHolder.telepathy.setOnFormatValueCallback(value -> String.format(DISTANCE_IN_FEET_FORMAT, value)); | ||||||
|             headerViewHolder.telepathy.setValue(mTelepathyRange); |             headerViewHolder.telepathy.setValue(mTelepathyRange); | ||||||
|             headerViewHolder.telepathy.setOnValueChangeListener(mOnTelepathyRangeChanged); |             headerViewHolder.telepathy.setOnValueChangeListener(mOnTelepathyRangeChanged); | ||||||
|             headerViewHolder.understandsBut.setText(mUnderstandsBut); |             headerViewHolder.understandsBut.setText(mUnderstandsBut); | ||||||
|             headerViewHolder.understandsBut.addTextChangedListener(mOnUnderstandsButChanged); |             headerViewHolder.understandsBut.addTextChangedListener(mOnUnderstandsButChanged); | ||||||
|         } else if (holder instanceof ItemViewHolder) { |         } else if(holder instanceof ItemViewHolder) { | ||||||
|             ItemViewHolder itemViewHolder = (ItemViewHolder) holder; |             ItemViewHolder itemViewHolder = (ItemViewHolder)holder; | ||||||
|             itemViewHolder.mItem = mValues.get(position - 1); |             itemViewHolder.mItem = mValues.get(position-1); | ||||||
|             itemViewHolder.mContentView.setText(itemViewHolder.mItem.getName()); |             itemViewHolder.mContentView.setText(itemViewHolder.mItem.getName()); | ||||||
|             itemViewHolder.itemView.setOnClickListener(view -> { |             itemViewHolder.itemView.setOnClickListener(view -> { | ||||||
|                 if (mOnClick != null) { |                 if (mOnClick != null) { | ||||||
| @@ -70,7 +70,7 @@ public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter<Recyc | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getItemCount() { |     public int getItemCount() { | ||||||
|         return mValues.size() + 1; |         return mValues.size() +1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
| @@ -89,7 +89,7 @@ public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter<Recyc | |||||||
|         public final Stepper telepathy; |         public final Stepper telepathy; | ||||||
|         public final EditText understandsBut; |         public final EditText understandsBut; | ||||||
|  |  | ||||||
|         public HeaderViewHolder(@NonNull FragmentEditLanguagesListHeaderBinding binding) { |         public HeaderViewHolder(FragmentEditLanguagesListHeaderBinding binding) { | ||||||
|             super(binding.getRoot()); |             super(binding.getRoot()); | ||||||
|             telepathy = binding.telepathy; |             telepathy = binding.telepathy; | ||||||
|             understandsBut = binding.understandsBut; |             understandsBut = binding.understandsBut; | ||||||
| @@ -100,15 +100,15 @@ public class EditLanguagesRecyclerViewAdapter extends RecyclerView.Adapter<Recyc | |||||||
|         public final TextView mContentView; |         public final TextView mContentView; | ||||||
|         public Language mItem; |         public Language mItem; | ||||||
|  |  | ||||||
|         public ItemViewHolder(@NonNull FragmentEditLanguagesListItemBinding binding) { |         public ItemViewHolder(FragmentEditLanguagesListItemBinding binding) { | ||||||
|             super(binding.getRoot()); |             super(binding.getRoot()); | ||||||
|             mContentView = binding.content; |             mContentView = binding.content; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         @NonNull |         @NotNull | ||||||
|         @Override |         @Override | ||||||
|         public String toString() { |         public String toString() { | ||||||
|             return super.toString() + " '" + mContentView.getText() + "'"; |             return super.toString() + " '" + mContentView.getText() + "'"; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -115,6 +115,36 @@ public class EditMonsterFragment extends MCFragment { | |||||||
|             Navigation.findNavController(requireView()).navigate(action); |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  |         mHolder.senses.setOnClickListener(v -> { | ||||||
|  |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditSensesFragment(); | ||||||
|  |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         mHolder.conditionImmunities.setOnClickListener(v -> { | ||||||
|  |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditConditionImmunitiesFragment(); | ||||||
|  |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         mHolder.damageImmunities.setOnClickListener(v -> { | ||||||
|  |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageImmunitiesFragment(); | ||||||
|  |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         mHolder.damageResistances.setOnClickListener(v -> { | ||||||
|  |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageResistancesFragment(); | ||||||
|  |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         mHolder.damageVulnerabilities.setOnClickListener(v -> { | ||||||
|  |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditDamageVulnerabilitiesFragment(); | ||||||
|  |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         mHolder.languages.setOnClickListener(v -> { | ||||||
|  |             NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditLanguagesFragment(); | ||||||
|  |             Navigation.findNavController(requireView()).navigate(action); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|         requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { |         requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { | ||||||
|             @Override |             @Override | ||||||
|             public void handleOnBackPressed() { |             public void handleOnBackPressed() { | ||||||
|   | |||||||
| @@ -740,6 +740,10 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { | |||||||
|         return mTelepathyRange; |         return mTelepathyRange; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public int getTelepathyRangeUnboxed() { | ||||||
|  |         return Helpers.unboxInteger(mTelepathyRange.getValue(), 0); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public void setTelepathyRange(int telepathyRange) { |     public void setTelepathyRange(int telepathyRange) { | ||||||
|         mTelepathyRange.setValue(telepathyRange); |         mTelepathyRange.setValue(telepathyRange); | ||||||
|     } |     } | ||||||
| @@ -1189,5 +1193,12 @@ public class EditMonsterViewModel extends ChangeTrackedViewModel { | |||||||
|         static <T> void replaceItemInList(MutableLiveData<List<T>> listData, T oldItem, T newItem) { |         static <T> void replaceItemInList(MutableLiveData<List<T>> listData, T oldItem, T newItem) { | ||||||
|             replaceItemInList(listData, oldItem, newItem, null); |             replaceItemInList(listData, oldItem, newItem, null); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         static int unboxInteger(Integer value, int defaultIfNull) { | ||||||
|  |             if (value == null) { | ||||||
|  |                 return defaultIfNull; | ||||||
|  |             } | ||||||
|  |             return value; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -25,12 +25,11 @@ | |||||||
|                 tools:text="Medicine" /> |                 tools:text="Medicine" /> | ||||||
|         </com.google.android.material.textfield.TextInputLayout> |         </com.google.android.material.textfield.TextInputLayout> | ||||||
|  |  | ||||||
|         <com.google.android.material.switchmaterial.SwitchMaterial |         <CheckBox | ||||||
|             android:id="@+id/canSpeak" |             android:id="@+id/canSpeak" | ||||||
|             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:text="@string/label_can_speak_language" /> | ||||||
|             android:text="@string/label_can_speak_language" |  | ||||||
|             android:textAppearance="@android:style/TextAppearance.Material.Medium" /> |  | ||||||
|     </LinearLayout> |     </LinearLayout> | ||||||
| </ScrollView> | </ScrollView> | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" |     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|     xmlns:tools="http://schemas.android.com/tools" |     xmlns:tools="http://schemas.android.com/tools" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="wrap_content" |     android:layout_height="match_parent" | ||||||
|     android:orientation="vertical"> |     android:orientation="vertical"> | ||||||
|  |  | ||||||
|     <!-- understands but textbox --> |     <!-- understands but textbox --> | ||||||
| @@ -33,4 +33,4 @@ | |||||||
|         app:maxValue="1000" |         app:maxValue="1000" | ||||||
|         app:minValue="0" |         app:minValue="0" | ||||||
|         app:stepAmount="5" /> |         app:stepAmount="5" /> | ||||||
| </LinearLayout> | </LinearLayout> | ||||||
| @@ -6,8 +6,8 @@ | |||||||
|  |  | ||||||
|     <TextView |     <TextView | ||||||
|         android:id="@+id/content" |         android:id="@+id/content" | ||||||
|         android:layout_width="match_parent" |         android:layout_width="wrap_content" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:layout_margin="@dimen/text_margin" |         android:layout_margin="@dimen/text_margin" | ||||||
|         android:textAppearance="?attr/textAppearanceListItem" /> |         android:textAppearance="?attr/textAppearanceListItem" /> | ||||||
| </LinearLayout> | </LinearLayout> | ||||||
| @@ -93,6 +93,24 @@ | |||||||
|             <action |             <action | ||||||
|                 android:id="@+id/action_editMonsterFragment_to_editSkillsFragment" |                 android:id="@+id/action_editMonsterFragment_to_editSkillsFragment" | ||||||
|                 app:destination="@id/editSkillsFragment" /> |                 app:destination="@id/editSkillsFragment" /> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editMonsterFragment_to_editSensesFragment" | ||||||
|  |                 app:destination="@id/editSensesFragment" /> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editMonsterFragment_to_editConditionImmunitiesFragment" | ||||||
|  |                 app:destination="@id/editConditionImmunitiesFragment" /> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editMonsterFragment_to_editDamageResistancesFragment" | ||||||
|  |                 app:destination="@id/editDamageResistancesFragment" /> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editMonsterFragment_to_editDamageVulnerabilitiesFragment" | ||||||
|  |                 app:destination="@id/editDamageVulnerabilitiesFragment" /> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editMonsterFragment_to_editDamageImmunitiesFragment" | ||||||
|  |                 app:destination="@id/editDamageImmunitiesFragment" /> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editMonsterFragment_to_editLanguagesFragment" | ||||||
|  |                 app:destination="@id/editLanguagesFragment" /> | ||||||
|         </fragment> |         </fragment> | ||||||
|         <fragment |         <fragment | ||||||
|             android:id="@+id/editBasicInfoFragment" |             android:id="@+id/editBasicInfoFragment" | ||||||
| @@ -150,5 +168,112 @@ | |||||||
|                 android:name="advantage" |                 android:name="advantage" | ||||||
|                 app:argType="com.majinnaibu.monstercards.data.enums.AdvantageType" /> |                 app:argType="com.majinnaibu.monstercards.data.enums.AdvantageType" /> | ||||||
|         </fragment> |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editSensesFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditSensesFragment" | ||||||
|  |             android:label="fragment_edit_senses_list" | ||||||
|  |             tools:layout="@layout/fragment_edit_senses_list"> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editSensesFragment_to_editSenseFragment" | ||||||
|  |                 app:destination="@id/editSenseFragment" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editSenseFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditSenseFragment" | ||||||
|  |             android:label="fragment_edit_sense" | ||||||
|  |             tools:layout="@layout/fragment_edit_sense"> | ||||||
|  |             <argument | ||||||
|  |                 android:name="sense" | ||||||
|  |                 app:argType="string" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editConditionImmunitiesFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditConditionImmunitiesFragment" | ||||||
|  |             android:label="fragment_edit_condition_immunities_list" | ||||||
|  |             tools:layout="@layout/fragment_edit_condition_immunities_list"> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editConditionImmunitiesFragment_to_editConditionImmunity" | ||||||
|  |                 app:destination="@id/editConditionImmunity" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editConditionImmunity" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditConditionImmunityFragment" | ||||||
|  |             android:label="fragment_edit_condition_immunity" | ||||||
|  |             tools:layout="@layout/fragment_edit_condition_immunity"> | ||||||
|  |             <argument | ||||||
|  |                 android:name="condition" | ||||||
|  |                 app:argType="string" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editDamageResistancesFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageResistancesFragment" | ||||||
|  |             android:label="fragment_edit_damage_resistances_list" | ||||||
|  |             tools:layout="@layout/fragment_edit_damage_resistances_list"> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editDamageResistancesFragment_to_editDamageResistanceFragment" | ||||||
|  |                 app:destination="@id/editDamageResistanceFragment" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editDamageResistanceFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageResistanceFragment" | ||||||
|  |             android:label="fragment_edit_damage_resistance" | ||||||
|  |             tools:layout="@layout/fragment_edit_damage_resistance"> | ||||||
|  |             <argument | ||||||
|  |                 android:name="damageType" | ||||||
|  |                 app:argType="string" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editDamageVulnerabilityFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageVulnerabilityFragment" | ||||||
|  |             android:label="EditDamageVulnerabilityFragment"> | ||||||
|  |             <argument | ||||||
|  |                 android:name="damageType" | ||||||
|  |                 app:argType="string" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editDamageImmunitiesFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageImmunitiesFragment" | ||||||
|  |             android:label="EditDamageImmunitiesFragment"> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editDamageImmunitiesFragment_to_editDamageImmunityFragment" | ||||||
|  |                 app:destination="@id/editDamageImmunityFragment" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editDamageImmunityFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageImmunityFragment" | ||||||
|  |             android:label="EditDamageImmunityFragment"> | ||||||
|  |             <argument | ||||||
|  |                 android:name="damageType" | ||||||
|  |                 app:argType="string" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editDamageVulnerabilitiesFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditDamageVulnerabilitiesFragment" | ||||||
|  |             android:label="EditDamageVulnerabilitiesFragment"> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editDamageVulnerabilitiesFragment_to_editDamageVulnerabilityFragment" | ||||||
|  |                 app:destination="@id/editDamageVulnerabilityFragment" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editLanguagesFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditLanguagesFragment" | ||||||
|  |             android:label="fragment_edit_languages_list" | ||||||
|  |             tools:layout="@layout/fragment_edit_languages_list"> | ||||||
|  |             <action | ||||||
|  |                 android:id="@+id/action_editLanguagesFragment_to_editLanguageFragment" | ||||||
|  |                 app:destination="@id/editLanguageFragment" /> | ||||||
|  |         </fragment> | ||||||
|  |         <fragment | ||||||
|  |             android:id="@+id/editLanguageFragment" | ||||||
|  |             android:name="com.majinnaibu.monstercards.ui.editmonster.EditLanguageFragment" | ||||||
|  |             android:label="fragment_edit_language" | ||||||
|  |             tools:layout="@layout/fragment_edit_language"> | ||||||
|  |             <argument | ||||||
|  |                 android:name="name" | ||||||
|  |                 app:argType="string" /> | ||||||
|  |             <argument | ||||||
|  |                 android:name="canSpeak" | ||||||
|  |                 app:argType="boolean" /> | ||||||
|  |         </fragment> | ||||||
|     </navigation> |     </navigation> | ||||||
| </navigation> | </navigation> | ||||||
|   | |||||||
| @@ -1,6 +1,9 @@ | |||||||
| <resources> | <resources> | ||||||
|     <string name="action_add_monster">Add monster</string> |     <string name="action_add_monster">Add monster</string> | ||||||
|  |     <string name="action_add_sense">Add Sense</string> | ||||||
|     <string name="action_add_skill">Add Skill</string> |     <string name="action_add_skill">Add Skill</string> | ||||||
|  |     <string name="action_add_language">Add Language</string> | ||||||
|  |     <string name="action_add_condition_immunity">Add Condition</string> | ||||||
|     <string name="action_edit">Edit</string> |     <string name="action_edit">Edit</string> | ||||||
|     <string name="actions_label">Actions</string> |     <string name="actions_label">Actions</string> | ||||||
|     <string name="app_name">MonsterCards</string> |     <string name="app_name">MonsterCards</string> | ||||||
| @@ -50,6 +53,7 @@ | |||||||
|     <string name="label_legendary_actions">Legendary Actions</string> |     <string name="label_legendary_actions">Legendary Actions</string> | ||||||
|     <string name="label_natural_armor_bonus">Natural Armor Bonus</string> |     <string name="label_natural_armor_bonus">Natural Armor Bonus</string> | ||||||
|     <string name="label_name">Name</string> |     <string name="label_name">Name</string> | ||||||
|  |     <string name="label_understands_but">Understands But</string> | ||||||
|     <string name="label_proficiency">Proficiency</string> |     <string name="label_proficiency">Proficiency</string> | ||||||
|     <string name="label_proficiency_expertise">Expertise</string> |     <string name="label_proficiency_expertise">Expertise</string> | ||||||
|     <string name="label_proficiency_none">None</string> |     <string name="label_proficiency_none">None</string> | ||||||
| @@ -66,6 +70,7 @@ | |||||||
|     <string name="label_strength">Strength</string> |     <string name="label_strength">Strength</string> | ||||||
|     <string name="label_subtype">Subtype</string> |     <string name="label_subtype">Subtype</string> | ||||||
|     <string name="label_swim_speed">Swim Speed</string> |     <string name="label_swim_speed">Swim Speed</string> | ||||||
|  |     <string name="label_telepathy">Telepathy</string> | ||||||
|     <string name="label_type">Type</string> |     <string name="label_type">Type</string> | ||||||
|     <string name="label_wisdom">Wisdom</string> |     <string name="label_wisdom">Wisdom</string> | ||||||
|     <string name="section_divider">section divider</string> |     <string name="section_divider">section divider</string> | ||||||
| @@ -78,4 +83,8 @@ | |||||||
|     <string name="title_library">Library</string> |     <string name="title_library">Library</string> | ||||||
|     <string name="title_search">Search</string> |     <string name="title_search">Search</string> | ||||||
|     <string name="wisdom_abbreviation">WIS</string> |     <string name="wisdom_abbreviation">WIS</string> | ||||||
|  |     <string name="label_description">Description</string> | ||||||
|  |     <string name="label_damage_type">Damage Type</string> | ||||||
|  |     <string name="add_damage_type">Add Damage Type</string> | ||||||
|  |     <string name="label_can_speak_language">Can Speak</string> | ||||||
| </resources> | </resources> | ||||||
		Reference in New Issue
	
	Block a user
	 Tom Hicks
					Tom Hicks