/** 设置属性,监听等 */
  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;
    }
Пример #3
0
  @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();
          }
        });
  }
Пример #4
0
 /**
  * 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;
  }