package com.likebamboo.osa.android.ui;
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.View;
import android.widget.AbsListView;
import com.etsy.android.grid.StaggeredGridView;
import com.likebamboo.osa.android.R;
import com.likebamboo.osa.android.entity.BlogList;
import com.likebamboo.osa.android.entity.LDialogItem;
import com.likebamboo.osa.android.impl.BaseOnItemClickListener;
import com.likebamboo.osa.android.request.JsonRequest;
import com.likebamboo.osa.android.request.RequestManager;
import com.likebamboo.osa.android.request.RequestParams;
import com.likebamboo.osa.android.request.RequestUrl;
import com.likebamboo.osa.android.ui.adapter.BlogAdapter;
import com.likebamboo.osa.android.ui.fragments.SimpleListDialog;
import com.likebamboo.osa.android.ui.nav.ActivityNavigator;
import com.likebamboo.osa.android.ui.view.FilterFooter;
import com.likebamboo.osa.android.ui.view.fab.DirectionScrollListener;
import java.util.ArrayList;
import butterknife.InjectView;
/**
* 博客界面
*/
public abstract class BlogListActivity extends EndlessActivity<BlogList> {
/**
* 排序
*/
public static final String EXTRA_SORT_KEY = "extra_sort_key";
@InjectView(R.id.list_view)
StaggeredGridView mBlogListView;
@InjectView(R.id.list_filter_footer_layout)
FilterFooter mFilterFooter = null;
/**
* 滚动事件监听器
*/
private DirectionScrollListener mScrollListener = null;
/**
* 排序
*/
protected String mSort = "";
/**
* 排序列表数值
*/
private ArrayList<LDialogItem> mSortDatas = null;
/**
* 排序dialog
*/
private SimpleListDialog<LDialogItem> mSortDialog = null;
@Override
protected int getLayoutId() {
return R.layout.activity_blog_list;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().hasExtra(EXTRA_TITLE)) {
setTitle(getIntent().getStringExtra(EXTRA_TITLE));
} else {
setTitle(R.string.app_name);
}
if (getIntent().hasExtra(EXTRA_SORT_KEY)) {
mSort = getIntent().getStringExtra(EXTRA_SORT_KEY);
}
// 处理屏幕旋转等情况下数据恢复的情况。
if (savedInstanceState != null) {
Fragment dialog = getSupportFragmentManager().findFragmentByTag("SortDialog");
if (dialog != null && (dialog instanceof SimpleListDialog)) {
((SimpleListDialog) dialog).setOnItemClickListener(getSortItemClickListener());
}
//
String sort = savedInstanceState.getString(EXTRA_SORT_KEY);
if (!TextUtils.isEmpty(sort)) {
mSort = sort;
}
}
// 设置空态页面
mBlogListView.setEmptyView(mLoadingLayout);
// 添加footer
mBlogListView.addFooterView(mFooterView);
// 设置适配器
mAdapter = new BlogAdapter(this);
mBlogListView.setAdapter(mAdapter);
((BlogAdapter) mAdapter).setOnItemClickListener(new BaseOnItemClickListener<BlogList.Blog>() {
@Override
public void onItemClick(int postion, BlogList.Blog item) {
// 进入博客详情界面
goToBlogDetail(item);
}
});
// 设置加载更多
mBlogListView.setOnScrollListener(this);
// 如果有过滤footer
if (hasFilterFooter()) {
mFilterFooter.setVisibility(View.VISIBLE);
// 初始化滚动监听
mScrollListener = new DirectionScrollListener(mFilterFooter);
// 设置筛选按钮点击回调
mFilterFooter.setFilterClickListener(new FilterFooter.IOnFilterClickListener() {
@Override
public void onSortClick() {
// 显示排序dialog
showSortListDialog();
}
@Override
public void onCategoryClick() {
// TODO 显示dialog
}
});
} else {
mFilterFooter.setVisibility(View.GONE);
}
// 加载数据
loadDatas();
}
/**
* 显示排序dialog
*/
private void showSortListDialog() {
if (mSortDatas == null) {
mSortDatas = new ArrayList<>();
String[] names = getResources().getStringArray(R.array.sort_name_entry);
String[] values = getResources().getStringArray(R.array.sort_value_entry);
for (int i = 0; i < names.length; i++) {
LDialogItem item = new LDialogItem();
item.setName(names[i]);
item.setValue(values[i]);
mSortDatas.add(item);
}
}
for (LDialogItem item : mSortDatas) {
if (("" + mSort).equals(item.getValue())) {
item.setSelected(true);
continue;
}
item.setSelected(false);
}
if (mSortDialog == null) {
mSortDialog = SimpleListDialog.getInstance(getString(R.string.sort), mSortDatas);
mSortDialog.setOnItemClickListener(getSortItemClickListener());
} else {
mSortDialog.notifyDataChanged();
}
mSortDialog.show(getSupportFragmentManager(), "SortDialog");
}
/**
* @return
*/
private SimpleListDialog.OnDialogItemClickListener<LDialogItem> getSortItemClickListener() {
return new SimpleListDialog.OnDialogItemClickListener<LDialogItem>() {
@Override
public void onItemClick(LDialogItem obj) {
if (obj == null) {
return;
}
// 回到顶部
mBlogListView.setSelection(0);
// 重置数据
reset();
// 设置排序规则
mSort = obj.getValue();
// 重新加载数据
loadDatas();
}
};
}
/**
* 进入博客详情界面
*
* @param item
*/
protected void goToBlogDetail(BlogList.Blog item) {
if (item == null) {
return;
}
// 进入博客详情界面
Intent i = new Intent(BlogListActivity.this, BlogActivity.class);
i.putExtra(BlogActivity.EXTRA_BLOG_URL, item.getUrl());
ActivityNavigator.startActivity(BlogListActivity.this, i);
}
/**
* 加载数据
*/
@Override
protected void loadDatas(RequestParams params) {
String url = getRequestUrl();
if (TextUtils.isEmpty(url)) {
url = RequestUrl.BLOG_URL;
}
// 排序
if (!TextUtils.isEmpty(mSort)) {
params.add("sort", mSort);
}
// 添加其他请求参数
addParams(params);
RequestManager.addRequest(new JsonRequest<BlogList>(url, BlogList.class, params, responseListener(), errorListener()),
getClass().getName());
}
@Override
protected void doOnSuccess(BlogList data) {
if (data == null || data.getList() == null) {
showMessage(data);
return;
}
if (data.getList().size() < mPageSize) {
mHasMore = false;
} else {
mHasMore = true;
}
// 如果数据为空,显示没有更多数据了
if (data.getList().isEmpty()) {
showMessage(data);
return;
}
++mPageIndex;
mAdapter.addDatas(data.getList());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent.hasExtra(EXTRA_TITLE)) {
setTitle(intent.getStringExtra(EXTRA_TITLE));
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
super.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
if (mScrollListener != null) {
mScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(EXTRA_SORT_KEY, mSort);
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putString(EXTRA_SORT_KEY, mSort);
}
/**
* list底部是否有filter
*
* @return
*/
public boolean hasFilterFooter() {
return true;
}
/**
* 获取请求的URL
*
* @return
*/
public abstract String getRequestUrl();
/**
* 添加其他请求参数
*
* @param params
*/
public abstract void addParams(RequestParams params);
}