package tellh.com.gitclub.presentation.view.fragment.news;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.tellh.nolistadapter.adapter.FooterLoadMoreAdapterWrapper;
import com.tellh.nolistadapter.adapter.RecyclerViewAdapter;
import com.tellh.nolistadapter.viewbinder.utils.EasyEmptyRecyclerViewBinder;
import java.util.List;
import javax.inject.Inject;
import tellh.com.gitclub.R;
import tellh.com.gitclub.common.AndroidApplication;
import tellh.com.gitclub.common.base.LazyFragment;
import tellh.com.gitclub.common.config.ExtraKey;
import tellh.com.gitclub.common.utils.Utils;
import tellh.com.gitclub.di.component.DaggerNewsComponent;
import tellh.com.gitclub.model.entity.Event;
import tellh.com.gitclub.presentation.contract.NewsContract;
import tellh.com.gitclub.presentation.view.adapter.viewbinder.ErrorViewBinder;
import tellh.com.gitclub.presentation.view.adapter.viewbinder.LoadMoreFooterViewBinder;
import tellh.com.gitclub.presentation.view.adapter.viewbinder.NewsListItemViewBinder;
import tellh.com.gitclub.presentation.view.fragment.login.LoginFragment;
import static com.tellh.nolistadapter.adapter.FooterLoadMoreAdapterWrapper.LOADING;
import static com.tellh.nolistadapter.adapter.FooterLoadMoreAdapterWrapper.OnReachFooterListener;
import static com.tellh.nolistadapter.adapter.FooterLoadMoreAdapterWrapper.PULL_TO_LOAD_MORE;
import static com.tellh.nolistadapter.adapter.FooterLoadMoreAdapterWrapper.REFRESH;
import static com.tellh.nolistadapter.adapter.FooterLoadMoreAdapterWrapper.UpdateType;
public class NewsFragment extends LazyFragment
implements NewsContract.View, SwipeRefreshLayout.OnRefreshListener,
LoginFragment.LoginCallback, OnReachFooterListener, ErrorViewBinder.OnReLoadCallback {
@Inject
NewsContract.Presenter presenter;
private FooterLoadMoreAdapterWrapper loadMoreWrapper;
private SwipeRefreshLayout refreshLayout;
private LoginFragment loginFragment;
private RecyclerView recyclerView;
public NewsFragment() {
// Required empty public constructor
}
public static NewsFragment newInstance() {
return new NewsFragment();
}
@Override
public void initData(Bundle savedInstanceState) {
refreshLayout.setRefreshing(true);
presenter.listNews(1);
}
@Override
public int getLayoutId() {
return R.layout.frag_news;
}
@Override
public void initView() {
initDagger();
//find view
recyclerView = (RecyclerView) mRootView.findViewById(R.id.list);
refreshLayout = (SwipeRefreshLayout) mRootView.findViewById(R.id.refreshLayout);
//swipe refresh layout
refreshLayout.setProgressViewOffset(false, -100, 230);
refreshLayout.setColorSchemeResources(R.color.blue, R.color.brown, R.color.purple, R.color.green);
refreshLayout.setOnRefreshListener(this);
//adapter
loadMoreWrapper = (FooterLoadMoreAdapterWrapper) RecyclerViewAdapter.builder()
.addItemType(new NewsListItemViewBinder())
.setLoadMoreFooter(new LoadMoreFooterViewBinder(), recyclerView, this)
.setErrorView(new ErrorViewBinder(this))
.setEmptyView(new EasyEmptyRecyclerViewBinder(R.layout.empty_view))
.build();
//recycler view
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(loadMoreWrapper);
}
private void initDagger() {
DaggerNewsComponent.builder()
.appComponent(AndroidApplication.getInstance().getAppComponent())
.build().inject(this);
presenter.attachView(this);
}
@Override
public void onDestroy() {
super.onDestroy();
presenter.detachView();
}
@Override
public void OnGetNews(List<Event> newsList, @UpdateType int updateType) {
loadMoreWrapper.OnGetData(newsList, updateType);
refreshLayout.setRefreshing(false);
}
@Override
public void onRefresh() {
presenter.listNews(1);
loadMoreWrapper.hideErrorView(recyclerView);
}
@Override
public void onToLoadMore(int curPage) {
loadMoreWrapper.setFooterStatus(LOADING);
presenter.listNews(curPage + 1);
}
@Override
public void showOnError(@UpdateType int updateType, String s) {
showOnError(s);
if (updateType == REFRESH)
refreshLayout.setRefreshing(false);
else
loadMoreWrapper.setFooterStatus(PULL_TO_LOAD_MORE);
if (updateType == REFRESH && !s.equals(Utils.getString(R.string.reqest_flying))) {
loadMoreWrapper.showErrorView(recyclerView);
}
}
@Override
public void showLoginDialog() {
if (loginFragment == null) {
loginFragment = new LoginFragment();
loginFragment.setCallback(this);
}
if (loginFragment.getDialog() == null)
loginFragment.show(getFragmentManager(), ExtraKey.TAG_LOGIN_FRAGMENT);
else loginFragment.getDialog().show();
}
@Override
public void onSuccessToLogin() {
//dismiss the login dialog
loginFragment.setDismissable(true);
loginFragment.dismiss();
//hide error view
loadMoreWrapper.hideErrorView(recyclerView);
//load data
refreshLayout.setRefreshing(true);
presenter.listNews(1);
}
@Override
public void onDismissLogin() {
loginFragment = null;
}
@Override //Click ErrorView to reload data.
public void reload() {
refreshLayout.setRefreshing(true);
loadMoreWrapper.hideErrorView(recyclerView);
presenter.listNews(1);
}
}