/** 设置属性,监听等 */ protected void setUpView() { titleBar.setTitle(toChatUsername); if (chatType == EaseConstant.CHATTYPE_SINGLE) { // 单聊 // 设置标题 if (EaseUserUtils.getUserInfo(toChatUsername) != null) { titleBar.setTitle(EaseUserUtils.getUserInfo(toChatUsername).getNick()); } titleBar.setRightImageResource(R.drawable.ease_mm_title_remove); } else { titleBar.setRightImageResource(R.drawable.ease_to_group_details_normal); if (chatType == EaseConstant.CHATTYPE_GROUP) { // 群聊 EMGroup group = EMClient.getInstance().groupManager().getGroup(toChatUsername); if (group != null) titleBar.setTitle(group.getGroupName()); // 监听当前会话的群聊解散被T事件 groupListener = new GroupListener(); EMClient.getInstance().groupManager().addGroupChangeListener(groupListener); } else { onChatRoomViewCreation(); } } if (chatType != EaseConstant.CHATTYPE_CHATROOM) { onConversationInit(); onMessageListInit(); } // 设置标题栏点击事件 titleBar.setLeftLayoutClickListener( new OnClickListener() { @Override public void onClick(View v) { getActivity().finish(); } }); titleBar.setRightLayoutClickListener( new OnClickListener() { @Override public void onClick(View v) { if (chatType == EaseConstant.CHATTYPE_SINGLE) { emptyHistory(); } else { toGroupDetails(); } } }); setRefreshLayoutListener(); // show forward message if the message is not null String forward_msg_id = getArguments().getString("forward_msg_id"); if (forward_msg_id != null) { // 发送要转发的消息 forwardMessage(forward_msg_id); } }
@Override protected FilterResults performFiltering(CharSequence prefix) { FilterResults results = new FilterResults(); if (mOriginalValues == null) { mOriginalValues = new ArrayList<EMConversation>(); } if (prefix == null || prefix.length() == 0) { results.values = copyConversationList; results.count = copyConversationList.size(); } else { String prefixString = prefix.toString(); final int count = mOriginalValues.size(); final ArrayList<EMConversation> newValues = new ArrayList<EMConversation>(); for (int i = 0; i < count; i++) { final EMConversation value = mOriginalValues.get(i); String username = value.getUserName(); EMGroup group = EMClient.getInstance().groupManager().getGroup(username); if (group != null) { username = group.getGroupName(); } else { EaseUser user = EaseUserUtils.getUserInfo(username); // TODO: not support Nick anymore // if(user != null && user.getNick() != null) // username = user.getNick(); } // First match against the whole ,non-splitted value if (username.startsWith(prefixString)) { newValues.add(value); } else { final String[] words = username.split(" "); final int wordCount = words.length; // Start at index 0, in case valueText starts with space(s) for (int k = 0; k < wordCount; k++) { if (words[k].startsWith(prefixString)) { newValues.add(value); break; } } } } results.values = newValues; results.count = newValues.size(); } return results; }
@Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity_pick_at_user); String groupId = getIntent().getStringExtra("groupId"); EMGroup group = EMClient.getInstance().groupManager().getGroup(groupId); final ListView listView = (ListView) findViewById(R.id.list); List<String> members = group.getMembers(); List<EaseUser> userList = new ArrayList<EaseUser>(); for (String username : members) { EaseUser user = EaseUserUtils.getUserInfo(username); userList.add(user); } Collections.sort( userList, new Comparator<EaseUser>() { @Override public int compare(EaseUser lhs, EaseUser rhs) { if (lhs.getInitialLetter().equals(rhs.getInitialLetter())) { return lhs.getNick().compareTo(rhs.getNick()); } else { if ("#".equals(lhs.getInitialLetter())) { return 1; } else if ("#".equals(rhs.getInitialLetter())) { return -1; } return lhs.getInitialLetter().compareTo(rhs.getInitialLetter()); } } }); listView.setAdapter(new PickUserAdapter(this, 0, userList)); listView.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { EaseUser user = (EaseUser) listView.getItemAtPosition(position); if (EMClient.getInstance().getCurrentUser().equals(user.getUsername())) return; setResult(Activity.RESULT_OK, new Intent().putExtra("username", user.getUsername())); finish(); } }); }
/** * send @ message, only support group chat message * * @param content */ private void sendAtMessage(String content) { if (chatType != EaseConstant.CHATTYPE_GROUP) { EMLog.e(TAG, "only support group chat message"); return; } EMMessage message = EMMessage.createTxtSendMessage(content, toChatUsername); EMGroup group = EMClient.getInstance().groupManager().getGroup(toChatUsername); if (EMClient.getInstance().getCurrentUser().equals(group.getOwner()) && EaseAtMessageHelper.get().containsAtAll(content)) { message.setAttribute( EaseConstant.MESSAGE_ATTR_AT_MSG, EaseConstant.MESSAGE_ATTR_VALUE_AT_MSG_ALL); } else { message.setAttribute( EaseConstant.MESSAGE_ATTR_AT_MSG, EaseAtMessageHelper.get() .atListToJsonArray(EaseAtMessageHelper.get().getAtMessageUsernames(content))); } sendMessage(message); }
@Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.ease_row_chat_history, parent, false); } ViewHolder holder = (ViewHolder) convertView.getTag(); if (holder == null) { holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.name); holder.unreadLabel = (TextView) convertView.findViewById(R.id.unread_msg_number); holder.message = (TextView) convertView.findViewById(R.id.message); holder.time = (TextView) convertView.findViewById(R.id.time); holder.avatar = (ImageView) convertView.findViewById(R.id.avatar); holder.msgState = convertView.findViewById(R.id.msg_state); holder.list_itease_layout = (RelativeLayout) convertView.findViewById(R.id.list_itease_layout); convertView.setTag(holder); } holder.list_itease_layout.setBackgroundResource(R.drawable.ease_mm_listitem); // 获取与此用户/群组的会话 EMConversation conversation = getItem(position); // 获取用户username或者群组groupid String username = conversation.getUserName(); if (conversation.getType() == EMConversationType.GroupChat) { // 群聊消息,显示群聊头像 holder.avatar.setImageResource(R.drawable.ease_group_icon); EMGroup group = EMClient.getInstance().groupManager().getGroup(username); holder.name.setText(group != null ? group.getGroupName() : username); } else if (conversation.getType() == EMConversationType.ChatRoom) { holder.avatar.setImageResource(R.drawable.ease_group_icon); EMChatRoom room = EMClient.getInstance().chatroomManager().getChatRoom(username); holder.name.setText( room != null && !TextUtils.isEmpty(room.getName()) ? room.getName() : username); } else { EaseUserUtils.setUserAvatar(getContext(), username, holder.avatar); EaseUserUtils.setUserNick(username, holder.name); } if (conversation.getUnreadMsgCount() > 0) { // 显示与此用户的消息未读数 holder.unreadLabel.setText(String.valueOf(conversation.getUnreadMsgCount())); holder.unreadLabel.setVisibility(View.VISIBLE); } else { holder.unreadLabel.setVisibility(View.INVISIBLE); } if (conversation.getAllMsgCount() != 0) { // 把最后一条消息的内容作为item的message内容 EMMessage lastMessage = conversation.getLastMessage(); holder.message.setText( EaseSmileUtils.getSmiledText( getContext(), EaseCommonUtils.getMessageDigest(lastMessage, (this.getContext()))), BufferType.SPANNABLE); holder.time.setText(DateUtils.getTimestampString(new Date(lastMessage.getMsgTime()))); if (lastMessage.direct() == EMMessage.Direct.SEND && lastMessage.status() == EMMessage.Status.FAIL) { holder.msgState.setVisibility(View.VISIBLE); } else { holder.msgState.setVisibility(View.GONE); } } // 设置自定义属性 holder.name.setTextColor(primaryColor); holder.message.setTextColor(secondaryColor); holder.time.setTextColor(timeColor); if (primarySize != 0) holder.name.setTextSize(TypedValue.COMPLEX_UNIT_PX, primarySize); if (secondarySize != 0) holder.message.setTextSize(TypedValue.COMPLEX_UNIT_PX, secondarySize); if (timeSize != 0) holder.time.setTextSize(TypedValue.COMPLEX_UNIT_PX, timeSize); return convertView; }