package com.werb.gankwithzhihu.ui.presenter;
import android.content.Context;
import android.os.Handler;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;
import com.werb.gankwithzhihu.R;
import com.werb.gankwithzhihu.bean.daily.DailyTimeLine;
import com.werb.gankwithzhihu.ui.adapter.DailyListAdapter;
import com.werb.gankwithzhihu.ui.base.BasePresenter;
import com.werb.gankwithzhihu.ui.view.IDailyFgView;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by Werb on 2016/9/2.
* Werb is Wanbo.
* Contact Me : werbhelius@gmail.com
*/
public class DailyFgPresenter extends BasePresenter<IDailyFgView> {
private Context context;
private IDailyFgView dailyFgView;
private RecyclerView mRecyclerView;
private LinearLayoutManager layoutManager;
private DailyTimeLine timeLine;
private DailyListAdapter adapter;
private int lastVisibleItem;
private String has_more;
private String next_pager;
private boolean isLoadMore = false; // 是否加载过更多
public DailyFgPresenter(Context context) {
this.context = context;
}
public void getDailyTimeLine(String num){
dailyFgView = getView();
if(dailyFgView !=null){
mRecyclerView = dailyFgView.getRecyclerView();
layoutManager = dailyFgView.getLayoutManager();
dailyApi.getDailyTimeLine(num)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(dailyTimeLine -> {
if(dailyTimeLine.getMeta().getMsg().equals("success")){
disPlayDailyTimeLine(context,dailyTimeLine,mRecyclerView,dailyFgView);
}
},this::loadError);
}
}
private void loadError(Throwable throwable) {
throwable.printStackTrace();
dailyFgView.setDataRefresh(false);
Toast.makeText(context, R.string.load_error, Toast.LENGTH_SHORT).show();
}
private void disPlayDailyTimeLine(Context context, DailyTimeLine dailyTimeLine, RecyclerView recyclerView, IDailyFgView dailyFgView){
if(dailyTimeLine.getResponse().getLast_key()!=null){
next_pager = dailyTimeLine.getResponse().getLast_key();
}
has_more = dailyTimeLine.getResponse().getHas_more();
if (isLoadMore) {
if (dailyTimeLine.getResponse().getFeeds() == null) {
adapter.updateLoadStatus(adapter.LOAD_NONE);
dailyFgView.setDataRefresh(false);
return;
}
else {
timeLine.getResponse().getFeeds().addAll(dailyTimeLine.getResponse().getFeeds());
}
adapter.notifyDataSetChanged();
} else {
timeLine = dailyTimeLine;
adapter = new DailyListAdapter(context, timeLine.getResponse());
recyclerView.setAdapter(adapter);
}
dailyFgView.setDataRefresh(false);
}
/**
* recyclerView Scroll listener , maybe in here is wrong ?
*/
public void scrollRecycleView() {
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
lastVisibleItem = layoutManager
.findLastVisibleItemPosition();
if (layoutManager.getItemCount() == 1) {
adapter.updateLoadStatus(adapter.LOAD_NONE);
return;
}
if (lastVisibleItem + 1 == layoutManager
.getItemCount()) {
adapter.updateLoadStatus(adapter.LOAD_PULL_TO);
if(has_more.equals("true")) {
isLoadMore = true;
}
adapter.updateLoadStatus(adapter.LOAD_MORE);
new Handler().postDelayed(() -> getDailyTimeLine(next_pager), 1000);
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastVisibleItem = layoutManager.findLastVisibleItemPosition();
}
});
}
}