From 3eee78ad4eb3456e680a444f7b4f0120f87fcf33 Mon Sep 17 00:00:00 2001 From: antonio Date: Thu, 24 Mar 2022 22:22:15 +0100 Subject: [PATCH] Added the ability to sort items in the genre catalogue --- .../play/adapter/GenreCatalogueAdapter.java | 16 ++++++++++ .../cappielloantonio/play/model/Genre.java | 3 ++ .../ui/fragment/GenreCatalogueFragment.java | 29 +++++++++++++++++-- .../res/layout/fragment_genre_catalogue.xml | 20 ++++++++++++- .../main/res/menu/sort_genre_popup_menu.xml | 9 ++++++ 5 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/menu/sort_genre_popup_menu.xml diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/GenreCatalogueAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/GenreCatalogueAdapter.java index d4fab17b..294dec0b 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/GenreCatalogueAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/GenreCatalogueAdapter.java @@ -13,11 +13,14 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.cappielloantonio.play.R; +import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Genre; import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.util.MusicUtil; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; public class GenreCatalogueAdapter extends RecyclerView.Adapter implements Filterable { @@ -129,4 +132,17 @@ public class GenreCatalogueAdapter extends RecyclerView.Adapter { if ((bind.genreInfoSector.getHeight() + verticalOffset) < (2 * ViewCompat.getMinimumHeight(bind.toolbar))) { bind.toolbar.setTitle(R.string.genre_catalogue_title); @@ -99,7 +101,7 @@ public class GenreCatalogueFragment extends Fragment { } @SuppressLint("ClickableViewAccessibility") - private void initArtistCatalogueView() { + private void initGenreCatalogueView() { bind.genreCatalogueRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2)); bind.genreCatalogueRecyclerView.addItemDecoration(new GridItemDecoration(2, 16, false)); bind.genreCatalogueRecyclerView.setHasFixedSize(true); @@ -120,6 +122,8 @@ public class GenreCatalogueFragment extends Fragment { hideKeyboard(v); return false; }); + + bind.genreListSortImageView.setOnClickListener(view -> showPopupMenu(view, R.menu.sort_genre_popup_menu)); } @Override @@ -151,4 +155,23 @@ public class GenreCatalogueFragment extends Fragment { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } + + private void showPopupMenu(View view, int menuResource) { + PopupMenu popup = new PopupMenu(requireContext(), view); + popup.getMenuInflater().inflate(menuResource, popup.getMenu()); + + popup.setOnMenuItemClickListener(menuItem -> { + if (menuItem.getItemId() == R.id.menu_genre_sort_name) { + genreCatalogueAdapter.sort(Genre.ORDER_BY_NAME); + return true; + } else if (menuItem.getItemId() == R.id.menu_genre_sort_random) { + genreCatalogueAdapter.sort(Genre.ORDER_BY_RANDOM); + return true; + } + + return false; + }); + + popup.show(); + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_genre_catalogue.xml b/app/src/main/res/layout/fragment_genre_catalogue.xml index 6c9539c6..25c0c060 100644 --- a/app/src/main/res/layout/fragment_genre_catalogue.xml +++ b/app/src/main/res/layout/fragment_genre_catalogue.xml @@ -49,7 +49,7 @@ android:layout_height="52dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp" - android:layout_marginEnd="16dp" + android:layout_marginEnd="8dp" android:layout_marginBottom="12dp" android:insetLeft="0dp" android:insetTop="0dp" @@ -58,6 +58,24 @@ app:cornerRadius="30dp" app:icon="@drawable/ic_filter_list" app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/genre_list_sort_image_view" /> + +