package com.quinn.githubknife.ui.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.github.quinn.iconlibrary.icons.OctIcon;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.quinn.githubknife.R;
import com.quinn.githubknife.ui.widget.AnimateFirstDisplayListener;
import com.quinn.githubknife.ui.widget.RecycleItemClickListener;
import com.quinn.githubknife.utils.BitmapUtils;
import com.quinn.githubknife.utils.TimeUtils;
import com.quinn.httpknife.github.Event;
import com.quinn.httpknife.github.GithubConstants;
import com.quinn.httpknife.payload.IssuePayload;
import com.quinn.httpknife.payload.MenberPayload;
import java.util.List;
/**
* Created by Quinn on 7/25/15.
*/
public class EventAdapter extends
RecyclerView.Adapter<EventAdapter.ViewHolder>{
private static final String TAG = "EventAdapter";
private Context context;
private List<Event> dataItems;
private ImageLoader imageLoader;
private DisplayImageOptions option;
private RecycleItemClickListener itemClickListener;
private ImageLoadingListener imageLoadingListener = new AdapterImageLoaderListener();
public EventAdapter(Context context,List<Event> dataItems){
this.context = context;
this.dataItems = dataItems;
this.imageLoader = ImageLoader.getInstance();
this.option = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true)
.considerExifParams(true).build();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final LayoutInflater mInflater = LayoutInflater.from(parent
.getContext());
final View sView = mInflater.inflate(R.layout.item_eventlist, parent,
false);
return new ViewHolder(sView,itemClickListener);
}
@Override
public void onViewRecycled(ViewHolder holder) {
super.onViewRecycled(holder);
Log.i(TAG, "onViewRecycled");
// imageLoader.cancelDisplayTask(holder.avatar);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Event event = dataItems.get(position);
holder.avatar.setTag(event.getActor().getAvatar_url());
imageLoader.displayImage(event.getActor().getAvatar_url(), holder.avatar, option, imageLoadingListener);
holder.happenTime.setText(TimeUtils.getRelativeTime(event.getCreated_at()));
setItemTextAndIcon(holder.event,holder.eventType,position);
}
@Override
public int getItemCount() {
return dataItems.size();
}
public void setItemTextAndIcon(TextView tv,ImageView img,int position){
Event event = dataItems.get(position);
String eventType = event.getType();
if(eventType.equals(GithubConstants.WATCH_EVENT)){
tv.setText(Html.fromHtml(event.getActor().getLogin() + " <b>starred</b> " + event.getRepo().getName()));
BitmapUtils.setIconFont(context, img, OctIcon.STAR, R.color.theme_color);
}else if(eventType.equals(GithubConstants.ForkEvent)){
tv.setText(Html.fromHtml(event.getActor().getLogin() + " <b>forked</b> " + event.getRepo().getName()));
BitmapUtils.setIconFont(context, img, OctIcon.FORK, R.color.theme_color);
}else if(eventType.equals(GithubConstants.CreateEvent)){
tv.setText(Html.fromHtml(event.getActor().getLogin() + " <b>created repo</b> " + event.getRepo().getName()));
BitmapUtils.setIconFont(context, img, OctIcon.REPO, R.color.theme_color);
}else if(eventType.equals(GithubConstants.PullRequestEvent)){
tv.setText(Html.fromHtml(event.getActor().getLogin() + " <b>opened pull request</b> " + event.getRepo().getName()));
BitmapUtils.setIconFont(context, img, OctIcon.PUSH, R.color.theme_color);
}else if(eventType.equals(GithubConstants.MemberEvent)){
MenberPayload payload = (MenberPayload)dataItems.get(position).getPayload();
tv.setText(Html.fromHtml(event.getActor().getLogin() + " <b> add " + payload.getMember().getLogin() + " to </b> " + event.getRepo().getName()));
BitmapUtils.setIconFont(context, img, OctIcon.PERSON, R.color.theme_color);
}else if(eventType.equals(GithubConstants.IssuesEvent)){
IssuePayload payload = (IssuePayload)dataItems.get(position).getPayload();
tv.setText(Html.fromHtml(event.getActor().getLogin() + " <b> " + payload.getAction() + " issue </b> " + event.getRepo().getName() + "#" + payload.getIssue().getNumber()));
if(payload.getAction().equals("opened")){
BitmapUtils.setIconFont(context, img, OctIcon.ISSUE_OPNE, R.color.theme_color);
}else if(payload.getAction().equals("closed")){
BitmapUtils.setIconFont(context, img, OctIcon.ISSUE_CLOSE, R.color.theme_color);
}
}else if(eventType.equals(GithubConstants.PublicEvent)){
tv.setText( Html.fromHtml(event.getActor().getLogin() + "<strong> made </strong>" + event.getRepo().getName() +" <strong> public </strong>" ));
BitmapUtils.setIconFont(context, img, OctIcon.REPO, R.color.theme_color);
}else {
tv.setText("Unknown event type"); // I will add more eventtype later
}
}
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private RecycleItemClickListener mItemClickListener;
public ImageView avatar;
public ImageView eventType;
public TextView event;
public TextView happenTime;
public ViewHolder(View view,RecycleItemClickListener itemClickListener){
super(view);
avatar = (ImageView) view.findViewById(R.id.avatar);
eventType = (ImageView) view.findViewById(R.id.eventType);
happenTime = (TextView) view.findViewById(R.id.happenTime);
event = (TextView) view.findViewById(R.id.event);
mItemClickListener = itemClickListener;
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(mItemClickListener != null){
mItemClickListener.onItemClick(v,getPosition());
}
}
}
public void setOnItemClickListener(RecycleItemClickListener listener) {
this.itemClickListener = listener;
}
}