package mil.nga.giat.mage.people; import android.content.Context; import android.graphics.Bitmap; import android.support.v4.graphics.drawable.RoundedBitmapDrawable; import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.BitmapImageViewTarget; import com.google.common.base.Function; import com.google.common.collect.Collections2; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Collection; import java.util.List; import mil.nga.giat.mage.R; import mil.nga.giat.mage.sdk.datastore.user.EventHelper; import mil.nga.giat.mage.sdk.datastore.user.Team; import mil.nga.giat.mage.sdk.datastore.user.TeamHelper; import mil.nga.giat.mage.sdk.datastore.user.User; import mil.nga.giat.mage.sdk.datastore.user.UserLocal; /** * Created by wnewman on 8/26/16. */ public class PeopleRecyclerAdapter extends RecyclerView.Adapter<PeopleRecyclerAdapter.PersonViewHolder> { public interface OnPersonClickListener { void onPersonClick(User person); } private List<User> people = new ArrayList<>(); private Context context; private TeamHelper teamHelper; private Collection<Team> eventTeams; private OnPersonClickListener personClickListener; public PeopleRecyclerAdapter(Context context, List<User> people) { this.context = context; this.people = people; this.teamHelper = TeamHelper.getInstance(context); eventTeams = teamHelper.getTeamsByEvent(EventHelper.getInstance(context).getCurrentEvent()); } public void setOnPersonClickListener(OnPersonClickListener personClickListener) { this.personClickListener = personClickListener; } @Override public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_people_list_item, viewGroup, false); PersonViewHolder viewHolder = new PersonViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(final PersonViewHolder viewHolder, int i) { final User user = people.get(i); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (personClickListener != null) { personClickListener.onPersonClick(user); } } }); UserLocal userLocal = user.getUserLocal(); Glide.with(context) .load(userLocal.getLocalAvatarPath()) .asBitmap() .fallback(R.drawable.ic_person_gray_48dp) .centerCrop() .into(new BitmapImageViewTarget(viewHolder.avatar) { @Override protected void setResource(Bitmap resource) { RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource); circularBitmapDrawable.setCircular(true); viewHolder.avatar.setImageDrawable(circularBitmapDrawable); } }); Glide.with(context) .load(userLocal.getLocalIconPath()) .centerCrop() .into(viewHolder.icon); viewHolder.name.setText(user.getDisplayName()); Collection<Team> userTeams = teamHelper.getTeamsByUser(user); userTeams.retainAll(eventTeams); Collection<String> teamNames = Collections2.transform(userTeams, new Function<Team, String>() { @Override public String apply(Team team) { return team.getName(); } }); viewHolder.teams.setText(StringUtils.join(teamNames, ", ")); View.OnClickListener clickListener = new View.OnClickListener() { @Override public void onClick(View view) { if (personClickListener != null) { PersonViewHolder holder = (PersonViewHolder) view.getTag(); int position = holder.getLayoutPosition(); personClickListener.onPersonClick(people.get(position)); } } }; } @Override public int getItemCount() { return people.size(); } public class PersonViewHolder extends RecyclerView.ViewHolder { protected ImageView avatar; protected ImageView icon; protected TextView name; protected TextView teams; public PersonViewHolder(View view) { super(view); avatar = (ImageView) view.findViewById(R.id.avatarImageView); icon = (ImageView) view.findViewById(R.id.iconImageView); name = (TextView) view.findViewById(R.id.name); teams = (TextView) view.findViewById(R.id.teams); view.findViewById(R.id.date).setVisibility(View.GONE); } } }