package org.qii.weiciyuan.ui.preference; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.AccountBean; import org.qii.weiciyuan.support.database.AccountDBTask; import org.qii.weiciyuan.support.database.DraftDBManager; import org.qii.weiciyuan.support.database.draftbean.CommentDraftBean; import org.qii.weiciyuan.support.database.draftbean.DraftListViewItemBean; import org.qii.weiciyuan.support.database.draftbean.ReplyDraftBean; import org.qii.weiciyuan.support.database.draftbean.RepostDraftBean; import org.qii.weiciyuan.support.database.draftbean.StatusDraftBean; import org.qii.weiciyuan.support.database.table.DraftTable; import org.qii.weiciyuan.support.lib.MyAsyncTask; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.ThemeUtility; import org.qii.weiciyuan.ui.send.WriteCommentActivity; import org.qii.weiciyuan.ui.send.WriteReplyToCommentActivity; import org.qii.weiciyuan.ui.send.WriteRepostActivity; import org.qii.weiciyuan.ui.send.WriteWeiboActivity; import android.app.ListFragment; import android.content.Intent; import android.os.Bundle; import android.view.ActionMode; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * User: qii * Date: 12-10-22 */ public class DraftFragment extends ListFragment { private DraftAdapter adapter; private List<DraftListViewItemBean> list = new ArrayList<DraftListViewItemBean>(); private DBTask task; private RemoveDraftDBTask removeTask; @Override public void onDetach() { super.onDetach(); if (task != null) { task.cancel(true); } if (removeTask != null) { removeTask.cancel(true); } } @Override public void onResume() { super.onResume(); if (task == null || task.getStatus() == MyAsyncTask.Status.FINISHED) { task = new DBTask(); task.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); setRetainInstance(true); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); adapter = new DraftAdapter(); setListAdapter(adapter); getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL); getListView().setMultiChoiceModeListener(new DraftMultiChoiceModeListener()); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { DraftListViewItemBean item = list.get(position); Intent intent; switch (item.getType()) { case DraftTable.TYPE_WEIBO: AccountBean accountBean = AccountDBTask .getAccount(item.getStatusDraftBean().getAccountId()); intent = new Intent(getActivity(), WriteWeiboActivity.class); intent.setAction(WriteWeiboActivity.ACTION_DRAFT); intent.putExtra("draft", item.getStatusDraftBean()); intent.putExtra("account", accountBean); startActivity(intent); break; case DraftTable.TYPE_REPOST: accountBean = AccountDBTask .getAccount(item.getRepostDraftBean().getAccountId()); RepostDraftBean repostDraftBean = list.get(position).getRepostDraftBean(); intent = new Intent(getActivity(), WriteRepostActivity.class); intent.setAction(WriteRepostActivity.ACTION_DRAFT); intent.putExtra("draft", repostDraftBean); intent.putExtra("account", accountBean); startActivity(intent); break; case DraftTable.TYPE_COMMENT: CommentDraftBean commentDraftBean = list.get(position) .getCommentDraftBean(); intent = new Intent(getActivity(), WriteCommentActivity.class); intent.setAction(WriteCommentActivity.ACTION_DRAFT); intent.putExtra("draft", commentDraftBean); startActivity(intent); break; case DraftTable.TYPE_REPLY: ReplyDraftBean replyDraftBean = list.get(position).getReplyDraftBean(); intent = new Intent(getActivity(), WriteReplyToCommentActivity.class); intent.setAction(WriteReplyToCommentActivity.ACTION_DRAFT); intent.putExtra("draft", replyDraftBean); startActivity(intent); break; } } }); } private class DraftMultiChoiceModeListener implements AbsListView.MultiChoiceModeListener { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.getMenuInflater().inflate(R.menu.contextual_menu_draftfragment, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.menu_remove: if (removeTask == null || removeTask.getStatus() == MyAsyncTask.Status.FINISHED) { removeTask = new RemoveDraftDBTask(); removeTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } mode.finish(); return true; } return false; } @Override public void onDestroyActionMode(ActionMode mode) { } @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { mode.setTitle(String.format(getString(R.string.have_selected), String.valueOf(getListView().getCheckedItemCount()))); adapter.notifyDataSetChanged(); } } private class RemoveDraftDBTask extends MyAsyncTask<Void, List<DraftListViewItemBean>, List<DraftListViewItemBean>> { Set<String> set = new HashSet<String>(); @Override protected void onPreExecute() { super.onPreExecute(); long[] ids = getListView().getCheckedItemIds(); for (long id : ids) { set.add(String.valueOf(id)); } } @Override protected List<DraftListViewItemBean> doInBackground(Void... params) { return DraftDBManager.getInstance() .removeAndGet(set, GlobalContext.getInstance().getAccountBean().getUid()); } @Override protected void onPostExecute(List<DraftListViewItemBean> result) { list = result; adapter.notifyDataSetChanged(); } } private class DBTask extends MyAsyncTask<Void, List<DraftListViewItemBean>, List<DraftListViewItemBean>> { @Override protected List<DraftListViewItemBean> doInBackground(Void... params) { List<DraftListViewItemBean> set = DraftDBManager.getInstance() .getDraftList(GlobalContext.getInstance().getAccountBean().getUid()); return set; } @Override protected void onPostExecute(List<DraftListViewItemBean> set) { super.onPostExecute(set); list.clear(); list.addAll(set); adapter.notifyDataSetChanged(); } } private class DraftAdapter extends BaseAdapter { int checkedBG; int defaultBG; public DraftAdapter() { defaultBG = getResources().getColor(R.color.transparent); checkedBG = ThemeUtility .getColor(getActivity(), R.attr.listview_checked_color); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return Long.valueOf(list.get(position).getId()); } @Override public boolean hasStableIds() { return true; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = getActivity().getLayoutInflater() .inflate(android.R.layout.simple_list_item_1, parent, false); TextView tv = (TextView) view; tv.setBackgroundColor(defaultBG); if (getListView().getCheckedItemPositions().get(position)) { tv.setBackgroundColor(checkedBG); } int type = list.get(position).getType(); switch (type) { case DraftTable.TYPE_WEIBO: StatusDraftBean bean = list.get(position).getStatusDraftBean(); tv.setText(bean.getContent()); break; case DraftTable.TYPE_REPOST: RepostDraftBean repostDraftBean = list.get(position).getRepostDraftBean(); tv.setText(repostDraftBean.getContent()); break; case DraftTable.TYPE_COMMENT: CommentDraftBean commentDraftBean = list.get(position).getCommentDraftBean(); tv.setText(commentDraftBean.getContent()); break; case DraftTable.TYPE_REPLY: ReplyDraftBean replyDraftBean = list.get(position).getReplyDraftBean(); tv.setText(replyDraftBean.getContent()); break; } return view; } } }