Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / view / news / NewsListFragment.java
1 package com.moiseum.wolnelektury.view.news;
2
3 import android.os.Bundle;
4 import android.support.v7.widget.LinearLayoutManager;
5 import android.view.View;
6 import android.widget.Button;
7 import android.widget.ProgressBar;
8 import android.widget.Toast;
9
10 import com.moiseum.wolnelektury.R;
11 import com.moiseum.wolnelektury.base.mvp.PresenterFragment;
12 import com.moiseum.wolnelektury.components.ProgressRecyclerView;
13 import com.moiseum.wolnelektury.components.recycler.EndlessRecyclerOnScrollListener;
14 import com.moiseum.wolnelektury.connection.models.NewsModel;
15 import com.moiseum.wolnelektury.view.news.single.NewsActivity;
16
17 import java.util.List;
18
19 import butterknife.BindView;
20 import butterknife.OnClick;
21
22 public class NewsListFragment extends PresenterFragment<NewsListPresenter> implements NewsListView {
23
24     public static NewsListFragment newInstance() {
25         return new NewsListFragment();
26     }
27
28     @BindView(R.id.rvNews)
29     ProgressRecyclerView<NewsModel> rvNews;
30         @BindView(R.id.pbLoadMore)
31         ProgressBar pbLoadMore;
32         @BindView(R.id.btnReloadMore)
33         Button btnReloadMore;
34
35     private NewsListAdapter adapter;
36         private EndlessRecyclerOnScrollListener rvBooksScrollListener = new EndlessRecyclerOnScrollListener() {
37                 @Override
38                 public void onLoadMore() {
39                         if (adapter.getItemCount() > 0) {
40                                 getPresenter().loadMoreNews();
41                         }
42                 }
43         };
44
45     @Override
46     protected NewsListPresenter createPresenter() {
47         return new NewsListPresenter(this);
48     }
49
50     @Override
51     public int getLayoutResourceId() {
52         return R.layout.fragment_news;
53     }
54
55     @Override
56     public void prepareView(View view, Bundle savedInstanceState) {
57             LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
58             rvNews.setLayoutManager(layoutManager);
59             rvNews.addOnScrollListener(rvBooksScrollListener);
60
61             adapter = new NewsListAdapter(getContext());
62             adapter.setOnItemClickListener((item, view1, position) -> getPresenter().onNewsClicked(item));
63             rvNews.setAdapter(adapter);
64     }
65
66         @Override
67         public void setData(List<NewsModel> data) {
68                 if (adapter.getItemCount() == 0) {
69                         rvNews.setItems(data);
70                 } else {
71                         rvNews.addItems(data);
72                 }
73         }
74
75         @Override
76         public void setProgressVisible(boolean visible) {
77                 if (adapter.getItemCount() == 0) {
78                         rvNews.setProgressVisible(visible);
79                 } else {
80                         pbLoadMore.setVisibility(visible ? View.VISIBLE : View.GONE);
81                 }
82         }
83
84         @Override
85         public void showError(Exception e) {
86                 Toast.makeText(getContext(), R.string.loading_results_failed, Toast.LENGTH_SHORT).show();
87                 if (adapter.getItemCount() != 0) {
88                         btnReloadMore.setVisibility(View.VISIBLE);
89                 } else {
90                         rvNews.showRetryButton(() -> getPresenter().loadMoreNews());
91                 }
92         }
93
94         @Override
95         public void launchNews(NewsModel news) {
96                 startActivity(new NewsActivity.NewsIntent(news, getContext()));
97         }
98
99         @OnClick(R.id.btnReloadMore)
100         public void onReloadMoreClicked() {
101                 btnReloadMore.setVisibility(View.GONE);
102                 pbLoadMore.setVisibility(View.VISIBLE);
103                 getPresenter().loadMoreNews();
104         }
105 }