package com.netease.nim.demo.session.search;
import android.content.Context;
import android.text.style.ImageSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.netease.nim.demo.R;
import com.netease.nim.uikit.common.ui.imageview.HeadImageView;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.netease.nim.uikit.common.util.sys.TimeUtil;
import com.netease.nim.uikit.cache.NimUserInfoCache;
import com.netease.nim.uikit.cache.TeamDataCache;
import com.netease.nim.uikit.session.emoji.MoonUtil;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import java.util.List;
/**
* Created by vincent on 7/30/14.
*/
public class SearchMessageAdapter extends BaseAdapter {
private Context context;
private List<IMMessage> messages;
private String keyword;
public SearchMessageAdapter(Context context, List<IMMessage> messages) {
this.context = context;
this.messages = messages;
this.keyword = "";
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
@Override
public int getCount() {
return messages.size();
}
@Override
public Object getItem(int position) {
return messages.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextSearchResultViewHolder holder;
if (convertView != null) {
holder = (TextSearchResultViewHolder) convertView.getTag();
} else {
convertView = LayoutInflater.from(context).inflate(R.layout.message_search_list_view_item, parent, false);
holder = new TextSearchResultViewHolder(convertView);
convertView.setTag(holder);
}
holder.refresh(messages.get(position));
return convertView;
}
private class TextSearchResultViewHolder {
private HeadImageView imgHead;
private TextView tvNickname;
private TextView tvMessage;
private TextView tvDatetime;
private ImageView imgMsgStatus;
public TextSearchResultViewHolder(View view) {
this.imgHead = (HeadImageView) view.findViewById(R.id.img_head);
this.tvNickname = (TextView) view.findViewById(R.id.tv_nick_name);
this.tvMessage = (TextView) view.findViewById(R.id.tv_message);
this.tvDatetime = (TextView) view.findViewById(R.id.tv_date_time);
this.imgMsgStatus = (ImageView) view.findViewById(R.id.img_msg_status);
}
public void refresh(IMMessage message) {
imgHead.loadBuddyAvatar(message.getFromAccount());
refreshNickname(message);
refreshContent(message);
refreshTime(message);
}
private void refreshNickname(IMMessage message) {
int labelWidth = ScreenUtil.screenWidth;
// 减去固定的头像和时间宽度
labelWidth -= ScreenUtil.dip2px(70 + 70);
tvNickname.setMaxWidth(labelWidth);
if (message.getSessionType() == SessionTypeEnum.Team) {
tvNickname.setText(TeamDataCache.getInstance().getTeamMemberDisplayName(message.getSessionId(), message.getFromAccount()));
} else {
tvNickname.setText(NimUserInfoCache.getInstance().getUserDisplayName(message.getFromAccount()));
}
}
private void refreshContent(IMMessage message) {
MoonUtil.identifyFaceExpressionAndTags(context, tvMessage, message.getContent(), ImageSpan.ALIGN_BOTTOM, 0.45f);
// SpanUtil.makeKeywordSpan(context, tvMessage, keyword);
switch (message.getStatus()) {
case fail:
imgMsgStatus.setImageResource(R.drawable.nim_g_ic_failed_small);
imgMsgStatus.setVisibility(View.VISIBLE);
break;
default:
imgMsgStatus.setVisibility(View.GONE);
break;
}
}
private void refreshTime(IMMessage messageHistory) {
String timeString = TimeUtil.getTimeShowString(messageHistory.getTime(), true);
tvDatetime.setText(timeString);
}
}
}