package com.ittianyu.pocenter.features.search;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import com.arlib.floatingsearchview.FloatingSearchView;
import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.ittianyu.mvp.lcee.Lcee;
import com.ittianyu.mvp.lcee.MvpLceeActivity;
import com.ittianyu.pocenter.R;
import com.ittianyu.pocenter.common.bean.ProjectBean;
import com.ittianyu.pocenter.common.utils.CollectionUtils;
import com.ittianyu.pocenter.databinding.ActSearchBinding;
import com.ittianyu.pocenter.features.detail.DetailActivity;
import com.orhanobut.logger.Logger;
import com.umeng.analytics.MobclickAgent;
import com.victor.loading.rotate.RotateLoading;
import java.util.ArrayList;
import java.util.List;
/**
* Created by yu on 2017/1/13.
*/
@Lcee(loadingViewId = R.id.v_loading, contentViewId = R.id.v_content, errorViewId = R.id.v_error, emptyViewId = R.id.v_empty)
public class SearchActivity extends MvpLceeActivity<SwipeRefreshLayout, List<ProjectBean>, SearchContract.View, SearchContract.Presenter>
implements SearchContract.View {
private ActSearchBinding bind;
private SearchAdapter searchAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bind = DataBindingUtil.setContentView(this, R.layout.act_search);
initView();
}
@Override
protected String getErrorMessage(Throwable e, boolean pullToRefresh) {
Logger.e(e, "");
return pullToRefresh ? getString(R.string.failed_to_refresh) : getString(R.string.failed_to_load_click_to_reload);
}
@Override
protected void onSetErrorViewText(View errorView, String errorMsg) {
TextView tv = (TextView) errorView.findViewById(R.id.tv);
tv.setText(errorMsg);
}
@Override
public void showLoading(boolean pullToRefresh) {
super.showLoading(pullToRefresh);
RotateLoading rotateLoading = (RotateLoading) this.loadingView.findViewById(R.id.rl);
if (!rotateLoading.isStart())
rotateLoading.start();
}
@Override
public SearchContract.Presenter createPresenter() {
return new SearchPresenter();
}
protected void initView() {
// init recycler view
searchAdapter = new SearchAdapter(new ArrayList<ProjectBean>(0));
bind.rv.setAdapter(searchAdapter);
bind.rv.setLayoutManager(new LinearLayoutManager(this));
// bind.rv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
bind.fsv.setSearchFocused(true);
initEvent();
showContent();
}
/**
* set listeners
*/
private void initEvent() {
// refresh listener
bind.vContent.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadData(true);
}
});
// load more listener
searchAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
@Override
public void onLoadMoreRequested() {
bind.rv.post(new Runnable() {
@Override
public void run() {
loadMore();
}
});
}
});
// item click listener
bind.rv.addOnItemTouchListener(new OnItemClickListener() {
@Override
public void SimpleOnItemClick(BaseQuickAdapter baseQuickAdapter, View view, int i) {
// get item url
ProjectBean project = (ProjectBean) baseQuickAdapter.getItem(i);
// start detail activity
Intent intent = new Intent(SearchActivity.this, DetailActivity.class);
intent.putExtra(DetailActivity.EXTRA_URL, project.url);
intent.putExtra(DetailActivity.EXTRA_TITLE, project.title);
intent.putExtra(DetailActivity.EXTRA_DESCRIPTION, project.description);
startActivity(intent);
}
});
// search listener
bind.fsv.setOnSearchListener(new FloatingSearchView.OnSearchListener() {
@Override
public void onSuggestionClicked(SearchSuggestion searchSuggestion) {
}
@Override
public void onSearchAction(String currentQuery) {
if (!TextUtils.isEmpty(currentQuery)) {
presenter.setSearchString(currentQuery);
loadData(false);
}
}
});
}
@Override
public void loadData(boolean pullToRefresh) {
// disable load more when reload data or first load
searchAdapter.setEnableLoadMore(false);
// show loading
showLoading(pullToRefresh);
presenter.loadData(pullToRefresh);
Logger.d("start load data");
}
@Override
public void setData(List<ProjectBean> data) {
if (CollectionUtils.isEmpty(data)) {
showEmpty();
} else {
showContent();
}
searchAdapter.setNewData(data);
bind.rv.scrollToPosition(0);
Logger.d("set data");
loadDataComplete();
}
@Override
public void loadDataError(Throwable e, boolean pullToRefresh) {
showError(e, pullToRefresh);
Logger.d("load data error");
loadDataComplete();
}
@Override
public void loadDataComplete() {
// enable load more after reload completed
searchAdapter.setEnableLoadMore(true);
bind.vContent.setRefreshing(false);
Logger.d("load data complete");
}
@Override
public void loadMore() {
// disable refresh when load more
bind.vContent.setEnabled(false);
presenter.loadMore(searchAdapter.getData().size());
Logger.d("start load more");
}
@Override
public void addData(List<ProjectBean> data) {
if (CollectionUtils.isEmpty(data)) {
// no more data
searchAdapter.loadMoreEnd();
} else {
searchAdapter.loadMoreComplete();
}
searchAdapter.addData(data);
Logger.d("add data");
loadMoreComplete();
}
@Override
public void loadMoreError(Throwable e) {
// showError(e, false);
searchAdapter.loadMoreFail();
Logger.d("load more error");
loadMoreComplete();
}
@Override
public void loadMoreComplete() {
// enable reload after load more completed
bind.vContent.setEnabled(true);
Logger.d("load more complete");
}
@Override
public <T> T getApp() {
return (T) getApplication();
}
// 友盟统计
public void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
public void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
// 友盟统计 结束
}