Renames EditTraitListFragment to EditTraitsFragment to match the other list fragments.
This commit is contained in:
@@ -1,114 +0,0 @@
|
|||||||
package com.majinnaibu.monstercards.ui.editmonster;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.lifecycle.LiveData;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
|
||||||
import androidx.navigation.NavBackStackEntry;
|
|
||||||
import androidx.navigation.NavController;
|
|
||||||
import androidx.navigation.NavDirections;
|
|
||||||
import androidx.navigation.Navigation;
|
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
|
||||||
import com.majinnaibu.monstercards.R;
|
|
||||||
import com.majinnaibu.monstercards.data.enums.TraitType;
|
|
||||||
import com.majinnaibu.monstercards.models.Trait;
|
|
||||||
import com.majinnaibu.monstercards.ui.shared.MCFragment;
|
|
||||||
import com.majinnaibu.monstercards.ui.shared.SwipeToDeleteCallback;
|
|
||||||
import com.majinnaibu.monstercards.utils.Logger;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
// TODO: rename to EditTraitsFragment
|
|
||||||
public class EditTraitListFragment extends MCFragment {
|
|
||||||
private EditMonsterViewModel mViewModel;
|
|
||||||
private ViewHolder mHolder;
|
|
||||||
private TraitType mTraitType;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
|
|
||||||
if (getArguments() != null) {
|
|
||||||
EditTraitListFragmentArgs args = EditTraitListFragmentArgs.fromBundle(getArguments());
|
|
||||||
mTraitType = args.getTraitType();
|
|
||||||
} else {
|
|
||||||
Logger.logWTF("EditTraitFragment needs arguments");
|
|
||||||
}
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@org.jetbrains.annotations.Nullable
|
|
||||||
@Override
|
|
||||||
public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
|
|
||||||
NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment);
|
|
||||||
NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation);
|
|
||||||
mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class);
|
|
||||||
View root = inflater.inflate(R.layout.fragment_edit_traits_list, container, false);
|
|
||||||
mHolder = new ViewHolder(root);
|
|
||||||
setupRecyclerView(mHolder.list);
|
|
||||||
setupAddButton(mHolder.addTrait);
|
|
||||||
return root;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupRecyclerView(@NonNull RecyclerView recyclerView) {
|
|
||||||
Context context = requireContext();
|
|
||||||
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
|
|
||||||
recyclerView.setLayoutManager(layoutManager);
|
|
||||||
|
|
||||||
LiveData<List<Trait>> traitData = mViewModel.getTraits(mTraitType);
|
|
||||||
if (traitData != null) {
|
|
||||||
traitData.observe(getViewLifecycleOwner(), traits -> {
|
|
||||||
EditTraitsRecyclerViewAdapter adapter = new EditTraitsRecyclerViewAdapter(traits, trait -> {
|
|
||||||
if (trait != null) {
|
|
||||||
navigateToEditTrait(trait);
|
|
||||||
} else {
|
|
||||||
Logger.logError("Can't navigate to EditTraitFragment with a null trait");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
recyclerView.setAdapter(adapter);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation());
|
|
||||||
recyclerView.addItemDecoration(dividerItemDecoration);
|
|
||||||
|
|
||||||
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, position -> mViewModel.removeTrait(mTraitType, position)));
|
|
||||||
itemTouchHelper.attachToRecyclerView(recyclerView);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupAddButton(@NonNull FloatingActionButton fab) {
|
|
||||||
fab.setOnClickListener(view -> {
|
|
||||||
Trait newTrait = mViewModel.addNewTrait(mTraitType);
|
|
||||||
if (newTrait != null) {
|
|
||||||
navigateToEditTrait(newTrait);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void navigateToEditTrait(Trait trait) {
|
|
||||||
NavDirections action = EditTraitListFragmentDirections.actionEditTraitListFragmentToEditTraitFragment(trait.description, trait.name, mTraitType);
|
|
||||||
Navigation.findNavController(requireView()).navigate(action);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class ViewHolder {
|
|
||||||
RecyclerView list;
|
|
||||||
FloatingActionButton addTrait;
|
|
||||||
|
|
||||||
ViewHolder(View root) {
|
|
||||||
list = root.findViewById(R.id.list);
|
|
||||||
addTrait = root.findViewById(R.id.add_trait);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -27,17 +27,18 @@ import com.majinnaibu.monstercards.ui.shared.MCFragment;
|
|||||||
import com.majinnaibu.monstercards.ui.shared.SwipeToDeleteCallback;
|
import com.majinnaibu.monstercards.ui.shared.SwipeToDeleteCallback;
|
||||||
import com.majinnaibu.monstercards.utils.Logger;
|
import com.majinnaibu.monstercards.utils.Logger;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class EditTraitsFragment extends MCFragment {
|
public class EditTraitsFragment extends MCFragment {
|
||||||
private EditMonsterViewModel mViewModel;
|
private EditMonsterViewModel mViewModel;
|
||||||
private ViewHolder mHolder;
|
private ViewHolder mHolder;
|
||||||
private TraitType mTraitType;
|
private TraitType mTraitType;
|
||||||
private EditTraitsRecyclerViewAdapter mAdapter;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
|
||||||
if (getArguments() != null) {
|
if (getArguments() != null) {
|
||||||
EditTraitsFragmentArgs args = EditTraitsFragmentArgs.fromBundle(getArguments());
|
EditTraitsFragmentArgs args = EditTraitsFragmentArgs.fromBundle(getArguments());
|
||||||
mTraitType = args.getTraitType();
|
mTraitType = args.getTraitType();
|
||||||
@@ -48,60 +49,41 @@ public class EditTraitsFragment extends MCFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@org.jetbrains.annotations.Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.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);
|
||||||
mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class);
|
mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class);
|
||||||
View root = inflater.inflate(R.layout.fragment_edit_traits_list, container, false);
|
View root = inflater.inflate(R.layout.fragment_edit_traits_list, container, false);
|
||||||
mHolder = new ViewHolder(root);
|
mHolder = new ViewHolder(root);
|
||||||
setTitle(getTitleForTraitType(mTraitType));
|
|
||||||
setupRecyclerView(mHolder.list);
|
setupRecyclerView(mHolder.list);
|
||||||
setupAddButton(mHolder.addTrait);
|
setupAddButton(mHolder.addTrait);
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private String getTitleForTraitType(TraitType type) {
|
|
||||||
switch (type) {
|
|
||||||
case ABILITY:
|
|
||||||
return getString(R.string.title_editAbilities);
|
|
||||||
case ACTION:
|
|
||||||
return getString(R.string.title_editActions);
|
|
||||||
case LAIR_ACTION:
|
|
||||||
return getString(R.string.title_editLairActions);
|
|
||||||
case LEGENDARY_ACTION:
|
|
||||||
return getString(R.string.title_editLegendaryActions);
|
|
||||||
case REACTIONS:
|
|
||||||
return getString(R.string.title_editReactions);
|
|
||||||
case REGIONAL_ACTION:
|
|
||||||
return getString(R.string.title_editRegionalActions);
|
|
||||||
default:
|
|
||||||
return getString(R.string.title_editTraits);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupRecyclerView(@NonNull RecyclerView recyclerView) {
|
private void setupRecyclerView(@NonNull RecyclerView recyclerView) {
|
||||||
Context context = requireContext();
|
Context context = requireContext();
|
||||||
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
|
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
|
||||||
recyclerView.setLayoutManager(layoutManager);
|
recyclerView.setLayoutManager(layoutManager);
|
||||||
|
|
||||||
LiveData<List<Trait>> traitData = mViewModel.getTraits(mTraitType);
|
LiveData<List<Trait>> traitData = mViewModel.getTraits(mTraitType);
|
||||||
mAdapter = new EditTraitsRecyclerViewAdapter(trait -> {
|
|
||||||
if (trait != null) {
|
|
||||||
navigateToEditTrait(trait);
|
|
||||||
} else {
|
|
||||||
Logger.logError("Can't navigate to EditTraitFragment with a null trait");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (traitData != null) {
|
if (traitData != null) {
|
||||||
traitData.observe(getViewLifecycleOwner(), traits -> mAdapter.submitList(traits));
|
traitData.observe(getViewLifecycleOwner(), traits -> {
|
||||||
|
EditTraitsRecyclerViewAdapter adapter = new EditTraitsRecyclerViewAdapter(traits, trait -> {
|
||||||
|
if (trait != null) {
|
||||||
|
navigateToEditTrait(trait);
|
||||||
|
} else {
|
||||||
|
Logger.logError("Can't navigate to EditTraitFragment with a null trait");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
recyclerView.setAdapter(adapter);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
recyclerView.setAdapter(mAdapter);
|
|
||||||
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) -> mViewModel.removeTrait(mTraitType, position), (from, to) -> mViewModel.moveTrait(mTraitType, from, to)));
|
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(context, position -> mViewModel.removeTrait(mTraitType, position)));
|
||||||
itemTouchHelper.attachToRecyclerView(recyclerView);
|
itemTouchHelper.attachToRecyclerView(recyclerView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +96,7 @@ public class EditTraitsFragment extends MCFragment {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void navigateToEditTrait(@NonNull Trait trait) {
|
protected void navigateToEditTrait(Trait trait) {
|
||||||
NavDirections action = EditTraitsFragmentDirections.actionEditTraitListFragmentToEditTraitFragment(trait.description, trait.name, mTraitType);
|
NavDirections action = EditTraitsFragmentDirections.actionEditTraitListFragmentToEditTraitFragment(trait.description, trait.name, mTraitType);
|
||||||
Navigation.findNavController(requireView()).navigate(action);
|
Navigation.findNavController(requireView()).navigate(action);
|
||||||
}
|
}
|
||||||
@@ -123,7 +105,7 @@ public class EditTraitsFragment extends MCFragment {
|
|||||||
RecyclerView list;
|
RecyclerView list;
|
||||||
FloatingActionButton addTrait;
|
FloatingActionButton addTrait;
|
||||||
|
|
||||||
ViewHolder(@NonNull View root) {
|
ViewHolder(View root) {
|
||||||
list = root.findViewById(R.id.list);
|
list = root.findViewById(R.id.list);
|
||||||
addTrait = root.findViewById(R.id.add_trait);
|
addTrait = root.findViewById(R.id.add_trait);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,6 +229,8 @@ public class MonsterDetailFragment extends MCFragment {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// TODO: add lair actions, legendary actions, reactions, and regional actions
|
||||||
|
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
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="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".ui.editmonster.EditTraitListFragment">
|
tools:context=".ui.editmonster.EditTraitsFragment">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/list"
|
android:id="@+id/list"
|
||||||
|
|||||||
@@ -196,7 +196,7 @@
|
|||||||
</fragment>
|
</fragment>
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/editTraitListFragment"
|
android:id="@+id/editTraitListFragment"
|
||||||
android:name="com.majinnaibu.monstercards.ui.editmonster.EditTraitListFragment"
|
android:name="com.majinnaibu.monstercards.ui.editmonster.EditTraitsFragment"
|
||||||
android:label="EditTraitListFragment">
|
android:label="EditTraitListFragment">
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_editTraitListFragment_to_editTraitFragment"
|
android:id="@+id/action_editTraitListFragment_to_editTraitFragment"
|
||||||
|
|||||||
Reference in New Issue
Block a user