package com.netease.nim.uikit.recent; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.text.Spannable; import android.text.SpannableString; import android.text.TextUtils; import android.text.style.ForegroundColorSpan; import android.text.style.ImageSpan; import com.netease.nim.uikit.NimUIKit; import com.netease.nim.uikit.cache.NimUserInfoCache; import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.msg.MsgService; import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; import com.netease.nimlib.sdk.msg.model.IMMessage; import com.netease.nimlib.sdk.msg.model.MemberPushOption; import com.netease.nimlib.sdk.msg.model.RecentContact; import com.netease.nimlib.sdk.team.model.TeamMember; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by hzchenkang on 2016/12/5. */ public class AitHelper { private static final String KEY_AIT = "ait"; public static String getAitAlertString(String content) { return "[有人@你] " + content; } public static void replaceAitForeground(String value, SpannableString mSpannableString) { if (TextUtils.isEmpty(value) || TextUtils.isEmpty(mSpannableString)) { return; } Pattern pattern = Pattern.compile("(\\[有人@你\\])"); Matcher matcher = pattern.matcher(value); while (matcher.find()) { int start = matcher.start(); if (start != 0) { continue; } int end = matcher.end(); mSpannableString.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } } public static boolean isAitMessage(IMMessage message) { if (message == null || message.getSessionType() != SessionTypeEnum.Team) { return false; } MemberPushOption option = message.getMemberPushOption(); boolean isForce = option != null && option.isForcePush() && (option.getForcePushList() == null || option.getForcePushList().contains(NimUIKit.getAccount())); return isForce; } private static boolean isContentAit(String content) { if (TextUtils.isEmpty(content)) { return false; } Pattern pattern = Pattern.compile("(@" + NimUIKit.getAccount() + " )"); Matcher matcher = pattern.matcher(content); return matcher.find(); } public static boolean hasAitExtention(RecentContact recentContact) { if (recentContact == null || recentContact.getSessionType() != SessionTypeEnum.Team) { return false; } Map<String, Object> ext = recentContact.getExtension(); if (ext == null) { return false; } List<String> mid = (List<String>) ext.get(KEY_AIT); return mid != null && !mid.isEmpty(); } public static void clearRecentContactAited(RecentContact recentContact) { if (recentContact == null || recentContact.getSessionType() != SessionTypeEnum.Team) { return; } Map<String, Object> exts = recentContact.getExtension(); if (exts != null) { exts.put(KEY_AIT, null); } recentContact.setExtension(exts); NIMClient.getService(MsgService.class).updateRecent(recentContact); } public static void buildAitExtentionByMessage(Map<String, Object> extention, IMMessage message) { if (extention == null || message == null || message.getSessionType() != SessionTypeEnum.Team) { return; } List<String> mid = (List<String>) extention.get(KEY_AIT); if (mid == null) { mid = new ArrayList<>(); } if (!mid.contains(message.getUuid())) { mid.add(message.getUuid()); } extention.put(KEY_AIT, mid); } public static void setRecentContactAited(RecentContact recentContact, Set<IMMessage> messages) { if (recentContact == null || messages == null || recentContact.getSessionType() != SessionTypeEnum.Team) { return; } Map<String, Object> extention = recentContact.getExtension(); if (extention == null) { extention = new HashMap<>(); } Iterator<IMMessage> iterator = messages.iterator(); while (iterator.hasNext()) { IMMessage msg = iterator.next(); buildAitExtentionByMessage(extention, msg); } recentContact.setExtension(extention); NIMClient.getService(MsgService.class).updateRecent(recentContact); } public static ImageSpan getInputAitSpan(String name, float textsize) { if (TextUtils.isEmpty(name)) { return null; } Paint paint = new Paint(); paint.setColor(Color.BLACK); paint.setAntiAlias(true); paint.setTextSize(textsize); Rect rect = new Rect(); paint.getTextBounds(name, 0, name.length(), rect); // 获取字符串在屏幕上的长度 int width = (int) (paint.measureText(name)); final Bitmap bmp = Bitmap.createBitmap(width, rect.height(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bmp); canvas.drawText(name, rect.left, rect.height() - rect.bottom, paint); return new ImageSpan(NimUIKit.getContext(), bmp, ImageSpan.ALIGN_BOTTOM); } // 群昵称 > 用户昵称 > 账号 public static String getAitName(TeamMember member) { if (member == null) { return ""; } String memberNick = member.getTeamNick(); if (!TextUtils.isEmpty(memberNick)) { return memberNick; } return NimUserInfoCache.getInstance().getUserName(member.getAccount()); } }