From 32da438ac41e8762e0b7f74806fcea00c4d9fb06 Mon Sep 17 00:00:00 2001 From: Nicholas Narsing Date: Sat, 28 Apr 2018 02:07:52 -0400 Subject: [PATCH] Add sort order menu for artist & album --- .../mainactivity/library/LibraryFragment.java | 57 +++++++++++++++++++ ...gerRecyclerViewCustomGridSizeFragment.java | 17 ++++++ .../library/pager/AlbumsFragment.java | 12 ++++ .../library/pager/ArtistsFragment.java | 12 ++++ .../library/pager/SongsFragment.java | 10 ++++ .../gramophone/util/PreferenceUtil.java | 12 ++++ app/src/main/res/menu/menu_main.xml | 7 +++ app/src/main/res/values/ids.xml | 6 ++ app/src/main/res/values/strings.xml | 5 ++ 9 files changed, 138 insertions(+) diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java index 4ca97716..572c2bed 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java @@ -29,6 +29,7 @@ import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.MusicLibraryPagerAdapter; import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.helper.SortOrder; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.ui.activities.MainActivity; @@ -36,6 +37,8 @@ import com.kabouzeid.gramophone.ui.activities.SearchActivity; import com.kabouzeid.gramophone.ui.fragments.mainactivity.AbsMainActivityFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.AbsLibraryPagerRecyclerViewCustomGridSizeFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.PlaylistsFragment; +import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.AlbumsFragment; +import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.ArtistsFragment; import com.kabouzeid.gramophone.util.PhonographColorUtil; import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.Util; @@ -197,6 +200,23 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde menu.findItem(R.id.action_colored_footers).setChecked(absLibraryRecyclerViewCustomGridSizeFragment.usePalette()); menu.findItem(R.id.action_colored_footers).setEnabled(absLibraryRecyclerViewCustomGridSizeFragment.canUsePalette()); + + if (currentFragment instanceof AlbumsFragment) { + SubMenu sortOrderMenu = menu.findItem(R.id.action_sort_order).getSubMenu(); + String currentSortOrder = absLibraryRecyclerViewCustomGridSizeFragment.getSortOrder(); + sortOrderMenu.clear(); + sortOrderMenu.add(0, R.id.action_album_sort_asc, 0, R.string.sort_a_z).setChecked(currentSortOrder == SortOrder.AlbumSortOrder.ALBUM_A_Z); + sortOrderMenu.add(0, R.id.action_album_sort_desc, 1, R.string.sort_z_a).setChecked(currentSortOrder == SortOrder.AlbumSortOrder.ALBUM_Z_A); + sortOrderMenu.add(0, R.id.action_album_sort_artist, 2, R.string.sort_artist).setChecked(currentSortOrder == SortOrder.AlbumSortOrder.ALBUM_ARTIST); + sortOrderMenu.setGroupCheckable(0, true, true); + } else if (currentFragment instanceof ArtistsFragment) { + SubMenu sortOrderMenu = menu.findItem(R.id.action_sort_order).getSubMenu(); + String currentSortOrder = absLibraryRecyclerViewCustomGridSizeFragment.getSortOrder(); + sortOrderMenu.clear(); + sortOrderMenu.add(0, R.id.action_artist_sort_asc, 0, R.string.sort_a_z).setChecked(currentSortOrder == SortOrder.ArtistSortOrder.ARTIST_A_Z); + sortOrderMenu.add(0, R.id.action_artist_sort_desc, 1, R.string.sort_z_a).setChecked(currentSortOrder == SortOrder.ArtistSortOrder.ARTIST_Z_A); + sortOrderMenu.setGroupCheckable(0, true, true); + } } else { menu.removeItem(R.id.action_grid_size); menu.removeItem(R.id.action_colored_footers); @@ -228,6 +248,9 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde if (handleGridSizeMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) { return true; } + if (handleSortOrderMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) { + return true; + } } int id = item.getItemId(); @@ -330,6 +353,40 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde return false; } + private boolean handleSortOrderMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) { + String sortOrder = null; + if (fragment instanceof AlbumsFragment) { + switch (item.getItemId()) { + case R.id.action_album_sort_asc: + sortOrder = SortOrder.AlbumSortOrder.ALBUM_A_Z; + break; + case R.id.action_album_sort_desc: + sortOrder = SortOrder.AlbumSortOrder.ALBUM_Z_A; + break; + case R.id.action_album_sort_artist: + sortOrder = SortOrder.AlbumSortOrder.ALBUM_ARTIST; + break; + } + } else if (fragment instanceof ArtistsFragment) { + switch (item.getItemId()) { + case R.id.action_artist_sort_asc: + sortOrder = SortOrder.ArtistSortOrder.ARTIST_A_Z; + break; + case R.id.action_artist_sort_desc: + sortOrder = SortOrder.ArtistSortOrder.ARTIST_Z_A; + break; + } + } + + if (sortOrder != null) { + item.setChecked(true); + fragment.setAndSaveSortOrder(sortOrder); + return true; + } + + return false; + } + @Override public boolean handleBackPress() { if (cab != null && cab.isActive()) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java index 17261755..95078f46 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java @@ -14,6 +14,7 @@ import com.kabouzeid.gramophone.util.Util; */ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment extends AbsLibraryPagerRecyclerViewFragment { private int gridSize; + private String sortOrder; private boolean usePaletteInitialized; private boolean usePalette; @@ -49,6 +50,13 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 08b52471..789952f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -294,4 +294,9 @@ Library categories Configure visibility and order of library categories. You have to select at least one category. + Sort order + Ascending + Descending + Artist + Album