1 package com.moiseum.wolnelektury.components;
3 import android.content.Context;
4 import android.content.res.TypedArray;
5 import android.support.annotation.NonNull;
6 import android.support.annotation.Nullable;
7 import android.support.annotation.StringRes;
8 import android.support.v7.widget.RecyclerView;
9 import android.util.AttributeSet;
10 import android.view.LayoutInflater;
11 import android.view.View;
12 import android.widget.FrameLayout;
13 import android.widget.ImageButton;
14 import android.widget.ProgressBar;
15 import android.widget.TextView;
17 import com.moiseum.wolnelektury.R;
18 import com.moiseum.wolnelektury.components.recycler.RecyclerAdapter;
20 import java.util.List;
22 import butterknife.BindView;
23 import butterknife.ButterKnife;
24 import butterknife.OnClick;
30 public class ProgressRecyclerView<T> extends FrameLayout {
32 public interface ProgressRecycleViewRetryListener {
33 void onRetryClicked();
36 @BindView(R.id.rvList)
38 @BindView(R.id.tvEmpty)
40 @BindView(R.id.pbLoading)
41 ProgressBar pbLoading;
42 @BindView(R.id.ibRetry)
45 private RecyclerAdapter<T, ?> adapter;
46 private ProgressRecycleViewRetryListener listener;
48 public ProgressRecyclerView(@NonNull Context context) {
52 public ProgressRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
53 this(context, attrs, 0);
56 public ProgressRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
57 super(context, attrs, defStyleAttr);
61 private void init(AttributeSet attrs) {
62 View view = LayoutInflater.from(getContext()).inflate(R.layout.progress_recyclerview, this, true);
63 ButterKnife.bind(this, view);
65 TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ProgressRecyclerView);
67 if (a.hasValue(R.styleable.ProgressRecyclerView_emptyText)) {
68 tvEmpty.setText(a.getString(R.styleable.ProgressRecyclerView_emptyText));
75 public void setAdapter(RecyclerAdapter<T, ?> adapter) {
76 this.adapter = adapter;
77 rvList.setAdapter(adapter);
80 public void setItems(List<T> items) {
81 if (adapter == null) {
82 throw new UnsupportedOperationException("Adapter not set");
84 adapter.setItems(items);
85 tvEmpty.setVisibility(items.isEmpty() ? VISIBLE : GONE);
88 public void addItems(List<T> items) {
89 if (adapter == null) {
90 throw new UnsupportedOperationException("Adapter not set");
92 if (items.size() > 0) {
93 adapter.addItems(items);
97 public void setProgressVisible(boolean visible) {
98 pbLoading.setVisibility(visible ? VISIBLE : GONE);
100 tvEmpty.setVisibility(GONE);
104 public void showRetryButton(ProgressRecycleViewRetryListener listener) {
105 this.listener = listener;
106 tvEmpty.setVisibility(GONE);
107 ibRetry.setVisibility(VISIBLE);
110 public void setEmptyText(@StringRes int stringResId) {
111 tvEmpty.setText(stringResId);
114 public void setLayoutManager(RecyclerView.LayoutManager layoutManager) {
115 rvList.setLayoutManager(layoutManager);
118 public void setHasFixedSize(boolean fixedSize) {
119 rvList.setHasFixedSize(fixedSize);
122 public void addOnScrollListener(RecyclerView.OnScrollListener listener) {
123 rvList.addOnScrollListener(listener);
126 public void removeOnScrollListener(RecyclerView.OnScrollListener listener) {
127 rvList.removeOnScrollListener(listener);
130 @OnClick(R.id.ibRetry)
131 public void retryButtonClick() {
132 if (listener != null) {
133 listener.onRetryClicked();
135 ibRetry.setVisibility(GONE);
138 public void updateEmptyViewVisibility() {
139 tvEmpty.setVisibility(ibRetry.getVisibility() == GONE && adapter.getItems().isEmpty() ? VISIBLE : GONE);