package im.actor.sdk.controllers.contacts; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; import android.widget.FrameLayout; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import im.actor.core.entity.PhoneBookContact; import im.actor.core.entity.PhoneBookIds; import im.actor.runtime.android.AndroidContext; import im.actor.runtime.android.view.BindedListAdapter; import im.actor.runtime.bser.Bser; import im.actor.runtime.generic.mvvm.BindedDisplayList; import im.actor.sdk.view.adapters.HolderAdapter; import im.actor.sdk.view.adapters.OnItemClickedListener; import im.actor.sdk.view.adapters.RecyclerListView; import im.actor.sdk.view.adapters.ViewHolder; import static im.actor.sdk.util.ActorSDKMessenger.messenger; public class InviteAdapter extends HolderAdapter<PhoneBookContact> { List<PhoneBookContact> phoneBook; Context context; private final HashSet<PhoneBookContact> selectedUsers = new HashSet<PhoneBookContact>(); private final HashMap<PhoneBookContact, Integer> selectedContactType = new HashMap<PhoneBookContact, Integer>(); private final OnItemClickedListener<PhoneBookContact> onItemClickedListener; public InviteAdapter(Context context, List<PhoneBookContact> phoneBook, OnItemClickedListener<PhoneBookContact> onItemClickedListener) { super(context); this.phoneBook = phoneBook; selectedUsers.addAll(phoneBook); this.context = context; this.onItemClickedListener = onItemClickedListener; } @Override protected void onBindViewHolder(ViewHolder<PhoneBookContact> holder, PhoneBookContact obj, int index, Context context) { PhoneBookContact item = phoneBook.get(index); String fastName = null; if (index == 0) { fastName = messenger().getFormatter().formatFastName(item.getName()); } else { String prevName = messenger().getFormatter().formatFastName(phoneBook.get(index - 1).getName()); String currentFastName = messenger().getFormatter().formatFastName(item.getName()); if (!prevName.equals(currentFastName)) { fastName = currentFastName; } } Integer type = selectedContactType.get(item); ((InviteContactHolder) holder).bind(item, fastName, "", selectedUsers.contains(item), type == null ? -1 : type, index == getCount() - 1); } public void select(PhoneBookContact contact, int type) { selectedUsers.add(contact); selectedContactType.put(contact, type); } public void unselect(PhoneBookContact uid) { selectedUsers.remove(uid); } public PhoneBookContact[] getSelected() { return selectedUsers.toArray(new PhoneBookContact[selectedUsers.size()]); } public HashMap<PhoneBookContact, Integer> getSelectedContactsTypes() { return selectedContactType; } public boolean isSelected(PhoneBookContact id) { return selectedUsers.contains(id); } @Override public int getCount() { return phoneBook.size(); } @Override public PhoneBookContact getItem(int position) { return phoneBook.get(position); } @Override public long getItemId(int position) { return phoneBook.get(position).getContactId(); } @Override protected ViewHolder<PhoneBookContact> createHolder(PhoneBookContact obj) { return new InviteContactHolder(new FrameLayout(context), context, onItemClickedListener); } public void selectNone() { selectedContactType.clear(); selectedUsers.clear(); notifyDataSetChanged(); } public void selectAll() { selectedUsers.addAll(phoneBook); notifyDataSetChanged(); } }