package com.mvc.kinballwc.ui.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
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.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.mvc.kinballwc.R;
import com.mvc.kinballwc.model.Player;
import com.mvc.kinballwc.model.Role;
import com.mvc.kinballwc.model.Team;
import com.mvc.kinballwc.ui.activity.TeamActivity;
import com.mvc.kinballwc.utils.Utils;
import java.util.List;
/**
* Author: Mario Velasco Casquero
* Date: 04/08/2015
* Email: m3ario@gmail.com
*/
public class PlayerRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final String TAG = "PlayerRecyclerAdapter";
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private TeamActivity activity;
private List<Player> mPlayers;
private Team mTeam;
public PlayerRecyclerAdapter(TeamActivity activity, List<Player> players, Team team) {
this.activity = activity;
this.mPlayers = players;
this.mTeam = team;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_player, parent, false);
return new VHItem(view);
} else if (viewType == TYPE_HEADER) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_team_header, parent, false);
return new VHHeader(view);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof VHItem) {
VHItem itemHolder = (VHItem) holder;
try {
final Player player = mPlayers.get(position - 1);
itemHolder.mName.setText(getCompleteName(player));
String rolesString = getRoleString(itemHolder.mRole.getContext(), player.getRoles());
itemHolder.mRole.setText(rolesString);
View.OnClickListener onClickListener =
activity.new ExpandOnClickListener(itemHolder.mImageView, player.getImage());
itemHolder.mView.setOnClickListener(onClickListener);
loadImage(itemHolder.mImageView, player.getImage());
} catch (Exception e) {
return;
}
} else if (holder instanceof VHHeader) {
VHHeader itemHolder = (VHHeader) holder;
if (mTeam != null) {
View.OnClickListener onClickListener =
activity.new ExpandOnClickListener(itemHolder.logoIV, mTeam.getLogo());
itemHolder.logoIV.setOnClickListener(onClickListener);
loadImage(itemHolder.logoIV, mTeam.getLogo());
itemHolder.teamNameTV.setText(mTeam.getName());
if (TextUtils.isEmpty(mTeam.getNations())) {
itemHolder.nationsTV.setVisibility(View.GONE);
} else {
itemHolder.nationsTV.setVisibility(View.VISIBLE);
itemHolder.nationsTV.setText(mTeam.getNations());
}
}
}
}
@Override
public int getItemCount() {
return mPlayers.size() + 1;
}
@Override
public int getItemViewType(int position) {
if (isPositionHeader(position))
return TYPE_HEADER;
return TYPE_ITEM;
}
private boolean isPositionHeader(int position) {
return position == 0;
}
private Player getItem(int position) {
return mPlayers.get(position - 1);
}
public void setPlayers(List<Player> players) {
this.mPlayers = players;
}
public void setTeam(Team team) {
this.mTeam = team;
}
class VHItem extends RecyclerView.ViewHolder {
public final View mView;
public final ImageView mImageView;
public final TextView mName;
public final TextView mRole;
public VHItem(View view) {
super(view);
mView = view;
mImageView = (ImageView) view.findViewById(R.id.playerImage);
mName = (TextView) view.findViewById(R.id.playerName);
mRole = (TextView) view.findViewById(R.id.playerRole);
}
}
class VHHeader extends RecyclerView.ViewHolder {
public final View view;
public final ImageView logoIV;
public final TextView teamNameTV;
public final TextView nationsTV;
public VHHeader(View view) {
super(view);
this.view = view;
this.logoIV = (ImageView) view.findViewById(R.id.teamLogoIV);
this.teamNameTV = (TextView) view.findViewById(R.id.teamNameTV);
this.nationsTV = (TextView) view.findViewById(R.id.nationsTV);
}
}
private void loadImage(final ImageView imageView, final String url) {
Glide.with(imageView.getContext())
.load(url)
.placeholder(R.drawable.placeholder)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.fitCenter()
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
Log.d(TAG, "Glide failed loading image " + url);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
imageView.setImageDrawable(resource);
return false;
}
})
.into(imageView);
}
public String getRoleString(Context context, List<Role> roles) {
StringBuilder rolesString = new StringBuilder();
if (roles != null) {
for (int i = 0; i < roles.size(); i++) {
if (i > 0) {
rolesString.append(" | ");
}
String roleName = Utils.getTranslatedRole(context, roles.get(i).getName());
rolesString.append(roleName);
}
}
return rolesString.toString();
}
public String getCompleteName(Player player) {
StringBuilder completeName = new StringBuilder();
if (player.getName() != null) {
completeName.append(player.getName());
}
// if (player.getSurname() != null) {
// completeName.append(" ");
// completeName.append(player.getSurname());
// }
return completeName.toString();
}
}