package com.quickblox.sample.groupchatwebrtc.adapters; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ProgressBar; import android.widget.TextView; import com.quickblox.sample.groupchatwebrtc.R; import com.quickblox.sample.groupchatwebrtc.utils.QBRTCSessionUtils; import com.quickblox.users.model.QBUser; import com.quickblox.videochat.webrtc.QBRTCSession; import com.quickblox.videochat.webrtc.QBRTCTypes; import com.quickblox.videochat.webrtc.view.QBRTCSurfaceView; import java.util.List; /** * QuickBlox team */ public class OpponentsFromCallAdapter extends RecyclerView.Adapter<OpponentsFromCallAdapter.ViewHolder> { private static final String TAG = OpponentsFromCallAdapter.class.getSimpleName(); private final int itemHeight; private final int itemWidth; private Context context; private QBRTCSession session; private List<QBUser> opponents; private LayoutInflater inflater; private OnAdapterEventListener adapterListener; public OpponentsFromCallAdapter(Context context, QBRTCSession session, List<QBUser> users, int width, int height) { this.context = context; this.session = session; this.opponents = users; this.inflater = LayoutInflater.from(context); itemWidth = width; itemHeight = height; Log.d(TAG, "item width=" + itemWidth + ", item height=" + itemHeight); } public void setAdapterListener(OnAdapterEventListener adapterListener) { this.adapterListener = adapterListener; } @Override public int getItemCount() { return opponents.size(); } public Integer getItem(int position) { return opponents.get(position).getId(); } public List<QBUser> getOpponents() { return opponents; } public void removeItem(int index) { opponents.remove(index); notifyItemRemoved(index); notifyItemRangeChanged(index, opponents.size()); } public void replaceUsers(int position, QBUser qbUser) { opponents.set(position, qbUser); notifyItemChanged(position); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = inflater.inflate(R.layout.list_item_opponent_from_call, null); v.findViewById(R.id.innerLayout).setLayoutParams(new FrameLayout.LayoutParams(itemWidth, itemHeight)); ViewHolder vh = new ViewHolder(v); vh.setListener(new ViewHolder.ViewHolderClickListener() { @Override public void onShowOpponent(int callerId) { adapterListener.onItemClick(callerId); } }); vh.showOpponentView(true); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { final QBUser user = opponents.get(position); int userID = user.getId(); holder.opponentsName.setText(user.getFullName()); holder.getOpponentView().setId(user.getId()); holder.setUserId(userID); QBRTCTypes.QBRTCConnectionState state = session.getPeerChannel(userID).getState(); Log.d(TAG, "state ordinal= " + state.ordinal()); holder.setStatus(context.getResources().getString(QBRTCSessionUtils.getStatusDescriptionResource(state))); if (position == (opponents.size() - 1)) { adapterListener.OnBindLastViewHolder(holder, position); } } @Override public long getItemId(int position) { return position; } public interface OnAdapterEventListener { void OnBindLastViewHolder(ViewHolder holder, int position); void onItemClick(int position); } public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener { TextView opponentsName; TextView connectionStatus; QBRTCSurfaceView opponentView; ProgressBar progressBar; private int userId; private ViewHolderClickListener viewHolderClickListener; public ViewHolder(View itemView) { super(itemView); itemView.setOnClickListener(this); opponentsName = (TextView) itemView.findViewById(R.id.opponentName); connectionStatus = (TextView) itemView.findViewById(R.id.connectionStatus); opponentView = (QBRTCSurfaceView) itemView.findViewById(R.id.opponentView); progressBar = (ProgressBar) itemView.findViewById(R.id.progress_bar_adapter); } private void setListener(ViewHolderClickListener viewHolderClickListener) { this.viewHolderClickListener = viewHolderClickListener; } public void setStatus(String status) { connectionStatus.setText(status); } public void setUserName(String userName){ opponentsName.setText(userName); } public void setUserId(int userId) { this.userId = userId; } public int getUserId() { return userId; } public ProgressBar getProgressBar() { return progressBar; } public QBRTCSurfaceView getOpponentView() { return opponentView; } public void showOpponentView(boolean show) { Log.d("OpponentsAdapter", "show? " + show); opponentView.setVisibility(show ? View.VISIBLE : View.GONE); } @Override public void onClick(View v) { viewHolderClickListener.onShowOpponent(getAdapterPosition()); } public interface ViewHolderClickListener { void onShowOpponent(int callerId); } } }