package com.uservoice.uservoicesdk.ui;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.uservoice.uservoicesdk.R;
import com.uservoice.uservoicesdk.rest.Callback;
import java.util.List;
public abstract class ModelAdapter<T> extends SearchAdapter<T> {
protected static final int MODEL = 0;
protected static final int LOADING = 1;
protected final int layoutId;
protected LayoutInflater inflater;
protected List<T> objects;
protected int addedObjects = 0;
public ModelAdapter(Context context, int layoutId, List<T> objects) {
this.context = context;
this.layoutId = layoutId;
this.objects = objects;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
@SuppressWarnings("unchecked")
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
int type = getItemViewType(position);
if (view == null) {
view = inflater.inflate(type == LOADING ? R.layout.uv_loading_item : layoutId, null);
}
if (type == MODEL) {
T model = (T) getItem(position);
customizeLayout(view, model);
}
return view;
}
@Override
public boolean isEnabled(int position) {
return getItemViewType(position) == MODEL;
}
@Override
public int getItemViewType(int position) {
return position == getObjects().size() ? LOADING : MODEL;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getCount() {
return getObjects().size() + (loading ? 1 : 0);
}
@Override
public Object getItem(int position) {
return position < getObjects().size() ? getObjects().get(position) : null;
}
@Override
public long getItemId(int position) {
return getItemViewType(position) == LOADING ? -1 : position;
}
protected List<T> getObjects() {
return objects;
}
public void add(int location, T object) {
objects.add(location, object);
addedObjects += 1;
notifyDataSetChanged();
}
protected abstract void customizeLayout(View view, T model);
protected abstract void loadPage(int page, Callback<List<T>> callback);
}