package com.florianmski.tracktoid.adapters.lists;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.text.SpannableString;
import android.util.Property;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ImageView;
import android.widget.TextView;
import com.florianmski.tracktoid.R;
import com.florianmski.tracktoid.TraktoidTheme;
import com.florianmski.tracktoid.adapters.RecyclerAdapter;
import com.florianmski.tracktoid.ui.widgets.BlurSpan;
import com.florianmski.tracktoid.ui.widgets.Placeholder;
import com.squareup.picasso.Picasso;
import com.uwetrottmann.trakt.v2.entities.Comment;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.List;
public class RecyclerCommentsAdapter extends RecyclerAdapter<Comment, RecyclerCommentsAdapter.CommentsViewHolder>
{
private final DateTimeFormatter dtf = DateTimeFormat.longDate();
private Placeholder placeholder;
private float maxRadius;
private float minRadius = 0.1f;
private AccelerateDecelerateInterpolator interpolator = new AccelerateDecelerateInterpolator();
private static final Property<BlurSpan, Float> BLUR_PROPERTY = new Property<BlurSpan, Float>(Float.class, "BLUR_PROPERTY")
{
@Override
public void set(BlurSpan span, Float value)
{
span.setRadius(value);
}
@Override
public Float get(BlurSpan span)
{
return span.getRadius();
}
};
public RecyclerCommentsAdapter(Context context, List<Comment> data, TraktoidTheme theme, OnItemClickListener listener)
{
super(context, data, listener);
maxRadius = context.getResources().getDisplayMetrics().density * 8;
placeholder = new Placeholder(context, theme);
}
@Override
public RecyclerCommentsAdapter.CommentsViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View v = LayoutInflater.from(context).inflate(R.layout.list_item_comment, parent, false);
return new CommentsViewHolder(v, listener);
}
@Override
public void onBindViewHolder(final RecyclerCommentsAdapter.CommentsViewHolder holder, int position)
{
final Comment c = getItem2(position);
final BlurSpan span = new BlurSpan(maxRadius);
final SpannableString spannableString = new SpannableString(c.comment);
if(c.user.images != null)
Picasso.with(context).load(c.user.images.avatar.full).placeholder(placeholder.getDrawable()).into(holder.ivAvatar);
else
holder.ivAvatar.setImageDrawable(placeholder.getDrawable());
holder.tvUsername.setText(c.user.username);
holder.tvDate.setText(c.created_at.toString(dtf));
if(c.spoiler)
{
spannableString.setSpan(span, 0, spannableString.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.tvComment.setText(spannableString);
}
else
holder.tvComment.setText(c.comment);
holder.ivAvatar.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// UserActivity.launch((Activity) context, c.user.username);
}
});
holder.tvComment.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(!c.spoiler)
return;
ObjectAnimator blurAnimator = ObjectAnimator.ofFloat(span, BLUR_PROPERTY, maxRadius, minRadius);
AnimatorSet as = new AnimatorSet();
as.play(blurAnimator);
as.setInterpolator(interpolator);
blurAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
holder.tvComment.setText(spannableString);
}
});
blurAnimator.addListener(new AnimatorListenerAdapter()
{
@Override
public void onAnimationEnd(Animator animation)
{
c.spoiler = false;
}
});
as.start();
}
});
}
public static class CommentsViewHolder extends RecyclerAdapter.ViewHolder
{
private ImageView ivAvatar;
private TextView tvUsername;
private TextView tvDate;
private TextView tvComment;
public CommentsViewHolder(View itemView, OnItemClickListener listener)
{
super(itemView, listener);
ivAvatar = (ImageView) itemView.findViewById(R.id.imageViewAvatar);
tvUsername = (TextView) itemView.findViewById(R.id.textViewUsername);
tvDate = (TextView) itemView.findViewById(R.id.textViewDate);
tvComment = (TextView) itemView.findViewById(R.id.textViewComment);
// BlurSpan doesn't work with HW
tvComment.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
}
}