package com.konifar.materialcat.views.adapters;
import android.content.Context;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import com.konifar.materialcat.R;
import com.konifar.materialcat.models.pojo.Photo;
import com.konifar.materialcat.views.AspectRatioImageView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
public class PhotosArrayAdapter extends ArrayAdapter<Photo> {
private int lastPosition = -1;
public PhotosArrayAdapter(Context context) {
super(context, R.layout.item_photo, new ArrayList<Photo>());
}
@Override
public View getView(int pos, View view, ViewGroup parent) {
ViewHolder holder;
if (view == null || view.getTag() == null) {
view = LayoutInflater.from(getContext()).inflate(R.layout.item_photo, parent, false);
holder = new ViewHolder(view);
} else {
holder = (ViewHolder) view.getTag();
}
view.setTag(holder);
bindData(holder, getItem(pos));
initListeners(holder, pos, view, parent);
if (pos > 1) startAnimation(view, pos);
return view;
}
private void initListeners(final ViewHolder holder, final int pos, final View view, final ViewGroup parent) {
holder.ripple.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((GridView) parent).performItemClick(view, pos, 0L);
}
});
}
private void bindData(ViewHolder holder, Photo photo) {
String imageUrl = photo.getImageUrl();
if (holder.imgPreview.getTag() == null || !holder.imgPreview.getTag().equals(imageUrl)) {
Picasso.with(getContext())
.load(imageUrl)
.placeholder(R.color.theme50)
.into(holder.imgPreview);
holder.imgPreview.setTag(imageUrl);
}
}
public void addAll(List<Photo> photos) {
if (photos == null) return;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
super.addAll(photos);
} else {
for (Photo item : photos) {
super.add(item);
}
}
}
void startAnimation(View view, int pos) {
if (lastPosition < pos) {
Animation anim = AnimationUtils.loadAnimation(getContext(), R.anim.item_scale_in);
view.startAnimation(anim);
lastPosition = pos;
}
}
static class ViewHolder {
@Bind(R.id.img_preview)
AspectRatioImageView imgPreview;
@Bind(R.id.ripple)
View ripple;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}