package com.etiennelawlor.loop.adapters;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.etiennelawlor.loop.R;
import com.etiennelawlor.loop.network.models.response.User;
import com.etiennelawlor.loop.network.models.response.Video;
import com.etiennelawlor.loop.ui.LoadingImageView;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by etiennelawlor on 5/23/15.
*/
public class VideosAdapter extends BaseAdapter<Video> {
// region Member Variables
private FooterViewHolder footerViewHolder;
// endregion
// region Constructors
public VideosAdapter() {
super();
}
// endregion
@Override
public int getItemViewType(int position) {
return (isLastPosition(position) && isFooterAdded) ? FOOTER : ITEM;
}
@Override
protected RecyclerView.ViewHolder createHeaderViewHolder(ViewGroup parent) {
return null;
}
@Override
protected RecyclerView.ViewHolder createItemViewHolder(ViewGroup parent) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_row, parent, false);
final VideoViewHolder holder = new VideoViewHolder(v);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int adapterPos = holder.getAdapterPosition();
if(adapterPos != RecyclerView.NO_POSITION){
if (onItemClickListener != null) {
onItemClickListener.onItemClick(adapterPos, holder.itemView);
}
}
}
});
return holder;
}
@Override
protected RecyclerView.ViewHolder createFooterViewHolder(ViewGroup parent) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_footer, parent, false);
final FooterViewHolder holder = new FooterViewHolder(v);
holder.reloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(onReloadClickListener != null){
onReloadClickListener.onReloadClick();
}
}
});
return holder;
}
@Override
protected void bindHeaderViewHolder(RecyclerView.ViewHolder viewHolder) {
}
@Override
protected void bindItemViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
final VideoViewHolder holder = (VideoViewHolder) viewHolder;
final Video video = getItem(position);
if (video != null) {
holder.bind(video);
}
}
@Override
protected void bindFooterViewHolder(RecyclerView.ViewHolder viewHolder) {
FooterViewHolder holder = (FooterViewHolder) viewHolder;
footerViewHolder = holder;
holder.loadingImageView.setMaskOrientation(LoadingImageView.MaskOrientation.LeftToRight);
}
@Override
protected void displayLoadMoreFooter() {
if(footerViewHolder!= null){
footerViewHolder.errorRelativeLayout.setVisibility(View.GONE);
footerViewHolder.loadingFrameLayout.setVisibility(View.VISIBLE);
}
}
@Override
protected void displayErrorFooter() {
if(footerViewHolder!= null){
footerViewHolder.loadingFrameLayout.setVisibility(View.GONE);
footerViewHolder.errorRelativeLayout.setVisibility(View.VISIBLE);
}
}
@Override
public void addFooter() {
isFooterAdded = true;
add(new Video());
}
// region Inner Classes
public static class VideoViewHolder extends RecyclerView.ViewHolder {
// region Views
@BindView(R.id.video_thumbnail_iv)
ImageView videoThumbnailImageView;
@BindView(R.id.title_tv)
TextView titleTextView;
@BindView(R.id.caption_tv)
TextView captionTextView;
@BindView(R.id.duration_tv)
TextView durationTextView;
@BindView(R.id.subtitle_tv)
TextView subtitleTextView;
// endregion
// region Constructors
public VideoViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
// endregion
// region Helper Methods
private void bind(Video video){
setUpTitle(titleTextView, video);
setUpSubtitle(subtitleTextView, video);
setUpVideoThumbnail(videoThumbnailImageView, video);
setUpDuration(durationTextView, video);
setUpCaption(captionTextView, video);
int adapterPos = getAdapterPosition();
ViewCompat.setTransitionName(subtitleTextView,"myTransition"+adapterPos);
}
private void setUpTitle(TextView tv, Video video) {
String name = video.getName();
if (!TextUtils.isEmpty(name)) {
tv.setText(name);
}
}
private void setUpSubtitle(TextView tv, Video video) {
User user = video.getUser();
if (user != null) {
String userName = user.getName();
if (!TextUtils.isEmpty(userName)) {
tv.setText(userName);
}
}
}
private void setUpVideoThumbnail(ImageView iv, Video video) {
String thumbnailUrl = video.getThumbnailUrl();
if (!TextUtils.isEmpty(thumbnailUrl)) {
Glide.with(iv.getContext())
.load(thumbnailUrl)
// .placeholder(R.drawable.ic_placeholder)
// .error(R.drawable.ic_error)
.into(iv);
}
}
private void setUpDuration(TextView tv, Video video) {
String formattedDuration = video.getFormattedDuration();
if(!TextUtils.isEmpty(formattedDuration))
tv.setText(formattedDuration);
}
private void setUpCaption(TextView tv, Video video) {
String caption = video.getCaption();
if(!TextUtils.isEmpty(caption))
tv.setText(caption);
}
// endregion
}
public static class FooterViewHolder extends RecyclerView.ViewHolder {
// region Views
@BindView(R.id.loading_fl)
FrameLayout loadingFrameLayout;
@BindView(R.id.error_rl)
RelativeLayout errorRelativeLayout;
@BindView(R.id.loading_iv)
LoadingImageView loadingImageView;
@BindView(R.id.reload_btn)
Button reloadButton;
// endregion
// region Constructors
public FooterViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
// endregion
}
// endregion
}