package pro.dbro.ble.ui.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import im.delight.android.identicons.SymmetricIdenticon;
import pro.dbro.ble.R;
import pro.dbro.ble.data.DataStore;
import pro.dbro.ble.data.model.Message;
import pro.dbro.ble.data.model.Peer;
/**
* Created by davidbrodsky on 10/12/14.
*/
public class PeerAdapter extends RecyclerView.Adapter<PeerAdapter.ViewHolder> {
private Context mContext;
private ArrayList<Peer> mPeers;
// Provide a reference to the type of views that you are using
// (custom viewholder)
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
SymmetricIdenticon mIdenticon;
public ViewHolder(View v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.username);
mIdenticon = (SymmetricIdenticon) v.findViewById(R.id.identicon);
}
}
// Provide a suitable constructor (depends on the kind of dataset)
public PeerAdapter(Context context, ArrayList<Peer> peers) {
mPeers = peers;
mContext = context;
}
// Create new views (invoked by the layout manager)
@Override
public PeerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.peer_item, parent, false);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
Peer peer = mPeers.get(position);
holder.mTextView.setText(peer.getAlias());
holder.mIdenticon.show(new String(peer.getPublicKey()));
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mPeers.size();
}
public void notifyPeerAdded(Peer peer) {
mPeers.add(peer);
notifyItemInserted(mPeers.size()-1);
}
public void notifyPeerRemoved(Peer peer) {
int idx = mPeers.indexOf(peer);
if (idx != -1) {
mPeers.remove(idx);
notifyItemRemoved(idx);
}
}
public void clearPeers() {
mPeers.clear();
notifyDataSetChanged();
}
public void notifyMessageReceived(DataStore manager, Message message) {
Peer peer = message.getSender(manager);
if (peer != null) {
int oldIdx = mPeers.indexOf(peer);
if (oldIdx != -1 ) {
mPeers.remove(peer);
mPeers.add(0, peer);
notifyItemMoved(oldIdx, 0);
}
}
}
}