package org.gdg.frisbee.android.common;
import android.content.Context;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.SparseBooleanArray;
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.TextView;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.RequestCreator;
import org.gdg.frisbee.android.R;
import org.gdg.frisbee.android.api.model.GdgPerson;
import org.gdg.frisbee.android.utils.Utils;
import org.gdg.frisbee.android.widget.SquaredImageView;
import butterknife.BindView;
import butterknife.ButterKnife;
public class PeopleAdapter extends ArrayAdapter<GdgPerson> {
private final Picasso picasso;
@DrawableRes
private int placeholder;
private SparseBooleanArray mConsumedMap;
public PeopleAdapter(Context context, Picasso picasso) {
this(context, picasso, 0);
}
public PeopleAdapter(Context context, Picasso picasso, @DrawableRes int placeholder) {
super(context, R.layout.list_person_item);
this.picasso = picasso;
this.placeholder = placeholder;
mConsumedMap = new SparseBooleanArray();
}
public void setPlaceholder(@DrawableRes int placeholder) {
this.placeholder = placeholder;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public long getItemId(int i) {
if (getItem(i).getUrl() != null) {
return Utils.stringToLong(getItem(i).getUrl());
} else {
return Utils.stringToLong(getItem(i).getPrimaryText());
}
}
@NonNull
@Override
public View getView(int i, View convertView, ViewGroup parent) {
final GdgPerson gdgPerson = getItem(i);
View rowView = convertView;
if (rowView == null) {
rowView = LayoutInflater.from(getContext()).inflate(R.layout.list_person_item, parent, false);
ViewHolder viewHolder = new ViewHolder(rowView);
rowView.setTag(viewHolder);
}
final ViewHolder holder = (ViewHolder) rowView.getTag();
holder.primaryTextView.setText(gdgPerson.getPrimaryText());
holder.secondaryTextView.setText(gdgPerson.getSecondaryText());
if (!TextUtils.isEmpty(gdgPerson.getImageUrl())) {
RequestCreator creator = picasso
.load(gdgPerson.getImageUrl());
if (placeholder != 0) {
creator.placeholder(placeholder);
}
creator.into(holder.thumbnailView);
}
if (!mConsumedMap.get(i)) {
mConsumedMap.put(i, true);
// In which case we magically instantiate our effect and launch it directly on the view
Animation animation = AnimationUtils.makeInChildBottomAnimation(getContext());
rowView.startAnimation(animation);
}
return rowView;
}
static class ViewHolder {
@BindView(android.R.id.text1)
public TextView primaryTextView;
@BindView(android.R.id.text2)
public TextView secondaryTextView;
@BindView(android.R.id.icon)
public SquaredImageView thumbnailView;
public ViewHolder(View v) {
ButterKnife.bind(this, v);
}
}
}