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 AlbumSongLoader {
public static Observable<List<Song>> getSongsForAlbum(final Context context, final long albumID) {
return Observable.create(new Observable.OnSubscribe<List<Song>>() {
@Override
public void call(Subscriber<? super List<Song>> subscriber) {
Cursor cursor = makeAlbumSongCursor(context, albumID);
List<Song> arrayList = 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);
/*This fixes bug where some track numbers displayed as 100 or 200*/
while (trackNumber >= 1000) {
trackNumber -= 1000; //When error occurs the track numbers have an extra 1000 or 2000 added, so decrease till normal.
}
long artistId = cursor.getInt(6);
long albumId = albumID;
arrayList.add(new Song(id, albumId, artistId, title, artist, album, duration, trackNumber));
}
while (cursor.moveToNext());
if (cursor != null){
cursor.close();
}
subscriber.onNext(arrayList);
subscriber.onCompleted();
}
});
}
private static Cursor makeAlbumSongCursor(Context context, long albumID) {
ContentResolver contentResolver = context.getContentResolver();
final String albumSongSortOrder = PreferencesUtility.getInstance(context).getAlbumSongSortOrder();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String string = "is_music=1 AND title != '' AND album_id=" + albumID;
Cursor cursor = contentResolver.query(uri, new String[]{"_id", "title", "artist", "album", "duration", "track", "artist_id"}, string, null, albumSongSortOrder);
return cursor;
}
}