X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff..269195b3729c1bdc22e9053ee4ebca667ea8549d:/Android/app/src/main/java/com/moiseum/wolnelektury/view/news/NewsListPresenter.java diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/view/news/NewsListPresenter.java b/Android/app/src/main/java/com/moiseum/wolnelektury/view/news/NewsListPresenter.java new file mode 100644 index 0000000..4b87b96 --- /dev/null +++ b/Android/app/src/main/java/com/moiseum/wolnelektury/view/news/NewsListPresenter.java @@ -0,0 +1,81 @@ +package com.moiseum.wolnelektury.view.news; + +import android.os.Bundle; + +import com.moiseum.wolnelektury.base.DataObserver; +import com.moiseum.wolnelektury.base.DataProvider; +import com.moiseum.wolnelektury.base.mvp.FragmentPresenter; +import com.moiseum.wolnelektury.connection.RestClient; +import com.moiseum.wolnelektury.connection.models.NewsModel; +import com.moiseum.wolnelektury.connection.services.NewsService; + +import java.util.Collections; +import java.util.List; + +import retrofit2.Call; + +/** + * Created by Piotr Ostrowski on 06.08.2018. + */ +class NewsListPresenter extends FragmentPresenter { + + private class NewsListDataProvider extends DataProvider, NewsService> { + + @Override + protected Class getServiceClass() { + return NewsService.class; + } + + @Override + public Call> execute(NewsService service) { + return service.getNews(lastKeySlug, RestClient.PAGINATION_LIMIT); + } + } + + private class NewsListDataObserver implements DataObserver> { + + @Override + public void onLoadStarted() { + getView().setProgressVisible(true); + } + + @Override + public void onLoadSuccess(List data) { + if (data.size() > 0) { + lastKey = data.get(data.size() - 1).getKey(); + } + getView().setProgressVisible(false); + getView().setData(data); + } + + @Override + public void onLoadFailed(Exception e) { + getView().setProgressVisible(false); + getView().setData(Collections.emptyList()); + getView().showError(e); + } + } + + private NewsListDataProvider dataProvider; + private String lastKey = null; + + NewsListPresenter(NewsListView view) { + super(view); + dataProvider = new NewsListDataProvider(); + dataProvider.setDataObserver(new NewsListDataObserver()); + } + + @Override + public void onViewCreated(Bundle savedInstanceState) { + super.onViewCreated(savedInstanceState); + dataProvider.load(null); + } + + public void loadMoreNews() { + dataProvider.load(lastKey); + } + + public void onNewsClicked(NewsModel newsModel) { + getView().launchNews(newsModel); + } +}