package com.byoutline.kickmaterial.utils;
import android.databinding.BindingAdapter;
import android.databinding.BindingConversion;
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorRes;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import com.byoutline.kickmaterial.adapters.CategoriesRecyclerViewAdapter;
import com.byoutline.kickmaterial.adapters.CategoryClickListener;
import com.byoutline.kickmaterial.model.Category;
import com.squareup.picasso.Picasso;
import me.tatarka.bindingcollectionadapter.BindingRecyclerViewAdapter;
import me.tatarka.bindingcollectionadapter.ItemViewArg;
import me.tatarka.bindingcollectionadapter.factories.BindingRecyclerViewAdapterFactory;
/**
* Class that binds methods to be used in layout xml files by data binding.
*
* @author Sebastian Kacprzak <sebastian.kacprzak at byoutline.com>
*/
public class BindingAdapters {
@BindingAdapter({"imageUrl", "error"})
public static void loadImage(ImageView view, String imageUrl, Drawable error) {
Picasso.with(view.getContext())
.load(imageUrl)
.error(error)
.into(view);
}
@BindingAdapter({"imageUrl"})
public static void loadImage(ImageView view, String imageUrl) {
Picasso.with(view.getContext())
.load(imageUrl)
.into(view);
}
@BindingAdapter({"colorFilterRes"})
public static void setColorFilter(ImageView view, @ColorRes int colorResId) {
int color = ContextCompat.getColor(view.getContext(), colorResId);
view.setColorFilter(color);
}
/**
* Allows to pass category to click listener.
*
* @param view passed automatically by data binding
* @param categoryClickListener listener to be informed about clicks
* @param category value passed to click listener
*/
@BindingAdapter({"onClick", "category"})
public static void bindOnCategoryClicked(View view, final CategoryClickListener categoryClickListener,
final Category category) {
view.setOnClickListener(v -> categoryClickListener.categoryClicked(v, category));
}
/**
* Allows to pass additional parameter (click listener)
* to adapter created by {@link me.tatarka.bindingcollectionadapter.BindingRecyclerViewAdapters}
*
* @param clickListener click listener to be bound to all items.
* @return
*/
@BindingConversion
public static BindingRecyclerViewAdapterFactory toRecyclerViewAdapterFactory(final CategoryClickListener clickListener) {
return new BindingRecyclerViewAdapterFactory() {
public <T> BindingRecyclerViewAdapter<T> create(RecyclerView recyclerView, ItemViewArg<T> arg) {
return new CategoriesRecyclerViewAdapter<>(arg, clickListener);
}
};
}
}