package com.boardgamegeek.ui.widget;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.boardgamegeek.R;
import com.boardgamegeek.model.Constants;
import com.boardgamegeek.ui.GameCollectionActivity;
import com.boardgamegeek.util.ActivityUtils;
import com.boardgamegeek.util.ColorUtils;
import com.boardgamegeek.util.HttpUtils;
import com.boardgamegeek.util.PresentationUtils;
import com.boardgamegeek.util.StringUtils;
import com.squareup.picasso.Picasso;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class GameCollectionRow extends LinearLayout {
@BindView(R.id.thumbnail) ImageView thumbnailView;
@BindView(R.id.status) TextView statusView;
@BindView(R.id.description) TextView descriptionView;
@BindView(R.id.comment) TextView commentView;
@BindView(R.id.rating) TextView ratingView;
private long internalId;
private int gameId;
private String gameName;
private String collectionName;
private int collectionId;
private int yearPublished;
private String imageUrl;
public GameCollectionRow(Context context) {
super(context);
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
setBackgroundResource(obtainBackgroundResId(context));
setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
setGravity(Gravity.CENTER_VERTICAL);
setMinimumHeight(getResources().getDimensionPixelSize(R.dimen.edit_row_height));
setOrientation(HORIZONTAL);
int padding = getResources().getDimensionPixelSize(R.dimen.padding_half);
setPadding(0, padding, 0, padding);
LayoutInflater.from(context).inflate(R.layout.widget_collection_row, this, true);
ButterKnife.bind(this);
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getContext(), GameCollectionActivity.class);
intent.putExtra(ActivityUtils.KEY_INTERNAL_ID, internalId);
intent.putExtra(ActivityUtils.KEY_GAME_ID, gameId);
intent.putExtra(ActivityUtils.KEY_GAME_NAME, gameName);
intent.putExtra(ActivityUtils.KEY_COLLECTION_ID, collectionId);
intent.putExtra(ActivityUtils.KEY_COLLECTION_NAME, collectionName);
intent.putExtra(ActivityUtils.KEY_IMAGE_URL, imageUrl);
getContext().startActivity(intent);
}
});
}
private static int obtainBackgroundResId(Context context) {
int backgroundResId = 0;
TypedArray a = context.obtainStyledAttributes(new int[] { android.R.attr.selectableItemBackground });
try {
backgroundResId = a != null ? a.getResourceId(0, backgroundResId) : 0;
} finally {
if (a != null) {
a.recycle();
}
}
return backgroundResId;
}
public void bind(long internalId, int gameId, String gameName, int collectionId, int yearPublished, String imageUrl) {
this.internalId = internalId;
this.gameId = gameId;
this.gameName = gameName;
this.collectionId = collectionId;
this.yearPublished = yearPublished;
this.imageUrl = imageUrl;
}
public void setStatus(@NonNull List<String> statuses, int playCount, double rating, String comment) {
if (statuses.size() == 0) {
if (playCount > 0) {
statuses.add(getContext().getString(R.string.played));
} else {
if (rating > 0.0) {
statuses.add(getContext().getString(R.string.rated));
}
if (!TextUtils.isEmpty(comment)) {
statuses.add(getContext().getString(R.string.commented));
}
}
}
String description = StringUtils.formatList(statuses);
if (TextUtils.isEmpty(description)) {
statusView.setVisibility(View.GONE);
} else {
statusView.setText(description);
statusView.setVisibility(View.VISIBLE);
}
}
public void setDescription(String name, int yearPublished) {
collectionName = name;
if ((!TextUtils.isEmpty(name) && !name.equals(gameName)) ||
(yearPublished != Constants.YEAR_UNKNOWN && yearPublished != this.yearPublished)) {
String description;
if (yearPublished == Constants.YEAR_UNKNOWN) {
description = name;
} else {
description = name + " (" + PresentationUtils.describeYear(getContext(), yearPublished) + ")";
}
descriptionView.setText(description);
descriptionView.setVisibility(View.VISIBLE);
} else {
descriptionView.setVisibility(View.GONE);
}
}
public void setComment(String comment) {
if (TextUtils.isEmpty(comment)) {
commentView.setVisibility(View.GONE);
} else {
commentView.setText(comment);
commentView.setVisibility(View.VISIBLE);
}
}
public void setRating(double rating) {
if (rating == 0.0) {
ratingView.setVisibility(View.GONE);
} else {
ratingView.setText(PresentationUtils.describePersonalRating(getContext(), rating));
ColorUtils.setViewBackground(ratingView, ColorUtils.getRatingColor(rating));
ratingView.setVisibility(View.VISIBLE);
}
}
public void setThumbnail(String thumbnailUrl) {
Picasso.with(getContext())
.load(HttpUtils.ensureScheme(thumbnailUrl))
.placeholder(R.drawable.thumbnail_image_empty)
.error(R.drawable.thumbnail_image_empty)
.resizeDimen(R.dimen.thumbnail_list_size_small, R.dimen.thumbnail_list_size)
.centerCrop()
.into(thumbnailView);
}
}