Merge branch 'soren121-sorting'
This commit is contained in:
commit
091d0a98f4
15 changed files with 276 additions and 12 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
|
@ -45,7 +46,9 @@ public class AlbumLoader {
|
||||||
@NonNull
|
@NonNull
|
||||||
public static Album getAlbum(@NonNull final Context context, int albumId) {
|
public static Album getAlbum(@NonNull final Context context, int albumId) {
|
||||||
ArrayList<Song> songs = SongLoader.getSongs(SongLoader.makeSongCursor(context, AudioColumns.ALBUM_ID + "=?", new String[]{String.valueOf(albumId)}, getSongLoaderSortOrder(context)));
|
ArrayList<Song> songs = SongLoader.getSongs(SongLoader.makeSongCursor(context, AudioColumns.ALBUM_ID + "=?", new String[]{String.valueOf(albumId)}, getSongLoaderSortOrder(context)));
|
||||||
return new Album(songs);
|
Album album = new Album(songs);
|
||||||
|
sortSongsByTrackNumber(album);
|
||||||
|
return album;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|
@ -56,6 +59,9 @@ public class AlbumLoader {
|
||||||
getOrCreateAlbum(albums, song.albumId).songs.add(song);
|
getOrCreateAlbum(albums, song.albumId).songs.add(song);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (Album album : albums) {
|
||||||
|
sortSongsByTrackNumber(album);
|
||||||
|
}
|
||||||
return albums;
|
return albums;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,4 +75,8 @@ public class AlbumLoader {
|
||||||
albums.add(album);
|
albums.add(album);
|
||||||
return album;
|
return album;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void sortSongsByTrackNumber(Album album) {
|
||||||
|
Collections.sort(album.songs, (o1, o2) -> o1.trackNumber - o2.trackNumber);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,8 +70,8 @@ public class ArtistLoader {
|
||||||
return artist;
|
return artist;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Artist album = new Artist();
|
Artist artist = new Artist();
|
||||||
artists.add(album);
|
artists.add(artist);
|
||||||
return album;
|
return artist;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,13 +29,17 @@ 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;
|
||||||
import com.kabouzeid.gramophone.ui.activities.SearchActivity;
|
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.AlbumsFragment;
|
||||||
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.ArtistsFragment;
|
||||||
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.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_order_asc, 0, R.string.sort_order_a_z)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_A_Z));
|
||||||
|
sortOrderMenu.add(0, R.id.action_album_sort_order_desc, 1, R.string.sort_order_z_a)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_Z_A));
|
||||||
|
sortOrderMenu.add(0, R.id.action_album_sort_order_artist, 2, R.string.sort_order_artist)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_ARTIST));
|
||||||
|
sortOrderMenu.add(0, R.id.action_album_sort_order_year, 3, R.string.sort_order_year)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_YEAR));
|
||||||
|
} else if (fragment instanceof ArtistsFragment) {
|
||||||
|
sortOrderMenu.add(0, R.id.action_artist_sort_order_asc, 0, R.string.sort_order_a_z)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.ArtistSortOrder.ARTIST_A_Z));
|
||||||
|
sortOrderMenu.add(0, R.id.action_artist_sort_order_desc, 1, R.string.sort_order_z_a)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.ArtistSortOrder.ARTIST_Z_A));
|
||||||
|
} else if (fragment instanceof SongsFragment) {
|
||||||
|
sortOrderMenu.add(0, R.id.action_song_sort_order_asc, 0, R.string.sort_order_a_z)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_A_Z));
|
||||||
|
sortOrderMenu.add(0, R.id.action_song_sort_order_desc, 1, R.string.sort_order_z_a)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_Z_A));
|
||||||
|
sortOrderMenu.add(0, R.id.action_song_sort_order_artist, 2, R.string.sort_order_artist)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_ARTIST));
|
||||||
|
sortOrderMenu.add(0, R.id.action_song_sort_order_album, 3, R.string.sort_order_album)
|
||||||
|
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_ALBUM));
|
||||||
|
sortOrderMenu.add(0, R.id.action_song_sort_order_year, 4, R.string.sort_order_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_order_asc:
|
||||||
|
sortOrder = SortOrder.AlbumSortOrder.ALBUM_A_Z;
|
||||||
|
break;
|
||||||
|
case R.id.action_album_sort_order_desc:
|
||||||
|
sortOrder = SortOrder.AlbumSortOrder.ALBUM_Z_A;
|
||||||
|
break;
|
||||||
|
case R.id.action_album_sort_order_artist:
|
||||||
|
sortOrder = SortOrder.AlbumSortOrder.ALBUM_ARTIST;
|
||||||
|
break;
|
||||||
|
case R.id.action_album_sort_order_year:
|
||||||
|
sortOrder = SortOrder.AlbumSortOrder.ALBUM_YEAR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (fragment instanceof ArtistsFragment) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.action_artist_sort_order_asc:
|
||||||
|
sortOrder = SortOrder.ArtistSortOrder.ARTIST_A_Z;
|
||||||
|
break;
|
||||||
|
case R.id.action_artist_sort_order_desc:
|
||||||
|
sortOrder = SortOrder.ArtistSortOrder.ARTIST_Z_A;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (fragment instanceof SongsFragment) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.action_song_sort_order_asc:
|
||||||
|
sortOrder = SortOrder.SongSortOrder.SONG_A_Z;
|
||||||
|
break;
|
||||||
|
case R.id.action_song_sort_order_desc:
|
||||||
|
sortOrder = SortOrder.SongSortOrder.SONG_Z_A;
|
||||||
|
break;
|
||||||
|
case R.id.action_song_sort_order_artist:
|
||||||
|
sortOrder = SortOrder.SongSortOrder.SONG_ARTIST;
|
||||||
|
break;
|
||||||
|
case R.id.action_song_sort_order_album:
|
||||||
|
sortOrder = SortOrder.SongSortOrder.SONG_ALBUM;
|
||||||
|
break;
|
||||||
|
case R.id.action_song_sort_order_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()) {
|
||||||
|
|
|
||||||
|
|
@ -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,12 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
|
||||||
setUsePalette(usePalette);
|
setUsePalette(usePalette);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setAndSaveSortOrder(final String sortOrder) {
|
||||||
|
this.sortOrder = sortOrder;
|
||||||
|
saveSortOrder(sortOrder);
|
||||||
|
setSortOrder(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 +146,12 @@ 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 abstract void setSortOrder(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);
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,21 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setSortOrder(String sortOrder) {
|
||||||
|
getLoaderManager().restartLoader(LOADER_ID, null, this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean loadUsePalette() {
|
public boolean loadUsePalette() {
|
||||||
return PreferenceUtil.getInstance(getActivity()).albumColoredFooters();
|
return PreferenceUtil.getInstance(getActivity()).albumColoredFooters();
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,21 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setSortOrder(String sortOrder) {
|
||||||
|
getLoaderManager().restartLoader(LOADER_ID, null, this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int loadGridSize() {
|
protected int loadGridSize() {
|
||||||
return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity());
|
return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity());
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,21 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setSortOrder(String sortOrder) {
|
||||||
|
getLoaderManager().restartLoader(LOADER_ID, null, this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int loadGridSize() {
|
protected int loadGridSize() {
|
||||||
return PreferenceUtil.getInstance(getActivity()).getSongGridSize(getActivity());
|
return PreferenceUtil.getInstance(getActivity()).getSongGridSize(getActivity());
|
||||||
|
|
|
||||||
|
|
@ -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.commit();
|
||||||
|
}
|
||||||
|
|
||||||
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.commit();
|
||||||
|
}
|
||||||
|
|
||||||
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.commit();
|
||||||
|
}
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,13 @@
|
||||||
</menu>
|
</menu>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_sort_order"
|
||||||
|
android:title="@string/action_sort_order">
|
||||||
|
<menu>
|
||||||
|
</menu>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_colored_footers"
|
android:id="@+id/action_colored_footers"
|
||||||
android:checkable="true"
|
android:checkable="true"
|
||||||
|
|
|
||||||
|
|
@ -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_order_asc" type="id" />
|
||||||
|
<item name="action_album_sort_order_desc" type="id" />
|
||||||
|
<item name="action_album_sort_order_artist" type="id" />
|
||||||
|
<item name="action_album_sort_order_year" type="id" />
|
||||||
|
<item name="action_artist_sort_order_asc" type="id" />
|
||||||
|
<item name="action_artist_sort_order_desc" type="id" />
|
||||||
|
<item name="action_song_sort_order_asc" type="id" />
|
||||||
|
<item name="action_song_sort_order_desc" type="id" />
|
||||||
|
<item name="action_song_sort_order_artist" type="id" />
|
||||||
|
<item name="action_song_sort_order_album" type="id" />
|
||||||
|
<item name="action_song_sort_order_year" type="id" />
|
||||||
</resources>
|
</resources>
|
||||||
|
|
@ -297,4 +297,10 @@
|
||||||
<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_scan_directory">Scan directory</string>
|
<string name="action_scan_directory">Scan directory</string>
|
||||||
<string name="scan_media">Scan media</string>
|
<string name="scan_media">Scan media</string>
|
||||||
|
<string name="action_sort_order">Sort order</string>
|
||||||
|
<string name="sort_order_a_z">Ascending</string>
|
||||||
|
<string name="sort_order_z_a">Descending</string>
|
||||||
|
<string name="sort_order_artist">Artist</string>
|
||||||
|
<string name="sort_order_album">Album</string>
|
||||||
|
<string name="sort_order_year">Year</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue