package cn.rongcloud.im.ui.activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.qiniu.android.http.ResponseInfo; import com.qiniu.android.storage.UpCompletionHandler; import com.qiniu.android.storage.UploadManager; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.util.ArrayList; import java.util.List; import cn.rongcloud.im.App; import cn.rongcloud.im.R; import cn.rongcloud.im.SealAppContext; import cn.rongcloud.im.SealConst; import cn.rongcloud.im.SealUserInfoManager; import cn.rongcloud.im.db.DBManager; import cn.rongcloud.im.db.Friend; import cn.rongcloud.im.db.GroupMember; import cn.rongcloud.im.db.Groups; import cn.rongcloud.im.db.GroupsDao; import cn.rongcloud.im.model.SealSearchConversationResult; import cn.rongcloud.im.server.broadcast.BroadcastManager; import cn.rongcloud.im.server.network.http.HttpException; import cn.rongcloud.im.server.pinyin.CharacterParser; import cn.rongcloud.im.server.response.DismissGroupResponse; import cn.rongcloud.im.server.response.GetGroupInfoResponse; import cn.rongcloud.im.server.response.QiNiuTokenResponse; import cn.rongcloud.im.server.response.QuitGroupResponse; import cn.rongcloud.im.server.response.SetGroupDisplayNameResponse; import cn.rongcloud.im.server.response.SetGroupNameResponse; import cn.rongcloud.im.server.response.SetGroupPortraitResponse; import cn.rongcloud.im.server.utils.CommonUtils; import cn.rongcloud.im.server.utils.NToast; import cn.rongcloud.im.server.utils.OperationRong; import cn.rongcloud.im.server.utils.RongGenerate; import cn.rongcloud.im.server.utils.json.JsonMananger; import cn.rongcloud.im.server.utils.photo.PhotoUtils; import cn.rongcloud.im.server.widget.BottomMenuDialog; import cn.rongcloud.im.server.widget.DialogWithYesOrNoUtils; import cn.rongcloud.im.server.widget.LoadDialog; import cn.rongcloud.im.server.widget.SelectableRoundedImageView; import cn.rongcloud.im.ui.widget.DemoGridView; import cn.rongcloud.im.ui.widget.switchbutton.SwitchButton; import io.rong.imageloader.core.ImageLoader; import io.rong.imkit.RongIM; import io.rong.imkit.emoticon.AndroidEmoji; import io.rong.imkit.utilities.PromptPopupDialog; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; import io.rong.imlib.model.Group; import io.rong.imlib.model.Message; import io.rong.imlib.model.UserInfo; /** * Created by AMing on 16/1/27. * Company RongCloud */ public class GroupDetailActivity extends BaseActivity implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { private static final int CLICK_CONVERSATION_USER_PORTRAIT = 1; private static final int DISMISS_GROUP = 26; private static final int QUIT_GROUP = 27; private static final int SET_GROUP_NAME = 29; private static final int GET_GROUP_INFO = 30; private static final int UPDATE_GROUP_NAME = 32; private static final int GET_QI_NIU_TOKEN = 133; private static final int UPDATE_GROUP_HEADER = 25; private static final int SEARCH_TYPE_FLAG = 1; private static final int CHECKGROUPURL = 39; private boolean isCreated = false; private DemoGridView mGridView; private List<GroupMember> mGroupMember; private TextView mTextViewMemberSize, mGroupDisplayNameText; private SelectableRoundedImageView mGroupHeader; private SwitchButton messageTop, messageNotification; private Groups mGroup; private String fromConversationId; private Conversation.ConversationType mConversationType; private boolean isFromConversation; private LinearLayout mGroupAnnouncementDividerLinearLayout; private TextView mGroupName; private PhotoUtils photoUtils; private BottomMenuDialog dialog; private UploadManager uploadManager; private String imageUrl; private Uri selectUri; private String newGroupName; private LinearLayout mGroupNotice; private LinearLayout mSearchMessagesLinearLayout; private Button mDismissBtn; private Button mQuitBtn; private SealSearchConversationResult mResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail_group); initViews(); setTitle(R.string.group_info); //群组会话界面点进群组详情 fromConversationId = getIntent().getStringExtra("TargetId"); mConversationType = (Conversation.ConversationType) getIntent().getSerializableExtra("conversationType"); if (!TextUtils.isEmpty(fromConversationId)) { isFromConversation = true; } if (isFromConversation) {//群组会话页进入 LoadDialog.show(mContext); getGroups(); getGroupMembers(); } setPortraitChangeListener(); SealAppContext.getInstance().pushActivity(this); setGroupsInfoChangeListener(); } private void getGroups() { SealUserInfoManager.getInstance().getGroupsByID(fromConversationId, new SealUserInfoManager.ResultCallback<Groups>() { @Override public void onSuccess(Groups groups) { if (groups != null) { mGroup = groups; initGroupData(); } } @Override public void onError(String errString) { } }); } private void getGroupMembers() { SealUserInfoManager.getInstance().getGroupMembers(fromConversationId, new SealUserInfoManager.ResultCallback<List<GroupMember>>() { @Override public void onSuccess(List<GroupMember> groupMembers) { LoadDialog.dismiss(mContext); if (groupMembers != null && groupMembers.size() > 0) { mGroupMember = groupMembers; initGroupMemberData(); } } @Override public void onError(String errString) { LoadDialog.dismiss(mContext); } }); } @Override protected void onDestroy() { BroadcastManager.getInstance(this).destroy(SealAppContext.UPDATE_GROUP_NAME); BroadcastManager.getInstance(this).destroy(SealAppContext.UPDATE_GROUP_MEMBER); BroadcastManager.getInstance(this).destroy(SealAppContext.GROUP_DISMISS); super.onDestroy(); } private void initGroupData() { String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(mGroup); ImageLoader.getInstance().displayImage(portraitUri, mGroupHeader, App.getOptions()); mGroupName.setText(mGroup.getName()); if (RongIM.getInstance() != null) { RongIM.getInstance().getConversation(Conversation.ConversationType.GROUP, mGroup.getGroupsId(), new RongIMClient.ResultCallback<Conversation>() { @Override public void onSuccess(Conversation conversation) { if (conversation == null) { return; } if (conversation.isTop()) { messageTop.setChecked(true); } else { messageTop.setChecked(false); } } @Override public void onError(RongIMClient.ErrorCode errorCode) { } }); RongIM.getInstance().getConversationNotificationStatus(Conversation.ConversationType.GROUP, mGroup.getGroupsId(), new RongIMClient.ResultCallback<Conversation.ConversationNotificationStatus>() { @Override public void onSuccess(Conversation.ConversationNotificationStatus conversationNotificationStatus) { if (conversationNotificationStatus == Conversation.ConversationNotificationStatus.DO_NOT_DISTURB) { messageNotification.setChecked(true); } else { messageNotification.setChecked(false); } } @Override public void onError(RongIMClient.ErrorCode errorCode) { } }); } if (mGroup.getRole().equals("0")) isCreated = true; if (!isCreated) { mGroupAnnouncementDividerLinearLayout.setVisibility(View.VISIBLE); mGroupNotice.setVisibility(View.VISIBLE); } else { mGroupAnnouncementDividerLinearLayout.setVisibility(View.VISIBLE); mDismissBtn.setVisibility(View.VISIBLE); mQuitBtn.setVisibility(View.GONE); mGroupNotice.setVisibility(View.VISIBLE); } if (CommonUtils.isNetworkConnected(mContext)) { request(CHECKGROUPURL); } } private void initGroupMemberData() { if (mGroupMember != null && mGroupMember.size() > 0) { setTitle(getString(R.string.group_info) + "(" + mGroupMember.size() + ")"); mTextViewMemberSize.setText(getString(R.string.group_member_size) + "(" + mGroupMember.size() + ")"); mGridView.setAdapter(new GridAdapter(mContext, mGroupMember)); } else { return; } for (GroupMember member : mGroupMember) { if (member.getUserId().equals(getSharedPreferences("config", MODE_PRIVATE).getString(SealConst.SEALTALK_LOGIN_ID, ""))) { if (!TextUtils.isEmpty(member.getDisplayName())) { mGroupDisplayNameText.setText(member.getDisplayName()); } else { mGroupDisplayNameText.setText("无"); } } } } @Override public Object doInBackground(int requestCode, String id) throws HttpException { switch (requestCode) { case QUIT_GROUP: return action.quitGroup(fromConversationId); case DISMISS_GROUP: return action.dissmissGroup(fromConversationId); case SET_GROUP_NAME: return action.setGroupDisplayName(fromConversationId, newGroupName); case GET_GROUP_INFO: return action.getGroupInfo(fromConversationId); case UPDATE_GROUP_HEADER: return action.setGroupPortrait(fromConversationId, imageUrl); case GET_QI_NIU_TOKEN: return action.getQiNiuToken(); case UPDATE_GROUP_NAME: return action.setGroupName(fromConversationId, newGroupName); case CHECKGROUPURL: return action.getGroupInfo(fromConversationId); } return super.doInBackground(requestCode, id); } @Override public void onSuccess(int requestCode, Object result) { if (result != null) { switch (requestCode) { case QUIT_GROUP: QuitGroupResponse response = (QuitGroupResponse) result; if (response.getCode() == 200) { RongIM.getInstance().getConversation(Conversation.ConversationType.GROUP, fromConversationId, new RongIMClient.ResultCallback<Conversation>() { @Override public void onSuccess(Conversation conversation) { RongIM.getInstance().clearMessages(Conversation.ConversationType.GROUP, fromConversationId, new RongIMClient.ResultCallback<Boolean>() { @Override public void onSuccess(Boolean aBoolean) { RongIM.getInstance().removeConversation(Conversation.ConversationType.GROUP, fromConversationId, null); } @Override public void onError(RongIMClient.ErrorCode e) { } }); } @Override public void onError(RongIMClient.ErrorCode e) { } }); SealUserInfoManager.getInstance().deleteGroups(new Groups(fromConversationId)); SealUserInfoManager.getInstance().deleteGroupMembers(fromConversationId); BroadcastManager.getInstance(mContext).sendBroadcast(SealConst.GROUP_LIST_UPDATE); setResult(501, new Intent()); NToast.shortToast(mContext, getString(R.string.quit_success)); LoadDialog.dismiss(mContext); finish(); } break; case DISMISS_GROUP: DismissGroupResponse response1 = (DismissGroupResponse) result; if (response1.getCode() == 200) { RongIM.getInstance().getConversation(Conversation.ConversationType.GROUP, fromConversationId, new RongIMClient.ResultCallback<Conversation>() { @Override public void onSuccess(Conversation conversation) { RongIM.getInstance().clearMessages(Conversation.ConversationType.GROUP, fromConversationId, new RongIMClient.ResultCallback<Boolean>() { @Override public void onSuccess(Boolean aBoolean) { RongIM.getInstance().removeConversation(Conversation.ConversationType.GROUP, fromConversationId, null); } @Override public void onError(RongIMClient.ErrorCode e) { } }); } @Override public void onError(RongIMClient.ErrorCode e) { } }); SealUserInfoManager.getInstance().deleteGroups(new Groups(fromConversationId)); SealUserInfoManager.getInstance().deleteGroupMembers(fromConversationId); BroadcastManager.getInstance(mContext).sendBroadcast(SealConst.GROUP_LIST_UPDATE); setResult(501, new Intent()); NToast.shortToast(mContext, getString(R.string.dismiss_success)); LoadDialog.dismiss(mContext); finish(); } break; case SET_GROUP_NAME: SetGroupDisplayNameResponse response2 = (SetGroupDisplayNameResponse) result; if (response2.getCode() == 200) { request(GET_GROUP_INFO); } break; case GET_GROUP_INFO: GetGroupInfoResponse response3 = (GetGroupInfoResponse) result; if (response3.getCode() == 200) { int i; if (isCreated) { i = 0; } else { i = 1; } GetGroupInfoResponse.ResultEntity bean = response3.getResult(); SealUserInfoManager.getInstance().addGroup( new Groups(bean.getId(), bean.getName(), bean.getPortraitUri(), newGroupName, String.valueOf(i), null) ); mGroupName.setText(newGroupName); RongIM.getInstance().refreshGroupInfoCache(new Group(fromConversationId, newGroupName, Uri.parse(bean.getPortraitUri()))); LoadDialog.dismiss(mContext); NToast.shortToast(mContext, getString(R.string.update_success)); } break; case UPDATE_GROUP_HEADER: SetGroupPortraitResponse response5 = (SetGroupPortraitResponse) result; if (response5.getCode() == 200) { ImageLoader.getInstance().displayImage(imageUrl, mGroupHeader, App.getOptions()); RongIM.getInstance().refreshGroupInfoCache(new Group(fromConversationId, mGroup.getName(), Uri.parse(imageUrl))); LoadDialog.dismiss(mContext); NToast.shortToast(mContext, getString(R.string.update_success)); } break; case GET_QI_NIU_TOKEN: QiNiuTokenResponse response6 = (QiNiuTokenResponse) result; if (response6.getCode() == 200) { uploadImage(response6.getResult().getDomain(), response6.getResult().getToken(), selectUri); } break; case UPDATE_GROUP_NAME: SetGroupNameResponse response7 = (SetGroupNameResponse) result; if (response7.getCode() == 200) { SealUserInfoManager.getInstance().addGroup( new Groups(mGroup.getGroupsId(), newGroupName, mGroup.getPortraitUri(), mGroup.getRole()) ); mGroupName.setText(newGroupName); RongIM.getInstance().refreshGroupInfoCache(new Group(fromConversationId, newGroupName, TextUtils.isEmpty(mGroup.getPortraitUri()) ? Uri.parse(RongGenerate.generateDefaultAvatar(newGroupName, mGroup.getGroupsId())) : Uri.parse(mGroup.getPortraitUri()))); LoadDialog.dismiss(mContext); NToast.shortToast(mContext, getString(R.string.update_success)); } break; case CHECKGROUPURL: GetGroupInfoResponse groupInfoResponse = (GetGroupInfoResponse) result; if (groupInfoResponse.getCode() == 200) { if (groupInfoResponse.getResult() != null) { mGroupName.setText(groupInfoResponse.getResult().getName()); String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(groupInfoResponse); ImageLoader.getInstance().displayImage(portraitUri, mGroupHeader, App.getOptions()); RongIM.getInstance().refreshGroupInfoCache(new Group(fromConversationId, groupInfoResponse.getResult().getName(), TextUtils.isEmpty(groupInfoResponse.getResult().getPortraitUri()) ? Uri.parse(RongGenerate.generateDefaultAvatar(groupInfoResponse.getResult().getName(), groupInfoResponse.getResult().getId())) : Uri.parse(groupInfoResponse.getResult().getPortraitUri()))); } } break; } } } @Override public void onFailure(int requestCode, int state, Object result) { switch (requestCode) { case QUIT_GROUP: NToast.shortToast(mContext, "退出群组请求失败"); LoadDialog.dismiss(mContext); break; case DISMISS_GROUP: NToast.shortToast(mContext, "解散群组请求失败"); LoadDialog.dismiss(mContext); break; } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.group_quit: DialogWithYesOrNoUtils.getInstance().showDialog(mContext, getString(R.string.confirm_quit_group), new DialogWithYesOrNoUtils.DialogCallBack() { @Override public void executeEvent() { LoadDialog.show(mContext); request(QUIT_GROUP); } @Override public void executeEditEvent(String editText) { } @Override public void updatePassword(String oldPassword, String newPassword) { } }); break; case R.id.group_dismiss: DialogWithYesOrNoUtils.getInstance().showDialog(mContext, getString(R.string.confirm_dismiss_group), new DialogWithYesOrNoUtils.DialogCallBack() { @Override public void executeEvent() { LoadDialog.show(mContext); request(DISMISS_GROUP); } @Override public void executeEditEvent(String editText) { } @Override public void updatePassword(String oldPassword, String newPassword) { } }); break; case R.id.ac_ll_search_chatting_records: Intent searchIntent = new Intent(GroupDetailActivity.this, SealSearchChattingDetailActivity.class); searchIntent.putExtra("filterString", ""); ArrayList<Message> arrayList = new ArrayList<>(); searchIntent.putParcelableArrayListExtra("filterMessages", arrayList); mResult = new SealSearchConversationResult(); Conversation conversation = new Conversation(); conversation.setTargetId(fromConversationId); conversation.setConversationType(mConversationType); mResult.setConversation(conversation); Groups groupInfo = DBManager.getInstance().getDaoSession().getGroupsDao().queryBuilder().where(GroupsDao.Properties.GroupsId.eq(fromConversationId)).unique(); if (groupInfo != null) { String portraitUri = groupInfo.getPortraitUri(); mResult.setId(groupInfo.getGroupsId()); if (!TextUtils.isEmpty(portraitUri)) { mResult.setPortraitUri(portraitUri); } if (!TextUtils.isEmpty(groupInfo.getName())) { mResult.setTitle(groupInfo.getName()); } else { mResult.setTitle(groupInfo.getGroupsId()); } searchIntent.putExtra("searchConversationResult", mResult); searchIntent.putExtra("flag", SEARCH_TYPE_FLAG); startActivity(searchIntent); } break; case R.id.group_clean: PromptPopupDialog.newInstance(mContext, getString(R.string.clean_group_chat_history)).setLayoutRes(io.rong.imkit.R.layout.rc_dialog_popup_prompt_warning) .setPromptButtonClickedListener(new PromptPopupDialog.OnPromptButtonClickedListener() { @Override public void onPositiveButtonClicked() { if (RongIM.getInstance() != null) { if (mGroup != null) { RongIM.getInstance().clearMessages(Conversation.ConversationType.GROUP, mGroup.getGroupsId(), new RongIMClient.ResultCallback<Boolean>() { @Override public void onSuccess(Boolean aBoolean) { NToast.shortToast(mContext, getString(R.string.clear_success)); } @Override public void onError(RongIMClient.ErrorCode errorCode) { NToast.shortToast(mContext, getString(R.string.clear_failure)); } }); } } } }).show(); break; case R.id.group_member_size_item: Intent intent = new Intent(mContext, TotalGroupMemberActivity.class); intent.putExtra("targetId", fromConversationId); startActivity(intent); break; case R.id.ll_group_port: if (isCreated) { showPhotoDialog(); } break; case R.id.ll_group_name: if (isCreated) { DialogWithYesOrNoUtils.getInstance().showEditDialog(mContext, getString(R.string.new_group_name), getString(R.string.confirm), new DialogWithYesOrNoUtils.DialogCallBack() { @Override public void executeEvent() { } @Override public void executeEditEvent(String editText) { if (TextUtils.isEmpty(editText)) { return; } if (editText.length() < 2 && editText.length() > 10) { NToast.shortToast(mContext, "群名称应为 2-10 字"); return; } if (AndroidEmoji.isEmoji(editText) && editText.length() < 4) { NToast.shortToast(mContext, "群名称表情过短"); return; } newGroupName = editText; LoadDialog.show(mContext); request(UPDATE_GROUP_NAME); } @Override public void updatePassword(String oldPassword, String newPassword) { } }); } break; case R.id.group_announcement: Intent tempIntent = new Intent(mContext, GroupNoticeActivity.class); tempIntent.putExtra("conversationType", Conversation.ConversationType.GROUP.getValue()); tempIntent.putExtra("targetId", fromConversationId); startActivity(tempIntent); break; } } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { switch (buttonView.getId()) { case R.id.sw_group_top: if (isChecked) { if (mGroup != null) { OperationRong.setConversationTop(mContext, Conversation.ConversationType.GROUP, mGroup.getGroupsId(), true); } } else { if (mGroup != null) { OperationRong.setConversationTop(mContext, Conversation.ConversationType.GROUP, mGroup.getGroupsId(), false); } } break; case R.id.sw_group_notfaction: if (isChecked) { if (mGroup != null) { OperationRong.setConverstionNotif(mContext, Conversation.ConversationType.GROUP, mGroup.getGroupsId(), true); } } else { if (mGroup != null) { OperationRong.setConverstionNotif(mContext, Conversation.ConversationType.GROUP, mGroup.getGroupsId(), false); } } break; } } private class GridAdapter extends BaseAdapter { private List<GroupMember> list; Context context; public GridAdapter(Context context, List<GroupMember> list) { if (list.size() >= 31) { this.list = list.subList(0, 30); } else { this.list = list; } this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.social_chatsetting_gridview_item, parent, false); } SelectableRoundedImageView iv_avatar = (SelectableRoundedImageView) 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 && isCreated) { tv_username.setText(""); badge_delete.setVisibility(View.GONE); iv_avatar.setImageResource(R.drawable.icon_btn_deleteperson); iv_avatar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(GroupDetailActivity.this, SelectFriendsActivity.class); intent.putExtra("isDeleteGroupMember", true); intent.putExtra("GroupId", mGroup.getGroupsId()); startActivityForResult(intent, 101); } }); } else if ((isCreated && position == getCount() - 2) || (!isCreated && position == getCount() - 1)) { tv_username.setText(""); badge_delete.setVisibility(View.GONE); iv_avatar.setImageResource(R.drawable.jy_drltsz_btn_addperson); iv_avatar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(GroupDetailActivity.this, SelectFriendsActivity.class); intent.putExtra("isAddGroupMember", true); intent.putExtra("GroupId", mGroup.getGroupsId()); startActivityForResult(intent, 100); } }); } else { // 普通成员 final GroupMember bean = list.get(position); Friend friend = SealUserInfoManager.getInstance().getFriendByID(bean.getUserId()); if (friend != null && !TextUtils.isEmpty(friend.getDisplayName())) { tv_username.setText(friend.getDisplayName()); } else { tv_username.setText(bean.getName()); } String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(bean); ImageLoader.getInstance().displayImage(portraitUri, iv_avatar, App.getOptions()); iv_avatar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { UserInfo userInfo = new UserInfo(bean.getUserId(), bean.getName(), TextUtils.isEmpty(bean.getPortraitUri().toString()) ? Uri.parse(RongGenerate.generateDefaultAvatar(bean.getName(), bean.getUserId())) : bean.getPortraitUri()); Intent intent = new Intent(context, UserDetailActivity.class); Friend friend = CharacterParser.getInstance().generateFriendFromUserInfo(userInfo); intent.putExtra("friend", friend); intent.putExtra("conversationType", Conversation.ConversationType.GROUP.getValue()); //Groups not Serializable,just need group name intent.putExtra("groupName", mGroup.getName()); intent.putExtra("type", CLICK_CONVERSATION_USER_PORTRAIT); context.startActivity(intent); } }); } return convertView; } @Override public int getCount() { if (isCreated) { return list.size() + 2; } else { return list.size() + 1; } } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } /** * 传入新的数据 刷新UI的方法 */ public void updateListView(List<GroupMember> list) { this.list = list; notifyDataSetChanged(); } } // 拿到新增的成员刷新adapter @Override @SuppressWarnings("unchecked") protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null) { List<Friend> newMemberData = (List<Friend>) data.getSerializableExtra("newAddMember"); List<Friend> deleMember = (List<Friend>) data.getSerializableExtra("deleteMember"); if (newMemberData != null && newMemberData.size() > 0) { for (Friend friend : newMemberData) { GroupMember member = new GroupMember(fromConversationId, friend.getUserId(), friend.getName(), friend.getPortraitUri(), null); mGroupMember.add(1, member); } initGroupMemberData(); } else if (deleMember != null && deleMember.size() > 0) { for (Friend friend : deleMember) { for (GroupMember member : mGroupMember) { if (member.getUserId().equals(friend.getUserId())) { mGroupMember.remove(member); break; } } } initGroupMemberData(); } } switch (requestCode) { case PhotoUtils.INTENT_CROP: case PhotoUtils.INTENT_TAKE: case PhotoUtils.INTENT_SELECT: photoUtils.onActivityResult(GroupDetailActivity.this, requestCode, resultCode, data); break; } } private void setGroupsInfoChangeListener() { //有些权限只有群主有,比如修改群名称等,已经更新UI不需要再更新 BroadcastManager.getInstance(this).addAction(SealAppContext.UPDATE_GROUP_NAME, new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent != null) { String result = intent.getStringExtra("result"); if (result != null) { try { List<String> nameList = JsonMananger.jsonToBean(result, List.class); if (nameList.size() != 3) return; String groupID = nameList.get(0); if (groupID != null && !groupID.equals(fromConversationId)) return; if (mGroup != null && mGroup.getRole().equals("0")) return; String groupName = nameList.get(1); String operationName = nameList.get(2); mGroupName.setText(groupName); newGroupName = groupName; NToast.shortToast(mContext, operationName + context.getString(R.string.rc_item_change_group_name) + "\"" + groupName + "\""); RongIM.getInstance().refreshGroupInfoCache(new Group(fromConversationId, newGroupName, TextUtils.isEmpty(mGroup.getPortraitUri()) ? Uri.parse(RongGenerate.generateDefaultAvatar(newGroupName, mGroup.getGroupsId())) : Uri.parse(mGroup.getPortraitUri()))); } catch (Exception e) { e.printStackTrace(); } } } } }); BroadcastManager.getInstance(this).addAction(SealAppContext.UPDATE_GROUP_MEMBER, new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent != null) { String groupID = intent.getStringExtra("String"); if (groupID != null && groupID.equals(fromConversationId)) getGroupMembers(); } } }); BroadcastManager.getInstance(this).addAction(SealAppContext.GROUP_DISMISS, new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent != null) { String groupID = intent.getStringExtra("String"); if (groupID != null && groupID.equals(fromConversationId)) { if (mGroup.getRole().equals("1")) backAsGroupDismiss(); } } } }); } private void backAsGroupDismiss() { this.setResult(501, new Intent()); finish(); } private void setPortraitChangeListener() { photoUtils = new PhotoUtils(new PhotoUtils.OnPhotoResultListener() { @Override public void onPhotoResult(Uri uri) { if (uri != null && !TextUtils.isEmpty(uri.getPath())) { selectUri = uri; LoadDialog.show(mContext); request(GET_QI_NIU_TOKEN); } } @Override public void onPhotoCancel() { } }); } /** * 弹出底部框 */ private void showPhotoDialog() { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } dialog = new BottomMenuDialog(mContext); dialog.setConfirmListener(new View.OnClickListener() { @Override public void onClick(View arg0) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } photoUtils.takePicture(GroupDetailActivity.this); } }); dialog.setMiddleListener(new View.OnClickListener() { @Override public void onClick(View arg0) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } photoUtils.selectPicture(GroupDetailActivity.this); } }); dialog.show(); } public void uploadImage(final String domain, String imageToken, Uri imagePath) { if (TextUtils.isEmpty(domain) && TextUtils.isEmpty(imageToken) && TextUtils.isEmpty(imagePath.toString())) { throw new RuntimeException("upload parameter is null!"); } File imageFile = new File(imagePath.getPath()); if (this.uploadManager == null) { this.uploadManager = new UploadManager(); } this.uploadManager.put(imageFile, null, imageToken, new UpCompletionHandler() { @Override public void complete(String s, ResponseInfo responseInfo, JSONObject jsonObject) { if (responseInfo.isOK()) { try { String key = (String) jsonObject.get("key"); imageUrl = "http://" + domain + "/" + key; Log.e("uploadImage", imageUrl); if (!TextUtils.isEmpty(imageUrl)) { request(UPDATE_GROUP_HEADER); } } catch (JSONException e) { e.printStackTrace(); } } } }, null); } private void initViews() { messageTop = (SwitchButton) findViewById(R.id.sw_group_top); messageNotification = (SwitchButton) findViewById(R.id.sw_group_notfaction); messageTop.setOnCheckedChangeListener(this); messageNotification.setOnCheckedChangeListener(this); LinearLayout groupClean = (LinearLayout) findViewById(R.id.group_clean); mGridView = (DemoGridView) findViewById(R.id.gridview); mTextViewMemberSize = (TextView) findViewById(R.id.group_member_size); mGroupHeader = (SelectableRoundedImageView) findViewById(R.id.group_header); LinearLayout mGroupDisplayName = (LinearLayout) findViewById(R.id.group_displayname); mGroupDisplayNameText = (TextView) findViewById(R.id.group_displayname_text); mGroupName = (TextView) findViewById(R.id.group_name); mQuitBtn = (Button) findViewById(R.id.group_quit); mDismissBtn = (Button) findViewById(R.id.group_dismiss); RelativeLayout totalGroupMember = (RelativeLayout) findViewById(R.id.group_member_size_item); LinearLayout mGroupPortL = (LinearLayout) findViewById(R.id.ll_group_port); LinearLayout mGroupNameL = (LinearLayout) findViewById(R.id.ll_group_name); mGroupAnnouncementDividerLinearLayout = (LinearLayout) findViewById(R.id.ac_ll_group_announcement_divider); mGroupNotice = (LinearLayout) findViewById(R.id.group_announcement); mSearchMessagesLinearLayout = (LinearLayout) findViewById(R.id.ac_ll_search_chatting_records); mGroupPortL.setOnClickListener(this); mGroupNameL.setOnClickListener(this); totalGroupMember.setOnClickListener(this); mGroupDisplayName.setOnClickListener(this); mQuitBtn.setOnClickListener(this); mDismissBtn.setOnClickListener(this); groupClean.setOnClickListener(this); mGroupNotice.setOnClickListener(this); mSearchMessagesLinearLayout.setOnClickListener(this); } @Override public void onBackPressed() { SealAppContext.getInstance().popActivity(this); super.onBackPressed(); } }