package io.hefuyi.listener.dataloader; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; import java.util.ArrayList; import java.util.List; import io.hefuyi.listener.mvp.model.Song; import io.hefuyi.listener.util.PreferencesUtility; import rx.Observable; import rx.Subscriber; /** * Created by hefuyi on 2016/11/4. */ public class ArtistSongLoader { public static Observable<List<Song>> getSongsForArtist(final Context context, final long artistID) { return Observable.create(new Observable.OnSubscribe<List<Song>>() { @Override public void call(Subscriber<? super List<Song>> subscriber) { Cursor cursor = makeArtistSongCursor(context, artistID); List<Song> songsList = new ArrayList<Song>(); if ((cursor != null) && (cursor.moveToFirst())) do { long id = cursor.getLong(0); String title = cursor.getString(1); String artist = cursor.getString(2); String album = cursor.getString(3); int duration = cursor.getInt(4); int trackNumber = cursor.getInt(5); long albumId = cursor.getInt(6); long artistId = artistID; songsList.add(new Song(id, albumId, artistId, title, artist, album, duration, trackNumber)); } while (cursor.moveToNext()); if (cursor != null){ cursor.close(); cursor = null; } subscriber.onNext(songsList); subscriber.onCompleted(); } }); } private static Cursor makeArtistSongCursor(Context context, long artistID) { ContentResolver contentResolver = context.getContentResolver(); final String artistSongSortOrder = PreferencesUtility.getInstance(context).getArtistSongSortOrder(); Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String string = "is_music=1 AND title != '' AND artist_id=" + artistID; return contentResolver.query(uri, new String[]{"_id", "title", "artist", "album", "duration", "track", "album_id"}, string, null, artistSongSortOrder); } }