package com.ov3rk1ll.kinocast.ui.helper.layout; import android.content.Context; import android.graphics.Bitmap; import android.support.v7.graphics.Palette; 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.ProgressBar; import android.widget.RatingBar; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import com.ov3rk1ll.kinocast.R; import com.ov3rk1ll.kinocast.data.ViewModel; import com.ov3rk1ll.kinocast.ui.helper.PaletteManager; import com.ov3rk1ll.kinocast.ui.util.glide.OkHttpViewModelUrlLoader; import com.ov3rk1ll.kinocast.ui.util.glide.ViewModelGlideRequest; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class ResultRecyclerAdapter extends RecyclerView.Adapter<ResultRecyclerAdapter.ViewHolder> implements View.OnClickListener { private Context context; private List<ViewModel> items; private OnRecyclerViewItemClickListener<ViewModel> itemClickListener; private int itemLayout; public ResultRecyclerAdapter(Context context, int itemLayout) { this.context = context; this.items = new ArrayList<>(); this.itemLayout = itemLayout; Glide.get(context) .register(ViewModelGlideRequest.class, InputStream.class, new OkHttpViewModelUrlLoader.Factory()); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false); v.setOnClickListener(this); return new ViewHolder(v); } @Override public void onBindViewHolder(final ViewHolder holder, int position) { final ViewModel item = items.get(position); holder.itemView.setTag(item); holder.title.setText(item.getTitle()); holder.rating.setRating(item.getRating() / 2.0f); holder.detail.setText(item.getGenre()); holder.language.setImageResource(item.getLanguageResId()); int px = holder.image.getContext().getResources().getDimensionPixelSize(R.dimen.list_item_width); Glide.with(context) .load(new ViewModelGlideRequest(item, px, "poster")) .placeholder(R.drawable.ic_loading_placeholder) .listener(new RequestListener<ViewModelGlideRequest, GlideDrawable>() { @Override public boolean onException(Exception e, ViewModelGlideRequest model, Target<GlideDrawable> target, boolean isFirstResource) { return false; } @Override public boolean onResourceReady(GlideDrawable resource, ViewModelGlideRequest model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { holder.updatePalette(((GlideBitmapDrawable) resource.getCurrent()).getBitmap()); holder.image.setVisibility(View.VISIBLE); holder.progressBar.setVisibility(View.GONE); return false; } }) .into(holder.image); holder.image.setVisibility(View.VISIBLE); /*holder.image.setImageItem(item.getImageRequest(px, "poster"), R.drawable.ic_loading_placeholder, new SmartImageTask.OnCompleteListener() { @Override public void onComplete() { holder.updatePalette(); holder.image.setVisibility(View.VISIBLE); holder.progressBar.setVisibility(View.GONE); } });*/ if(position == 1){ holder.itemView.setSelected(true); } } @Override public int getItemCount() { return items.size(); } @Override public void onClick(View view) { if (itemClickListener != null) { ViewModel model = (ViewModel) view.getTag(); itemClickListener.onItemClick(view, model); } } public void add(ViewModel item, int position) { items.add(position, item); notifyItemInserted(position); } public void remove(ViewModel item) { int position = items.indexOf(item); items.remove(position); notifyItemRemoved(position); } public void setOnItemClickListener(OnRecyclerViewItemClickListener<ViewModel> listener) { this.itemClickListener = listener; } private static int setColorAlpha(int color, int alpha) { return (alpha << 24) | (color & 0x00ffffff); } public ViewModel[] getItems() { return items.toArray(new ViewModel[items.size()]); } static class ViewHolder extends RecyclerView.ViewHolder { private View background; public ImageView image; public TextView title; public ImageView language; RatingBar rating; TextView detail; ProgressBar progressBar; ViewHolder(View itemView) { super(itemView); background = itemView.findViewById(R.id.layoutInfo); image = (ImageView) itemView.findViewById(R.id.image); title = (TextView) itemView.findViewById(R.id.title); language = (ImageView) itemView.findViewById(R.id.language); rating = (RatingBar) itemView.findViewById(R.id.rating); detail = (TextView) itemView.findViewById(R.id.detail); progressBar = (ProgressBar) itemView.findViewById(R.id.progressBar); image.setVisibility(View.GONE); } void updatePalette(Bitmap bitmap) { final String key = ((ViewModel)itemView.getTag()).getSlug(); PaletteManager.getInstance().getPalette(key, bitmap, new PaletteManager.Callback() { @Override public void onPaletteReady(Palette palette) { Palette.Swatch swatch = palette.getDarkVibrantSwatch(); if(swatch != null) { background.setBackgroundColor(setColorAlpha(swatch.getRgb(), 192)); title.setTextColor(swatch.getTitleTextColor()); detail.setTextColor(swatch.getBodyTextColor()); } } }); } } public interface OnRecyclerViewItemClickListener<Model> { void onItemClick(View view, Model model); } }