package org.qii.weiciyuan.ui.actionmenu;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.bean.UserBean;
import org.qii.weiciyuan.dao.relationship.FriendshipsDao;
import org.qii.weiciyuan.support.debug.AppLogger;
import org.qii.weiciyuan.support.error.WeiboException;
import org.qii.weiciyuan.support.lib.MyAsyncTask;
import org.qii.weiciyuan.support.utils.GlobalContext;
import org.qii.weiciyuan.ui.adapter.UserListAdapter;
import org.qii.weiciyuan.ui.basefragment.AbstractUserListFragment;
import org.qii.weiciyuan.ui.send.WriteWeiboActivity;
import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.Toast;
/**
* User: qii
* Date: 12-10-11
*/
public class MyFriendSingleChoiceModeListener implements ActionMode.Callback {
private ListView listView;
private UserListAdapter adapter;
private Fragment fragment;
private ActionMode mode;
private UserBean bean;
private UnFollowTask unfollowTask;
public void finish() {
if (mode != null) {
mode.finish();
}
if (unfollowTask != null) {
unfollowTask.cancel(true);
}
}
public MyFriendSingleChoiceModeListener(ListView listView, UserListAdapter adapter,
Fragment fragment, UserBean 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();
inflater.inflate(R.menu.contextual_menu_myfriendlistfragment, menu);
mode.setTitle(bean.getScreen_name());
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_at:
Intent intent = new Intent(getActivity(), WriteWeiboActivity.class);
intent.putExtra("token", GlobalContext.getInstance().getSpecialToken());
intent.putExtra("content", "@" + bean.getScreen_name());
intent.putExtra("account", GlobalContext.getInstance().getAccountBean());
getActivity().startActivity(intent);
listView.clearChoices();
mode.finish();
break;
case R.id.menu_unfollow:
if (unfollowTask == null
|| unfollowTask.getStatus() == MyAsyncTask.Status.FINISHED) {
unfollowTask = new UnFollowTask();
unfollowTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
listView.clearChoices();
mode.finish();
break;
}
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
this.mode = null;
listView.clearChoices();
adapter.notifyDataSetChanged();
((AbstractUserListFragment) fragment).setmActionMode(null);
}
private class UnFollowTask extends MyAsyncTask<Void, UserBean, UserBean> {
WeiboException e;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected UserBean doInBackground(Void... params) {
FriendshipsDao dao = new FriendshipsDao(GlobalContext.getInstance().getSpecialToken());
if (!TextUtils.isEmpty(bean.getId())) {
dao.setUid(bean.getId());
} else {
dao.setScreen_name(bean.getScreen_name());
}
try {
return dao.unFollowIt();
} catch (WeiboException e) {
AppLogger.e(e.getError());
this.e = e;
cancel(true);
return null;
}
}
@Override
protected void onCancelled(UserBean userBean) {
super.onCancelled(userBean);
}
@Override
protected void onPostExecute(UserBean o) {
super.onPostExecute(o);
Toast.makeText(getActivity(), getActivity().getString(R.string.unfollow_successfully),
Toast.LENGTH_SHORT).show();
adapter.removeItem(bean);
}
}
}