Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / view / news / NewsListPresenter.java
1 package com.moiseum.wolnelektury.view.news;
2
3 import android.os.Bundle;
4
5 import com.moiseum.wolnelektury.base.DataObserver;
6 import com.moiseum.wolnelektury.base.DataProvider;
7 import com.moiseum.wolnelektury.base.mvp.FragmentPresenter;
8 import com.moiseum.wolnelektury.connection.RestClient;
9 import com.moiseum.wolnelektury.connection.models.NewsModel;
10 import com.moiseum.wolnelektury.connection.services.NewsService;
11
12 import java.util.Collections;
13 import java.util.List;
14
15 import retrofit2.Call;
16
17 /**
18  * Created by Piotr Ostrowski on 06.08.2018.
19  */
20 class NewsListPresenter extends FragmentPresenter<NewsListView> {
21
22         private class NewsListDataProvider extends DataProvider<List<NewsModel>, NewsService> {
23
24                 @Override
25                 protected Class<NewsService> getServiceClass() {
26                         return NewsService.class;
27                 }
28
29                 @Override
30                 public Call<List<NewsModel>> execute(NewsService service) {
31                         return service.getNews(lastKeySlug, RestClient.PAGINATION_LIMIT);
32                 }
33         }
34
35         private class NewsListDataObserver implements DataObserver<List<NewsModel>> {
36
37                 @Override
38                 public void onLoadStarted() {
39                         getView().setProgressVisible(true);
40                 }
41
42                 @Override
43                 public void onLoadSuccess(List<NewsModel> data) {
44                         if (data.size() > 0) {
45                                 lastKey = data.get(data.size() - 1).getKey();
46                         }
47                         getView().setProgressVisible(false);
48                         getView().setData(data);
49                 }
50
51                 @Override
52                 public void onLoadFailed(Exception e) {
53                         getView().setProgressVisible(false);
54                         getView().setData(Collections.emptyList());
55                         getView().showError(e);
56                 }
57         }
58
59         private NewsListDataProvider dataProvider;
60         private String lastKey = null;
61
62         NewsListPresenter(NewsListView view) {
63                 super(view);
64                 dataProvider = new NewsListDataProvider();
65                 dataProvider.setDataObserver(new NewsListDataObserver());
66         }
67
68         @Override
69         public void onViewCreated(Bundle savedInstanceState) {
70                 super.onViewCreated(savedInstanceState);
71                 dataProvider.load(null);
72         }
73
74         public void loadMoreNews() {
75                 dataProvider.load(lastKey);
76         }
77
78         public void onNewsClicked(NewsModel newsModel) {
79                 getView().launchNews(newsModel);
80         }
81 }