package io.github.xwz.base.views;
import android.content.Context;
import android.graphics.PointF;
import android.os.Handler;
import android.support.v17.leanback.widget.Presenter;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Transformation;
import io.github.xwz.base.R;
import io.github.xwz.base.api.EpisodeBaseModel;
import jp.wasabeef.picasso.transformations.gpu.VignetteFilterTransformation;
public class EpisodeDetailsView extends Presenter.ViewHolder {
private final Context mContext;
private static final int LOADER_DELAY_MS = 200;
private final TextView episodeTitle;
private final TextView seriesTitle;
private final TextView description;
private final TextView duration;
private final ImageView image;
private final Transformation transformation;
private final Handler handler = new Handler();
private final EpisodeLoader loader;
public EpisodeDetailsView(Context context, View view) {
super(view);
mContext = context;
episodeTitle = (TextView) view.findViewById(R.id.episode_title);
seriesTitle = (TextView) view.findViewById(R.id.series_title);
description = (TextView) view.findViewById(R.id.description);
duration = (TextView) view.findViewById(R.id.duration);
image = (ImageView) view.findViewById(R.id.image);
transformation = new VignetteFilterTransformation(mContext,
new PointF(0.65f, 0.5f), new float[]{0.0f, 0.0f, 0.0f}, 0.2f, 0.85f);
loader = new EpisodeLoader();
}
public void setEpisode(EpisodeBaseModel episode) {
episodeTitle.setText(episode.getTitle());
seriesTitle.setText(episode.getSeriesTitle());
duration.setText(episode.getDurationText());
if (sameTitles(episode.getSeriesTitle(), episode.getTitle())) {
seriesTitle.setText("");
}
// load more expensive details after some delay
loadEpisodeDetails(episode);
if (episode.getDescription() != null && episode.getDescription().length() > 0) {
description.setText(episode.getDescription());
} else {
description.setText("");
}
}
private boolean sameTitles(String a, String b) {
if (a != null && b != null) {
return a.toLowerCase().equals(b.toLowerCase());
}
return false;
}
public void updateEpisode(EpisodeBaseModel episode) {
description.setText(episode.getDescription());
}
private void loadEpisodeDetails(EpisodeBaseModel episode) {
loader.setEpisode(episode);
handler.removeCallbacks(loader);
handler.postDelayed(loader, LOADER_DELAY_MS);
}
private class EpisodeLoader implements Runnable {
private EpisodeBaseModel episode;
public void setEpisode(EpisodeBaseModel ep) {
episode = ep;
}
@Override
public void run() {
Picasso.with(mContext)
.load(episode.getThumbnail())
.fit()
.centerCrop()
.transform(transformation)
.into(image);
}
}
}