package com.troy.xifan.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import butterknife.BindView;
import com.chenenyu.router.Router;
import com.jude.easyrecyclerview.EasyRecyclerView;
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
import com.troy.xifan.R;
import com.troy.xifan.activity.StatusDetailActivity;
import com.troy.xifan.adapter.StatusAdapter;
import com.troy.xifan.config.Constants;
import com.troy.xifan.eventbus.SendStatusEvent;
import com.troy.xifan.eventbus.StatusRefreshEvent;
import com.troy.xifan.http.HttpRequestFactory;
import com.troy.xifan.http.callback.SimpleHttpRequestCallback;
import com.troy.xifan.http.exception.ApiException;
import com.troy.xifan.http.request.StatusesRequest;
import com.troy.xifan.model.response.StatusRes;
import com.troy.xifan.util.UIUtils;
import com.troy.xifan.util.Utils;
import java.util.List;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
/**
* Created by chenlongfei on 2016/12/1.
*/
public class HomeFragment extends BaseFragment {
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.recycler_view) EasyRecyclerView mRecyclerView;
private String mMaxId;
private StatusAdapter mStatusAdapter;
public static Fragment newInstance() {
return new HomeFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getHomeTimeline(false);
}
private void getHomeTimeline(final boolean loadMore) {
StatusesRequest request = new StatusesRequest();
request.setMax_id(loadMore ? mMaxId : null);
HttpRequestFactory.getInstance()
.getHomeTimeline(request, new SimpleHttpRequestCallback<List<StatusRes>>() {
@Override
public void onSuccess(List<StatusRes> responseData) {
if (!loadMore) {
mStatusAdapter.clear();
}
mStatusAdapter.addAll(responseData);
mStatusAdapter.notifyDataSetChanged();
mRecyclerView.setRefreshing(false);
mMaxId = Utils.getMaxId(mStatusAdapter.getAllData());
}
@Override
public void onFail(ApiException apiException) {
UIUtils.showToast(getActivity(), apiException.getErrorMessage());
mRecyclerView.setRefreshing(false);
}
});
}
@Override
public void initViews() {
mToolbar.setTitle(getString(R.string.bottom_navigation_home));
mToolbar.inflateMenu(R.menu.menu_home);
mToolbar.setOnMenuItemClickListener(mOnMenuItemClickListener);
mToolbar.setElevation(getResources().getDimension(R.dimen.elevation));
mStatusAdapter = new StatusAdapter(getActivity());
mStatusAdapter.setMore(R.layout.view_load_more, new RecyclerArrayAdapter.OnMoreListener() {
@Override
public void onMoreShow() {
getHomeTimeline(true);
}
@Override
public void onMoreClick() {
}
});
mStatusAdapter.setError(R.layout.view_load_more_error,
new RecyclerArrayAdapter.OnErrorListener() {
@Override
public void onErrorShow() {
}
@Override
public void onErrorClick() {
mStatusAdapter.resumeMore();
}
});
mStatusAdapter.setNoMore(R.layout.view_no_more);
mStatusAdapter.setOnItemClickListener(new RecyclerArrayAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
StatusRes statusRes = mStatusAdapter.getItem(position);
Bundle bundle = new Bundle();
bundle.putParcelable(StatusDetailActivity.EXTRA_STATUS, statusRes);
Router.build(Constants.Router.STATUS_DETAIL).extras(bundle).go(getActivity());
}
});
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.setAdapterWithProgress(mStatusAdapter);
mRecyclerView.setRefreshListener(this);
mRecyclerView.setRefreshingColor(getResources().getIntArray(R.array.refreshing_color));
}
@Override
protected int getContentViewResId() {
return R.layout.fragment_home;
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
public void onRefresh() {
getHomeTimeline(false);
}
//刷新timeline
@Subscribe
public void onStatusRefresh(StatusRefreshEvent statusRefreshEvent) {
int position = -1;
StatusRes statusRes = statusRefreshEvent.getStatusRes();
List<StatusRes> statusResList = mStatusAdapter.getAllData();
for (int i = 0; i < statusResList.size(); i++) {
if (statusResList.get(i).getId().equals(statusRes.getId())) {
position = i;
break;
}
}
if (position < 0) {
return;
}
if (statusRefreshEvent.getType().equals(StatusRefreshEvent.TYPE_DELETE_STATUS)) {
mStatusAdapter.remove(position);
} else if (statusRefreshEvent.getType().equals(StatusRefreshEvent.TYPE_FAVORITE_STATUS)) {
mStatusAdapter.update(statusRes, position);
}
}
//消息发送成功刷新timeline
@Subscribe
public void onSendStatus(SendStatusEvent sendStatusEvent) {
if (SendStatusEvent.TYPE_SUCCESS.equals(sendStatusEvent.getType())) {
UIUtils.showToast(getActivity(), getString(R.string.text_send_status_success));
getHomeTimeline(false);
} else if (SendStatusEvent.TYPE_FAIL.equals(sendStatusEvent.getType())) {
UIUtils.showToast(getActivity(), getString(R.string.text_send_status_fail));
}
}
private Toolbar.OnMenuItemClickListener mOnMenuItemClickListener =
new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_write:
Router.build(Constants.Router.WRITE_STATUS).go(getActivity());
break;
}
return true;
}
};
}