From 01c255abca5e49291e3147ee0a5fe28b8ae180c0 Mon Sep 17 00:00:00 2001 From: Nicholas Narsing Date: Sat, 28 Apr 2018 00:39:35 -0400 Subject: [PATCH 1/4] Set fastscroll section name correctly by sort preference --- .../adapter/album/AlbumAdapter.java | 18 ++++++++++++- .../adapter/artist/ArtistAdapter.java | 12 ++++++++- .../gramophone/adapter/song/SongAdapter.java | 26 ++++++++++++++++++- .../gramophone/helper/SortOrder.java | 6 ++--- 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java index dfb79b95..eefbbe7a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java @@ -26,6 +26,8 @@ import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; +import com.kabouzeid.gramophone.util.PreferenceUtil; +import com.kabouzeid.gramophone.helper.SortOrder; import java.util.ArrayList; import java.util.List; @@ -186,7 +188,21 @@ public class AlbumAdapter extends AbsMultiSelectAdapter Date: Sat, 28 Apr 2018 02:07:52 -0400 Subject: [PATCH 2/4] 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 From 3b62a4578f208fb4f1af0bc6570d0035b0f9008d Mon Sep 17 00:00:00 2001 From: Nicholas Narsing Date: Sat, 28 Apr 2018 11:07:05 -0400 Subject: [PATCH 3/4] Change album,artist sort; fix menu selection bug --- .../gramophone/helper/SortOrder.java | 3 +- .../mainactivity/library/LibraryFragment.java | 39 +++++++++++-------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/SortOrder.java b/app/src/main/java/com/kabouzeid/gramophone/helper/SortOrder.java index 9736c206..6226ae24 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/SortOrder.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/SortOrder.java @@ -60,7 +60,8 @@ public final class SortOrder { + " DESC"; /* Album sort order artist */ - String ALBUM_ARTIST = MediaStore.Audio.Artists.DEFAULT_SORT_ORDER; + String ALBUM_ARTIST = MediaStore.Audio.Artists.DEFAULT_SORT_ORDER + + ", " + MediaStore.Audio.Albums.DEFAULT_SORT_ORDER; /* Album sort order year */ String ALBUM_YEAR = MediaStore.Audio.Albums.FIRST_YEAR + " DESC"; 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 572c2bed..45d22e65 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 @@ -201,25 +201,11 @@ 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); - } + setUpSortOrderMenu(absLibraryRecyclerViewCustomGridSizeFragment, menu.findItem(R.id.action_sort_order).getSubMenu()); } else { menu.removeItem(R.id.action_grid_size); menu.removeItem(R.id.action_colored_footers); + menu.removeItem(R.id.action_sort_order); } Activity activity = getActivity(); if (activity == null) return; @@ -353,6 +339,27 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde return false; } + private void setUpSortOrderMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortOrderMenu) { + String currentSortOrder = fragment.getSortOrder(); + sortOrderMenu.clear(); + + if (fragment instanceof AlbumsFragment) { + sortOrderMenu.add(0, R.id.action_album_sort_asc, 0, R.string.sort_a_z) + .setChecked(currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_A_Z)); + sortOrderMenu.add(0, R.id.action_album_sort_desc, 1, R.string.sort_z_a) + .setChecked(currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_Z_A)); + sortOrderMenu.add(0, R.id.action_album_sort_artist, 2, R.string.sort_artist) + .setChecked(currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_ARTIST)); + } else if (fragment instanceof ArtistsFragment) { + sortOrderMenu.add(0, R.id.action_artist_sort_asc, 0, R.string.sort_a_z) + .setChecked(currentSortOrder.equals(SortOrder.ArtistSortOrder.ARTIST_A_Z)); + sortOrderMenu.add(0, R.id.action_artist_sort_desc, 1, R.string.sort_z_a) + .setChecked(currentSortOrder.equals(SortOrder.ArtistSortOrder.ARTIST_Z_A)); + } + + sortOrderMenu.setGroupCheckable(0, true, true); + } + private boolean handleSortOrderMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) { String sortOrder = null; if (fragment instanceof AlbumsFragment) { From 60cb868beb1803e2ecb80a815a4659249ef311cc Mon Sep 17 00:00:00 2001 From: Nicholas Narsing Date: Sat, 28 Apr 2018 11:47:05 -0400 Subject: [PATCH 4/4] Support song ordering; add/fix album year sort --- .../adapter/album/AlbumAdapter.java | 3 +- .../gramophone/adapter/song/SongAdapter.java | 32 ++++++++--------- .../gramophone/helper/SortOrder.java | 3 +- .../mainactivity/library/LibraryFragment.java | 35 +++++++++++++++++++ .../library/pager/SongsFragment.java | 4 ++- .../gramophone/util/PreferenceUtil.java | 6 ++++ app/src/main/res/values/ids.xml | 6 ++++ app/src/main/res/values/strings.xml | 1 + 8 files changed, 68 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java index eefbbe7a..8fc86c44 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java @@ -198,8 +198,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter + + + + + + \ 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 789952f1..727ab34e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -299,4 +299,5 @@ Descending Artist Album + Year