Java Code Examples for com.hyphenate.chat.EMMessage#direct()

The following examples show how to use com.hyphenate.chat.EMMessage#direct() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: LeftImageMessageItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
@Override
public boolean isForViewType(EMMessage item, int position)
{
    if (item.direct() == EMMessage.Direct.RECEIVE && item.getType() == EMMessage.Type.IMAGE)
        return true;
    else
        return false;
}
 
Example 2
Source File: EaseMessageAdapter.java    From Social with Apache License 2.0 5 votes vote down vote up
/**
 * 获取item类型
 */
public int getItemViewType(int position) {
	EMMessage message = getItem(position); 
	if (message == null) {
		return -1;
	}
	
	if(customRowProvider != null && customRowProvider.getCustomChatRowType(message) > 0){
	    return customRowProvider.getCustomChatRowType(message) + 13;
	}
	
	if (message.getType() == EMMessage.Type.TXT) {
	    if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
	        return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_EXPRESSION : MESSAGE_TYPE_SENT_EXPRESSION;
	    }
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_TXT : MESSAGE_TYPE_SENT_TXT;
	}
	if (message.getType() == EMMessage.Type.IMAGE) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_IMAGE : MESSAGE_TYPE_SENT_IMAGE;

	}
	if (message.getType() == EMMessage.Type.LOCATION) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_LOCATION : MESSAGE_TYPE_SENT_LOCATION;
	}
	if (message.getType() == EMMessage.Type.VOICE) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VOICE : MESSAGE_TYPE_SENT_VOICE;
	}
	if (message.getType() == EMMessage.Type.VIDEO) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VIDEO : MESSAGE_TYPE_SENT_VIDEO;
	}
	if (message.getType() == EMMessage.Type.FILE) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_FILE : MESSAGE_TYPE_SENT_FILE;
	}

	return -1;// invalid
}
 
Example 3
Source File: HxChatBaseItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
protected void setMessageStatus(RcvHolder holder, final EMMessage emMessage, final int position)
{
    if (emMessage.direct() == EMMessage.Direct.SEND)
    {
        //设置消息状态
        EMMessage.Status status = emMessage.status();
        if (status == EMMessage.Status.CREATE || status == EMMessage.Status.INPROGRESS)
        {
            holder.setVisibility(R.id.pgb_chat_listitem_sending, View.VISIBLE);
            holder.setVisibility(R.id.img_chat_listitem_resend, View.GONE);
        } else if (status == EMMessage.Status.SUCCESS)
        {
            holder.setVisibility(R.id.pgb_chat_listitem_sending, View.GONE);
            holder.setVisibility(R.id.img_chat_listitem_resend, View.GONE);
        } else
        {
            holder.setVisibility(R.id.pgb_chat_listitem_sending, View.GONE);
            holder.setVisibility(R.id.img_chat_listitem_resend, View.VISIBLE);
            holder.setClickListener(R.id.img_chat_listitem_resend, new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    mPresenter.resendMessage(emMessage, position);
                }
            });
        }
    }
}
 
Example 4
Source File: HxChatBaseItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
protected void setUserData(RcvHolder holder, EMMessage emMessage, final int position)
{
    if (emMessage.direct() == EMMessage.Direct.RECEIVE)
    {
        //设置头像
        if (mUserBean != null && StringUtil.isNotEmpty(mUserBean.getLocalHead()))
            CommonUtils.getInstance()
                    .getImageDisplayer()
                    .display(mContext, (ImageView) holder.findView(R.id.img_chat_listitem_head),
                            mUserBean.getLocalHead(), 150, 150, R.drawable.default_avatar, R.drawable.default_avatar);
        else
            holder.setImgResource(R.id.img_chat_listitem_head, R.drawable.default_avatar);
        //设置名字
        //单聊不显示名字
        if (emMessage.getChatType() == EMMessage.ChatType.Chat)
        {
            holder.setVisibility(R.id.tv_chat_listitem_name, View.GONE);
        } else
        {
            holder.setVisibility(R.id.tv_chat_listitem_name, View.VISIBLE);
            if (mUserBean != null)
                holder.setTvText(R.id.tv_chat_listitem_name, mUserBean.getDisplayName());
            else
                holder.setTvText(R.id.tv_chat_listitem_name, emMessage.getUserName());
        }
    } else
    {
        //本方头像为默认头像
        holder.setImgResource(R.id.img_chat_listitem_head, R.drawable.default_avatar);
        //不显示名字
        holder.setVisibility(R.id.tv_chat_listitem_name, View.GONE);
    }
}
 
Example 5
Source File: EaseMessageAdapter.java    From Study_Android_Demo with Apache License 2.0 5 votes vote down vote up
/**
 * get type of item
 */
public int getItemViewType(int position) {
	EMMessage message = getItem(position); 
	if (message == null) {
		return -1;
	}
	
	if(customRowProvider != null && customRowProvider.getCustomChatRowType(message) > 0){
	    return customRowProvider.getCustomChatRowType(message) + 13;
	}
	
	if (message.getType() == EMMessage.Type.TXT) {
	    if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
	        return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_EXPRESSION : MESSAGE_TYPE_SENT_EXPRESSION;
	    }
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_TXT : MESSAGE_TYPE_SENT_TXT;
	}
	if (message.getType() == EMMessage.Type.IMAGE) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_IMAGE : MESSAGE_TYPE_SENT_IMAGE;

	}
	if (message.getType() == EMMessage.Type.LOCATION) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_LOCATION : MESSAGE_TYPE_SENT_LOCATION;
	}
	if (message.getType() == EMMessage.Type.VOICE) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VOICE : MESSAGE_TYPE_SENT_VOICE;
	}
	if (message.getType() == EMMessage.Type.VIDEO) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VIDEO : MESSAGE_TYPE_SENT_VIDEO;
	}
	if (message.getType() == EMMessage.Type.FILE) {
		return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_FILE : MESSAGE_TYPE_SENT_FILE;
	}

	return -1;// invalid
}
 
Example 6
Source File: RightVideoMessageItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
@Override
public boolean isForViewType(EMMessage item, int position)
{
    if (item.direct() == EMMessage.Direct.SEND && item.getType() == EMMessage.Type.VIDEO)
        return true;
    else
        return false;
}
 
Example 7
Source File: LeftVoiceRecordItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
@Override
public boolean isForViewType(EMMessage item, int position)
{
    int attr = item.getIntAttribute(HxMsgAttrConstant.TXT_ATTR_KEY, HxMsgAttrConstant.NORMAL_TEXT_MSG);

    if (item.direct() == EMMessage.Direct.RECEIVE && item.getType() == EMMessage.Type.TXT
            && attr == HxMsgAttrConstant.VOICE_CALL_RECORD)
        return true;
    else
        return false;
}
 
Example 8
Source File: RightVideoRecordItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
@Override
public boolean isForViewType(EMMessage item, int position)
{
    int attr = item.getIntAttribute(HxMsgAttrConstant.TXT_ATTR_KEY, HxMsgAttrConstant.NORMAL_TEXT_MSG);

    if (item.direct() == EMMessage.Direct.SEND && item.getType() == EMMessage.Type.TXT
            && attr == HxMsgAttrConstant.VIDEO_CALL_RECORD)
        return true;
    else
        return false;
}
 
Example 9
Source File: LeftVoiceMessageItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
@Override
public boolean isForViewType(EMMessage item, int position)
{
    if (item.direct() == EMMessage.Direct.RECEIVE && item.getType() == EMMessage.Type.VOICE)
        return true;
    else
        return false;
}
 
Example 10
Source File: RightTextMessageItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
@Override
public boolean isForViewType(EMMessage item, int position)
{
    int attr = item.getIntAttribute(HxMsgAttrConstant.TXT_ATTR_KEY, HxMsgAttrConstant.NORMAL_TEXT_MSG);

    if (item.direct() == EMMessage.Direct.SEND && item.getType() == EMMessage.Type.TXT
            && attr == HxMsgAttrConstant.NORMAL_TEXT_MSG)
        return true;
    else
        return false;
}
 
Example 11
Source File: RightVoiceRecordItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
@Override
public boolean isForViewType(EMMessage item, int position)
{
    int attr = item.getIntAttribute(HxMsgAttrConstant.TXT_ATTR_KEY, HxMsgAttrConstant.NORMAL_TEXT_MSG);

    if (item.direct() == EMMessage.Direct.SEND && item.getType() == EMMessage.Type.TXT
            && attr == HxMsgAttrConstant.VOICE_CALL_RECORD)
        return true;
    else
        return false;
}
 
Example 12
Source File: LeftTextMessageItemView.java    From FamilyChat with Apache License 2.0 5 votes vote down vote up
@Override
public boolean isForViewType(EMMessage item, int position)
{
    int attr = item.getIntAttribute(HxMsgAttrConstant.TXT_ATTR_KEY, HxMsgAttrConstant.NORMAL_TEXT_MSG);

    if (item.direct() == EMMessage.Direct.RECEIVE && item.getType() == EMMessage.Type.TXT
            && attr == HxMsgAttrConstant.NORMAL_TEXT_MSG)
        return true;
    else
        return false;
}
 
Example 13
Source File: EaseConversationAdapater.java    From nono-android with GNU General Public License v3.0 4 votes vote down vote up
@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 = (CircleImageView) convertView.findViewById(R.id.avatar);
        holder.msgState = convertView.findViewById(R.id.msg_state);
        holder.list_itease_layout = (LinearLayout) convertView.findViewById(R.id.list_itease_layout);
        convertView.setTag(holder);
    }

    // 获取与此用户/群组的会话
    EMConversation conversation = getItem(position);
    // 获取用户username或者群组groupid
    String username = conversation.getUserName();
    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;
}
 
Example 14
Source File: VoiceMessageBaseItemView.java    From FamilyChat with Apache License 2.0 4 votes vote down vote up
@Override
public void setMessageData(RcvHolder holder, final EMMessage emMessage, final int position)
{
    final EMVoiceMessageBody messageBody = (EMVoiceMessageBody) emMessage.getBody();
    final FrameAnimImageView imgLabel = holder.findView(R.id.img_chat_listitem_voice_content);
    TextView tvLength = holder.findView(R.id.tv_chat_listitem_voice_content);
    View vLayout = holder.findView(R.id.fl_chat_listitem_voice_content);

    int voiceLength = messageBody.getLength();
    ViewGroup.LayoutParams layoutParams = vLayout.getLayoutParams();
    if (voiceLength <= MIN_VOICE_LENGTH)
        layoutParams.width = MIN_LAYOUT_WIDTH;
    else if (voiceLength >= MAX_VOICE_LENGTH)
        layoutParams.width = MAX_LAYOUT_WIDTH;
    else
        layoutParams.width = MIN_LAYOUT_WIDTH
                + (MAX_LAYOUT_WIDTH - MIN_LAYOUT_WIDTH)
                * (voiceLength - MIN_VOICE_LENGTH) / 5;//5=MAX_VOICE_LENGTH-MIN_VOICE_LENGTH
    vLayout.setLayoutParams(layoutParams);

    if (mPresenter.getCurPlayVoicePosition() == position)
    {
        if (emMessage.direct() == EMMessage.Direct.SEND)
            imgLabel.start(mAnimRight, true, ANIM_DURATION);
        else
            imgLabel.start(mAnimLeft, true, ANIM_DURATION);
    } else
    {
        imgLabel.stop();
        if (emMessage.direct() == EMMessage.Direct.SEND)
            imgLabel.setImageResource(R.drawable.ic_voice_right03);
        else
            imgLabel.setImageResource(R.drawable.ic_voice_left03);
    }

    //设置时长
    String lengthEx = mContext.getResources().getString(R.string.tv_chat_listitem_voice_length_Ex);
    String length = lengthEx.replaceFirst("%%1", String.valueOf(voiceLength));
    tvLength.setText(length);

    //是否已听
    if (emMessage.direct() == EMMessage.Direct.RECEIVE)
    {
        TextView tvUnlisten = holder.findView(R.id.tv_chat_listitem_voice_unlisten);
        if (emMessage.isListened())
            tvUnlisten.setVisibility(View.GONE);
        else
            tvUnlisten.setVisibility(View.VISIBLE);
    }

    //设置点击事件
    holder.setClickListener(R.id.fl_chat_listitem_voice_content, new VoiceClickListener(imgLabel, emMessage, position));

    setMessage(holder, emMessage, position);
}
 
Example 15
Source File: EaseCommonUtils.java    From nono-android with GNU General Public License v3.0 4 votes vote down vote up
/**
     * 根据消息内容和消息类型获取消息内容提示
     * 
     * @param message
     * @param context
     * @return
     */
    public static String getMessageDigest(EMMessage message, Context context) {
        String digest = "";
        switch (message.getType()) {
        case LOCATION: // 位置消息
            if (message.direct() == EMMessage.Direct.RECEIVE) {
                //从sdk中提到了ui中,使用更简单不犯错的获取string方法
//              digest = EasyUtils.getAppResourceString(context, "location_recv");
                digest = getString(context, R.string.location_recv);
                digest = String.format(digest, message.getFrom());
                return digest;
            } else {
//              digest = EasyUtils.getAppResourceString(context, "location_prefix");
                digest = getString(context, R.string.location_prefix);
            }
            break;
        case IMAGE: // 图片消息
            digest = getString(context, R.string.picture);
            break;
        case VOICE:// 语音消息
            digest = getString(context, R.string.voice_prefix);
            break;
        case VIDEO: // 视频消息
            digest = getString(context, R.string.video);
            break;
        case TXT: // 文本消息
            EMTextMessageBody txtBody = (EMTextMessageBody) message.getBody();
            /*if(((DemoHXSDKHelper)HXSDKHelper.getInstance()).isRobotMenuMessage(message)){
                digest = ((DemoHXSDKHelper)HXSDKHelper.getInstance()).getRobotMenuMessageDigest(message);
            }else */if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_VOICE_CALL, false)){
                digest = getString(context, R.string.voice_call) + txtBody.getMessage();
            }else if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
                if(!TextUtils.isEmpty(txtBody.getMessage())){
                    digest = txtBody.getMessage();
                }else{
                    digest = getString(context, R.string.dynamic_expression);
                }
            }else{
                digest = txtBody.getMessage();
            }
            break;
        case FILE: //普通文件消息
            digest = getString(context, R.string.file);
            break;
        default:
            EMLog.e(TAG, "error, unknow type");
            return "";
        }

        return digest;
    }
 
Example 16
Source File: EaseConversationAdapter.java    From Study_Android_Demo with Apache License 2.0 4 votes vote down vote up
@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);
        holder.motioned = (TextView) convertView.findViewById(R.id.mentioned);
        convertView.setTag(holder);
    }
    holder.list_itease_layout.setBackgroundResource(R.drawable.ease_mm_listitem);

    // get conversation
    EMConversation conversation = getItem(position);
    // get username or group id
    String username = conversation.getUserName();
    
    if (conversation.getType() == EMConversationType.GroupChat) {
        String groupId = conversation.getUserName();
        if(EaseAtMessageHelper.get().hasAtMeMsg(groupId)){
            holder.motioned.setVisibility(View.VISIBLE);
        }else{
            holder.motioned.setVisibility(View.GONE);
        }
        // group message, show group avatar
        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);
        holder.motioned.setVisibility(View.GONE);
    }else {
        EaseUserUtils.setUserAvatar(getContext(), username, holder.avatar);
        EaseUserUtils.setUserNick(username, holder.name);
        holder.motioned.setVisibility(View.GONE);
    }

    if (conversation.getUnreadMsgCount() > 0) {
        // show unread message count
        holder.unreadLabel.setText(String.valueOf(conversation.getUnreadMsgCount()));
        holder.unreadLabel.setVisibility(View.VISIBLE);
    } else {
        holder.unreadLabel.setVisibility(View.INVISIBLE);
    }

    if (conversation.getAllMsgCount() != 0) {
    	// show the content of latest message
        EMMessage lastMessage = conversation.getLastMessage();
        String content = null;
        if(cvsListHelper != null){
            content = cvsListHelper.onSetItemSecondaryText(lastMessage);
        }
        holder.message.setText(EaseSmileUtils.getSmiledText(getContext(), EaseCommonUtils.getMessageDigest(lastMessage, (this.getContext()))),
                BufferType.SPANNABLE);
        if(content != null){
            holder.message.setText(content);
        }
        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);
        }
    }
    
    //set property
    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;
}
 
Example 17
Source File: ImageMessageBaseItemView.java    From FamilyChat with Apache License 2.0 4 votes vote down vote up
@Override
public void setMessageData(RcvHolder holder, final EMMessage emMessage, final int position)
{
    EMImageMessageBody messageBody = (EMImageMessageBody) emMessage.getBody();
    //根据图片高度计算ImageView的尺寸
    int imgWidth = messageBody.getWidth();
    int imgHeight = messageBody.getHeight();
    if (imgWidth >= MAX_IMAGE_SIZE)
    {
        mLayoutWidth = MAX_IMAGE_SIZE;
        mLayoutHeight = mLayoutWidth * imgHeight / imgWidth;
    } else if (imgHeight >= MAX_IMAGE_SIZE)
    {
        mLayoutHeight = MAX_IMAGE_SIZE;
        mLayoutWidth = mLayoutHeight * imgWidth / imgHeight;
    } else
    {
        mLayoutWidth = imgWidth >= MIN_IMAGE_SIZE ? imgWidth : MIN_IMAGE_SIZE;
        mLayoutHeight = imgHeight >= MIN_IMAGE_SIZE ? imgHeight : MIN_IMAGE_SIZE;
    }

    SelectableRoundedImageView imageView = holder.findView(R.id.img_chat_listitem_img_content);
    ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
    layoutParams.width = mLayoutWidth + PADDING_LEFT + PADDING_RIGHT;
    layoutParams.height = mLayoutHeight + PADDING_TOP + PADDING_BOTTOM;
    imageView.setLayoutParams(layoutParams);

    //判断显示图地址
    String localUrl = messageBody.getLocalUrl();
    String remoteUrl = messageBody.getRemoteUrl();
    if (emMessage.direct() == EMMessage.Direct.SEND && StringUtil.isNotEmpty(localUrl) && new File(localUrl).exists())
        CommonUtils.getInstance().getImageDisplayer()
                .display(mContext, imageView, localUrl, mLayoutWidth, mLayoutHeight);
    else
        CommonUtils.getInstance().getImageDisplayer()
                .display(mContext, imageView, remoteUrl, mLayoutWidth, mLayoutHeight);

    //设置点击事件
    imageView.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            mPresenter.clickImageMessage(emMessage, position);
        }
    });

    setMessage(holder, emMessage, position);
}
 
Example 18
Source File: EaseConversationAdapater.java    From Social with Apache License 2.0 4 votes vote down vote up
@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) {
        // 群聊消息,显示群聊头像
        //Glide.with(getContext()).load
        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;
}
 
Example 19
Source File: EaseCommonUtils.java    From Social with Apache License 2.0 4 votes vote down vote up
/**
     * 根据消息内容和消息类型获取消息内容提示
     * 
     * @param message
     * @param context
     * @return
     */
    public static String getMessageDigest(EMMessage message, Context context) {
        String digest = "";
        switch (message.getType()) {
        case LOCATION: // 位置消息
            if (message.direct() == EMMessage.Direct.RECEIVE) {
                //从sdk中提到了ui中,使用更简单不犯错的获取string方法
//              digest = EasyUtils.getAppResourceString(context, "location_recv");
                digest = getString(context, R.string.location_recv);
                digest = String.format(digest, message.getFrom());
                return digest;
            } else {
//              digest = EasyUtils.getAppResourceString(context, "location_prefix");
                digest = getString(context, R.string.location_prefix);
            }
            break;
        case IMAGE: // 图片消息
            digest = getString(context, R.string.picture);
            break;
        case VOICE:// 语音消息
            digest = getString(context, R.string.voice_prefix);
            break;
        case VIDEO: // 视频消息
            digest = getString(context, R.string.video);
            break;
        case TXT: // 文本消息
            EMTextMessageBody txtBody = (EMTextMessageBody) message.getBody();
            /*if(((DemoHXSDKHelper)HXSDKHelper.getInstance()).isRobotMenuMessage(message)){
                digest = ((DemoHXSDKHelper)HXSDKHelper.getInstance()).getRobotMenuMessageDigest(message);
            }else */if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_VOICE_CALL, false)){
                digest = getString(context, R.string.voice_call) + txtBody.getMessage();
            }else if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_VIDEO_CALL, false)){
                digest = getString(context, R.string.video_call) + txtBody.getMessage();
            }else if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
                if(!TextUtils.isEmpty(txtBody.getMessage())){
                    digest = txtBody.getMessage();
                }else{
                    digest = getString(context, R.string.dynamic_expression);
                }
            }else{
                digest = txtBody.getMessage();
            }
            break;
        case FILE: //普通文件消息
            digest = getString(context, R.string.file);
            break;
        default:
            EMLog.e(TAG, "error, unknow type");
            return "";
        }

        return digest;
    }
 
Example 20
Source File: MyEaseConversationAdapter.java    From Social with Apache License 2.0 4 votes vote down vote up
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(com.hyphenate.easeui.R.layout.ease_row_chat_history, parent, false);
    }
    ViewHolder holder = (ViewHolder) convertView.getTag();
    if (holder == null) {
        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(com.hyphenate.easeui.R.id.name);
        holder.unreadLabel = (TextView) convertView.findViewById(com.hyphenate.easeui.R.id.unread_msg_number);
        holder.message = (TextView) convertView.findViewById(com.hyphenate.easeui.R.id.message);
        holder.time = (TextView) convertView.findViewById(com.hyphenate.easeui.R.id.time);
        holder.avatar = (ImageView) convertView.findViewById(com.hyphenate.easeui.R.id.avatar);
        holder.msgState = convertView.findViewById(com.hyphenate.easeui.R.id.msg_state);
        holder.list_itease_layout = (RelativeLayout) convertView.findViewById(com.hyphenate.easeui.R.id.list_itease_layout);
        convertView.setTag(holder);
    }
    holder.list_itease_layout.setBackgroundResource(com.hyphenate.easeui.R.drawable.ease_mm_listitem);

    // 获取与此用户/群组的会话
    EMConversation conversation = getItem(position);
    // 获取用户username或者群组groupid
    String username = conversation.getUserName();

    if (conversation.getType() == EMConversation.EMConversationType.GroupChat) {
        // 群聊消息,显示群聊头像
        //Glide.with(getContext()).load
        //holder.avatar.setImageResource(com.hyphenate.easeui.R.drawable.ease_group_icon);
        Glide.with(getContext()).load(SharedPreferenceUtil.getGroupImgPath(conversation.getUserName())).into(holder.avatar);
        EMGroup group = EMClient.getInstance().groupManager().getGroup(username);
        holder.name.setText(group != null ? group.getGroupName() : username);
    } else if(conversation.getType() == EMConversation.EMConversationType.ChatRoom){
        holder.avatar.setImageResource(com.hyphenate.easeui.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()))),
                TextView.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;
}