Search in sources :

Example 1 with Song

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);
}
Also used : GetAlbumSongs(io.hefuyi.listener.mvp.usecase.GetAlbumSongs) Song(io.hefuyi.listener.mvp.model.Song) List(java.util.List) CompositeSubscription(rx.subscriptions.CompositeSubscription) Subscription(rx.Subscription)

Example 2 with Song

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();
        }
    });
}
Also used : Song(io.hefuyi.listener.mvp.model.Song) List(java.util.List) ArrayList(java.util.ArrayList) Cursor(android.database.Cursor) Observable(rx.Observable)

Example 3 with Song

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();
        }
    });
}
Also used : Song(io.hefuyi.listener.mvp.model.Song) List(java.util.List) ArrayList(java.util.ArrayList) Cursor(android.database.Cursor) Observable(rx.Observable)

Example 4 with Song

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();
        }
    });
}
Also used : FavoriteSong(io.hefuyi.listener.provider.FavoriteSong) Song(io.hefuyi.listener.mvp.model.Song) ArrayList(java.util.ArrayList) List(java.util.List) Observable(rx.Observable)

Example 5 with Song

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();
        }
    });
}
Also used : MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) Album(io.hefuyi.listener.mvp.model.Album) MenuItem(android.view.MenuItem) ImageView(android.widget.ImageView) FastScrollRecyclerView(io.hefuyi.listener.widget.fastscroller.FastScrollRecyclerView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) TextView(android.widget.TextView) Song(io.hefuyi.listener.mvp.model.Song) DialogAction(com.afollestad.materialdialogs.DialogAction) NonNull(android.support.annotation.NonNull) List(java.util.List) PopupMenu(android.widget.PopupMenu)

Aggregations

Song (io.hefuyi.listener.mvp.model.Song)26 List (java.util.List)16 Subscription (rx.Subscription)7 CompositeSubscription (rx.subscriptions.CompositeSubscription)7 RecyclerView (android.support.v7.widget.RecyclerView)6 MenuItem (android.view.MenuItem)6 View (android.view.View)6 ImageView (android.widget.ImageView)6 PopupMenu (android.widget.PopupMenu)6 TextView (android.widget.TextView)6 DialogAction (com.afollestad.materialdialogs.DialogAction)6 MaterialDialog (com.afollestad.materialdialogs.MaterialDialog)6 ArrayList (java.util.ArrayList)6 NonNull (android.support.annotation.NonNull)5 Observable (rx.Observable)4 Cursor (android.database.Cursor)3 Album (io.hefuyi.listener.mvp.model.Album)3 Artist (io.hefuyi.listener.mvp.model.Artist)3 GetSongs (io.hefuyi.listener.mvp.usecase.GetSongs)3 FastScrollRecyclerView (io.hefuyi.listener.widget.fastscroller.FastScrollRecyclerView)3