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.ViewGroup; import org.wikipedia.R; import org.wikipedia.feed.model.Card; import org.wikipedia.util.DimenUtil; import org.wikipedia.views.DefaultRecyclerAdapter; import org.wikipedia.views.DefaultViewHolder; import org.wikipedia.views.DontInterceptTouchListener; import org.wikipedia.views.MarginItemDecoration; import java.util.List; public abstract class HorizontalScrollingListCardView<T extends Card> extends ListCardView<T> { public HorizontalScrollingListCardView(@NonNull Context context) { super(context); } @Override protected void initRecycler(@NonNull RecyclerView recyclerView) { recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)); recyclerView.addItemDecoration(new MarginItemDecoration(getContext(), R.dimen.view_horizontal_scrolling_list_card_item_margin_horizontal, R.dimen.view_horizontal_scrolling_list_card_item_margin_vertical, R.dimen.view_horizontal_scrolling_list_card_item_margin_horizontal, R.dimen.view_horizontal_scrolling_list_card_item_margin_vertical)); recyclerView.addOnItemTouchListener(new DontInterceptTouchListener()); recyclerView.setNestedScrollingEnabled(false); recyclerView.setClipToPadding(false); MarginLayoutParams params = (MarginLayoutParams) recyclerView.getLayoutParams(); final int height = DimenUtil.roundedDpToPx(228); params.height = height; final int padding = DimenUtil.roundedDpToPx(12); recyclerView.setPadding(padding, 0, padding, 0); } protected abstract static class RecyclerAdapter<T> extends DefaultRecyclerAdapter<T, HorizontalScrollingListCardItemView> { protected RecyclerAdapter(@NonNull List<T> items) { super(items); } @Nullable protected abstract FeedAdapter.Callback callback(); @Override public DefaultViewHolder<HorizontalScrollingListCardItemView> onCreateViewHolder(ViewGroup parent, int viewType) { return new DefaultViewHolder<>(new HorizontalScrollingListCardItemView(parent.getContext())); } @Override public void onViewAttachedToWindow(DefaultViewHolder<HorizontalScrollingListCardItemView> holder) { super.onViewAttachedToWindow(holder); holder.getView().setCallback(callback()); } @Override public void onViewDetachedFromWindow(DefaultViewHolder<HorizontalScrollingListCardItemView> holder) { holder.getView().setCallback(null); super.onViewDetachedFromWindow(holder); } } }