Sort songs directly in the SQL statement, instead of Collections.sort().
This commit is contained in:
parent
524273228d
commit
c48c2dadaf
6 changed files with 16 additions and 66 deletions
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -5,30 +5,30 @@ import android.provider.MediaStore.Audio.AudioColumns;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
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.Album;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
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;
|
|
||||||
import java.util.Comparator;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class AlbumLoader {
|
public class AlbumLoader {
|
||||||
|
|
||||||
|
public static String getSongLoaderSortOrder(Context context) {
|
||||||
|
return PreferenceUtil.getInstance(context).getAlbumSortOrder() + ", " + PreferenceUtil.getInstance(context).getAlbumSongSortOrder();
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static ArrayList<Album> getAllAlbums(@NonNull final Context context) {
|
public static ArrayList<Album> getAllAlbums(@NonNull final Context context) {
|
||||||
ArrayList<Song> songs = SongLoader.getSongs(SongLoader.makeSongCursor(
|
ArrayList<Song> songs = SongLoader.getSongs(SongLoader.makeSongCursor(
|
||||||
context,
|
context,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
PreferenceUtil.getInstance(context).getAlbumSongSortOrder())
|
getSongLoaderSortOrder(context))
|
||||||
);
|
);
|
||||||
return splitIntoAlbums(songs, new AlbumASCComparator());
|
return splitIntoAlbums(songs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|
@ -37,23 +37,21 @@ public class AlbumLoader {
|
||||||
context,
|
context,
|
||||||
AudioColumns.ALBUM + " LIKE ?",
|
AudioColumns.ALBUM + " LIKE ?",
|
||||||
new String[]{"%" + query + "%"},
|
new String[]{"%" + query + "%"},
|
||||||
PreferenceUtil.getInstance(context).getAlbumSongSortOrder())
|
getSongLoaderSortOrder(context))
|
||||||
);
|
);
|
||||||
return splitIntoAlbums(songs, new AlbumASCComparator());
|
return splitIntoAlbums(songs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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)}, PreferenceUtil.getInstance(context).getAlbumSongSortOrder()));
|
ArrayList<Song> songs = SongLoader.getSongs(SongLoader.makeSongCursor(context, AudioColumns.ALBUM_ID + "=?", new String[]{String.valueOf(albumId)}, getSongLoaderSortOrder(context)));
|
||||||
Collections.sort(songs, new SongTrackComparator());
|
|
||||||
return new Album(songs);
|
return new Album(songs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@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<>();
|
ArrayList<Album> albums = new ArrayList<>();
|
||||||
if (songs != null) {
|
if (songs != null) {
|
||||||
Collections.sort(songs, new SongTrackComparator());
|
|
||||||
for (Song song : songs) {
|
for (Song song : songs) {
|
||||||
Album album = get(albums, song.albumId);
|
Album album = get(albums, song.albumId);
|
||||||
if (album == null) {
|
if (album == null) {
|
||||||
|
|
@ -63,7 +61,6 @@ public class AlbumLoader {
|
||||||
album.songs.add(song);
|
album.songs.add(song);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Collections.sort(albums, albumComparator);
|
|
||||||
return albums;
|
return albums;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,17 +4,15 @@ import android.content.Context;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.comparator.AlbumASCComparator;
|
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class ArtistAlbumLoader {
|
public class ArtistAlbumLoader extends AlbumLoader {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static ArrayList<Album> getAlbums(@NonNull final Context context, final int artistId) {
|
public static ArrayList<Album> getAlbums(@NonNull final Context context, final int artistId) {
|
||||||
|
|
@ -22,8 +20,8 @@ public class ArtistAlbumLoader {
|
||||||
context,
|
context,
|
||||||
MediaStore.Audio.AudioColumns.ARTIST_ID + "=?",
|
MediaStore.Audio.AudioColumns.ARTIST_ID + "=?",
|
||||||
new String[]{String.valueOf(artistId)},
|
new String[]{String.valueOf(artistId)},
|
||||||
PreferenceUtil.getInstance(context).getAlbumSongSortOrder()
|
getSongLoaderSortOrder(context)
|
||||||
));
|
));
|
||||||
return AlbumLoader.splitIntoAlbums(songs, new AlbumASCComparator());
|
return splitIntoAlbums(songs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,16 +13,16 @@ import java.util.ArrayList;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class ArtistSongLoader {
|
public class ArtistSongLoader extends SongLoader {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static ArrayList<Song> getArtistSongList(@NonNull final Context context, final int artistId) {
|
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) {
|
public static Cursor makeArtistSongCursor(@NonNull final Context context, final int artistId) {
|
||||||
try {
|
try {
|
||||||
return SongLoader.makeSongCursor(
|
return makeSongCursor(
|
||||||
context,
|
context,
|
||||||
MediaStore.Audio.AudioColumns.ARTIST_ID + "=?",
|
MediaStore.Audio.AudioColumns.ARTIST_ID + "=?",
|
||||||
new String[]{
|
new String[]{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue