package com.simplecity.amp_library.ui.adapters; import android.support.v7.widget.RecyclerView; import android.view.View; 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.SuggestedHeaderView; import com.simplecity.amp_library.ui.modelviews.SuggestedSongView; import com.simplecity.amp_library.ui.modelviews.ViewType; public class SuggestedAdapter extends ItemAdapter { private SuggestedListener listener; public interface SuggestedListener { void onItemClick(ItemAdapter adapter, View v, int position, Object item); void onOverflowClick(View v, int position, Object item); } public void setListener(SuggestedListener listener) { this.listener = listener; } @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: listener.onItemClick(this, v, viewHolder.getAdapterPosition(), ((AlbumArtistView) items.get(viewHolder.getAdapterPosition())).albumArtist); break; case ViewType.ALBUM_CARD: case ViewType.ALBUM_CARD_LARGE: case ViewType.ALBUM_LIST_SMALL: listener.onItemClick(this, v, viewHolder.getAdapterPosition(), ((AlbumView) items.get(viewHolder.getAdapterPosition())).album); break; case ViewType.SUGGESTED_SONG: listener.onItemClick(this, v, viewHolder.getAdapterPosition(), ((SuggestedSongView) items.get(viewHolder.getAdapterPosition())).song); break; } } }); ((MultiItemView.ViewHolder) viewHolder).overflowButton.setOnClickListener(v -> { if (listener != null && viewHolder.getAdapterPosition() != -1) { switch (items.get(viewHolder.getAdapterPosition()).getViewType()) { case ViewType.ARTIST_CARD: listener.onOverflowClick(v, viewHolder.getAdapterPosition(), ((AlbumArtistView) items.get(viewHolder.getAdapterPosition())).albumArtist); break; case ViewType.ALBUM_CARD: case ViewType.ALBUM_CARD_LARGE: case ViewType.ALBUM_LIST_SMALL: listener.onOverflowClick(v, viewHolder.getAdapterPosition(), ((AlbumView) items.get(viewHolder.getAdapterPosition())).album); break; case ViewType.SUGGESTED_SONG: listener.onOverflowClick(v, viewHolder.getAdapterPosition(), ((SuggestedSongView) items.get(viewHolder.getAdapterPosition())).song); break; } } }); } else if (viewHolder instanceof SuggestedHeaderView.ViewHolder) { viewHolder.itemView.setOnClickListener(v -> { if (listener != null && viewHolder.getAdapterPosition() != -1) { listener.onItemClick(this, v, viewHolder.getAdapterPosition(), ((SuggestedHeaderView) items.get(viewHolder.getAdapterPosition())).suggestedHeader); } }); } } }