package tellh.com.gitclub.presentation.view.activity.detail_list;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import com.tellh.nolistadapter.adapter.FooterLoadMoreAdapterWrapper;
import com.tellh.nolistadapter.adapter.RecyclerViewAdapter;
import com.tellh.nolistadapter.viewbinder.base.RecyclerViewBinder;
import com.tellh.nolistadapter.viewbinder.utils.EasyEmptyRecyclerViewBinder;
import tellh.com.gitclub.R;
import tellh.com.gitclub.common.base.BaseActivity;
import tellh.com.gitclub.common.config.ExtraKey;
import tellh.com.gitclub.common.utils.Utils;
import tellh.com.gitclub.presentation.contract.ShowError;
import tellh.com.gitclub.presentation.view.adapter.viewbinder.ErrorViewBinder;
import tellh.com.gitclub.presentation.view.adapter.viewbinder.LoadMoreFooterViewBinder;
import tellh.com.gitclub.presentation.view.fragment.search.ListLoadingListener;
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;
/**
* Created by tlh on 2016/9/16 :)
*/
public abstract class BaseListActivity extends BaseActivity
implements SwipeRefreshLayout.OnRefreshListener, ListLoadingListener, ShowError,
OnReachFooterListener, ErrorViewBinder.OnReLoadCallback {
protected SwipeRefreshLayout refreshLayout;
protected RecyclerView recyclerView;
protected FooterLoadMoreAdapterWrapper loadMoreWrapper;
protected String user;
protected String repo;
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
if (intent != null) {
user = intent.getStringExtra(ExtraKey.USER_NAME);
repo = intent.getStringExtra(ExtraKey.REPO_NAME);
}
super.onCreate(savedInstanceState);
}
@Override
public void initView() {
initDagger();
recyclerView = (RecyclerView) findViewById(R.id.list);
refreshLayout = (SwipeRefreshLayout) findViewById(R.id.refreshLayout);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(getToolbarTitle());
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
loadMoreWrapper = (FooterLoadMoreAdapterWrapper) RecyclerViewAdapter.builder()
.addItemType(getListItemViewBinder())
.setLoadMoreFooter(new LoadMoreFooterViewBinder(), recyclerView, this)
.setErrorView(new ErrorViewBinder(this))
.setEmptyView(new EasyEmptyRecyclerViewBinder(R.layout.empty_view))
.build();
recyclerView.setAdapter(loadMoreWrapper);
//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);
}
protected abstract RecyclerViewBinder getListItemViewBinder();
protected abstract String getToolbarTitle();
protected abstract void initDagger();
@Override
public int getLayoutId() {
return R.layout.activity_list;
}
@Override
public void initData(Bundle savedInstanceState) {
refreshLayout.setRefreshing(true);
onRefresh();
}
@Override
public void showLoading() {
if (refreshLayout.isRefreshing())
return;
refreshLayout.setRefreshing(true);
}
@Override
public void hideLoading() {
if (!refreshLayout.isRefreshing())
return;
refreshLayout.setRefreshing(false);
}
@Override
public void showErrorView() {
hideLoading();
loadMoreWrapper.showErrorView(recyclerView);
}
@Override
public void onToLoadMore(int curPage) {
loadMoreWrapper.setFooterStatus(LOADING);
}
@Override
public void showOnError(@UpdateType int updateType, String msg) {
showOnError(msg);
handleError(msg, updateType);
}
protected void handleError(String msg, @UpdateType int updateType) {
if (updateType == REFRESH)
refreshLayout.setRefreshing(false);
else
loadMoreWrapper.setFooterStatus(PULL_TO_LOAD_MORE);
if (updateType == REFRESH && !msg.equals(Utils.getString(R.string.reqest_flying))) {
loadMoreWrapper.showErrorView(recyclerView);
}
}
@Override
public void reload() {
refreshLayout.setRefreshing(true);
loadMoreWrapper.hideErrorView(recyclerView);
onRefresh();
}
}