package com.battlelancer.seriesguide.adapters;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.battlelancer.seriesguide.R;
import com.battlelancer.seriesguide.enums.MoviesDiscoverLink;
import com.uwetrottmann.tmdb2.entities.Movie;
import java.util.ArrayList;
import java.util.List;
public class MoviesDiscoverAdapter extends MoviesAdapter {
public static final int VIEW_TYPE_LINK = R.layout.item_discover_link;
public static final int VIEW_TYPE_HEADER = R.layout.item_discover_header;
public static final int VIEW_TYPE_MOVIE = R.layout.item_discover_movie;
public interface ItemClickListener extends MoviesAdapter.ItemClickListener {
void onClickLink(MoviesDiscoverLink link, View anchor);
}
public static final MoviesDiscoverLink DISCOVER_LINK_DEFAULT = MoviesDiscoverLink.IN_THEATERS;
@NonNull private static final List<MoviesDiscoverLink> links;
static {
links = new ArrayList<>(3);
links.add(MoviesDiscoverLink.POPULAR);
links.add(MoviesDiscoverLink.DIGITAL);
links.add(MoviesDiscoverLink.DISC);
}
private final ItemClickListener itemClickListener;
public MoviesDiscoverAdapter(Context context, @Nullable ItemClickListener itemClickListener) {
super(context, null);
this.itemClickListener = itemClickListener;
}
@Override
public int getItemViewType(int position) {
int linksCount = links.size();
if (position < linksCount) {
return VIEW_TYPE_LINK;
}
if (position == positionHeader()) {
return VIEW_TYPE_HEADER;
}
return VIEW_TYPE_MOVIE;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_LINK) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(VIEW_TYPE_LINK, parent, false);
return new LinkViewHolder(itemView, itemClickListener);
}
if (viewType == VIEW_TYPE_HEADER) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(VIEW_TYPE_HEADER, parent, false);
return new HeaderViewHolder(itemView);
}
if (viewType == VIEW_TYPE_MOVIE) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(VIEW_TYPE_MOVIE, parent, false);
return new MovieViewHolder(itemView, itemClickListener);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof LinkViewHolder) {
LinkViewHolder holderActual = (LinkViewHolder) holder;
MoviesDiscoverLink link = getLink(position);
holderActual.link = link;
holderActual.title.setText(link.titleRes);
} else if (holder instanceof HeaderViewHolder) {
HeaderViewHolder holderActual = (HeaderViewHolder) holder;
holderActual.header.setText(DISCOVER_LINK_DEFAULT.titleRes);
} else {
super.onBindViewHolder(holder, position);
}
}
@Override
public int getItemCount() {
return links.size() + 1 /* header */ + movies.size();
}
private MoviesDiscoverLink getLink(int position) {
return links.get(position);
}
@Override
protected Movie getMovie(int position) {
return movies.get(position - links.size() - 1 /** header **/);
}
@NonNull
@Override
protected String getTransitionNamePrefix() {
return "moviesDiscoverAdapterPoster_";
}
private int positionHeader() {
return links.size();
}
static class HeaderViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.textViewGridHeader) TextView header;
public HeaderViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
static class LinkViewHolder extends RecyclerView.ViewHolder {
MoviesDiscoverLink link;
@BindView(R.id.textViewDiscoverLink) TextView title;
public LinkViewHolder(View itemView, final ItemClickListener itemClickListener) {
super(itemView);
ButterKnife.bind(this, itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (itemClickListener != null) {
itemClickListener.onClickLink(link, LinkViewHolder.this.itemView);
}
}
});
}
}
}