package org.qii.weiciyuan.ui.userinfo;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.bean.GroupBean;
import org.qii.weiciyuan.bean.GroupListBean;
import org.qii.weiciyuan.dao.group.GroupListDao;
import org.qii.weiciyuan.dao.group.ModifyGroupMemberDao;
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.friendgroup.ManageGroupActivity;
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.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
/**
* User: qii
* Date: 12-11-5
*/
public class ManageGroupDialog extends DialogFragment {
private GroupListBean group;
private String uid;
private String[] valueArray;
private boolean[] selectedArray;
private MyAsyncTask<Void, Void, List<String>> task;
private ArrayList<String> currentList = new ArrayList<String>();
private ArrayList<String> addList = new ArrayList<String>();
private ArrayList<String> removeList = new ArrayList<String>();
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("group", group);
outState.putString("uid", uid);
outState.putStringArray("valueArray", valueArray);
outState.putBooleanArray("selectedArray", selectedArray);
outState.putStringArrayList("currentList", currentList);
outState.putStringArrayList("addList", addList);
outState.putStringArrayList("removeList", removeList);
}
@Override
public void onDetach() {
super.onDetach();
if (task != null) {
task.cancel(true);
}
}
public ManageGroupDialog() {
}
public ManageGroupDialog(GroupListBean group, String uid) {
this.group = group;
this.uid = uid;
}
/**
* alertdialog use string arry to store data, so you cant add or delete data
*/
@Override
public void onResume() {
super.onResume();
GroupListBean current = GlobalContext.getInstance().getGroup();
if (current != this.group) {
dismissAllowingStateLoss();
ManageGroupDialog dialog = new ManageGroupDialog(current, uid);
dialog.show(getFragmentManager(), "");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (savedInstanceState != null) {
group = (GroupListBean) savedInstanceState.getParcelable("group");
uid = savedInstanceState.getString("uid");
valueArray = savedInstanceState.getStringArray("valueArray");
selectedArray = savedInstanceState.getBooleanArray("selectedArray");
currentList = savedInstanceState.getStringArrayList("currentList");
addList = savedInstanceState.getStringArrayList("addList");
removeList = savedInstanceState.getStringArrayList("removeList");
}
final List<GroupBean> list = group.getLists();
selectedArray = new boolean[list.size()];
List<String> name = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
name.add(list.get(i).getName());
}
valueArray = name.toArray(new String[0]);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
View customTitle = getActivity().getLayoutInflater()
.inflate(R.layout.managegroupdialog_title_layout, null);
ImageView setting = (ImageView) customTitle.findViewById(R.id.title_button);
setting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), ManageGroupActivity.class));
}
});
builder.setMultiChoiceItems(valueArray, selectedArray, new DialogMultiChoiceClickListener())
.setPositiveButton(getString(R.string.save), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ModifyGroupMemberTask modifyGroupMemberTask = new ModifyGroupMemberTask(uid,
addList, removeList);
modifyGroupMemberTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
})
.setNegativeButton(getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setCustomTitle(customTitle);
task = new Task();
task.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
return builder.create();
}
class DialogMultiChoiceClickListener implements DialogInterface.OnMultiChoiceClickListener {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
String id = group.getLists().get(which).getIdstr();
if (isChecked) {
if (!currentList.contains(id)) {
addList.add(id);
}
} else {
if (currentList.contains(id)) {
removeList.add(group.getLists().get(which).getIdstr());
}
}
}
}
class Task extends MyAsyncTask<Void, Void, List<String>> {
@Override
protected List<String> doInBackground(Void... params) {
GroupListDao dao = new GroupListDao(GlobalContext.getInstance().getSpecialToken(), uid);
try {
return dao.getInfo();
} catch (WeiboException e) {
cancel(true);
AppLogger.e(e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(List<String> strings) {
super.onPostExecute(strings);
if (strings != null && strings.size() > 0) {
currentList.clear();
currentList.addAll(strings);
int length = valueArray.length;
for (String id : strings) {
for (int i = 0; i < length; i++) {
if (group.getLists().get(i).getIdstr().equals(id)) {
selectedArray[i] = true;
((AlertDialog) getDialog()).getListView().setItemChecked(i, true);
}
}
}
}
}
}
private static class ModifyGroupMemberTask extends MyAsyncTask<Void, Void, Void> {
private List<String> add;
private List<String> remove;
private String uid;
public ModifyGroupMemberTask(String uid, List<String> add, List<String> remove) {
this.uid = uid;
this.add = add;
this.remove = remove;
}
@Override
protected Void doInBackground(Void... params) {
ModifyGroupMemberDao dao = new ModifyGroupMemberDao(
GlobalContext.getInstance().getSpecialToken(), uid);
for (String id : add) {
try {
dao.add(id);
} catch (WeiboException e) {
AppLogger.e(e.getMessage());
cancel(true);
}
}
for (String id : remove) {
try {
dao.delete(id);
} catch (WeiboException e) {
AppLogger.e(e.getMessage());
cancel(true);
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Toast.makeText(GlobalContext.getInstance(),
GlobalContext.getInstance().getString(R.string.modify_successfully),
Toast.LENGTH_SHORT).show();
}
}
}