From 1cf9ae73d7de096491639c74de52713b832501de Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Sat, 1 May 2021 00:45:48 -0700 Subject: [PATCH] Adds floating action button to the library screen to create new monsters. Adds a snackbar on successful muonster creation to view the new monster. --- .../ui/library/LibraryFragment.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java index 05edb71..6660ba8 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java @@ -6,13 +6,24 @@ import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.navigation.NavDirections; +import androidx.navigation.Navigation; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; import com.majinnaibu.monstercards.R; import com.majinnaibu.monstercards.data.MonsterRepository; +import com.majinnaibu.monstercards.models.Monster; import com.majinnaibu.monstercards.ui.MCFragment; import com.majinnaibu.monstercards.ui.MonsterListRecyclerViewAdapter; +import com.majinnaibu.monstercards.utils.Logger; + +import java.util.UUID; + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.schedulers.Schedulers; public class LibraryFragment extends MCFragment { @@ -22,6 +33,30 @@ public class LibraryFragment extends MCFragment { ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_library, container, false); + FloatingActionButton fab = root.findViewById(R.id.fab); + fab.setOnClickListener(view -> { + Monster monster = new Monster(); + monster.name = "Unnamed Monster"; + MonsterRepository repository = this.getMonsterRepository(); + repository.addMonster(monster) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(() -> { + Snackbar.make( + getView(), + String.format("%s created", monster.name), + Snackbar.LENGTH_LONG) + .setAction("Action", (_view) -> { + navigateToMonsterDetail(monster.id); + }) + .show(); + }, throwable -> { + Logger.logError("Error creating monster", throwable); + Snackbar.make(getView(), "Failed to create monster", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + }); + }); + RecyclerView recyclerView = root.findViewById(R.id.monster_list); assert recyclerView != null; setupRecyclerView(recyclerView); @@ -41,5 +76,11 @@ public class LibraryFragment extends MCFragment { recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); } + + protected void navigateToMonsterDetail(UUID monsterId) { + NavDirections action = LibraryFragmentDirections.actionNavigationLibraryToNavigationMonster(monsterId.toString()); + Navigation.findNavController(getView()).navigate(action); + } + } }