package im.actor.sdk.controllers.conversation.mentions; import android.app.Activity; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import im.actor.core.entity.MentionFilterResult; import im.actor.core.viewmodel.UserVM; import im.actor.sdk.ActorSDK; import im.actor.sdk.R; import im.actor.sdk.util.Screen; import im.actor.sdk.view.avatar.AvatarView; import im.actor.sdk.view.adapters.HolderAdapter; import im.actor.sdk.view.SearchHighlight; import im.actor.sdk.view.adapters.ViewHolder; import static im.actor.sdk.util.ActorSDKMessenger.messenger; import static im.actor.sdk.util.ActorSDKMessenger.users; public class MentionsAdapter extends HolderAdapter<MentionFilterResult> { private int gid; private List<MentionFilterResult> membersToShow = new ArrayList<>(); private String query; private int highlightColor; public MentionsAdapter(int gid, Context context) { super(context); highlightColor = context.getResources().getColor(R.color.primary); this.gid = gid; } public void clearQuery() { query = null; membersToShow = new ArrayList<>(); notifyDataSetChanged(); } public void setQuery(String q) { if (q == null || q.equals(query)) { return; } query = q; membersToShow = messenger().findMentions(gid, q); notifyDataSetChanged(); } @Override public int getCount() { return membersToShow.size(); } @Override public MentionFilterResult getItem(int position) { return membersToShow.get(position); } @Override public long getItemId(int position) { return membersToShow.get(position).getUid(); } @Override protected ViewHolder<MentionFilterResult> createHolder(MentionFilterResult obj) { return new GroupViewHolder(); } private class GroupViewHolder extends ViewHolder<MentionFilterResult> { private MentionFilterResult data; private TextView userName; private TextView mentionHint; private AvatarView avatarView; @Override public View init(final MentionFilterResult data, ViewGroup viewGroup, Context context) { View res = ((Activity) context).getLayoutInflater().inflate(R.layout.fragment_chat_mention_item, viewGroup, false); res.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor()); res.findViewById(R.id.container).setBackgroundResource(R.drawable.selector); res.findViewById(R.id.divider).setBackgroundColor(ActorSDK.sharedActor().style.getDividerColor()); userName = (TextView) res.findViewById(R.id.name); userName.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor()); mentionHint = (TextView) res.findViewById(R.id.mentionHint); mentionHint.setTextColor(ActorSDK.sharedActor().style.getTextSecondaryColor()); avatarView = (AvatarView) res.findViewById(R.id.avatar); avatarView.init(Screen.dp(35), 16); this.data = data; return res; } @Override public void bind(MentionFilterResult data, int position, Context context) { UserVM user = users().get(data.getUid()); this.data = data; avatarView.bind(user); CharSequence name = data.getMentionString(); if (name != null && name.length() > 0 && data.getMentionMatches() != null) { name = SearchHighlight.highlightMentionsQuery((String) name, data.getMentionMatches(), highlightColor); } userName.setText(name); CharSequence hint = data.getOriginalString(); if (hint != null && hint.length() > 0 && data.getOriginalMatches() != null) { hint = SearchHighlight.highlightMentionsQuery((String) hint, data.getOriginalMatches(), highlightColor); } mentionHint.setText(hint); } @Override public void unbind(boolean full) { if (full) { avatarView.unbind(); } } } }