package com.bestapp.yikuair.fragments;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import com.bestapp.yikuair.R;
import com.bestapp.yikuair.database.DBOpenHelper;
import com.bestapp.yikuair.utils.FriendEntity;
import com.bestapp.yikuair.utils.MessageInfo;
import com.bestapp.yikuair.utils.StringWidthWeightRandom;
import com.bestapp.yikuair.utils.UserInfo;
public class TaskMemberActivity extends Activity {
private GridView gridView;
private BottomAdapter adapter;
private int COLUMN_WIDTH = 360;
private static final int HORIZONTAL_SPACE = 0;
private List<MemberItemInfo> memberList = new ArrayList<MemberItemInfo>();
private LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
private String memberId;
private String memberName;
private String groupId;
private int listId;
private DBOpenHelper dbOpenHelper;
private Cursor cursor;
private TextView groupName;
private Button addBtn;
private boolean isPressed = false;
private ClientSocket client;
private Dialog mDialog;
private GroupBroadcastReceiver gbr;
private boolean isDelMember = false;
private boolean isAddMember = false;
private int mScreenHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.task_member);
mDialog = new AlertDialog.Builder(this).create();
groupId = getIntent().getStringExtra("groupId");
memberId = getIntent().getStringExtra("ids");
Log.e("FM", memberId);
memberName = getIntent().getStringExtra("names");
// memberId.
listId = getIntent().getIntExtra("listId", -1);
String[] ids = memberId.split("、");
String[] names = memberName.split("、");
// String[] ids = memberId.split("„ÄÅ");
// String[] names = memberName.split("„ÄÅ");
client = new ClientSocket(this);
map.clear();
memberList.add(new MemberItemInfo(null, null, null, null, 0));
Log.e("test", "ids .size :" + ids.length);
Log.e("test", "names size:" + names.length);
for (int i = 0; i < ids.length; i++) {
memberList.add(new MemberItemInfo(ids[i], names[i],
getSexFromDB(ids[i]), getHeadUrlFromDB(ids[i]), 1));
map.put(ids[i], names[i]);
}
// register broadcastreceiver
if (gbr == null) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MessageInfo.GroupInfoResultBroadCast);
gbr = new GroupBroadcastReceiver();
registerReceiver(gbr, intentFilter);
}
initView();
}
public class GroupBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int resultCode = intent.getIntExtra("code", 0);
mDialog.dismiss();
if (isDelMember) {
updatePhoneBook();
isDelMember = false;
return;
}
if (isAddMember) {
updatePhoneBook();
isAddMember = false;
return;
}
if (ChatActivity.instance != null)
ChatActivity.instance.finish();
if (memberId != null) {
for (int i = 0; i < MessageFragment.messageList.size(); i++) {
if (MessageFragment.messageList.get(i).getId()
.equals(memberId)) {
MessageFragment.messageList.remove(i);
MessageFragment.userList.remove(i);
MessageFragment.boolList.remove(i);
}
}
MessageFragment.lstAdapter.notifyDataSetChanged();
if (PhoneBookFragment.instance != null) {
for (int i = 0; i < PhoneBookFragment.contactList.size(); i++) {
if (PhoneBookFragment.contactList.get(i).getGroupId() != null
&& PhoneBookFragment.contactList.get(i)
.getGroupId().equals(groupId)) {
PhoneBookFragment.contactList.remove(i);
PhoneBookFragment.listAdapter
.notifyDataSetChanged();
break;
}
}
} else {
if (MessageInfo.groupList != null
&& MessageInfo.groupList.size() > 0) {
for (int i = 0; i < MessageInfo.groupList.size(); i++) {
if (MessageInfo.groupList.get(i).getGroupId()
.equals(groupId)) {
MessageInfo.groupList.remove(i);
}
}
}
}
} else {
for (int i = 0; i < MessageInfo.messageEntityList.size(); i++) {
if (MessageInfo.messageEntityList.get(i).getChatType() == MessageInfo.GROUP
&& groupId != null
&& MessageInfo.messageEntityList.get(i)
.getReceiverId().equals(groupId)) {
MessageInfo.messageEntityList.remove(i);
}
}
}
finish();
overridePendingTransition(R.anim.in_from_left, R.anim.out_of_right);
}
}
public void updatePhoneBook() {
if (PhoneBookFragment.instance != null) {
for (int j = 0; j < PhoneBookFragment.contactList.size(); j++) {
if (PhoneBookFragment.contactList.get(j).getGroupId() != null
&& PhoneBookFragment.contactList.get(j).getGroupId()
.equals(groupId)) {
PhoneBookFragment.contactList.get(j)
.setRealName(memberName);
PhoneBookFragment.contactList.get(j).setDbId(memberId);
PhoneBookFragment.listAdapter.notifyDataSetChanged();
}
}
}
}
public String getSexFromDB(String dbId) {
if (dbId == null)
return "";
dbOpenHelper = new DBOpenHelper(this);
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
String sex = "";
cursor = db.rawQuery("select * from contactsTable where dbid=?",
new String[] { dbId });
if (cursor.moveToFirst()) {
sex = cursor.getString(13);
}
dbOpenHelper.close();
cursor.close();
return sex;
}
public String getHeadUrlFromDB(String dbId) {
if (dbId == null)
return "";
dbOpenHelper = new DBOpenHelper(this);
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
String name = "";
cursor = db.rawQuery("select * from contactsTable where dbid=?",
new String[] { dbId });
if (cursor.moveToFirst()) {
name = cursor.getString(8);
}
Log.e("test", "headurl :: " + name);
dbOpenHelper.close();
cursor.close();
return name;
}
public void initView() {
mScreenHeight = getWindowManager().getDefaultDisplay().getHeight();
if (mScreenHeight < 1920) {
COLUMN_WIDTH = 240;
}
gridView = (GridView) findViewById(R.id.member_grid);
addBtn = (Button) findViewById(R.id.add_to_maillist_btn);
for (int i = 0; i < MessageInfo.groupList.size(); i++) {
if (MessageInfo.groupList.get(i).getGroupId().equals(groupId)) {
isPressed = true;
addBtn.setText(getResources().getString(
R.string.remove_from_maillist));
}
}
addBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (isPressed) {
addBtn.setText(getResources().getString(
R.string.add_to_maillist));
for (int i = 0; i < MessageInfo.groupList.size(); i++) {
if (MessageInfo.groupList.get(i).getGroupId()
.equals(groupId))
MessageInfo.groupList.remove(i);
}
if (PhoneBookFragment.instance != null) {
for (int i = 0; i < PhoneBookFragment.contactList
.size(); i++) {
if (PhoneBookFragment.contactList.get(i)
.getGroupId() != null
&& PhoneBookFragment.contactList.get(i)
.getGroupId().equals(groupId)) {
PhoneBookFragment.contactList.remove(i);
PhoneBookFragment.listAdapter
.notifyDataSetChanged();
break;
}
}
}
isPressed = false;
} else {
addBtn.setText(getResources().getString(
R.string.remove_from_maillist));
isPressed = true;
FriendEntity entity = new FriendEntity();
entity.setRealName(memberName);
entity.setSex("3");
entity.setAlpher(getResources().getString(R.string.group));
entity.setGroupId(groupId);
entity.setDbId(memberId);
// entity.setGroupId(MessageInfo.groupList.size());
MessageInfo.groupList.add(entity);
}
}
});
groupName = (TextView) findViewById(R.id.group_name);
groupName.setText(memberName);
adapter = new BottomAdapter(this, memberList);
gridView.setAdapter(adapter);
LayoutParams params = new LayoutParams(adapter.getCount()
* (COLUMN_WIDTH + HORIZONTAL_SPACE),
android.view.ViewGroup.LayoutParams.FILL_PARENT);
gridView.setLayoutParams(params);
gridView.setColumnWidth(COLUMN_WIDTH);
gridView.setHorizontalSpacing(HORIZONTAL_SPACE);
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setNumColumns(adapter.getCount());
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
if (arg2 == 0) {
Intent intent = new Intent();
/*
* nameIdMap = (LinkedHashMap<String, String>)
* nameIdMeetingMap.clone(); MessageInfo.nameIdMap =
* (LinkedHashMap<String, String>) nameIdMap .clone();
*/
intent.setClass(TaskMemberActivity.this,
SelectMemberActivity.class);
MessageInfo.nameIdMap.clear();
/*
* for (int i = 0; i < memberList.size(); i++) {
* MessageInfo.nameIdMap.put(memberList.get(i).getDbId(),
* memberList.get(i).getName()); }
*/
MessageInfo.nameIdMap = (LinkedHashMap<String, String>) map
.clone();
startActivityForResult(intent, 1);
overridePendingTransition(R.anim.in_from_down,
R.anim.out_of_up);
}
}
});
if (MessageInfo.groupList != null && !MessageInfo.groupList.isEmpty()) {
for (int i = 0; i < MessageInfo.groupList.size(); i++) {
if (MessageInfo.groupList.get(i).getDbId().equals(groupId)) {
addBtn.setText(getResources().getString(
R.string.remove_from_maillist));
isPressed = true;
}
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data == null)
return;
if (MessageInfo.nameIdMap != null && !MessageInfo.nameIdMap.isEmpty()) {
List<String> nameList = new ArrayList<String>();
List<String> idList = new ArrayList<String>();
List<String> senderIdList = new ArrayList<String>();
List<String> delIdList = new ArrayList<String>();
Set set = MessageInfo.nameIdMap.keySet();
Iterator it = set.iterator();
String ids = "";
String delIds = "";
while (it.hasNext()) {
String key = (String) it.next();
String value = (String) MessageInfo.nameIdMap.get(key);
nameList.add(value);
idList.add(key);
}
for (int j = 0; j < memberList.size(); j++) {
if (memberList.get(j).getType() == 0)
continue;
if (!MessageInfo.nameIdMap.containsKey(memberList.get(j)
.getDbId())) {
delIdList.add(memberList.get(j).getDbId());
// memberList.remove(j);
}
}
if (delIdList.size() > 0) {
memberList.clear();
map.clear();
memberList.add(new MemberItemInfo(null, null, null, null, 0));
for (int j = 0; j < idList.size(); j++) {
memberList.add(new MemberItemInfo(idList.get(j), nameList
.get(j), getSexFromDB(idList.get(j)),
getHeadUrlFromDB(idList.get(j)), 1));
map.put(idList.get(j), nameList.get(j));
}
setGridView();
for (int k = 0; k < delIdList.size(); k++) {
if (k == delIdList.size() - 1) {
delIds += delIdList.get(k);
} else {
delIds += delIdList.get(k) + ",";
}
}
memberId = "";
memberName = "";
for (int i = 0; i < idList.size(); i++) {
if (i == idList.size() - 1) {
memberId += idList.get(i);
memberName += nameList.get(i);
} else {
memberId += idList.get(i) + "、";
memberName += nameList.get(i) + "、";
}
}
groupName.setText(memberName);
if (MessageInfo.groupMap != null) {
if (MessageInfo.groupMap.containsKey(groupId)) {
MessageInfo.groupMap.remove(groupId);
MessageInfo.groupMap.put(groupId, memberId);
}
}
if (client == null)
client = new ClientSocket(this);
MessageInfo.nameIdMap.clear();
showRoundProcessDialog();
if (client == null)
client = new ClientSocket(this);
client.sendMessage(delIds, 17,
StringWidthWeightRandom.getNextString(),
UserInfo.db_id, groupId, null, null, null, null, null,
null, false);
isDelMember = true;
return;
}
for (int i = 0; i < idList.size(); i++) {
if (!map.containsKey(idList.get(i))) {
memberList.add(new MemberItemInfo(idList.get(i), nameList
.get(i), getSexFromDB(idList.get(i)),
getHeadUrlFromDB(idList.get(i)), 1));
senderIdList.add(idList.get(i));
memberName = memberName + "、" + nameList.get(i);
memberId = memberId + "、" + idList.get(i);
}
}
groupName.setText(memberName);
if (MessageInfo.groupMap != null) {
if (MessageInfo.groupMap.containsKey(groupId)) {
MessageInfo.groupMap.remove(groupId);
MessageInfo.groupMap.put(groupId, memberId);
}
}
memberList.clear();
map.clear();
memberList.add(new MemberItemInfo(null, null, null, null, 0));
for (int j = 0; j < idList.size(); j++) {
memberList.add(new MemberItemInfo(idList.get(j), nameList
.get(j), getSexFromDB(idList.get(j)),
getHeadUrlFromDB(idList.get(j)), 1));
map.put(idList.get(j), nameList.get(j));
}
LayoutParams params = new LayoutParams(memberList.size()
* (COLUMN_WIDTH + HORIZONTAL_SPACE),
android.view.ViewGroup.LayoutParams.FILL_PARENT);
gridView.setLayoutParams(params);
gridView.setColumnWidth(COLUMN_WIDTH);
gridView.setHorizontalSpacing(HORIZONTAL_SPACE);
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setNumColumns(memberList.size());
adapter.notifyDataSetChanged();
MessageInfo.nameIdMap.clear();
if (senderIdList != null && !senderIdList.isEmpty()) {
for (int i = 0; i < senderIdList.size(); i++) {
if (i == senderIdList.size() - 1) {
ids += senderIdList.get(i);
} else {
ids += senderIdList.get(i) + "、";
}
}
showRoundProcessDialog();
if (client == null)
client = new ClientSocket(this);
client.sendMessage(ids.replace("、", ","), 16,
StringWidthWeightRandom.getNextString(),
UserInfo.db_id, groupId, null, null, null, null, null,
null, false);
isAddMember = true;
}
}
}
public void setGridView() {
LayoutParams params = new LayoutParams(memberList.size()
* (COLUMN_WIDTH + HORIZONTAL_SPACE),
android.view.ViewGroup.LayoutParams.FILL_PARENT);
gridView.setLayoutParams(params);
gridView.setColumnWidth(COLUMN_WIDTH);
gridView.setHorizontalSpacing(HORIZONTAL_SPACE);
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setNumColumns(memberList.size());
adapter.notifyDataSetChanged();
}
public void showRoundProcessDialog() {
mDialog.show();
mDialog.setCanceledOnTouchOutside(false);
mDialog.setContentView(R.layout.quit_group_loading_dialog);
}
public void quitFromGroup(View view) {
if (client == null)
client = new ClientSocket(this);
client.sendMessage(UserInfo.db_id, 17,
StringWidthWeightRandom.getNextString(), UserInfo.db_id,
groupId, null, null, null, null, null, null, false);
showRoundProcessDialog();
}
public void backtoChat(View view) {
Intent data = new Intent();
memberName = groupName.getText().toString();
data.putExtra("titleNames", memberName);
data.putExtra("titleIds", memberId);
setResult(5, data);
if (MessageInfo.groupList != null && MessageInfo.groupList.size() > 0) {
for (int i = 0; i < MessageInfo.groupList.size(); i++) {
if (MessageInfo.groupList.get(i).getGroupId().equals(groupId)) {
MessageInfo.groupList.get(i).setDbId(memberId);
MessageInfo.groupList.get(i).setRealName(memberName);
}
}
}
finish();
overridePendingTransition(R.anim.in_from_left, R.anim.out_of_right);
}
public boolean onTouchEvent(android.view.MotionEvent event) {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
return imm.hideSoftInputFromWindow(this.getCurrentFocus()
.getWindowToken(), 0);
}
class BottomAdapter extends BaseAdapter {
private Context context;
private List<MemberItemInfo> mData;
private LayoutInflater mInflater;
public ImageLoader imgLoader;
public BottomAdapter(Context context, List<MemberItemInfo> list) {
this.context = context;
mInflater = LayoutInflater.from(context);
mData = list;
this.imgLoader = new ImageLoader(context);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return mData.get(position).getType();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
ViewHolder holder = null;
holder = new ViewHolder();
if (mData.get(position).getType() == 0) {
convertView = mInflater.inflate(
R.layout.grid_add_group_member_item, null);
return convertView;
} else {
convertView = mInflater.inflate(
R.layout.grid_group_member_item, null);
holder.name = (TextView) convertView
.findViewById(R.id.tv_staff_name);
holder.photo = (ImageView) convertView
.findViewById(R.id.iv_staff_photo);
holder.delete = (ImageView) convertView
.findViewById(R.id.iv_del_member);
holder.name.setText(mData.get(position).getName());
holder.delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (mData.get(position).getDbId()
.equals(UserInfo.db_id)) {
quitFromGroup(arg0);
return;
}
if (client == null)
client = new ClientSocket(context);
client.sendMessage(mData.get(position).getDbId(), 17,
StringWidthWeightRandom.getNextString(),
UserInfo.db_id, groupId, null, null, null,
null, null, null, false);
if (map.containsKey(mData.get(position).getDbId()))
map.remove(mData.get(position).getDbId());
showRoundProcessDialog();
isDelMember = true;
mData.remove(position);
memberName = "";
memberId = "";
for (int i = 0; i < mData.size(); i++) {
if (i == 0)
continue;
if (i == mData.size() - 1) {
memberName += mData.get(i).getName();
memberId += mData.get(i).getDbId();
} else {
memberName += mData.get(i).getName() + "、";
memberId += mData.get(i).getDbId() + "、";
}
}
groupName.setText(memberName);
if (MessageInfo.groupMap != null) {
if (MessageInfo.groupMap.containsKey(groupId)) {
MessageInfo.groupMap.remove(groupId);
MessageInfo.groupMap.put(groupId, memberId);
}
}
LayoutParams params = new LayoutParams(mData.size()
* (COLUMN_WIDTH + HORIZONTAL_SPACE),
android.view.ViewGroup.LayoutParams.FILL_PARENT);
gridView.setLayoutParams(params);
gridView.setColumnWidth(COLUMN_WIDTH);
gridView.setHorizontalSpacing(HORIZONTAL_SPACE);
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setNumColumns(mData.size());
notifyDataSetChanged();
}
});
if (mData.get(position).getHeadUrl() != null
&& mData.get(position).getHeadUrl().length() > 0) {
String headUrl = "http://" + UserInfo.downloadImgUrl
+ mData.get(position).getHeadUrl();
imgLoader.DisplayImage(headUrl, (Activity) context,
holder.photo);
} else {
if (mData.get(position).getSex().equals("0")) {
holder.photo.setBackgroundDrawable(context
.getResources().getDrawable(
R.drawable.ico_girl_big));
} else {
holder.photo.setBackgroundDrawable(context
.getResources().getDrawable(
R.drawable.ico_boy_big));
}
}
return convertView;
}
}
public class ViewHolder {
public TextView name;
public ImageView photo;
public ImageView delete;
}
}
protected void onStart() {
super.onStart();
if (UserInfo.isHomePressed) {
ClientSocket client = new ClientSocket(this);
UserInfo.isSendBroadCast = false;
client.sendMessage(null, 0,
StringWidthWeightRandom.getNextString(), null, null, null,
null, null, null, null, null, true);
}
}
protected void onDestroy() {
super.onDestroy();
if (gbr != null) {
unregisterReceiver(gbr);
gbr = null;
}
Log.e("test", "task member onDestroy.....");
}
}