From b9759f63646ef7a88cd2625b101f7e8fcd336f42 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Mon, 31 Aug 2020 23:04:56 -0700 Subject: [PATCH] Adds top level navigation and placeholder fragments. --- .../majinnaibu/monstercards/MainActivity.java | 5 +- .../ui/collections/CollectionsFragment.java | 20 ++- .../ui/collections/CollectionsViewModel.java | 2 +- .../monstercards/ui/home/HomeFragment.java | 35 ------ .../ui/library/LibraryFragment.java | 118 +++--------------- .../LibraryViewModel.java} | 10 +- .../notifications/NotificationsFragment.java | 35 ------ .../ui/search/SearchFragment.java | 44 ++----- .../SearchViewModel.java} | 8 +- .../main/res/drawable/ic_home_black_24dp.xml | 9 -- .../drawable/ic_notifications_black_24dp.xml | 9 -- .../app/src/main/res/layout/activity_main.xml | 10 +- .../app/src/main/res/layout/fragment_home.xml | 22 ---- .../src/main/res/layout/fragment_library.xml | 31 ++--- .../res/layout/fragment_notifications.xml | 22 ---- .../src/main/res/layout/fragment_search.xml | 33 ++--- .../app/src/main/res/menu/bottom_nav_menu.xml | 17 ++- .../main/res/navigation/mobile_navigation.xml | 49 ++++++-- Android/app/src/main/res/values/strings.xml | 5 +- 19 files changed, 134 insertions(+), 350 deletions(-) delete mode 100644 Android/app/src/main/java/com/majinnaibu/monstercards/ui/home/HomeFragment.java rename Android/app/src/main/java/com/majinnaibu/monstercards/ui/{notifications/NotificationsViewModel.java => library/LibraryViewModel.java} (57%) delete mode 100644 Android/app/src/main/java/com/majinnaibu/monstercards/ui/notifications/NotificationsFragment.java rename Android/app/src/main/java/com/majinnaibu/monstercards/ui/{home/HomeViewModel.java => search/SearchViewModel.java} (61%) delete mode 100644 Android/app/src/main/res/drawable/ic_home_black_24dp.xml delete mode 100644 Android/app/src/main/res/drawable/ic_notifications_black_24dp.xml delete mode 100644 Android/app/src/main/res/layout/fragment_home.xml delete mode 100644 Android/app/src/main/res/layout/fragment_notifications.xml diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/MainActivity.java b/Android/app/src/main/java/com/majinnaibu/monstercards/MainActivity.java index 01551a5..95179be 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/MainActivity.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/MainActivity.java @@ -20,7 +20,10 @@ public class MainActivity extends AppCompatActivity { // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( - R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications) + R.id.navigation_search, + R.id.navigation_dashboard, + R.id.navigation_collections, + R.id.navigation_library) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsFragment.java index a0fd733..45b711d 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsFragment.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsFragment.java @@ -7,21 +7,29 @@ import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.lifecycle.ViewModelProvider; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; import com.majinnaibu.monstercards.R; -import com.majinnaibu.monstercards.ui.shared.MCFragment; -public class CollectionsFragment extends MCFragment { +public class CollectionsFragment extends Fragment { private CollectionsViewModel collectionsViewModel; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - collectionsViewModel = new ViewModelProvider(this).get(CollectionsViewModel.class); + collectionsViewModel = + ViewModelProviders.of(this).get(CollectionsViewModel.class); View root = inflater.inflate(R.layout.fragment_collections, container, false); final TextView textView = root.findViewById(R.id.text_collections); - collectionsViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + collectionsViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); return root; } -} +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsViewModel.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsViewModel.java index 1ea5b1a..d81c4c5 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsViewModel.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/collections/CollectionsViewModel.java @@ -6,7 +6,7 @@ import androidx.lifecycle.ViewModel; public class CollectionsViewModel extends ViewModel { - private final MutableLiveData mText; + private MutableLiveData mText; public CollectionsViewModel() { mText = new MutableLiveData<>(); diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/home/HomeFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/home/HomeFragment.java deleted file mode 100644 index 938fa5f..0000000 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/home/HomeFragment.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.majinnaibu.monstercards.ui.home; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProviders; - -import com.majinnaibu.monstercards.R; - -public class HomeFragment extends Fragment { - - private HomeViewModel homeViewModel; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - homeViewModel = - ViewModelProviders.of(this).get(HomeViewModel.class); - View root = inflater.inflate(R.layout.fragment_home, container, false); - final TextView textView = root.findViewById(R.id.text_home); - homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } -} \ No newline at end of file diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java index 0499a93..eb19e35 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java @@ -1,121 +1,35 @@ package com.majinnaibu.monstercards.ui.library; -import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import androidx.annotation.NonNull; -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 androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; -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.shared.MCFragment; -import com.majinnaibu.monstercards.ui.shared.SwipeToDeleteCallback; -import com.majinnaibu.monstercards.utils.Logger; -import java.util.UUID; +public class LibraryFragment extends Fragment { -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -import io.reactivex.rxjava3.observers.DisposableCompletableObserver; -import io.reactivex.rxjava3.schedulers.Schedulers; - -public class LibraryFragment extends MCFragment { + private LibraryViewModel libraryViewModel; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + libraryViewModel = + ViewModelProviders.of(this).get(LibraryViewModel.class); View root = inflater.inflate(R.layout.fragment_library, container, false); - - FloatingActionButton fab = root.findViewById(R.id.fab); - assert fab != null; - setupAddMonsterButton(fab); - - final RecyclerView recyclerView = root.findViewById(R.id.monster_list); - assert recyclerView != null; - setupRecyclerView(recyclerView); - + final TextView textView = root.findViewById(R.id.text_library); + libraryViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); return root; } - - private void setupRecyclerView(@NonNull RecyclerView recyclerView) { - Context context = requireContext(); - MonsterRepository repository = this.getMonsterRepository(); - - LibraryRecyclerViewAdapter adapter = new LibraryRecyclerViewAdapter( - context, - repository.getMonsters(), - (monster) -> navigateToMonsterDetail(monster.id), - (monster) -> repository - .deleteMonster(monster) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new DisposableCompletableObserver() { - @Override - public void onComplete() { - } - - @Override - public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) { - Logger.logError(e); - } - })); - recyclerView.setAdapter(adapter); - - LinearLayoutManager layoutManager = new LinearLayoutManager(context); - recyclerView.setLayoutManager(layoutManager); - - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, layoutManager.getOrientation()); - recyclerView.addItemDecoration(dividerItemDecoration); - - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(requireContext(), (position, direction) -> adapter.deleteItem(position), null)); - itemTouchHelper.attachToRecyclerView(recyclerView); - } - - private void setupAddMonsterButton(@NonNull FloatingActionButton fab) { - fab.setOnClickListener(view -> { - Monster monster = new Monster(); - monster.name = getString(R.string.default_monster_name); - MonsterRepository repository = this.getMonsterRepository(); - repository.addMonster(monster) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe( - new DisposableCompletableObserver() { - @Override - public void onComplete() { - View view = getView(); - assert view != null; - Snackbar.make( - view, - getString(R.string.snackbar_monster_created, monster.name), - Snackbar.LENGTH_LONG) - .setAction("Action", (_view) -> navigateToMonsterDetail(monster.id)) - .show(); - } - - @Override - public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) { - Logger.logError("Error creating monster", e); - View view = getView(); - assert view != null; - Snackbar.make(view, getString(R.string.snackbar_failed_to_create_monster), Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); - } - }); - }); - } - - protected void navigateToMonsterDetail(@NonNull UUID monsterId) { - NavDirections action = LibraryFragmentDirections.actionNavigationLibraryToNavigationMonster(monsterId.toString()); - Navigation.findNavController(requireView()).navigate(action); - } } diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/notifications/NotificationsViewModel.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryViewModel.java similarity index 57% rename from Android/app/src/main/java/com/majinnaibu/monstercards/ui/notifications/NotificationsViewModel.java rename to Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryViewModel.java index 4384287..2aa32e2 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/notifications/NotificationsViewModel.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryViewModel.java @@ -1,19 +1,19 @@ -package com.majinnaibu.monstercards.ui.notifications; +package com.majinnaibu.monstercards.ui.library; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; -public class NotificationsViewModel extends ViewModel { +public class LibraryViewModel extends ViewModel { private MutableLiveData mText; - public NotificationsViewModel() { + public LibraryViewModel() { mText = new MutableLiveData<>(); - mText.setValue("This is notifications fragment"); + mText.setValue("This is library fragment"); } public LiveData getText() { return mText; } -} \ No newline at end of file +} diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/notifications/NotificationsFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/notifications/NotificationsFragment.java deleted file mode 100644 index 0533fa9..0000000 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/notifications/NotificationsFragment.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.majinnaibu.monstercards.ui.notifications; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProviders; - -import com.majinnaibu.monstercards.R; - -public class NotificationsFragment extends Fragment { - - private NotificationsViewModel notificationsViewModel; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - notificationsViewModel = - ViewModelProviders.of(this).get(NotificationsViewModel.class); - View root = inflater.inflate(R.layout.fragment_notifications, container, false); - final TextView textView = root.findViewById(R.id.text_notifications); - notificationsViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } -} \ No newline at end of file diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchFragment.java index 12ab602..0f61fb6 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchFragment.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchFragment.java @@ -1,53 +1,35 @@ package com.majinnaibu.monstercards.ui.search; import android.os.Bundle; -import android.text.Editable; -import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; import com.majinnaibu.monstercards.R; -import com.majinnaibu.monstercards.data.MonsterRepository; -import com.majinnaibu.monstercards.ui.shared.MCFragment; -public class SearchFragment extends MCFragment { +public class SearchFragment extends Fragment { + + private SearchViewModel searchViewModel; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + searchViewModel = + ViewModelProviders.of(this).get(SearchViewModel.class); View root = inflater.inflate(R.layout.fragment_search, container, false); - MonsterRepository repository = this.getMonsterRepository(); - SearchResultsRecyclerViewAdapter adapter = new SearchResultsRecyclerViewAdapter(repository, null); - final RecyclerView recyclerView = root.findViewById(R.id.monster_list); - assert recyclerView != null; - setupRecyclerView(recyclerView, adapter); - - final TextView textView = root.findViewById(R.id.search_query); - textView.addTextChangedListener(new TextWatcher() { + final TextView textView = root.findViewById(R.id.text_search); + searchViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - } - - @Override - public void afterTextChanged(Editable editable) { - adapter.doSearch(textView.getText().toString()); + public void onChanged(@Nullable String s) { + textView.setText(s); } }); - return root; } - - private void setupRecyclerView(@NonNull RecyclerView recyclerView, @NonNull SearchResultsRecyclerViewAdapter adapter) { - recyclerView.setAdapter(adapter); - recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - } } diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/home/HomeViewModel.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchViewModel.java similarity index 61% rename from Android/app/src/main/java/com/majinnaibu/monstercards/ui/home/HomeViewModel.java rename to Android/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchViewModel.java index e27037e..6e3a48b 100644 --- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/home/HomeViewModel.java +++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchViewModel.java @@ -1,16 +1,16 @@ -package com.majinnaibu.monstercards.ui.home; +package com.majinnaibu.monstercards.ui.search; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; -public class HomeViewModel extends ViewModel { +public class SearchViewModel extends ViewModel { private MutableLiveData mText; - public HomeViewModel() { + public SearchViewModel() { mText = new MutableLiveData<>(); - mText.setValue("This is home fragment"); + mText.setValue("This is search fragment"); } public LiveData getText() { diff --git a/Android/app/src/main/res/drawable/ic_home_black_24dp.xml b/Android/app/src/main/res/drawable/ic_home_black_24dp.xml deleted file mode 100644 index f8bb0b5..0000000 --- a/Android/app/src/main/res/drawable/ic_home_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/Android/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/Android/app/src/main/res/drawable/ic_notifications_black_24dp.xml deleted file mode 100644 index 78b75c3..0000000 --- a/Android/app/src/main/res/drawable/ic_notifications_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/Android/app/src/main/res/layout/activity_main.xml b/Android/app/src/main/res/layout/activity_main.xml index 38c0aa8..a163bb2 100644 --- a/Android/app/src/main/res/layout/activity_main.xml +++ b/Android/app/src/main/res/layout/activity_main.xml @@ -3,8 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/container" android:layout_width="match_parent" - android:layout_height="match_parent" - android:paddingTop="?attr/actionBarSize"> + android:layout_height="match_parent"> \ No newline at end of file diff --git a/Android/app/src/main/res/layout/fragment_home.xml b/Android/app/src/main/res/layout/fragment_home.xml deleted file mode 100644 index f3d9b08..0000000 --- a/Android/app/src/main/res/layout/fragment_home.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Android/app/src/main/res/layout/fragment_library.xml b/Android/app/src/main/res/layout/fragment_library.xml index 09c3ba1..71c3329 100644 --- a/Android/app/src/main/res/layout/fragment_library.xml +++ b/Android/app/src/main/res/layout/fragment_library.xml @@ -6,28 +6,17 @@ android:layout_height="match_parent" tools:context=".ui.library.LibraryFragment"> - - - - - + app:layout_constraintTop_toTopOf="parent" /> + \ No newline at end of file diff --git a/Android/app/src/main/res/layout/fragment_notifications.xml b/Android/app/src/main/res/layout/fragment_notifications.xml deleted file mode 100644 index d417935..0000000 --- a/Android/app/src/main/res/layout/fragment_notifications.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Android/app/src/main/res/layout/fragment_search.xml b/Android/app/src/main/res/layout/fragment_search.xml index 57c71f2..e6e5fe6 100644 --- a/Android/app/src/main/res/layout/fragment_search.xml +++ b/Android/app/src/main/res/layout/fragment_search.xml @@ -4,37 +4,20 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.search.SearchFragment" - tools:targetApi="o"> + tools:context=".ui.search.SearchFragment"> - - - - - + \ No newline at end of file diff --git a/Android/app/src/main/res/menu/bottom_nav_menu.xml b/Android/app/src/main/res/menu/bottom_nav_menu.xml index fb6d040..c613122 100644 --- a/Android/app/src/main/res/menu/bottom_nav_menu.xml +++ b/Android/app/src/main/res/menu/bottom_nav_menu.xml @@ -2,9 +2,9 @@ + android:id="@+id/navigation_search" + android:icon="@drawable/ic_search_black_24dp" + android:title="@string/title_search" /> + android:id="@+id/navigation_collections" + android:icon="@drawable/ic_collections_black_24dp" + android:title="@string/title_collections" /> + + \ No newline at end of file diff --git a/Android/app/src/main/res/navigation/mobile_navigation.xml b/Android/app/src/main/res/navigation/mobile_navigation.xml index 6076f03..d37a2b9 100644 --- a/Android/app/src/main/res/navigation/mobile_navigation.xml +++ b/Android/app/src/main/res/navigation/mobile_navigation.xml @@ -3,23 +3,52 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mobile_navigation" - app:startDestination="@+id/navigation_home"> + app:startDestination="@+id/navigation_dashboard"> + android:id="@+id/navigation_search" + android:name="com.majinnaibu.monstercards.ui.search.SearchFragment" + android:label="@string/title_search" + tools:layout="@layout/fragment_search" > + + + tools:layout="@layout/fragment_dashboard" > + + + android:id="@+id/navigation_collections" + android:name="com.majinnaibu.monstercards.ui.collections.CollectionsFragment" + android:label="@string/title_collections" + tools:layout="@layout/fragment_collections" > + + + + + + + + + \ No newline at end of file diff --git a/Android/app/src/main/res/values/strings.xml b/Android/app/src/main/res/values/strings.xml index facc835..b171c0f 100644 --- a/Android/app/src/main/res/values/strings.xml +++ b/Android/app/src/main/res/values/strings.xml @@ -1,6 +1,7 @@ MonsterCards - Home Dashboard - Notifications + Search + Collections + Library \ No newline at end of file