package im.actor.sdk.controllers.settings; import android.app.Activity; import android.support.v7.widget.RecyclerView; 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.User; 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 static im.actor.sdk.util.ActorSDKMessenger.users; public class BlockedAdapter extends RecyclerView.Adapter<BlockedAdapter.BlockedUserHolder> { List<User> blockedList; OnBlockedClickListener onBlockedClickListener; public BlockedAdapter(List<User> blockedList, OnBlockedClickListener onBlockedClickListener) { this.blockedList = blockedList; this.onBlockedClickListener = onBlockedClickListener; } @Override public BlockedUserHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new BlockedUserHolder(((Activity) parent.getContext()).getLayoutInflater().inflate(R.layout.fragment_blocked_item, parent, false)); } @Override public void onBindViewHolder(BlockedUserHolder holder, int position) { holder.bind(blockedList.get(position), position); } @Override public int getItemCount() { return blockedList.size(); } public void setBlockedList(List<User> newBlockedList) { List<User> blockedSearch = new ArrayList<User>(blockedList); for (int i = blockedSearch.size() - 1; i >= 0; i--) { User ou = blockedSearch.get(i); boolean contains = false; for (User u : newBlockedList) { if (u.getUid() == ou.getUid()) { contains = true; break; } } if (!contains) { blockedList.remove(ou); notifyItemRemoved(i); } } blockedSearch = new ArrayList<User>(blockedList); for (User u : newBlockedList) { boolean contains = false; for (User uo : blockedSearch) { if (u.getUid() == uo.getUid()) { contains = true; break; } } if (!contains) { blockedList.add(u); notifyItemInserted(getItemCount()); } } } public class BlockedUserHolder extends RecyclerView.ViewHolder { private TextView userName; private TextView unblock; private AvatarView avatarView; private UserVM user; private View divider; private View footer; public BlockedUserHolder(View res) { super(res); res.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor()); userName = (TextView) res.findViewById(R.id.name); avatarView = (AvatarView) res.findViewById(R.id.avatar); avatarView.init(Screen.dp(42), 22); unblock = (TextView) res.findViewById(R.id.unblock); unblock.setTextColor(ActorSDK.sharedActor().style.getListActionColor()); ((TextView) res.findViewById(R.id.name)).setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor()); divider = res.findViewById(R.id.divider); divider.setBackgroundColor(ActorSDK.sharedActor().style.getDividerColor()); footer = res.findViewById(R.id.footer); footer.setBackgroundColor(ActorSDK.sharedActor().style.getBackyardBackgroundColor()); res.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBlockedClickListener.onClick(user); } }); } public void bind(User data, int position) { user = users().get(data.getUid()); ActorSDK.sharedActor().getMessenger().onUserVisible(data.getUid()); avatarView.bind(user); userName.setText(user.getName().get()); divider.setVisibility(position == getItemCount() - 1 ? View.INVISIBLE : View.VISIBLE); footer.setVisibility(!(position == getItemCount() - 1) ? View.GONE : View.VISIBLE); } public void unbind() { avatarView.unbind(); } } @Override public void onViewRecycled(BlockedUserHolder holder) { holder.unbind(); } public interface OnBlockedClickListener { void onClick(UserVM u); } }