package tellh.com.gitclub.presentation.view.fragment.explore;
import android.os.Bundle;
import android.support.annotation.Nullable;
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 tellh.com.gitclub.R;
import tellh.com.gitclub.common.utils.Utils;
import tellh.com.gitclub.model.entity.RepositoryInfo;
import tellh.com.gitclub.presentation.contract.ExploreContract;
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.RepoListItemViewBinder;
import tellh.com.gitclub.presentation.view.fragment.ListFragment;
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;
import static tellh.com.gitclub.presentation.contract.ExploreContract.OnListFragmentInteractListener;
/**
* Created by tlh on 2016/9/5 :)
* TO list Repository in Github, but the data source is Gank or Arsenal Android.
*/
public class RepositoryInfoListFragment extends ListFragment implements ExploreContract.OnGetGankDataListener,
OnReachFooterListener {
private OnListFragmentInteractListener mListener;
private FooterLoadMoreAdapterWrapper adapter;
private int listType;
private int pageSize;
public static RepositoryInfoListFragment newInstance(@ExploreContract.ListType int listType,
int pageSize) {
Bundle args = new Bundle();
args.putInt("ListType", listType);
args.putInt("PageSize", pageSize);
RepositoryInfoListFragment fragment = new RepositoryInfoListFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listType = getArguments().getInt("ListType");
pageSize = getArguments().getInt("PageSize");
}
@Override
protected RecyclerView.Adapter getListAdapter() {
adapter = (FooterLoadMoreAdapterWrapper) RecyclerViewAdapter.builder()
.addItemType(new RepoListItemViewBinder(mListener.getPresenter()))
.setLoadMoreFooter(new LoadMoreFooterViewBinder(pageSize), recyclerView, this)
.setErrorView(new ErrorViewBinder(this))
.setEmptyView(new EasyEmptyRecyclerViewBinder(R.layout.empty_view))
.build();
return adapter;
}
@Override
protected int getLayoutId() {
return R.layout.frag_items_list;
}
@Override
public void onRefresh() {
super.onRefresh();
mListener.onFetchData(listType, 1);
}
void setListFragmentInteractListener(OnListFragmentInteractListener listener) {
mListener = listener;
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
@Override
public void onGet(List<RepositoryInfo> repositoryList, @UpdateType int updateType) {
adapter.OnGetData(repositoryList, updateType);
hideLoading();
}
@Override
public void onToLoadMore(int curPage) {
mListener.onFetchData(listType, curPage + 1);
}
public void showOnError(String msg, @UpdateType int updateType) {
if (updateType == REFRESH)
showErrorView();
else
adapter.setFooterStatus(PULL_TO_LOAD_MORE);
if (updateType == REFRESH && !msg.equals(Utils.getString(R.string.reqest_flying))) {
adapter.showErrorView(recyclerView);
}
}
}