package com.cundong.izhihu.activity;
import java.util.ArrayList;
import android.content.Intent;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.cundong.izhihu.R;
import com.cundong.izhihu.ZhihuApplication;
import com.cundong.izhihu.adapter.NewsAdapter;
import com.cundong.izhihu.entity.NewsListEntity.NewsEntity;
import com.cundong.izhihu.task.MyAsyncTask;
/**
* 类说明: 收藏夹,Activity
*
* @date 2014-10-10
* @version 1.0
*/
public class FavoriteActivity extends BaseActivity {
private static final int REQUESTCODE_DETAIL = 8010;
private ListView mListView;
private NewsAdapter mAdapter = null;
private ActionMode mActionMode;
private ArrayList<NewsEntity> mNewsList = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(R.string.actionbar_title_fav);
mInstance = this;
mListView = (ListView) findViewById(R.id.list);
mListView.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
NewsEntity newsEntity = mNewsList!=null ? mNewsList.get(position) : null;
if (newsEntity == null)
return;
if (mActionMode == null) {
Intent intent = new Intent();
intent.putExtra("id", newsEntity.id);
intent.putExtra("newsEntity", newsEntity);
intent.setClass(mInstance, NewsDetailActivity.class);
startActivityForResult(intent, REQUESTCODE_DETAIL);
} else {
// add or remove selection for current list item
onListItemCheck(position);
}
}
});
mListView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView,
View view, int position, long id) {
onListItemCheck(position);
return true;
}
});
new LoadCacheNewsTask().executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
private void onListItemCheck(int position) {
mAdapter.toggleSelection(position);
boolean hasCheckedItems = mAdapter.getSelectedCount() > 0;
if (hasCheckedItems && mActionMode == null) {
// there are some selected items, start the actionMode
mActionMode = startActionMode(new ActionModeCallback());
} else if (!hasCheckedItems && mActionMode != null) {
// there no selected items, finish the actionMode
mActionMode.finish();
}
if (mActionMode != null) {
mActionMode.setTitle(String.valueOf(mAdapter.getSelectedCount()) + " selected");
}
}
private class ActionModeCallback implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.contextual_list_view, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
ArrayList<NewsEntity> tempList = new ArrayList<NewsEntity>();
tempList.addAll(mNewsList);
SparseBooleanArray selected = mAdapter.getSelectedIds();
for (int i = 0; i < selected.size(); i++) {
if (selected.valueAt(i)) {
NewsEntity selectedItem = (NewsEntity) mAdapter.getItem(selected.keyAt(i));
tempList.remove(selectedItem);
ZhihuApplication.getNewsFavoriteDataSource().deleteFromFavorite(String.valueOf(selectedItem.id));
}
}
mNewsList = tempList;
mAdapter.updateData(mNewsList);
// close action mode
mode.finish();
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mAdapter.clearSelection();
mActionMode = null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.favorite, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_clear:
ZhihuApplication.getNewsFavoriteDataSource().deleteFromFavorite();
new LoadCacheNewsTask().executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUESTCODE_DETAIL) {
new LoadCacheNewsTask().executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
}
private class LoadCacheNewsTask extends MyAsyncTask<String, Void, ArrayList<NewsEntity>> {
@Override
protected ArrayList<NewsEntity> doInBackground(String... params) {
return ZhihuApplication.getNewsFavoriteDataSource().getFavoriteList();
}
@Override
protected void onPostExecute(ArrayList<NewsEntity> result) {
super.onPostExecute(result);
if (result != null) {
mNewsList = result;
if (mAdapter == null) {
mAdapter = new NewsAdapter(mInstance, mNewsList);
mAdapter.setFavoriteFlag(true);
mListView.setAdapter(mAdapter);
} else {
mAdapter.updateData(mNewsList);
}
}
}
}
}