package org.wikipedia.feed.view;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import org.wikipedia.R;
import org.wikipedia.feed.model.Card;
import org.wikipedia.util.ResourceUtil;
import org.wikipedia.views.DrawableItemDecoration;
import org.wikipedia.views.ViewUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
public abstract class ListCardView<T extends Card> extends DefaultFeedCardView<T> {
@BindView(R.id.view_list_card_header) View headerView;
@BindView(R.id.view_list_card_large_header) View largeHeaderView;
@BindView(R.id.view_list_card_list) RecyclerView recyclerView;
public ListCardView(Context context) {
super(context);
inflate(getContext(), R.layout.view_list_card, this);
ButterKnife.bind(this);
initRecycler(recyclerView);
}
@Override public void setCallback(@Nullable FeedAdapter.Callback callback) {
super.setCallback(callback);
if (headerView instanceof CardHeaderView) {
((CardHeaderView) headerView).setCallback(callback);
}
}
protected void set(@Nullable RecyclerView.Adapter<?> adapter) {
recyclerView.setAdapter(adapter);
}
protected void update() {
if (recyclerView.getAdapter() != null) {
recyclerView.getAdapter().notifyDataSetChanged();
}
}
protected void header(@NonNull View view) {
ViewUtil.replace(headerView, view);
headerView = view;
}
protected void largeHeader(@NonNull View view) {
ViewUtil.replace(largeHeaderView, view);
largeHeaderView = view;
}
/** Called by the constructor. Override to provide custom behavior but otherwise do not call
directly. */
protected void initRecycler(@NonNull RecyclerView recyclerView) {
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.addItemDecoration(new DrawableItemDecoration(getContext(),
ResourceUtil.getThemedAttributeId(getContext(), R.attr.list_separator_drawable), true));
recyclerView.setNestedScrollingEnabled(false);
}
}