package bf.io.openshop.ux.adapters;
import android.content.Context;
import android.os.Handler;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
import bf.io.openshop.R;
import bf.io.openshop.entities.Banner;
import bf.io.openshop.interfaces.BannersRecyclerInterface;
import bf.io.openshop.listeners.OnSingleClickListener;
import bf.io.openshop.views.ResizableImageView;
import timber.log.Timber;
/**
* Adapter handling list of banner items.
*/
public class BannersRecyclerAdapter extends RecyclerView.Adapter<BannersRecyclerAdapter.ViewHolder> {
private final BannersRecyclerInterface bannersRecyclerInterface;
private final Context context;
private LayoutInflater layoutInflater;
private List<Banner> banners = new ArrayList<>();
/**
* Creates an adapter that handles a list of banner items.
*
* @param context activity context.
* @param bannersRecyclerInterface listener indicating events that occurred.
*/
public BannersRecyclerAdapter(Context context, BannersRecyclerInterface bannersRecyclerInterface) {
this.context = context;
this.bannersRecyclerInterface = bannersRecyclerInterface;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (layoutInflater == null)
layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.list_item_banners, parent, false);
return new ViewHolder(view, bannersRecyclerInterface);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Banner banner = getBannerItem(position);
holder.bindContent(banner);
Picasso.with(context).load(banner.getImageUrl())
.placeholder(R.drawable.placeholder_loading)
.fit().centerInside()
.into(holder.bannerImage);
}
private Banner getBannerItem(int position) {
return banners.get(position);
}
@Override
public int getItemCount() {
return banners.size();
}
public void addBanners(List<Banner> bannerList) {
if (bannerList != null && !bannerList.isEmpty()) {
banners.addAll(bannerList);
notifyDataSetChanged();
} else {
Timber.e("Adding empty banner list.");
}
}
/**
* Clear all data.
*/
public void clear() {
banners.clear();
}
/**
* Check if some banners exist.
*
* @return true if content is empty.
*/
public boolean isEmpty() {
return banners == null || banners.isEmpty();
}
// Provide a reference to the views for each data item
public static class ViewHolder extends RecyclerView.ViewHolder {
public ResizableImageView bannerImage;
private Banner banner;
public ViewHolder(View itemView, final BannersRecyclerInterface bannersRecyclerInterface) {
super(itemView);
bannerImage = (ResizableImageView) itemView.findViewById(R.id.banner_image);
itemView.setOnClickListener(new OnSingleClickListener() {
@Override
public void onSingleClick(final View view) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
bannersRecyclerInterface.onBannerSelected(banner);
}
}, 200);
}
});
}
public void bindContent(Banner banner) {
this.banner = banner;
}
}
}