use of io.hefuyi.listener.mvp.model.Song in project ListenerMusicPlayer by hefuyicoder.
the class AlbumDetailPresenter method loadAlbumSongs.
@Override
public void loadAlbumSongs(long albumID) {
mCompositeSubscription.clear();
Subscription subscription = mUsecase.execute(new GetAlbumSongs.RequestValues(albumID)).getSongList().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<List<Song>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Song> songList) {
mView.showAlbumSongs(songList);
}
});
mCompositeSubscription.add(subscription);
}
use of io.hefuyi.listener.mvp.model.Song in project ListenerMusicPlayer by hefuyicoder.
the class AlbumSongLoader method getSongsForAlbum.
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) {
//When error occurs the track numbers have an extra 1000 or 2000 added, so decrease till normal.
trackNumber -= 1000;
}
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();
}
});
}
use of io.hefuyi.listener.mvp.model.Song in project ListenerMusicPlayer by hefuyicoder.
the class ArtistSongLoader method getSongsForArtist.
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();
}
});
}
use of io.hefuyi.listener.mvp.model.Song in project ListenerMusicPlayer by hefuyicoder.
the class SongLoader method getSongsWithScoreForCursor.
public static Observable<List<Song>> getSongsWithScoreForCursor(final Cursor cursor, final Cursor scoreCursor) {
return Observable.create(new Observable.OnSubscribe<List<Song>>() {
@Override
public void call(Subscriber<? super List<Song>> subscriber) {
List<Song> arrayList = new ArrayList<Song>();
if ((cursor != null && scoreCursor != null) && (cursor.moveToFirst() && scoreCursor.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 artistId = cursor.getInt(6);
long albumId = cursor.getLong(7);
String path = cursor.getString(8);
Song song = new Song(id, albumId, artistId, title, artist, album, duration, trackNumber, path);
song.setPlayCountScore(scoreCursor.getFloat(scoreCursor.getColumnIndex(SongPlayCount.SongPlayCountColumns.PLAYCOUNTSCORE)));
arrayList.add(song);
} while (cursor.moveToNext() && scoreCursor.moveToNext());
if (cursor != null) {
cursor.close();
}
if (scoreCursor != null) {
scoreCursor.close();
}
subscriber.onNext(arrayList);
subscriber.onCompleted();
}
});
}
use of io.hefuyi.listener.mvp.model.Song in project ListenerMusicPlayer by hefuyicoder.
the class AlbumAdapter method setOnPopupMenuListener.
private void setOnPopupMenuListener(final AlbumAdapter.ItemHolder itemHolder, final int position) {
itemHolder.popupMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu menu = new PopupMenu(mContext, v);
int adapterPosition = itemHolder.getAdapterPosition();
final Album album = arraylist.get(adapterPosition);
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()) {
case R.id.popup_album_addto_queue:
getSongListIdByAlbum(arraylist.get(position).id).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<long[]>() {
@Override
public void call(long[] ids) {
MusicPlayer.addToQueue(mContext, ids, -1, ListenerUtil.IdType.NA);
}
});
break;
case R.id.popup_album_addto_playlist:
getSongListIdByAlbum(arraylist.get(position).id).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<long[]>() {
@Override
public void call(long[] ids) {
ListenerUtil.showAddPlaylistDialog(mContext, ids);
}
});
break;
case R.id.popup_album_goto_artist:
NavigationUtil.goToArtist(mContext, arraylist.get(position).artistId, arraylist.get(position).artistName);
break;
case R.id.popup_artist_delete:
switch(action) {
case Constants.NAVIGATE_PLAYLIST_FAVOURATE:
getSongListIdByAlbum(album.id).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<long[]>() {
@Override
public void call(long[] ids) {
ListenerUtil.showDeleteFromFavourate(mContext, ids);
}
});
break;
case Constants.NAVIGATE_PLAYLIST_RECENTPLAY:
getSongListIdByAlbum(album.id).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<long[]>() {
@Override
public void call(long[] ids) {
ListenerUtil.showDeleteFromRecentlyPlay(mContext, ids);
}
});
break;
default:
AlbumSongLoader.getSongsForAlbum(mContext, arraylist.get(position).id).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<List<Song>>() {
@Override
public void call(List<Song> songs) {
long[] ids = new long[songs.size()];
int i = 0;
for (Song song : songs) {
ids[i] = song.id;
i++;
}
if (ids.length == 1) {
ListenerUtil.showDeleteDialog(mContext, songs.get(0).title, ids, new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
arraylist.remove(position);
notifyDataSetChanged();
}
});
} else {
String songCount = ListenerUtil.makeLabel(mContext, R.plurals.Nsongs, arraylist.get(position).songCount);
ListenerUtil.showDeleteDialog(mContext, songCount, ids, new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
arraylist.remove(position);
notifyDataSetChanged();
}
});
}
}
});
break;
}
break;
}
return false;
}
});
menu.inflate(R.menu.popup_album);
menu.show();
}
});
}
Aggregations