/** * */ package com.d3.d3xmpp.activites; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jivesoftware.smackx.muc.MultiUserChat; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.d3.d3xmpp.R; import com.d3.d3xmpp.adapter.ChoseAdapter; import com.d3.d3xmpp.constant.Constants; import com.d3.d3xmpp.d3View.D3View; import com.d3.d3xmpp.model.ChatItem; import com.d3.d3xmpp.model.Friend; import com.d3.d3xmpp.model.Room; import com.d3.d3xmpp.util.LoadThread; import com.d3.d3xmpp.util.Tool; import com.d3.d3xmpp.util.XmppLoadThread; import com.d3.d3xmpp.xmpp.XmppConnection; /** * @author MZH * */ public class ChoseActivity extends BaseActivity { @D3View(click="onClick") TextView rightBtn,subBtn,cancelBtn; @D3View(click="onClick") ImageView leftBtn1,selectAllBtn; @D3View LinearLayout nameLayout; @D3View EditText nameText; @D3View ListView listView; @D3View EditText searchText; private ChoseAdapter adapter; private List<Friend> friends = new ArrayList<Friend>(); private List<String> members = new ArrayList<String>(); private String roomName; private int inviteCount = 0; //�������� private boolean isChoseAll = false; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.acti_chose); roomName = getIntent().getStringExtra("roomName"); members = getIntent().getStringArrayListExtra("members"); if (members == null) { members = new ArrayList<String>(); } if (roomName!=null) { nameText.setText(roomName); } adapter = new ChoseAdapter(getApplicationContext()); listView.setAdapter(adapter); friends = XmppConnection.getInstance().getFriendBothList(); adapter.addAll(friends); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Friend item = (Friend) adapter.getItem(position); item.isChose = !item.isChose; adapter.notifyDataSetChanged(); } }); searchText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { adapter.clear(); if (s.toString().equals("")) { adapter.addAll(friends); } else { List<Friend> friendTemps = new ArrayList<Friend>(); for (Friend friend : friends) { if (friend.username.contains(s.toString())) { friendTemps.add(friend); } } adapter.addAll(friendTemps); } } }); } public void onClick(View v){ switch (v.getId()) { case R.id.leftBtn1: finish(); break; case R.id.rightBtn: if (roomName == null) { nameLayout.setVisibility(View.VISIBLE); } else { invite(); } break; case R.id.subBtn: if (roomName == null) { final String name = nameText.getText().toString(); if (isRoomName(name)) { Map<String, String> map = new HashMap<String, String>(); map.put("roomName", name); new LoadThread(ChoseActivity.this,Constants.URL_EXIST_ROOM,map) { @Override protected void refreshUI(String result) { if (result.contains("yes")) { Tool.initToast(getApplicationContext(), "��Ⱥ�Ѵ���,��ȡ���������"); } else{ for (Friend friend : friends) { if (friend.isChose) { inviteCount++; } } if (inviteCount > 0 && !XmppConnection.getInstance().getMyRoom().contains(new Room(name))) { new XmppLoadThread(ChoseActivity.this) { @Override protected void result(Object object) { MultiUserChat muc = (MultiUserChat)object; if (muc != null && inviteCount > 0) { invite(); } } @Override protected Object load() { Tool.initToast(getApplicationContext(), "������..."); return XmppConnection.getInstance().createRoom(name); } }; } else if (XmppConnection.getInstance().getMyRoom().contains(new Room(name))) { Tool.initToast(getApplicationContext(), "���ڴ�Ⱥ"); } else { Tool.initToast(getApplicationContext(), "һ������ô�İ���!"); } } } }; } else { Tool.initToast(getApplicationContext(), "������ֻ��ʹ������,Ӣ�Ļ�������"); } } else{ if (inviteCount > 0) { invite(); } } break; case R.id.cancelBtn: nameLayout.setVisibility(View.GONE); break; case R.id.selectAllBtn: for (int i = 0; i < adapter.getCount(); i++) { adapter.getItem(i).isChose = !isChoseAll; } isChoseAll = !isChoseAll; if (isChoseAll) { selectAllBtn.setImageResource(R.drawable.login_checked); } else { selectAllBtn.setImageResource(R.drawable.login_check); } adapter.notifyDataSetChanged(); break; default: break; } } @Override protected void onResume() { nameText.clearFocus(); searchText.clearFocus(); super.onResume(); } public void invite(){ String name = nameText.getText().toString(); MultiUserChat muc = new MultiUserChat(XmppConnection.getInstance().getConnection(), XmppConnection.getFullRoomname(name)); for (Friend friend : friends) { if (friend.isChose && !members.contains(friend.username)) { muc.invite(XmppConnection.getFullUsername(friend.username), name); } } for (String mem : members) { try { XmppConnection.getInstance().sendMsg(mem,"[RoomChange,"+roomName+","+Constants.USER_NAME, ChatItem.CHAT); } catch (Exception e) { e.printStackTrace(); } } nameLayout.setVisibility(View.GONE); RoomMemActivity.isExit = true; ChatActivity.isExit = true; XmppConnection.getInstance().reconnect(); finish(); } public boolean isRoomName(String text){ Pattern p = Pattern.compile("^[a-zA-Z0-9\u4E00-\u9FA5]+$"); Matcher m = p.matcher(text); if(m.find()){ return true; } return false; } }