package com.battlelancer.seriesguide.adapters;
import android.content.Context;
import android.os.Build;
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.ImageView;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.battlelancer.seriesguide.R;
import com.battlelancer.seriesguide.settings.TmdbSettings;
import com.battlelancer.seriesguide.util.ServiceUtils;
import com.uwetrottmann.tmdb2.entities.Movie;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;
/**
* Displays movie titles of the given {@link Movie} array.
*/
public class MoviesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public interface ItemClickListener {
void onClickMovie(int movieTmdbId, ImageView posterView);
void onClickMovieMoreOptions(int movieTmdbId, View anchor);
}
private final Context context;
private final String posterBaseUrl;
private final DateFormat dateFormatMovieReleaseDate;
private final ItemClickListener itemClickListener;
protected final List<Movie> movies;
public MoviesAdapter(Context context, ItemClickListener itemClickListener) {
this.context = context;
this.itemClickListener = itemClickListener;
this.dateFormatMovieReleaseDate = DateFormat.getDateInstance(DateFormat.MEDIUM);
this.movies = new ArrayList<>();
this.posterBaseUrl = TmdbSettings.getPosterBaseUrl(context);
}
public void updateMovies(@Nullable List<Movie> newMovies) {
movies.clear();
if (newMovies != null) {
movies.addAll(newMovies);
}
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_discover_movie, parent, false);
return new MovieViewHolder(view, itemClickListener);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MovieViewHolder) {
MovieViewHolder actualHolder = (MovieViewHolder) holder;
Movie movie = getMovie(position);
actualHolder.movieTmdbId = movie.id;
actualHolder.title.setText(movie.title);
if (movie.release_date != null) {
actualHolder.date.setText(dateFormatMovieReleaseDate.format(movie.release_date));
} else {
actualHolder.date.setText("");
}
// poster
// use fixed size so bitmaps can be re-used on config change
ServiceUtils.loadWithPicasso(context, posterBaseUrl + movie.poster_path)
.resizeDimen(R.dimen.movie_poster_width, R.dimen.movie_poster_height)
.centerCrop()
.into(actualHolder.poster);
// set unique transition names
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
actualHolder.poster.setTransitionName(getTransitionNamePrefix() + movie.id);
}
}
}
@Override
public int getItemCount() {
return movies.size();
}
protected Movie getMovie(int position) {
return movies.get(position);
}
@NonNull
protected String getTransitionNamePrefix() {
return "moviesAdapterPoster_";
}
static class MovieViewHolder extends RecyclerView.ViewHolder {
int movieTmdbId;
@BindView(R.id.textViewMovieTitle) TextView title;
@BindView(R.id.textViewMovieDate) TextView date;
@BindView(R.id.imageViewMoviePoster) ImageView poster;
@BindView(R.id.imageViewMovieItemContextMenu) ImageView contextMenu;
public MovieViewHolder(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.onClickMovie(movieTmdbId, poster);
}
}
});
contextMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (itemClickListener != null) {
itemClickListener.onClickMovieMoreOptions(movieTmdbId, v);
}
}
});
}
}
}