Add sort order menu for artist & album

This commit is contained in:
Nicholas Narsing 2018-04-28 02:07:52 -04:00
commit 32da438ac4
No known key found for this signature in database
GPG key ID: 6C867A2AC16B645A
9 changed files with 138 additions and 0 deletions

View file

@ -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()) {

View file

@ -14,6 +14,7 @@ import com.kabouzeid.gramophone.util.Util;
*/
public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extends RecyclerView.Adapter, LM extends RecyclerView.LayoutManager> extends AbsLibraryPagerRecyclerViewFragment<A, LM> {
private int gridSize;
private String sortOrder;
private boolean usePaletteInitialized;
private boolean usePalette;
@ -49,6 +50,13 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
return usePalette;
}
public final String getSortOrder() {
if (sortOrder == null) {
sortOrder = loadSortOrder();
}
return sortOrder;
}
public void setAndSaveGridSize(final int gridSize) {
int oldLayoutRes = getItemLayoutRes();
this.gridSize = gridSize;
@ -72,6 +80,11 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
setUsePalette(usePalette);
}
public void setAndSaveSortOrder(final String sortOrder) {
this.sortOrder = sortOrder;
saveSortOrder(sortOrder);
}
/**
* @return whether the palette option should be available for the current item layout or not
*/
@ -132,6 +145,10 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
protected abstract void setGridSize(int gridSize);
protected abstract String loadSortOrder();
protected abstract void saveSortOrder(String sortOrder);
protected int getMaxGridSizeForList() {
if (isLandscape()) {
return getActivity().getResources().getInteger(R.integer.default_list_columns_land);

View file

@ -55,6 +55,18 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
return R.string.no_albums;
}
@Override
protected String loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getAlbumSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(getActivity()).setAlbumSortOrder(sortOrder);
onMediaStoreChanged();
getAdapter().notifyDataSetChanged();
}
@Override
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).albumColoredFooters();

View file

@ -62,6 +62,18 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
getLoaderManager().restartLoader(LOADER_ID, null, this);
}
@Override
protected String loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getArtistSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(getActivity()).setArtistSortOrder(sortOrder);
onMediaStoreChanged();
getAdapter().notifyDataSetChanged();
}
@Override
protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity());

View file

@ -73,6 +73,16 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
getLoaderManager().restartLoader(LOADER_ID, null, this);
}
@Override
protected String loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getSongSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
//PreferenceUtil.getInstance(getActivity()).setSongSortOrder(sortOrder);
}
@Override
protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getSongGridSize(getActivity());

View file

@ -222,6 +222,12 @@ public final class PreferenceUtil {
return mPreferences.getString(ARTIST_SORT_ORDER, SortOrder.ArtistSortOrder.ARTIST_A_Z);
}
public void setArtistSortOrder(final String sortOrder) {
final SharedPreferences.Editor editor = mPreferences.edit();
editor.putString(ARTIST_SORT_ORDER, sortOrder);
editor.apply();
}
public final String getArtistSongSortOrder() {
return mPreferences.getString(ARTIST_SONG_SORT_ORDER, SortOrder.ArtistSongSortOrder.SONG_A_Z);
}
@ -234,6 +240,12 @@ public final class PreferenceUtil {
return mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.AlbumSortOrder.ALBUM_A_Z);
}
public void setAlbumSortOrder(final String sortOrder) {
final SharedPreferences.Editor editor = mPreferences.edit();
editor.putString(ALBUM_SORT_ORDER, sortOrder);
editor.apply();
}
public final String getAlbumSongSortOrder() {
return mPreferences.getString(ALBUM_SONG_SORT_ORDER, SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST);
}

View file

@ -50,6 +50,13 @@
</menu>
</item>
<item
android:id="@+id/action_sort_order"
android:title="@string/action_sort">
<menu>
</menu>
</item>
<item
android:id="@+id/action_colored_footers"
android:checkable="true"

View file

@ -2,4 +2,10 @@
<resources>
<item name="action_new_playlist" type="id" />
<item name="action_show_lyrics" type="id" />
<item name="action_album_sort_asc" type="id" />
<item name="action_album_sort_desc" type="id" />
<item name="action_album_sort_artist" type="id" />
<item name="action_artist_sort_asc" type="id" />
<item name="action_artist_sort_desc" type="id" />
</resources>

View file

@ -294,4 +294,9 @@
<string name="library_categories">Library categories</string>
<string name="pref_summary_library_categories">Configure visibility and order of library categories.</string>
<string name="you_have_to_select_at_least_one_category">You have to select at least one category.</string>
<string name="action_sort">Sort order</string>
<string name="sort_a_z">Ascending</string>
<string name="sort_z_a">Descending</string>
<string name="sort_artist">Artist</string>
<string name="sort_album">Album</string>
</resources>