package com.kabouzeid.gramophone.loader; import android.content.Context; import android.database.Cursor; import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.MediaStore.Audio.PlaylistsColumns; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.kabouzeid.gramophone.model.Playlist; import java.util.ArrayList; public class PlaylistLoader { @NonNull public static ArrayList<Playlist> getAllPlaylists(@NonNull final Context context) { return getAllPlaylists(makePlaylistCursor(context, null, null)); } @NonNull public static Playlist getPlaylist(@NonNull final Context context, final int playlistId) { return getPlaylist(makePlaylistCursor( context, BaseColumns._ID + "=?", new String[]{ String.valueOf(playlistId) } )); } @NonNull public static Playlist getPlaylist(@NonNull final Context context, final String playlistName) { return getPlaylist(makePlaylistCursor( context, PlaylistsColumns.NAME + "=?", new String[]{ playlistName } )); } @NonNull public static Playlist getPlaylist(@Nullable final Cursor cursor) { Playlist playlist = new Playlist(); if (cursor != null && cursor.moveToFirst()) { playlist = getPlaylistFromCursorImpl(cursor); } if (cursor != null) cursor.close(); return playlist; } @NonNull public static ArrayList<Playlist> getAllPlaylists(@Nullable final Cursor cursor) { ArrayList<Playlist> playlists = new ArrayList<>(); if (cursor != null && cursor.moveToFirst()) { do { playlists.add(getPlaylistFromCursorImpl(cursor)); } while (cursor.moveToNext()); } if (cursor != null) cursor.close(); return playlists; } @NonNull private static Playlist getPlaylistFromCursorImpl(@NonNull final Cursor cursor) { final int id = cursor.getInt(0); final String name = cursor.getString(1); return new Playlist(id, name); } @Nullable public static Cursor makePlaylistCursor(@NonNull final Context context, final String selection, final String[] values) { try { return context.getContentResolver().query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, new String[]{ /* 0 */ BaseColumns._ID, /* 1 */ PlaylistsColumns.NAME }, selection, values, MediaStore.Audio.Playlists.DEFAULT_SORT_ORDER); } catch (SecurityException e) { return null; } } }