package org.qii.weiciyuan.ui.actionmenu; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.MessageBean; import org.qii.weiciyuan.support.lib.MyAsyncTask; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.Utility; import org.qii.weiciyuan.ui.basefragment.AbstractTimeLineFragment; import org.qii.weiciyuan.ui.browser.BrowserWeiboMsgFragment; import org.qii.weiciyuan.ui.send.WriteCommentActivity; import org.qii.weiciyuan.ui.send.WriteRepostActivity; import org.qii.weiciyuan.ui.task.FavAsyncTask; import org.qii.weiciyuan.ui.task.UnFavAsyncTask; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.support.v4.app.Fragment; import android.view.ActionMode; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.ShareActionProvider; import android.widget.Toast; /** * User: qii * Date: 12-9-9 */ public class StatusSingleChoiceModeListener implements ActionMode.Callback { private ListView listView; private BaseAdapter adapter; private Fragment fragment; private ActionMode mode; private MessageBean bean; private ShareActionProvider mShareActionProvider; private FavAsyncTask favTask = null; private UnFavAsyncTask unFavTask = null; public void finish() { if (mode != null) { mode.finish(); } } public StatusSingleChoiceModeListener(ListView listView, BaseAdapter adapter, Fragment fragment, MessageBean bean) { this.listView = listView; this.fragment = fragment; this.adapter = adapter; this.bean = bean; } private Activity getActivity() { return fragment.getActivity(); } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { if (this.mode == null) { this.mode = mode; } return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); menu.clear(); if (bean.getUser().getId().equals(GlobalContext.getInstance().getCurrentAccountId())) { inflater.inflate(R.menu.contextual_menu_fragment_status_listview_myself, menu); } else { inflater.inflate(R.menu.contextual_menu_fragment_status_listview, menu); } mode.setTitle(bean.getUser().getScreen_name()); //fuck sina weibo // MenuItem favItem = menu.findItem(R.id.menu_fav); // MenuItem unFavItem = menu.findItem(R.id.menu_unfav); // if (bean.isFavorited()) { // favItem.setVisible(false); // unFavItem.setVisible(true); // } else { // favItem.setVisible(true); // unFavItem.setVisible(false); // } MenuItem item = menu.findItem(R.id.menu_share); mShareActionProvider = (ShareActionProvider) item.getActionProvider(); if (fragment.getActivity() != null) { Utility.setShareIntent(fragment.getActivity(), mShareActionProvider, bean); } mShareActionProvider.setOnShareTargetSelectedListener( new ShareActionProvider.OnShareTargetSelectedListener() { @Override public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { finish(); return false; } }); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { if (listView.getCheckedItemCount() == 0) { return true; } Intent intent; long[] ids = listView.getCheckedItemIds(); switch (item.getItemId()) { case R.id.menu_repost: intent = new Intent(getActivity(), WriteRepostActivity.class); intent.putExtra("token", GlobalContext.getInstance().getSpecialToken()); intent.putExtra("id", String.valueOf(ids[0])); intent.putExtra("msg", bean); getActivity().startActivity(intent); listView.clearChoices(); mode.finish(); break; case R.id.menu_comment: intent = new Intent(getActivity(), WriteCommentActivity.class); intent.putExtra("token", GlobalContext.getInstance().getSpecialToken()); intent.putExtra("id", String.valueOf(ids[0])); intent.putExtra("msg", bean); getActivity().startActivity(intent); listView.clearChoices(); mode.finish(); break; case R.id.menu_fav: if (Utility.isTaskStopped(favTask) && Utility.isTaskStopped(unFavTask)) { favTask = new FavAsyncTask(GlobalContext.getInstance().getSpecialToken(), bean.getId()); favTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } listView.clearChoices(); mode.finish(); break; case R.id.menu_unfav: if (Utility.isTaskStopped(favTask) && Utility.isTaskStopped(unFavTask)) { unFavTask = new UnFavAsyncTask(GlobalContext.getInstance().getSpecialToken(), bean.getId()); unFavTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } listView.clearChoices(); mode.finish(); break; case R.id.menu_remove: int position = listView.getCheckedItemPosition() - listView.getHeaderViewsCount(); RemoveDialog dialog = new RemoveDialog(position); dialog.setTargetFragment(fragment, 0); dialog.show(fragment.getFragmentManager(), ""); break; case R.id.menu_share: if (fragment.getActivity() != null) { Utility.setShareIntent(fragment.getActivity(), mShareActionProvider, bean); } mShareActionProvider.setOnShareTargetSelectedListener( new ShareActionProvider.OnShareTargetSelectedListener() { @Override public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { finish(); return false; } }); break; case R.id.menu_copy: ClipboardManager cm = (ClipboardManager) fragment.getActivity() .getSystemService(Context.CLIPBOARD_SERVICE); cm.setPrimaryClip(ClipData.newPlainText("sinaweibo", bean.getText())); Toast.makeText(fragment.getActivity(), fragment.getString(R.string.copy_successfully), Toast.LENGTH_SHORT).show(); mode.finish(); break; } return true; } @Override public void onDestroyActionMode(ActionMode mode) { this.mode = null; listView.clearChoices(); adapter.notifyDataSetChanged(); if (fragment instanceof AbstractTimeLineFragment) { ((AbstractTimeLineFragment) fragment).setActionMode(null); } if (fragment instanceof BrowserWeiboMsgFragment) { ((BrowserWeiboMsgFragment) fragment).setActionMode(null); } } }