package com.juns.wechat.view.activity; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.easemob.chat.EMChatManager; import com.easemob.chat.EMGroup; import com.easemob.chat.EMGroupManager; import com.easemob.exceptions.EaseMobException; import com.easemob.util.NetUtils; import com.juns.wechat.Constants; import com.juns.wechat.GloableParams; import com.juns.wechat.R; import com.juns.wechat.bean.GroupInfo; import com.juns.wechat.bean.User; import com.juns.wechat.chat.ChatActivity; import com.juns.wechat.chat.widght.ExpandGridView; import com.juns.wechat.common.Utils; import com.juns.wechat.view.BaseActivity; //群设置 public class GroupSettingActivity extends BaseActivity implements OnClickListener { private ImageView img_back; private TextView tv_groupname; private TextView txt_title;// 标题,成员总数 int m_total = 0;// 成员总数 private ExpandGridView gridview;// 成员列表 // 修改群名称、置顶、、、、 private RelativeLayout re_change_groupname; private RelativeLayout rl_switch_chattotop; private RelativeLayout rl_switch_block_groupmsg; private RelativeLayout re_clear; // 状态变化 private CheckBox check_top, check_closetip; // 删除并退出 private Button exitBtn; private String hxid; private String group_name;// 群名称 boolean is_admin = false;// 是否是管理员 List<User> members = new ArrayList<User>(); String longClickUsername = null; private String groupId; private EMGroup group; private GridAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_groupsetting); super.onCreate(savedInstanceState); } @Override protected void initControl() { txt_title = (TextView) findViewById(R.id.txt_title); txt_title.setText("聊天信息"); img_back = (ImageView) findViewById(R.id.img_back); img_back.setVisibility(View.VISIBLE); tv_groupname = (TextView) findViewById(R.id.txt_groupname); gridview = (ExpandGridView) findViewById(R.id.gridview); re_change_groupname = (RelativeLayout) findViewById(R.id.re_change_groupname); rl_switch_chattotop = (RelativeLayout) findViewById(R.id.rl_switch_chattotop); rl_switch_block_groupmsg = (RelativeLayout) findViewById(R.id.rl_switch_block_groupmsg); re_clear = (RelativeLayout) findViewById(R.id.re_clear); exitBtn = (Button) findViewById(R.id.btn_exit_grp); } @Override protected void initView() { hxid = Utils.getValue(GroupSettingActivity.this, Constants.User_ID); } @Override protected void initData() { // 获取传过来的groupid groupId = getIntent().getStringExtra(Constants.GROUP_ID); // 获取本地该群数据 group = EMGroupManager.getInstance().getGroup(groupId); if (group == null) { try { // 去网络中查找该群 group = EMGroupManager.getInstance() .getGroupFromServer(groupId); if (group == null) { Toast.makeText(GroupSettingActivity.this, "该群已经被解散...", Toast.LENGTH_SHORT).show(); setResult(100); finish(); return; } } catch (EaseMobException e) { e.printStackTrace(); return; } } // 获取封装的群名(里面封装了显示的群名和群组成员的信息) String group_name = group.getGroupName(); // 获取群成员信息 tv_groupname.setText(group_name); GroupInfo groupinfo = GloableParams.GroupInfos.get(groupId); if (groupinfo != null) { String[] manbers = groupinfo.getMembers().split("、"); if (manbers != null && manbers.length > 0) { m_total = manbers.length; txt_title.setText("聊天信息(" + String.valueOf(m_total) + ")"); // 解析群组成员信息 for (int i = 0; i < m_total; i++) { User user = GloableParams.Users.get(manbers[i]); if (user == null) { user = new User(); user.setTelephone(manbers[i]); } members.add(user); } // 显示群组成员头像和昵称 showMembers(members); // 判断是否是群主,是群主有删成员的权限,并显示减号按钮 if (null != groupinfo.getOwner_id() && null != hxid && hxid.equals(groupinfo.getOwner_id())) { is_admin = true; } } } } // 显示群成员头像昵称的gridview private void showMembers(List<User> members) { adapter = new GridAdapter(this, members); gridview.setAdapter(adapter); // 设置OnTouchListener,为了让群主方便地推出删除模》 gridview.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (adapter.isInDeleteMode) { adapter.isInDeleteMode = false; adapter.notifyDataSetChanged(); return true; } break; default: break; } return false; } }); } @Override protected void setListener() { re_change_groupname.setOnClickListener(this); rl_switch_chattotop.setOnClickListener(this); rl_switch_block_groupmsg.setOnClickListener(this); re_clear.setOnClickListener(this); exitBtn.setOnClickListener(this); img_back.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.img_back: Utils.finish(GroupSettingActivity.this); break; case R.id.btn_exit_grp: // deleteMembersFromGroup(hxid); break; default: break; } } // 群组成员gridadapter private class GridAdapter extends BaseAdapter { public boolean isInDeleteMode; private List<User> objects; Context context; public GridAdapter(Context context, List<User> objects) { this.objects = objects; this.context = context; isInDeleteMode = false; } @Override public View getView(final int position, View convertView, final ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.item_chatsetting_gridview, null); } ImageView iv_avatar = (ImageView) convertView .findViewById(R.id.iv_avatar); TextView tv_username = (TextView) convertView .findViewById(R.id.tv_username); ImageView badge_delete = (ImageView) convertView .findViewById(R.id.badge_delete); // 最后一个item,减人按钮 if (position == getCount() - 1 && is_admin) { tv_username.setText(""); badge_delete.setVisibility(View.GONE); iv_avatar.setImageResource(R.drawable.icon_btn_deleteperson); if (isInDeleteMode) { // 正处于删除模式下,隐藏删除按钮 convertView.setVisibility(View.GONE); } else { convertView.setVisibility(View.VISIBLE); } iv_avatar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { isInDeleteMode = true; notifyDataSetChanged(); } }); } else if ((is_admin && position == getCount() - 2) || (!is_admin && position == getCount() - 1)) { // 添加群组成员按钮 tv_username.setText(""); badge_delete.setVisibility(View.GONE); iv_avatar.setImageResource(R.drawable.jy_drltsz_btn_addperson); // 正处于删除模式下,隐藏添加按钮 if (isInDeleteMode) { convertView.setVisibility(View.GONE); } else { convertView.setVisibility(View.VISIBLE); } iv_avatar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 进入选人页面 startActivity((new Intent(GroupSettingActivity.this, AddGroupChatActivity.class).putExtra( Constants.GROUP_ID, groupId))); } }); } else { // 普通item,显示群组成员 final User user = GloableParams.UserInfos.get(position); String usernick = user.getUserName(); final String userhid = user.getTelephone(); final String useravatar = user.getHeadUrl(); tv_username.setText(usernick); iv_avatar.setImageResource(R.drawable.head);// TODO 网络加载头像 iv_avatar.setTag(useravatar); if (isInDeleteMode) { // 如果是删除模式下,显示减人图标 convertView.findViewById(R.id.badge_delete).setVisibility( View.VISIBLE); } else { convertView.findViewById(R.id.badge_delete).setVisibility( View.INVISIBLE); } iv_avatar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isInDeleteMode) { // 如果是删除自己,return if (EMChatManager.getInstance().getCurrentUser() .equals(userhid)) { Utils.showLongToast(GroupSettingActivity.this, "不能删除自己"); return; } if (!NetUtils.hasNetwork(getApplicationContext())) { Toast.makeText( getApplicationContext(), getString(R.string.network_unavailable), Toast.LENGTH_SHORT).show(); return; } // deleteMembersFromGroup(userhid);//TODO } else { // 正常情况下点击user,可以进入用户详情或者聊天页面等等 Intent intent = new Intent( GroupSettingActivity.this, ChatActivity.class); intent.putExtra(Constants.NAME, user.getUserName()); intent.putExtra(Constants.TYPE, ChatActivity.CHATTYPE_SINGLE); intent.putExtra(Constants.User_ID, user.getTelephone()); startActivity(intent); overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); } } }); } return convertView; } @Override public int getCount() { if (is_admin) { return objects.size() + 2; } else { return objects.size() + 1; } } @Override public Object getItem(int position) { // TODO Auto-generated method stub return objects.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } } }