/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package saulmm.avengers.views.adapter; import android.content.Context; import android.graphics.drawable.ColorDrawable; 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 butterknife.Bind; import butterknife.BindColor; import butterknife.ButterKnife; import com.bumptech.glide.Glide; import java.util.List; import saulmm.avengers.R; import saulmm.avengers.entities.MarvelCharacter; import saulmm.avengers.utils.Utils; import saulmm.avengers.views.RecyclerClickListener; public class AvengersListAdapter extends RecyclerView.Adapter<AvengersListAdapter.CharacterViewHolder> { private final String NOT_AVAILABLE_URL = "http://i.annihil.us/u/prod/marvel/i/mg/b/40/image_not_available.jpg"; private final RecyclerClickListener mRecyclerListener; private final List<MarvelCharacter> mCharacters; private Context mContext; public AvengersListAdapter(List<MarvelCharacter> avengers, Context context, RecyclerClickListener recyclerClickListener) { mCharacters = avengers; mContext = context; mRecyclerListener = recyclerClickListener; } @Override public CharacterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View rootView = LayoutInflater.from(mContext).inflate( R.layout.item_character, parent, false); return new CharacterViewHolder(rootView, mRecyclerListener); } @Override public void onBindViewHolder(CharacterViewHolder holder, int position) { holder.bindAvenger(mCharacters.get(position)); } @Override public int getItemCount() { return mCharacters.size(); } public class CharacterViewHolder extends RecyclerView.ViewHolder { @Bind(R.id.item_avenger_title) TextView avengerTitleTextView; @Bind(R.id.item_avenger_thumb) ImageView avengerThumbImageView; @Bind(R.id.item_avenger_placeholder_name) TextView avengerPlaceholderTitleTextView; @BindColor(R.color.brand_primary) int mColorPrimary; public CharacterViewHolder(View itemView, final RecyclerClickListener recyclerClickListener) { super(itemView); ButterKnife.bind(this, itemView); bindListener(itemView, recyclerClickListener); } public void bindAvenger(MarvelCharacter character) { avengerTitleTextView.setText(character.getName()); avengerTitleTextView.setTransitionName(Utils.getListTransitionName(getPosition())); if (character.getImageUrl().equals(NOT_AVAILABLE_URL)) { ColorDrawable colorDrawable = new ColorDrawable(mColorPrimary); avengerThumbImageView.setDrawingCacheEnabled(true); avengerThumbImageView.setImageDrawable(colorDrawable); } else { Glide.with(mContext) .load(character.getImageUrl()) .crossFade() .into(avengerThumbImageView); } } private void bindListener(View itemView, final RecyclerClickListener recyclerClickListener) { itemView.setOnClickListener(v -> recyclerClickListener.onElementClick(getPosition(), avengerTitleTextView, avengerThumbImageView)); } } }