Sort songs directly in the SQL statement, instead of Collections.sort().

This commit is contained in:
Karim Abou Zeid 2016-01-04 17:53:27 +01:00
commit c48c2dadaf
6 changed files with 16 additions and 66 deletions

View file

@ -1,15 +0,0 @@
package com.kabouzeid.gramophone.comparator;
import com.kabouzeid.gramophone.model.Album;
import java.util.Comparator;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumASCComparator implements Comparator<Album> {
@Override
public int compare(Album lhs, Album rhs) {
return lhs.getTitle().compareTo(rhs.getTitle());
}
}

View file

@ -1,15 +0,0 @@
package com.kabouzeid.gramophone.comparator;
import com.kabouzeid.gramophone.model.Album;
import java.util.Comparator;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumDESComparator implements Comparator<Album> {
@Override
public int compare(Album lhs, Album rhs) {
return rhs.getTitle().compareTo(lhs.getTitle());
}
}

View file

@ -1,15 +0,0 @@
package com.kabouzeid.gramophone.comparator;
import com.kabouzeid.gramophone.model.Song;
import java.util.Comparator;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class SongTrackComparator implements Comparator<Song> {
@Override
public int compare(Song lhs, Song rhs) {
return lhs.trackNumber - rhs.trackNumber;
}
}

View file

@ -5,30 +5,30 @@ import android.provider.MediaStore.Audio.AudioColumns;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.kabouzeid.gramophone.comparator.AlbumASCComparator;
import com.kabouzeid.gramophone.comparator.SongTrackComparator;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumLoader {
public static String getSongLoaderSortOrder(Context context) {
return PreferenceUtil.getInstance(context).getAlbumSortOrder() + ", " + PreferenceUtil.getInstance(context).getAlbumSongSortOrder();
}
@NonNull
public static ArrayList<Album> getAllAlbums(@NonNull final Context context) {
ArrayList<Song> songs = SongLoader.getSongs(SongLoader.makeSongCursor(
context,
null,
null,
PreferenceUtil.getInstance(context).getAlbumSongSortOrder())
getSongLoaderSortOrder(context))
);
return splitIntoAlbums(songs, new AlbumASCComparator());
return splitIntoAlbums(songs);
}
@NonNull
@ -37,23 +37,21 @@ public class AlbumLoader {
context,
AudioColumns.ALBUM + " LIKE ?",
new String[]{"%" + query + "%"},
PreferenceUtil.getInstance(context).getAlbumSongSortOrder())
getSongLoaderSortOrder(context))
);
return splitIntoAlbums(songs, new AlbumASCComparator());
return splitIntoAlbums(songs);
}
@NonNull
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)}, PreferenceUtil.getInstance(context).getAlbumSongSortOrder()));
Collections.sort(songs, new SongTrackComparator());
ArrayList<Song> songs = SongLoader.getSongs(SongLoader.makeSongCursor(context, AudioColumns.ALBUM_ID + "=?", new String[]{String.valueOf(albumId)}, getSongLoaderSortOrder(context)));
return new Album(songs);
}
@NonNull
public static ArrayList<Album> splitIntoAlbums(@Nullable final ArrayList<Song> songs, Comparator<Album> albumComparator) {
public static ArrayList<Album> splitIntoAlbums(@Nullable final ArrayList<Song> songs) {
ArrayList<Album> albums = new ArrayList<>();
if (songs != null) {
Collections.sort(songs, new SongTrackComparator());
for (Song song : songs) {
Album album = get(albums, song.albumId);
if (album == null) {
@ -63,7 +61,6 @@ public class AlbumLoader {
album.songs.add(song);
}
}
Collections.sort(albums, albumComparator);
return albums;
}

View file

@ -4,17 +4,15 @@ import android.content.Context;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import com.kabouzeid.gramophone.comparator.AlbumASCComparator;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistAlbumLoader {
public class ArtistAlbumLoader extends AlbumLoader {
@NonNull
public static ArrayList<Album> getAlbums(@NonNull final Context context, final int artistId) {
@ -22,8 +20,8 @@ public class ArtistAlbumLoader {
context,
MediaStore.Audio.AudioColumns.ARTIST_ID + "=?",
new String[]{String.valueOf(artistId)},
PreferenceUtil.getInstance(context).getAlbumSongSortOrder()
getSongLoaderSortOrder(context)
));
return AlbumLoader.splitIntoAlbums(songs, new AlbumASCComparator());
return splitIntoAlbums(songs);
}
}

View file

@ -13,16 +13,16 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistSongLoader {
public class ArtistSongLoader extends SongLoader {
@NonNull
public static ArrayList<Song> getArtistSongList(@NonNull final Context context, final int artistId) {
return SongLoader.getSongs(makeArtistSongCursor(context, artistId));
return getSongs(makeArtistSongCursor(context, artistId));
}
public static Cursor makeArtistSongCursor(@NonNull final Context context, final int artistId) {
try {
return SongLoader.makeSongCursor(
return makeSongCursor(
context,
MediaStore.Audio.AudioColumns.ARTIST_ID + "=?",
new String[]{