package com.marverenic.music.viewmodel;
import android.content.Context;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.PopupMenu;
import android.view.Gravity;
import android.view.View;
import com.marverenic.music.R;
import com.marverenic.music.activity.BaseActivity;
import com.marverenic.music.activity.instance.AlbumActivity;
import com.marverenic.music.activity.instance.ArtistActivity;
import com.marverenic.music.model.Song;
import java.util.List;
import timber.log.Timber;
public class PlaylistSongViewModel extends SongViewModel {
private Context mContext;
private OnPlaylistEntriesChangeListener mRemoveListener;
public PlaylistSongViewModel(BaseActivity activity, List<Song> songs,
OnPlaylistEntriesChangeListener listener) {
super(activity, songs);
mContext = activity;
mRemoveListener = listener;
}
public interface OnPlaylistEntriesChangeListener {
void onPlaylistEntriesChange();
}
@Override
public View.OnClickListener onClickMenu() {
return v -> {
final PopupMenu menu = new PopupMenu(mContext, v, Gravity.END);
menu.inflate(R.menu.instance_song_playlist);
menu.setOnMenuItemClickListener(onMenuItemClick(v));
menu.show();
};
}
private PopupMenu.OnMenuItemClickListener onMenuItemClick(View view) {
return menuItem -> {
switch (menuItem.getItemId()) {
case R.id.menu_item_queue_item_next:
mPlayerController.queueNext(getReference());
return true;
case R.id.menu_item_queue_item_last:
mPlayerController.queueLast(getReference());
return true;
case R.id.menu_item_navigate_to_artist:
mMusicStore.findArtistById(getReference().getArtistId()).subscribe(
artist -> {
mContext.startActivity(ArtistActivity.newIntent(mContext, artist));
}, throwable -> {
Timber.e(throwable, "Failed to find artist");
});
return true;
case R.id.menu_item_navigate_to_album:
mMusicStore.findAlbumById(getReference().getAlbumId()).subscribe(
album -> {
mContext.startActivity(AlbumActivity.newIntent(mContext, album));
}, throwable -> {
Timber.e(throwable, "Failed to find album");
});
return true;
case R.id.menu_item_remove:
removeFromPlaylist(view);
return true;
}
return false;
};
}
private void removeFromPlaylist(View snackbarContainer) {
Song removed = getReference();
int removedIndex = getIndex();
getSongs().remove(getIndex());
mRemoveListener.onPlaylistEntriesChange();
String songName = removed.getSongName();
String message = mContext.getString(R.string.message_removed_song, songName);
Snackbar.make(snackbarContainer, message, Snackbar.LENGTH_LONG)
.setAction(R.string.action_undo, view -> {
getSongs().add(removedIndex, removed);
mRemoveListener.onPlaylistEntriesChange();
}).show();
}
}