package com.netease.nim.uikit.contact.core.provider; import com.netease.nim.uikit.contact.core.model.IContact; import com.netease.nim.uikit.contact.core.provider.ContactSearch.HitInfo.Type; import com.netease.nim.uikit.contact.core.query.TextQuery; import com.netease.nim.uikit.contact.core.query.TextSearcher; import com.netease.nim.uikit.cache.TeamDataCache; import com.netease.nimlib.sdk.friend.model.Friend; import com.netease.nimlib.sdk.team.model.Team; import com.netease.nimlib.sdk.team.model.TeamMember; import com.netease.nimlib.sdk.uinfo.UserInfoProvider; public class ContactSearch { public static final class HitInfo { public enum Type { Account, Name, } public final Type type; public final String text; public final int[] range; public HitInfo(Type type, String text, int[] range) { this.type = type; this.text = text; this.range = range; } } /** * 判断是否击中 */ public static final boolean hitUser(UserInfoProvider.UserInfo contact, TextQuery query) { String account = contact.getAccount(); String name = contact.getName(); return TextSearcher.contains(query.t9, name, query.text) || TextSearcher.contains(query.t9, account, query.text); } public static final boolean hitFriend(Friend friend, TextQuery query) { String account = friend.getAccount(); String alias = friend.getAlias(); return TextSearcher.contains(query.t9, account, query.text) || TextSearcher.contains(query.t9, alias, query.text); } public static final boolean hitTeam(Team contact, TextQuery query) { String name = contact.getName(); String teamId = contact.getId(); return TextSearcher.contains(query.t9, name, query.text) || TextSearcher.contains(query.t9, teamId, query.text); } public static final boolean hitTeamMember(TeamMember teamMember, TextQuery query) { String name = TeamDataCache.getInstance().getTeamMemberDisplayName(teamMember.getTid(), teamMember.getAccount()); return TextSearcher.contains(query.t9, name, query.text); } /** * 返回击中信息(可进行击中文本高亮显示) */ public static final HitInfo hitInfo(IContact contact, TextQuery query) { if (contact.getContactType() == IContact.Type.Friend) { return hitInfoFriend(contact, query); } else if (contact.getContactType() == IContact.Type.Team) { return hitInfoTeamContact(contact, query); } return hitInfoContact(contact, query); } public static final HitInfo hitInfoFriend(IContact contact, TextQuery query) { String name = contact.getDisplayName(); String account = contact.getContactId(); int[] range = TextSearcher.indexOf(query.t9, name, query.text); if (range != null) { return new HitInfo(Type.Name, name, range); } range = TextSearcher.indexOf(query.t9, account, query.text); if (range != null) { return new HitInfo(Type.Account, account, range); } return null; } public static final HitInfo hitInfoTeamContact(IContact contact, TextQuery query) { String name = contact.getDisplayName(); int[] range = TextSearcher.indexOf(query.t9, name, query.text); if (range != null) { return new HitInfo(Type.Name, name, range); } return null; } public static final HitInfo hitInfoContact(IContact contact, TextQuery query) { String name = contact.getDisplayName(); int[] range = TextSearcher.indexOf(query.t9, name, query.text); if (range != null) { return new HitInfo(Type.Name, name, range); } return null; } }