package net.naonedbus.widget.adapter.impl;
import java.util.List;
import java.util.Random;
import net.naonedbus.R;
import net.naonedbus.bean.ItineraryWrapper;
import net.naonedbus.bean.Ligne;
import net.naonedbus.utils.ColorUtils;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.gridlayout.GridLayout;
public class ItineraryWrapperArrayAdapter extends ArrayAdapter<ItineraryWrapper> {
private static final int VIEW_TYPE_NORMAL = 0;
private static final int VIEW_TYPE_EMPTY = 1;
private final LayoutInflater mLayoutInflater;
public ItineraryWrapperArrayAdapter(final Context context, final List<ItineraryWrapper> objects) {
super(context, 0, objects);
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public int getItemViewType(final int position) {
final ItineraryWrapper wrapper = getItem(position);
return wrapper.getItinerary() == null ? VIEW_TYPE_EMPTY : VIEW_TYPE_NORMAL;
}
@Override
public boolean isEnabled(final int position) {
return getItemViewType(position) == VIEW_TYPE_NORMAL;
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
final int viewType = getItemViewType(position);
View view = convertView;
ViewHolder viewHolder;
if (view == null) {
if (viewType == VIEW_TYPE_NORMAL) {
view = inflateNormalView(parent);
} else {
view = inflateEmptyView(parent);
}
}
viewHolder = (ViewHolder) view.getTag();
if (viewType == VIEW_TYPE_NORMAL) {
bindNormalView(getItem(position), viewHolder);
} else {
bindEmptyView(getItem(position), viewHolder);
}
return view;
}
private View inflateNormalView(final ViewGroup parent) {
final View view = mLayoutInflater.inflate(R.layout.item_itineraire, parent, false);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.itemTitle = (TextView) view.findViewById(R.id.itemTitle);
viewHolder.itemDate = (TextView) view.findViewById(R.id.itemDate);
viewHolder.itemWalkTime = (TextView) view.findViewById(R.id.itemWalkTime);
viewHolder.gridLayout = (GridLayout) view.findViewById(R.id.lignes);
view.setTag(viewHolder);
return view;
}
private void bindNormalView(final ItineraryWrapper wrapper, final ViewHolder viewHolder) {
viewHolder.itemTitle.setText(wrapper.getTime());
viewHolder.itemDate.setText(wrapper.getDate());
viewHolder.itemWalkTime.setText(wrapper.getWalkTime());
final List<Ligne> lignes = wrapper.getLignes();
viewHolder.gridLayout.removeAllViews();
for (final Ligne l : lignes) {
final TextView textView = (TextView) mLayoutInflater.inflate(R.layout.ligne_code_item_medium,
viewHolder.gridLayout, false);
textView.setBackgroundDrawable(ColorUtils.getCircle(l.getCouleur()));
textView.setText(l.getLettre());
textView.setTextColor(l.getCouleurTexte());
viewHolder.gridLayout.addView(textView);
}
}
private void bindEmptyView(final ItineraryWrapper wrapper, final ViewHolder viewHolder) {
if (wrapper.isUnicorn()) {
viewHolder.itemTitle.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.unicorn, 0, 0);
final String[] strings = getContext().getResources().getStringArray(R.array.unicorn);
final Random rand = new Random();
final int position = rand.nextInt(strings.length);
viewHolder.itemTitle.setText(strings[position]);
} else if (wrapper.isError()) {
viewHolder.itemTitle.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.warning, 0, 0);
viewHolder.itemTitle.setText(R.string.error_title_webservice);
}
}
private View inflateEmptyView(final ViewGroup parent) {
final View view = mLayoutInflater.inflate(R.layout.item_itineraire_empty, parent, false);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.itemTitle = (TextView) view.findViewById(R.id.itemTitle);
view.setTag(viewHolder);
return view;
}
private static class ViewHolder {
TextView itemTitle;
TextView itemDate;
TextView itemWalkTime;
GridLayout gridLayout;
}
}