Merge branch 'sorting' of https://github.com/soren121/Phonograph into soren121-sorting

This commit is contained in:
Karim Abou Zeid 2018-04-29 22:28:16 +02:00
commit ddc74f2b4b
13 changed files with 250 additions and 8 deletions

View file

@ -26,6 +26,8 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; 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.ArrayList;
import java.util.List; import java.util.List;
@ -186,7 +188,20 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
@NonNull @NonNull
@Override @Override
public String getSectionName(int position) { public String getSectionName(int position) {
return MusicUtil.getSectionName(dataSet.get(position).getTitle()); @Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getAlbumSortOrder()) {
case SortOrder.AlbumSortOrder.ALBUM_A_Z:
case SortOrder.AlbumSortOrder.ALBUM_Z_A:
sectionName = dataSet.get(position).getTitle();
break;
case SortOrder.AlbumSortOrder.ALBUM_ARTIST:
sectionName = dataSet.get(position).getArtistName();
break;
case SortOrder.AlbumSortOrder.ALBUM_YEAR:
return Integer.toString(dataSet.get(position).getYear());
}
return MusicUtil.getSectionName(sectionName);
} }
public class ViewHolder extends MediaEntryViewHolder { public class ViewHolder extends MediaEntryViewHolder {

View file

@ -19,12 +19,14 @@ import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
import com.kabouzeid.gramophone.glide.ArtistGlideRequest; import com.kabouzeid.gramophone.glide.ArtistGlideRequest;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget; import com.kabouzeid.gramophone.glide.PhonographColoredTarget;
import com.kabouzeid.gramophone.helper.SortOrder;
import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Artist; import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import java.util.ArrayList; import java.util.ArrayList;
@ -173,7 +175,15 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
@NonNull @NonNull
@Override @Override
public String getSectionName(int position) { public String getSectionName(int position) {
return MusicUtil.getSectionName(dataSet.get(position).getName()); @Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getArtistSortOrder()) {
case SortOrder.ArtistSortOrder.ARTIST_A_Z:
case SortOrder.ArtistSortOrder.ARTIST_Z_A:
sectionName = dataSet.get(position).getName();
break;
}
return MusicUtil.getSectionName(sectionName);
} }
public class ViewHolder extends MediaEntryViewHolder { public class ViewHolder extends MediaEntryViewHolder {

View file

@ -21,12 +21,14 @@ import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget; import com.kabouzeid.gramophone.glide.PhonographColoredTarget;
import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.SortOrder;
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import java.util.ArrayList; import java.util.ArrayList;
@ -184,7 +186,27 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
@NonNull @NonNull
@Override @Override
public String getSectionName(int position) { public String getSectionName(int position) {
return showSectionName ? MusicUtil.getSectionName(dataSet.get(position).title) : ""; if (!showSectionName) {
return "";
}
@Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getSongSortOrder()) {
case SortOrder.SongSortOrder.SONG_A_Z:
case SortOrder.SongSortOrder.SONG_Z_A:
sectionName = dataSet.get(position).title;
break;
case SortOrder.SongSortOrder.SONG_ALBUM:
sectionName = dataSet.get(position).albumName;
break;
case SortOrder.SongSortOrder.SONG_ARTIST:
sectionName = dataSet.get(position).artistName;
break;
case SortOrder.SongSortOrder.SONG_YEAR:
return Integer.toString(dataSet.get(position).year);
}
return MusicUtil.getSectionName(sectionName);
} }
public class ViewHolder extends MediaEntryViewHolder { public class ViewHolder extends MediaEntryViewHolder {

View file

@ -60,11 +60,11 @@ public final class SortOrder {
+ " DESC"; + " DESC";
/* Album sort order artist */ /* Album sort order artist */
String ALBUM_ARTIST = MediaStore.Audio.Albums.ARTIST; String ALBUM_ARTIST = MediaStore.Audio.Artists.DEFAULT_SORT_ORDER
+ ", " + MediaStore.Audio.Albums.DEFAULT_SORT_ORDER;
/* Album sort order year */ /* Album sort order year */
String ALBUM_YEAR = MediaStore.Audio.Albums.FIRST_YEAR + " DESC"; String ALBUM_YEAR = MediaStore.Audio.Media.YEAR + " DESC";
} }
/** /**
@ -78,10 +78,10 @@ public final class SortOrder {
String SONG_Z_A = SONG_A_Z + " DESC"; String SONG_Z_A = SONG_A_Z + " DESC";
/* Song sort order artist */ /* Song sort order artist */
String SONG_ARTIST = MediaStore.Audio.Media.ARTIST; String SONG_ARTIST = MediaStore.Audio.Artists.DEFAULT_SORT_ORDER;
/* Song sort order album */ /* Song sort order album */
String SONG_ALBUM = MediaStore.Audio.Media.ALBUM; String SONG_ALBUM = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER;
/* Song sort order year */ /* Song sort order year */
String SONG_YEAR = MediaStore.Audio.Media.YEAR + " DESC"; String SONG_YEAR = MediaStore.Audio.Media.YEAR + " DESC";

View file

@ -29,6 +29,7 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.MusicLibraryPagerAdapter; import com.kabouzeid.gramophone.adapter.MusicLibraryPagerAdapter;
import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog; import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.SortOrder;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.loader.SongLoader;
import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.ui.activities.MainActivity;
@ -36,6 +37,9 @@ import com.kabouzeid.gramophone.ui.activities.SearchActivity;
import com.kabouzeid.gramophone.ui.fragments.mainactivity.AbsMainActivityFragment; 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.AbsLibraryPagerRecyclerViewCustomGridSizeFragment;
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.PlaylistsFragment; 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.ui.fragments.mainactivity.library.pager.SongsFragment;
import com.kabouzeid.gramophone.util.PhonographColorUtil; import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.Util;
@ -197,9 +201,12 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
menu.findItem(R.id.action_colored_footers).setChecked(absLibraryRecyclerViewCustomGridSizeFragment.usePalette()); menu.findItem(R.id.action_colored_footers).setChecked(absLibraryRecyclerViewCustomGridSizeFragment.usePalette());
menu.findItem(R.id.action_colored_footers).setEnabled(absLibraryRecyclerViewCustomGridSizeFragment.canUsePalette()); menu.findItem(R.id.action_colored_footers).setEnabled(absLibraryRecyclerViewCustomGridSizeFragment.canUsePalette());
setUpSortOrderMenu(absLibraryRecyclerViewCustomGridSizeFragment, menu.findItem(R.id.action_sort_order).getSubMenu());
} else { } else {
menu.removeItem(R.id.action_grid_size); menu.removeItem(R.id.action_grid_size);
menu.removeItem(R.id.action_colored_footers); menu.removeItem(R.id.action_colored_footers);
menu.removeItem(R.id.action_sort_order);
} }
Activity activity = getActivity(); Activity activity = getActivity();
if (activity == null) return; if (activity == null) return;
@ -228,6 +235,9 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
if (handleGridSizeMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) { if (handleGridSizeMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) {
return true; return true;
} }
if (handleSortOrderMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) {
return true;
}
} }
int id = item.getItemId(); int id = item.getItemId();
@ -330,6 +340,95 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
return false; 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));
sortOrderMenu.add(0, R.id.action_album_sort_year, 3, R.string.sort_year)
.setChecked(currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_YEAR));
} 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));
} else if (fragment instanceof SongsFragment) {
sortOrderMenu.add(0, R.id.action_song_sort_asc, 0, R.string.sort_a_z)
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_A_Z));
sortOrderMenu.add(0, R.id.action_song_sort_desc, 1, R.string.sort_z_a)
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_Z_A));
sortOrderMenu.add(0, R.id.action_song_sort_artist, 2, R.string.sort_artist)
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_ARTIST));
sortOrderMenu.add(0, R.id.action_song_sort_album, 3, R.string.sort_album)
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_ALBUM));
sortOrderMenu.add(0, R.id.action_song_sort_year, 4, R.string.sort_year)
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_YEAR));
}
sortOrderMenu.setGroupCheckable(0, true, true);
}
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;
case R.id.action_album_sort_year:
sortOrder = SortOrder.AlbumSortOrder.ALBUM_YEAR;
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;
}
} else if (fragment instanceof SongsFragment) {
switch (item.getItemId()) {
case R.id.action_song_sort_asc:
sortOrder = SortOrder.SongSortOrder.SONG_A_Z;
break;
case R.id.action_song_sort_desc:
sortOrder = SortOrder.SongSortOrder.SONG_Z_A;
break;
case R.id.action_song_sort_artist:
sortOrder = SortOrder.SongSortOrder.SONG_ARTIST;
break;
case R.id.action_song_sort_album:
sortOrder = SortOrder.SongSortOrder.SONG_ALBUM;
break;
case R.id.action_song_sort_year:
sortOrder = SortOrder.SongSortOrder.SONG_YEAR;
break;
}
}
if (sortOrder != null) {
item.setChecked(true);
fragment.setAndSaveSortOrder(sortOrder);
return true;
}
return false;
}
@Override @Override
public boolean handleBackPress() { public boolean handleBackPress() {
if (cab != null && cab.isActive()) { 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> { public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extends RecyclerView.Adapter, LM extends RecyclerView.LayoutManager> extends AbsLibraryPagerRecyclerViewFragment<A, LM> {
private int gridSize; private int gridSize;
private String sortOrder;
private boolean usePaletteInitialized; private boolean usePaletteInitialized;
private boolean usePalette; private boolean usePalette;
@ -49,6 +50,13 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
return usePalette; return usePalette;
} }
public final String getSortOrder() {
if (sortOrder == null) {
sortOrder = loadSortOrder();
}
return sortOrder;
}
public void setAndSaveGridSize(final int gridSize) { public void setAndSaveGridSize(final int gridSize) {
int oldLayoutRes = getItemLayoutRes(); int oldLayoutRes = getItemLayoutRes();
this.gridSize = gridSize; this.gridSize = gridSize;
@ -72,6 +80,11 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
setUsePalette(usePalette); 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 * @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 void setGridSize(int gridSize);
protected abstract String loadSortOrder();
protected abstract void saveSortOrder(String sortOrder);
protected int getMaxGridSizeForList() { protected int getMaxGridSizeForList() {
if (isLandscape()) { if (isLandscape()) {
return getActivity().getResources().getInteger(R.integer.default_list_columns_land); 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; 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 @Override
public boolean loadUsePalette() { public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).albumColoredFooters(); return PreferenceUtil.getInstance(getActivity()).albumColoredFooters();

View file

@ -62,6 +62,18 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
getLoaderManager().restartLoader(LOADER_ID, null, this); 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 @Override
protected int loadGridSize() { protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity()); return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity());

View file

@ -73,6 +73,18 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
getLoaderManager().restartLoader(LOADER_ID, null, this); 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);
onMediaStoreChanged();
getAdapter().notifyDataSetChanged();
}
@Override @Override
protected int loadGridSize() { protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getSongGridSize(getActivity()); 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); 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() { public final String getArtistSongSortOrder() {
return mPreferences.getString(ARTIST_SONG_SORT_ORDER, SortOrder.ArtistSongSortOrder.SONG_A_Z); 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); 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() { public final String getAlbumSongSortOrder() {
return mPreferences.getString(ALBUM_SONG_SORT_ORDER, SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST); return mPreferences.getString(ALBUM_SONG_SORT_ORDER, SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST);
} }
@ -242,6 +254,12 @@ public final class PreferenceUtil {
return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z); return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z);
} }
public void setSongSortOrder(final String sortOrder) {
final SharedPreferences.Editor editor = mPreferences.edit();
editor.putString(SONG_SORT_ORDER, sortOrder);
editor.apply();
}
public final String getGenreSortOrder() { public final String getGenreSortOrder() {
return mPreferences.getString(GENRE_SORT_ORDER, SortOrder.GenreSortOrder.GENRE_A_Z); return mPreferences.getString(GENRE_SORT_ORDER, SortOrder.GenreSortOrder.GENRE_A_Z);
} }

View file

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

View file

@ -2,4 +2,16 @@
<resources> <resources>
<item name="action_new_playlist" type="id" /> <item name="action_new_playlist" type="id" />
<item name="action_show_lyrics" 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_album_sort_year" type="id" />
<item name="action_artist_sort_asc" type="id" />
<item name="action_artist_sort_desc" type="id" />
<item name="action_song_sort_asc" type="id" />
<item name="action_song_sort_desc" type="id" />
<item name="action_song_sort_artist" type="id" />
<item name="action_song_sort_album" type="id" />
<item name="action_song_sort_year" type="id" />
</resources> </resources>

View file

@ -295,4 +295,10 @@
<string name="library_categories">Library categories</string> <string name="library_categories">Library categories</string>
<string name="pref_summary_library_categories">Configure visibility and order of 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="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>
<string name="sort_year">Year</string>
</resources> </resources>