package cl.monsoon.s1next.view.adapter;
import android.app.Activity;
import com.google.common.base.Preconditions;
import cl.monsoon.s1next.data.api.model.Post;
import cl.monsoon.s1next.view.adapter.delegate.PostAdapterDelegate;
import cl.monsoon.s1next.view.adapter.delegate.PostFooterProgressAdapterDelegate;
import cl.monsoon.s1next.view.adapter.item.FooterProgressItem;
/**
* This {@link android.support.v7.widget.RecyclerView.Adapter}
* has another item type {@link #TYPE_POST_FOOTER_PROGRESS}
* in order to implement pull up to refresh.
*/
public final class PostListRecyclerViewAdapter extends BaseRecyclerViewAdapter<Post> {
private static final int VIEW_TYPE_POST = 1;
private static final int TYPE_POST_FOOTER_PROGRESS = 2;
public PostListRecyclerViewAdapter(Activity activity) {
super(activity);
addAdapterDelegate(new PostAdapterDelegate(activity, VIEW_TYPE_POST));
addAdapterDelegate(new PostFooterProgressAdapterDelegate(activity, TYPE_POST_FOOTER_PROGRESS));
setHasStableIds(true);
}
@Override
public long getItemId(int position) {
if (getItemViewTypeFromDelegatesManager(position) == VIEW_TYPE_POST) {
return Long.parseLong(((Post) getItem(position)).getId());
} else if (getItemViewTypeFromDelegatesManager(position) == TYPE_POST_FOOTER_PROGRESS) {
return Integer.MIN_VALUE + 1;
} else {
return super.getItemId(position);
}
}
public void showFooterProgress() {
int position = getItemCount() - 1;
Preconditions.checkState(getItem(position) != null);
addItem(new FooterProgressItem());
notifyItemInserted(position + 1);
}
public void hideFooterProgress() {
int position = getItemCount() - 1;
Preconditions.checkState(getItem(position) instanceof FooterProgressItem);
removeItem(position);
notifyItemRemoved(position);
}
}