/** * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.ccxt.whl.activity; import java.util.List; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; 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.ArrayAdapter; import android.widget.Button; import android.widget.ProgressBar; 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.ccxt.whl.DemoApplication; import com.ccxt.whl.R; import com.ccxt.whl.widget.ExpandGridView; import com.easemob.util.EMLog; import com.easemob.util.NetUtils; public class GroupDetailsActivity extends BaseActivity { private static final String TAG = "GroupDetailsActivity"; private static final int REQUEST_CODE_ADD_USER = 0; private static final int REQUEST_CODE_EXIT = 1; private static final int REQUEST_CODE_EXIT_DELETE = 2; private static final int REQUEST_CODE_CLEAR_ALL_HISTORY=3; private ExpandGridView userGridview; private String groupId; private ProgressBar loadingPB; private Button exitBtn; private Button deleteBtn; private EMGroup group; private GridAdapter adapter; private int referenceWidth; private int referenceHeight; private ProgressDialog progressDialog; public static GroupDetailsActivity instance; //清空所有聊天记录 private RelativeLayout clearAllHistory; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_group_details); instance = this; clearAllHistory=(RelativeLayout) findViewById(R.id.clear_all_history); userGridview = (ExpandGridView) findViewById(R.id.gridview); loadingPB = (ProgressBar) findViewById(R.id.progressBar); exitBtn = (Button) findViewById(R.id.btn_exit_grp); deleteBtn = (Button) findViewById(R.id.btn_exitdel_grp); Drawable referenceDrawable = getResources().getDrawable(R.drawable.smiley_add_btn); referenceWidth = referenceDrawable.getIntrinsicWidth(); referenceHeight = referenceDrawable.getIntrinsicHeight(); // 获取传过来的groupid groupId = getIntent().getStringExtra("groupId"); group = EMGroupManager.getInstance().getGroup(groupId); // 如果自己是群主,显示解散按钮 if(group.getOwner() == null || "".equals(group.getOwner())){ exitBtn.setVisibility(View.GONE); deleteBtn.setVisibility(View.GONE); } if (EMChatManager.getInstance().getCurrentUser().equals(group.getOwner())) { exitBtn.setVisibility(View.GONE); deleteBtn.setVisibility(View.VISIBLE); } ((TextView) findViewById(R.id.group_name)).setText(group.getGroupName()+"("+group.getAffiliationsCount()+"人)"); adapter = new GridAdapter(this, R.layout.grid, group.getMembers()); userGridview.setAdapter(adapter); // 保证每次进详情看到的都是最新的group updateGroup(); // 设置OnTouchListener userGridview.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; } }); clearAllHistory.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(GroupDetailsActivity.this, AlertDialog.class); intent.putExtra("cancel",true); intent.putExtra("titleIsCancel", true); intent.putExtra("msg","确定删除群的聊天记录吗?"); startActivityForResult(intent, REQUEST_CODE_CLEAR_ALL_HISTORY); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { if (progressDialog == null) { progressDialog = new ProgressDialog(GroupDetailsActivity.this); progressDialog.setMessage("正在添加..."); progressDialog.setCanceledOnTouchOutside(false); progressDialog.show(); } switch (requestCode) { case REQUEST_CODE_ADD_USER:// 添加群成员 final String[] newmembers = data.getStringArrayExtra("newmembers"); addMembersToGroup(newmembers); break; case REQUEST_CODE_EXIT: // 退出群 progressDialog.setMessage("正在退出群聊..."); exitGrop(); break; case REQUEST_CODE_EXIT_DELETE: // 解散群 progressDialog.setMessage("正在解散群聊..."); deleteGrop(); break; case REQUEST_CODE_CLEAR_ALL_HISTORY: //删除此群聊的聊天记录 progressDialog.setMessage("正在删除群消息..."); deleteGroupHistory(); break; default: break; } } } /** * 点击退出群组按钮 * * @param view */ public void exitGroup(View view) { startActivityForResult(new Intent(this, ExitGroupDialog.class), REQUEST_CODE_EXIT); } /** * 点击解散群组按钮 * * @param view */ public void exitDeleteGroup(View view) { startActivityForResult(new Intent(this, ExitGroupDialog.class).putExtra("deleteToast", getString(R.string.dissolution_group_hint)), REQUEST_CODE_EXIT_DELETE); } /** * 删除群聊天记录 */ public void deleteGroupHistory(){ EMChatManager.getInstance().deleteConversation(group.getGroupId()); progressDialog.dismiss(); // adapter.refresh(EMChatManager.getInstance().getConversation(toChatUsername)); } /** * 退出群组 * * @param groupId */ private void exitGrop() { new Thread(new Runnable() { public void run() { try { EMGroupManager.getInstance().exitFromGroup(groupId); runOnUiThread(new Runnable() { public void run() { progressDialog.dismiss(); setResult(RESULT_OK); finish(); ChatActivity.activityInstance.finish(); } }); } catch (final Exception e) { runOnUiThread(new Runnable() { public void run() { progressDialog.dismiss(); Toast.makeText(getApplicationContext(), "退出群聊失败: " + e.getMessage(), 1).show(); } }); } } }).start(); } /** * 解散群组 * * @param groupId */ private void deleteGrop() { new Thread(new Runnable() { public void run() { try { EMGroupManager.getInstance().exitAndDeleteGroup(groupId); runOnUiThread(new Runnable() { public void run() { progressDialog.dismiss(); setResult(RESULT_OK); finish(); ChatActivity.activityInstance.finish(); } }); } catch (final Exception e) { runOnUiThread(new Runnable() { public void run() { progressDialog.dismiss(); Toast.makeText(getApplicationContext(), "解散群聊失败: " + e.getMessage(), 1).show(); } }); } } }).start(); } /** * 增加群成员 * * @param newmembers */ private void addMembersToGroup(final String[] newmembers) { new Thread(new Runnable() { public void run() { try { //创建者调用add方法 if(EMChatManager.getInstance().getCurrentUser().equals(group.getOwner())){ EMGroupManager.getInstance().addUsersToGroup(groupId, newmembers); }else{ //一般成员调用invite方法 EMGroupManager.getInstance().inviteUser(groupId, newmembers, null); } runOnUiThread(new Runnable() { public void run() { adapter.notifyDataSetChanged(); ((TextView) findViewById(R.id.group_name)).setText(group.getGroupName()+"("+group.getAffiliationsCount()+"人)"); progressDialog.dismiss(); } }); } catch (final Exception e) { runOnUiThread(new Runnable() { public void run() { progressDialog.dismiss(); Toast.makeText(getApplicationContext(), "添加群成员失败: " + e.getMessage(), 1).show(); } }); } } }).start(); } /** * 群组成员gridadapter * * @author admin_new * */ private class GridAdapter extends ArrayAdapter<String> { private int res; public boolean isInDeleteMode; private List<String> objects; public GridAdapter(Context context, int textViewResourceId, List<String> objects) { super(context, textViewResourceId, objects); this.objects = objects; res = textViewResourceId; isInDeleteMode = false; } @Override public View getView(final int position, View convertView, final ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(res, null); } final Button button = (Button) convertView.findViewById(R.id.button_avatar); // 最后一个item,减人按钮 if (position == getCount() - 1) { button.setText(""); // 设置成删除按钮 button.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.smiley_minus_btn, 0, 0); // 如果不是创建者或者没有相应权限,不提供加减人按钮 // if (!group.getOwner().equals(DemoApplication.getInstance().getUserName())) { if (!group.getOwner().equals(DemoApplication.getInstance().getUser())) { // if current user is not group admin, hide add/remove btn convertView.setVisibility(View.INVISIBLE); } else { // 显示删除按钮 if (isInDeleteMode) { // 正处于删除模式下,隐藏删除按钮 convertView.setVisibility(View.INVISIBLE); } else { // 正常模式 convertView.setVisibility(View.VISIBLE); convertView.findViewById(R.id.badge_delete).setVisibility(View.INVISIBLE); } button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EMLog.d(TAG, "删除按钮被点击"); isInDeleteMode = true; notifyDataSetChanged(); } }); } } else if (position == getCount() - 2) { // 添加群组成员按钮 button.setText(""); button.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.smiley_add_btn, 0, 0); //如果不是创建者或者没有相应权限 // if (!group.isAllowInvites() && !group.getOwner().equals(DemoApplication.getInstance().getUserName())) { if (!group.isAllowInvites() && !group.getOwner().equals(DemoApplication.getInstance().getUser())) { // if current user is not group admin, hide add/remove btn convertView.setVisibility(View.INVISIBLE); } else { // 正处于删除模式下,隐藏添加按钮 if (isInDeleteMode) { convertView.setVisibility(View.INVISIBLE); } else { convertView.setVisibility(View.VISIBLE); convertView.findViewById(R.id.badge_delete).setVisibility(View.INVISIBLE); } button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EMLog.d(TAG, "添加按钮被点击"); // 进入选人页面 startActivityForResult( (new Intent(GroupDetailsActivity.this, GroupPickContactsActivity.class).putExtra("groupId", groupId)), REQUEST_CODE_ADD_USER); } }); } } else { // 普通item,显示群组成员 final String username = getItem(position); button.setText(username); convertView.setVisibility(View.VISIBLE); button.setVisibility(View.VISIBLE); Drawable avatar = getResources().getDrawable(R.drawable.default_avatar); avatar.setBounds(0, 0, referenceWidth, referenceHeight); button.setCompoundDrawables(null, avatar, null, null); // demo群组成员的头像都用默认头像,需由开发者自己去设置头像 if (isInDeleteMode) { // 如果是删除模式下,显示减人图标 convertView.findViewById(R.id.badge_delete).setVisibility(View.VISIBLE); } else { convertView.findViewById(R.id.badge_delete).setVisibility(View.INVISIBLE); } button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isInDeleteMode) { // 如果是删除自己,return if (EMChatManager.getInstance().getCurrentUser().equals(username)) { startActivity(new Intent(GroupDetailsActivity.this, AlertDialog.class).putExtra("msg", "不能删除自己")); return; } if (!NetUtils.hasNetwork(getApplicationContext())) { Toast.makeText(getApplicationContext(), getString(R.string.network_unavailable), 0).show(); return; } EMLog.d("group", "remove user from group:" + username); deleteMembersFromGroup(username); } else { // 正常情况下点击user,可以进入用户详情或者聊天页面等等 // startActivity(new // Intent(GroupDetailsActivity.this, // ChatActivity.class).putExtra("userId", // user.getUsername())); } } /** * 删除群成员 * @param username */ protected void deleteMembersFromGroup(final String username) { final ProgressDialog deleteDialog = new ProgressDialog(GroupDetailsActivity.this); deleteDialog.setMessage("正在移除..."); deleteDialog.setCanceledOnTouchOutside(false); deleteDialog.show(); new Thread(new Runnable() { @Override public void run() { try { // 删除被选中的成员 EMGroupManager.getInstance().removeUserFromGroup(groupId, username); isInDeleteMode = false; runOnUiThread(new Runnable() { @Override public void run() { deleteDialog.dismiss(); notifyDataSetChanged(); ((TextView) findViewById(R.id.group_name)).setText(group.getGroupName()+"("+group.getAffiliationsCount()+"人)"); } }); } catch (final Exception e) { deleteDialog.dismiss(); runOnUiThread(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), "删除失败:" + e.getMessage(), 1).show(); } }); } } }).start(); } }); } return convertView; } @Override public int getCount() { return super.getCount() + 2; } } protected void updateGroup() { new Thread(new Runnable() { public void run() { try { EMGroup returnGroup = EMGroupManager.getInstance().getGroupFromServer(groupId); //更新本地数据 EMGroupManager.getInstance().createOrUpdateLocalGroup(returnGroup); runOnUiThread(new Runnable() { public void run() { ((TextView) findViewById(R.id.group_name)).setText(group.getGroupName()+"("+group.getAffiliationsCount()+"人)"); loadingPB.setVisibility(View.INVISIBLE); adapter.notifyDataSetChanged(); if (EMChatManager.getInstance().getCurrentUser().equals(group.getOwner())) { //显示解散按钮 exitBtn.setVisibility(View.GONE); deleteBtn.setVisibility(View.VISIBLE); }else{ //显示退出按钮 exitBtn.setVisibility(View.VISIBLE); deleteBtn.setVisibility(View.GONE); } } }); } catch (Exception e) { runOnUiThread(new Runnable() { public void run() { loadingPB.setVisibility(View.INVISIBLE); } }); } } }).start(); } public void back(View view) { setResult(RESULT_OK); finish(); } @Override public void onBackPressed() { setResult(RESULT_OK); finish(); } @Override protected void onDestroy() { super.onDestroy(); instance = null; } }