package com.malmstein.yahnac.comments; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.support.v4.view.ViewCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.LayoutInflater; import android.widget.FrameLayout; import com.malmstein.yahnac.R; import com.malmstein.yahnac.model.Story; import com.malmstein.yahnac.views.DelegatedSwipeRefreshLayout; import com.malmstein.yahnac.views.ViewDelegate; import com.malmstein.yahnac.views.recyclerview.adapter.CursorRecyclerAdapter; import com.malmstein.yahnac.views.recyclerview.decorators.CommentsRecyclerItemDecoration; import com.novoda.notils.caster.Views; public class CommentsView extends FrameLayout implements ViewDelegate, SwipeRefreshLayout.OnRefreshListener { private DelegatedSwipeRefreshLayout refreshLayout; private RecyclerView commentsList; private CursorRecyclerAdapter commentsAdapter; private RecyclerView.LayoutManager commentsLayoutManager; private Story story; public CommentsView(Context context) { super(context); } public CommentsView(Context context, AttributeSet attrs) { super(context, attrs); } public CommentsView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public CommentsView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onFinishInflate() { super.onFinishInflate(); LayoutInflater.from(getContext()).inflate(R.layout.view_comments, this, true); refreshLayout = Views.findById(this, R.id.feed_refresh); commentsList = Views.findById(this, R.id.list_comments); } public void setupWith(CommentsAdapter.Listener adapterListener, SwipeRefreshLayout.OnRefreshListener refreshListener, Story story) { this.story = story; refreshLayout.setColorSchemeResources(R.color.orange, R.color.dark_orange); refreshLayout.setOnRefreshListener(refreshListener); refreshLayout.setViewDelegate(this); commentsList.setHasFixedSize(true); commentsLayoutManager = new LinearLayoutManager(getContext()); commentsList.addItemDecoration(createItemDecoration(getResources())); commentsList.setLayoutManager(commentsLayoutManager); commentsAdapter = new CommentsAdapter(story.getType(), null, adapterListener); commentsList.setAdapter(commentsAdapter); } public void startRefreshing() { refreshLayout.postOnAnimation(new Runnable() { @Override public void run() { refreshLayout.setRefreshing(true); } }); } private CommentsRecyclerItemDecoration createItemDecoration(Resources resources) { int verticalItemSpacingInPx = resources.getDimensionPixelSize(R.dimen.feed_divider_height); int horizontalItemSpacingInPx = resources.getDimensionPixelSize(R.dimen.feed_padding_infra_spans); return new CommentsRecyclerItemDecoration(verticalItemSpacingInPx, horizontalItemSpacingInPx); } protected void stopRefreshing() { refreshLayout.setRefreshing(false); } public void swapCursor(Cursor data) { commentsAdapter.swapCursor(data); stopRefreshing(); } @Override public void onRefresh() { startRefreshing(); } @Override public boolean isReadyForPull() { return ViewCompat.canScrollVertically(commentsList, -1); } }