package carbon.recycler;
import android.support.annotation.NonNull;
import android.support.v7.util.DiffUtil;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import carbon.widget.AutoCompleteEditText;
public abstract class ListAdapter<VH extends RecyclerView.ViewHolder, I> extends Adapter<VH, I> implements AutoCompleteEditText.AutoCompleteDataProvider<I> {
private carbon.widget.RecyclerView.OnItemClickedListener<I> onItemClickedListener;
private boolean diff = true;
private DiffListCallback<I> diffCallback;
public ListAdapter() {
items = new ArrayList<>();
}
public ListAdapter(List<I> items) {
this.items = items;
}
protected List<I> items;
public I getItem(int position) {
return items.get(position);
}
@Override
public String[] getItemWords(int position) {
return new String[]{getItem(position).toString()};
}
@Override
public int getItemCount() {
return items.size();
}
public void setDiffCallback(DiffListCallback<I> diffCallback) {
this.diffCallback = diffCallback;
}
public void setItems(@NonNull List<I> items) {
if (!diff) {
this.items = items;
return;
}
if (diffCallback == null)
diffCallback = new DiffListCallback<>();
diffCallback.setLists(this.items, items);
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(diffCallback);
this.items = items;
diffResult.dispatchUpdatesTo(this);
}
public List<I> getItems() {
return items;
}
@Override
public long getItemId(int position) {
return position;
}
public void setOnItemClickedListener(carbon.widget.RecyclerView.OnItemClickedListener<I> onItemClickedListener) {
this.onItemClickedListener = onItemClickedListener;
}
protected void fireOnItemClickedEvent(View view, int position) {
if (onItemClickedListener != null)
onItemClickedListener.onItemClicked(view, items.get(position), position);
}
public void setDiffEnabled(boolean useDiff) {
this.diff = useDiff;
}
public boolean isDiffEnabled() {
return diff;
}
}