package com.amlogic.tzr.charismatic_yichang.adapter;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.OvershootInterpolator;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextSwitcher;
import android.widget.TextView;
import com.amlogic.tzr.charismatic_yichang.ApplicationController;
import com.amlogic.tzr.charismatic_yichang.R;
import com.amlogic.tzr.charismatic_yichang.Tool.LogManager;
import com.amlogic.tzr.charismatic_yichang.Tool.ScreenUtil;
import com.amlogic.tzr.charismatic_yichang.activity.LoginActivity;
import com.amlogic.tzr.charismatic_yichang.bean.Feed;
import com.amlogic.tzr.charismatic_yichang.bean.User;
import com.amlogic.tzr.charismatic_yichang.view.CircleTransformation;
import com.amlogic.tzr.charismatic_yichang.view.ShowMaxImageView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.datatype.BmobFile;
import cn.bmob.v3.datatype.BmobPointer;
import cn.bmob.v3.datatype.BmobRelation;
import cn.bmob.v3.listener.FindListener;
import cn.bmob.v3.listener.UpdateListener;
/**
* Created by Administrator on 2015/7/22.
*/
public class FeedAdapter extends RecyclerView.Adapter implements View.OnClickListener{
private static final String TAG = "FeedAdapter";
private static final int VIEW_TYPE_DEFAULT = 1;
private static final int VIEW_TYPE_LOADER = 2;
private static final int ANIMATED_ITEMS_COUNT = 2;
private static final DecelerateInterpolator DECCELERATE_INTERPOLATOR = new DecelerateInterpolator();
private static final AccelerateInterpolator ACCELERATE_INTERPOLATOR = new AccelerateInterpolator();
private static final OvershootInterpolator OVERSHOOT_INTERPOLATOR = new OvershootInterpolator(4);
private Context mContext;
private List<Feed> list;
private int loveCount;
private int lastAnimatedPosition = -1;
private boolean animateItems = false;
private final Map<RecyclerView.ViewHolder, String> likeAnimations = new HashMap<RecyclerView.ViewHolder, String>();
private final ArrayList<Integer> likedPositions = new ArrayList<>();
private User mUser;
private OnFeedItemClickListener onFeedItemClickListener;
public void setOnFeedItemClickListener(OnFeedItemClickListener onFeedItemClickListener) {
this.onFeedItemClickListener = onFeedItemClickListener;
}
public FeedAdapter(Context mContext, List<Feed> list) {
this.mContext = mContext;
this.list = list;
mUser= ApplicationController.getInstance().getmUser();
}
public void setData(List<Feed> list){
this.list = list;
}
public List<Feed> getData(){
return this.list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view= LayoutInflater.from(mContext).inflate(R.layout.item_feed_list,parent,false);
final CellFeedViewHolder cellFeedViewHolder = new CellFeedViewHolder(view);
mUser=BmobUser.getCurrentUser(mContext,User.class);
cellFeedViewHolder.headImage.setOnClickListener(this);
cellFeedViewHolder.btnLike.setOnClickListener(this);
cellFeedViewHolder.tsLikesCounter.setOnClickListener(this);
cellFeedViewHolder.btnComments.setOnClickListener(this);
return cellFeedViewHolder;
}
private void runEnterAnimation(View view, int position) {
if (position > lastAnimatedPosition) {
lastAnimatedPosition = position;
view.setTranslationY(ScreenUtil.getScreenHeight(mContext));
view.animate()
.translationY(0)
.setInterpolator(new DecelerateInterpolator(3.f))
.setDuration(700)
.start();
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
runEnterAnimation(holder.itemView, position);
CellFeedViewHolder feedViewHolder= (CellFeedViewHolder) holder;
if (list.size()>0){
Feed bean=list.get(position);
User user=bean.getUser();
feedViewHolder.nameView.setText(bean.getUser().getUsername());
if (bean.getUser().getHead_thumb()!=null) {
BmobFile icon = bean.getUser().getHead_thumb();
String url = icon.getFileUrl(mContext);
Picasso.with(mContext).load(url).transform(new CircleTransformation()).into(feedViewHolder.headImage);
}else{
Picasso.with(mContext).load(R.mipmap.ic_user).transform(new CircleTransformation()).into(feedViewHolder.headImage);
}
if (bean.getContent()!=null){
feedViewHolder.contentView.setText(bean.getContent());
}
if (bean.getPhoto()!=null){
BmobFile icon =bean.getPhoto();
String url = icon.getFileUrl(mContext);
Picasso.with(mContext).load(url).placeholder(R.drawable.pic_default_large).error(R.drawable.pic_default_large).into(feedViewHolder.mPhotoView);
}
feedViewHolder.headImage.setTag(feedViewHolder);
feedViewHolder.btnLike.setTag(feedViewHolder);
feedViewHolder.btnComments.setTag(feedViewHolder);
feedViewHolder.tsLikesCounter.setTag(feedViewHolder);
updateHeartButton(feedViewHolder, false);
}
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public void onClick(View view) {
final int viewId = view.getId();
switch (viewId){
case R.id.iv_ifl_head:
break;
case R.id.btn_ifl_Like:
CellFeedViewHolder holder = (CellFeedViewHolder) view.getTag();
mUser=BmobUser.getCurrentUser(mContext,User.class);
if (mUser!=null) {
if (!likeAnimations.containsKey(holder)) {
updateHeartButton(holder, true);
}
}else{
mContext.startActivity(new Intent(mContext, LoginActivity.class));
}
break;
case R.id.btn_ifl_Comments:
break;
}
}
private void updateLikesCounter(CellFeedViewHolder holder, boolean animated) {
if (animated) {
int currentLikesCount = loveCount+1;
String likesCountText=currentLikesCount+"个人赞过";
holder.tsLikesCounter.setText(likesCountText);
} else {
int currentLikesCount = loveCount;
String likesCountText=currentLikesCount+"个人赞过";
holder.tsLikesCounter.setCurrentText(likesCountText);
}
}
private void updateHeartButton(final CellFeedViewHolder holder, boolean animated) {
if (animated) {
if (!likeAnimations.containsKey(holder)){
AnimatorSet animatorSet = new AnimatorSet();
ObjectAnimator rotationAnim = ObjectAnimator.ofFloat(holder.btnLike, "rotation", 0f, 360f);
rotationAnim.setDuration(300);
rotationAnim.setInterpolator(ACCELERATE_INTERPOLATOR);
ObjectAnimator bounceAnimX = ObjectAnimator.ofFloat(holder.btnLike, "scaleX", 0.2f, 1f);
bounceAnimX.setDuration(300);
bounceAnimX.setInterpolator(OVERSHOOT_INTERPOLATOR);
ObjectAnimator bounceAnimY = ObjectAnimator.ofFloat(holder.btnLike, "scaleY", 0.2f, 1f);
bounceAnimY.setDuration(300);
bounceAnimY.setInterpolator(OVERSHOOT_INTERPOLATOR);
bounceAnimY.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
holder.btnLike.setImageResource(R.drawable.ic_heart_red);
}
});
animatorSet.play(rotationAnim);
animatorSet.play(bounceAnimX).with(bounceAnimY).after(rotationAnim);
animatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
setCurrentLike(holder);
}
});
animatorSet.start();
}
} else {
getLikeAnimationState(holder);
// if (likedPositions.contains(holder.getPosition())) {
// holder.btnLike.setImageResource(R.drawable.ic_heart_red);
// } else {
// holder.btnLike.setImageResource(R.drawable.ic_heart_outline_grey);
// }
}
}
private void getLikeAnimationState(final CellFeedViewHolder holder) {
BmobQuery<User> query=new BmobQuery<User>();
Feed feed=new Feed();
feed.setObjectId(list.get(holder.getPosition()).getObjectId());
query.addWhereRelatedTo("likes", new BmobPointer(feed));
query.findObjects(mContext, new FindListener<User>() {
@Override
public void onSuccess(List<User> list_user) {
loveCount = list_user.size();
if (loveCount > 0&&mUser!=null) {
for (User user : list_user) {
if (user.getObjectId().equals(mUser.getObjectId())) {
// LogManager.e(TAG, "list.get(holder.getPosition())-----"+holder.getPosition());
// LogManager.e(TAG, "list.get(holder.getPosition()).getObjectId()-----" +list.get(holder.getPosition()).getObjectId());
likeAnimations.put(holder, mUser.getObjectId());
holder.btnLike.setImageResource(R.drawable.ic_heart_red);
}
}
} else {
holder.btnLike.setImageResource(R.drawable.ic_heart_outline_grey);
}
updateLikesCounter(holder, false);
}
@Override
public void onError(int i, String s) {
loveCount=0;
holder.btnLike.setImageResource(R.drawable.ic_heart_outline_grey);
}
});
}
//
// private void resetLikeAnimationState(final CellFeedViewHolder holder) {
// Feed feed=new Feed();
// feed.setLove(getCurrentLove(holder));
// feed.update(mContext, list.get(holder.getPosition()).getObjectId(), new UpdateListener() {
// @Override
// public void onSuccess() {
//
// holder.btnLike.setImageResource(R.drawable.ic_heart_red);
// }
//
// @Override
// public void onFailure(int i, String s) {
// holder.btnLike.setImageResource(R.drawable.ic_heart_outline_grey);
// }
// });
//
// }
private void setCurrentLike(final CellFeedViewHolder holder){
final User mUser= BmobUser.getCurrentUser(mContext, User.class);
Feed feed=list.get(holder.getPosition());
BmobRelation relation = new BmobRelation();
relation.add(mUser);
feed.setLikes(relation);
feed.update(mContext, new UpdateListener() {
@Override
public void onSuccess() {
LogManager.e(TAG, "setCurrentLike is success!");
updateLikesCounter(holder, true);
likeAnimations.put(holder, mUser.getObjectId());
holder.btnLike.setImageResource(R.drawable.ic_heart_red);
}
@Override
public void onFailure(int i, String s) {
LogManager.e(TAG, "setCurrentLike is onFailure!--" + s);
holder.btnLike.setImageResource(R.drawable.ic_heart_outline_grey);
}
});
}
public static class CellFeedViewHolder extends RecyclerView.ViewHolder {
ImageView headImage;
ShowMaxImageView mPhotoView;
TextView nameView,contentView;
ImageButton btnLike,btnComments;
TextSwitcher tsLikesCounter;
public CellFeedViewHolder(View itemView) {
super(itemView);
headImage= (ImageView) itemView.findViewById(R.id.iv_ifl_head);
mPhotoView= (ShowMaxImageView) itemView.findViewById(R.id.iv_ifl_photo);
nameView= (TextView) itemView.findViewById(R.id.tv_ifl_name);
contentView= (TextView) itemView.findViewById(R.id.tv_ifl_content);
btnLike= (ImageButton) itemView.findViewById(R.id.btn_ifl_Like);
btnComments= (ImageButton) itemView.findViewById(R.id.btn_ifl_Comments);
tsLikesCounter= (TextSwitcher) itemView.findViewById(R.id.ts_ifl_LikesCounter);
}
}
public interface OnFeedItemClickListener {
public void onCommentsClick(View v, int position);
public void onMoreClick(View v, int position);
public void onProfileClick(View v);
}
}