package com.kabouzeid.gramophone.loader; import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; import android.provider.MediaStore.Audio.AudioColumns; import android.support.annotation.NonNull; import com.kabouzeid.gramophone.model.PlaylistSong; import java.util.ArrayList; public class PlaylistSongLoader { @NonNull public static ArrayList<PlaylistSong> getPlaylistSongList(@NonNull final Context context, final int playlistId) { ArrayList<PlaylistSong> songs = new ArrayList<>(); Cursor cursor = makePlaylistSongCursor(context, playlistId); if (cursor != null && cursor.moveToFirst()) { do { songs.add(getPlaylistSongFromCursorImpl(cursor, playlistId)); } while (cursor.moveToNext()); } if (cursor != null) { cursor.close(); } return songs; } @NonNull private static PlaylistSong getPlaylistSongFromCursorImpl(@NonNull Cursor cursor, int playlistId) { final int id = cursor.getInt(0); final String title = cursor.getString(1); final int trackNumber = cursor.getInt(2); final int year = cursor.getInt(3); final long duration = cursor.getLong(4); final String data = cursor.getString(5); final int dateModified = cursor.getInt(6); final int albumId = cursor.getInt(7); final String albumName = cursor.getString(8); final int artistId = cursor.getInt(9); final String artistName = cursor.getString(10); final int idInPlaylist = cursor.getInt(11); return new PlaylistSong(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName, playlistId, idInPlaylist); } public static Cursor makePlaylistSongCursor(@NonNull final Context context, final int playlistId) { try { return context.getContentResolver().query( MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId), new String[]{ MediaStore.Audio.Playlists.Members.AUDIO_ID,// 0 AudioColumns.TITLE,// 1 AudioColumns.TRACK,// 2 AudioColumns.YEAR,// 3 AudioColumns.DURATION,// 4 AudioColumns.DATA,// 5 AudioColumns.DATE_MODIFIED,// 6 AudioColumns.ALBUM_ID,// 7 AudioColumns.ALBUM,// 8 AudioColumns.ARTIST_ID,// 9 AudioColumns.ARTIST,// 10 MediaStore.Audio.Playlists.Members._ID // 11 }, SongLoader.BASE_SELECTION, null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER); } catch (SecurityException e) { return null; } } }