package im.actor.sdk.controllers.contacts.view;
import android.content.Context;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import java.util.HashSet;
import im.actor.core.entity.Contact;
import im.actor.runtime.generic.mvvm.BindedDisplayList;
import im.actor.sdk.view.adapters.OnItemClickedListener;
import im.actor.runtime.android.view.BindedListAdapter;
import static im.actor.sdk.util.ActorSDKMessenger.messenger;
public class ContactsAdapter extends BindedListAdapter<Contact, ContactHolder> {
private final HashSet<Integer> selectedUsers = new HashSet<Integer>();
private final OnItemClickedListener<Contact> onItemClickedListener;
private boolean selectable;
private final Context context;
private String query = "";
public ContactsAdapter(BindedDisplayList<Contact> displayList, Context context, boolean selectable,
OnItemClickedListener<Contact> onItemClickedListener) {
super(displayList);
this.context = context;
this.selectable = selectable;
this.onItemClickedListener = onItemClickedListener;
}
public void setQuery(String query) {
this.query = query;
notifyDataSetChanged();
}
public void select(int uid) {
selectedUsers.add(uid);
}
public void unselect(int uid) {
selectedUsers.remove(uid);
}
public Integer[] getSelected() {
return selectedUsers.toArray(new Integer[selectedUsers.size()]);
}
public boolean isSelected(int uid) {
return selectedUsers.contains(uid);
}
public int getSelectedCount() {
return selectedUsers.size();
}
@Override
public void onBindViewHolder(ContactHolder contactHolder, int index, Contact item) {
String fastName = null;
if (index == 0) {
fastName = messenger().getFormatter().formatFastName(item.getName());
} else {
String prevName = messenger().getFormatter().formatFastName(getItem(index - 1).getName());
String currentFastName = messenger().getFormatter().formatFastName(item.getName());
if (!prevName.equals(currentFastName)) {
fastName = currentFastName;
}
}
contactHolder.bind(item, fastName, query, selectedUsers.contains(item.getUid()), index == getItemCount() - 1);
}
@Override
public ContactHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
return new ContactHolder(new FrameLayout(context), selectable, context, onItemClickedListener);
}
}