package com.simplecity.amp_library.ui.adapters;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import com.simplecity.amp_library.model.Album;
import com.simplecity.amp_library.model.AlbumArtist;
import com.simplecity.amp_library.model.Song;
import com.simplecity.amp_library.ui.modelviews.AlbumArtistView;
import com.simplecity.amp_library.ui.modelviews.AlbumView;
import com.simplecity.amp_library.ui.modelviews.MultiItemView;
import com.simplecity.amp_library.ui.modelviews.SongView;
import com.simplecity.amp_library.ui.modelviews.SuggestedSongView;
import com.simplecity.amp_library.ui.modelviews.ViewType;
import java.util.List;
public class SearchAdapter extends ItemAdapter {
public interface SearchListener {
void onItemClick(AlbumArtist albumArtist);
void onItemClick(Album album);
void onItemClick(Song song, List<Song> allSongs);
void onOverflowClick(View v, AlbumArtist albumArtist);
void onOverflowClick(View v, Album album);
void onOverflowClick(View v, Song song);
}
private SearchListener listener;
public void setListener(SearchListener listener) {
this.listener = listener;
}
public Object getItem(int position) {
return items.get(position).getItem();
}
@Override
protected void attachListeners(RecyclerView.ViewHolder viewHolder) {
super.attachListeners(viewHolder);
if (viewHolder instanceof MultiItemView.ViewHolder) {
//MultiItemView type is ambiguous, so we have to check the type of item at current viewholder
viewHolder.itemView.setOnClickListener(v -> {
if (listener != null && viewHolder.getAdapterPosition() != -1) {
switch (items.get(viewHolder.getAdapterPosition()).getViewType()) {
case ViewType.ARTIST_CARD:
case ViewType.ARTIST_LIST:
listener.onItemClick(((AlbumArtistView) items.get(viewHolder.getAdapterPosition())).albumArtist);
break;
case ViewType.ALBUM_CARD:
case ViewType.ALBUM_CARD_LARGE:
case ViewType.ALBUM_LIST_SMALL:
case ViewType.ALBUM_LIST:
listener.onItemClick(((AlbumView) items.get(viewHolder.getAdapterPosition())).album);
break;
case ViewType.SUGGESTED_SONG:
case ViewType.SONG:
listener.onItemClick(((SuggestedSongView) items.get(viewHolder.getAdapterPosition())).song, Stream.of(items)
.filter(adaptableItem -> adaptableItem instanceof SongView)
.map(adaptableItem -> ((SongView) adaptableItem).getItem())
.collect(Collectors.toList()));
break;
}
}
});
((MultiItemView.ViewHolder) viewHolder).overflowButton.setOnClickListener(v -> {
if (listener != null && viewHolder.getAdapterPosition() != -1) {
switch (items.get(viewHolder.getAdapterPosition()).getViewType()) {
case ViewType.ARTIST_CARD:
case ViewType.ARTIST_LIST:
listener.onOverflowClick(v, ((AlbumArtistView) items.get(viewHolder.getAdapterPosition())).albumArtist);
break;
case ViewType.ALBUM_CARD:
case ViewType.ALBUM_CARD_LARGE:
case ViewType.ALBUM_LIST_SMALL:
case ViewType.ALBUM_LIST:
listener.onOverflowClick(v, ((AlbumView) items.get(viewHolder.getAdapterPosition())).album);
break;
case ViewType.SUGGESTED_SONG:
listener.onOverflowClick(v, ((SuggestedSongView) items.get(viewHolder.getAdapterPosition())).song);
break;
}
}
});
} else if (viewHolder instanceof SongView.ViewHolder) {
viewHolder.itemView.setOnClickListener(v -> {
if (listener != null && viewHolder.getAdapterPosition() != -1) {
listener.onItemClick(((SongView) items.get(viewHolder.getAdapterPosition())).song, Stream.of(items)
.filter(adaptableItem -> adaptableItem instanceof SongView)
.map(adaptableItem -> ((SongView) adaptableItem).getItem())
.collect(Collectors.toList()));
}
});
((SongView.ViewHolder) viewHolder).overflowButton.setOnClickListener(v -> {
if (listener != null && viewHolder.getAdapterPosition() != -1) {
listener.onOverflowClick(v, ((SongView) items.get(viewHolder.getAdapterPosition())).song);
}
});
}
}
}