package org.qii.weiciyuan.ui.adapter;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.bean.UserBean;
import org.qii.weiciyuan.dao.relationship.FriendshipsDao;
import org.qii.weiciyuan.support.database.FilterDBTask;
import org.qii.weiciyuan.support.debug.AppLogger;
import org.qii.weiciyuan.support.error.ErrorCode;
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.send.WriteWeiboActivity;
import org.qii.weiciyuan.ui.userinfo.ManageGroupDialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.TextUtils;
import android.widget.Toast;
/**
* User: qii
* Date: 13-3-10
*/
public class UserDialog extends DialogFragment {
private UserBean user;
public UserDialog() {
}
public UserDialog(UserBean user) {
this.user = user;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("user", user);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
user = savedInstanceState.getParcelable("user");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
CharSequence[] friendItems = {getString(R.string.at_him), getString(R.string.manage_group),
getString(R.string.add_to_app_filter), getString(R.string.unfollow_him)};
CharSequence[] strangerItems = {getString(R.string.at_him), getString(R.string.follow_him),
getString(R.string.add_to_app_filter)};
if (user.isFollowing()) {
builder.setTitle(user.getScreen_name())
.setItems(friendItems, new FriendOnClicker());
} else {
builder.setTitle(user.getScreen_name())
.setItems(strangerItems, new StrangerOnClick());
}
return builder.create();
}
private class StrangerOnClick implements DialogInterface.OnClickListener {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
Intent intent = new Intent(getActivity(), WriteWeiboActivity.class);
intent.putExtra("token", GlobalContext.getInstance().getSpecialToken());
intent.putExtra("content", "@" + user.getScreen_name());
intent.putExtra("account", GlobalContext.getInstance().getAccountBean());
startActivity(intent);
break;
case 1:
new FollowTask().executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
break;
case 2:
FilterDBTask.addFilterKeyword(FilterDBTask.TYPE_USER, user.getScreen_name());
FilterDBTask.addFilterKeyword(FilterDBTask.TYPE_KEYWORD, user.getScreen_name());
Toast.makeText(getActivity(), getString(R.string.filter_successfully),
Toast.LENGTH_SHORT).show();
break;
}
}
}
private class FriendOnClicker implements DialogInterface.OnClickListener {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
Intent intent = new Intent(getActivity(), WriteWeiboActivity.class);
intent.putExtra("token", GlobalContext.getInstance().getSpecialToken());
intent.putExtra("content", "@" + user.getScreen_name());
intent.putExtra("account", GlobalContext.getInstance().getAccountBean());
startActivity(intent);
break;
case 1:
ManageGroupDialog manageGroupDialog = new ManageGroupDialog(
GlobalContext.getInstance().getGroup(), user.getId());
manageGroupDialog.show(getFragmentManager(), "");
break;
case 2:
FilterDBTask.addFilterKeyword(FilterDBTask.TYPE_USER, user.getScreen_name());
FilterDBTask.addFilterKeyword(FilterDBTask.TYPE_KEYWORD, user.getScreen_name());
Toast.makeText(getActivity(), getString(R.string.filter_successfully),
Toast.LENGTH_SHORT).show();
break;
case 3:
new UnFollowTask().executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
break;
}
}
}
private class FollowTask 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(user.getId())) {
dao.setUid(user.getId());
} else {
dao.setScreen_name(user.getScreen_name());
}
try {
return dao.followIt();
} 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(GlobalContext.getInstance(),
GlobalContext.getInstance().getString(R.string.follow_successfully),
Toast.LENGTH_SHORT).show();
user.setFollowing(true);
}
}
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(user.getId())) {
dao.setUid(user.getId());
} else {
dao.setScreen_name(user.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);
if (this.e != null) {
if (this.e.getError_code() == ErrorCode.NOT_FOLLOWED) {
user.setFollowing(false);
}
}
}
@Override
protected void onPostExecute(UserBean o) {
super.onPostExecute(o);
Toast.makeText(GlobalContext.getInstance(),
GlobalContext.getInstance().getString(R.string.unfollow_successfully),
Toast.LENGTH_SHORT).show();
user.setFollowing(false);
}
}
}