package cl.monsoon.s1next.view.adapter.delegate;
import android.app.Activity;
import android.databinding.DataBindingUtil;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.hannesdorfmann.adapterdelegates.AbsAdapterDelegate;
import java.util.List;
import javax.inject.Inject;
import cl.monsoon.s1next.App;
import cl.monsoon.s1next.R;
import cl.monsoon.s1next.data.api.model.Post;
import cl.monsoon.s1next.data.pref.DownloadPreferencesManager;
import cl.monsoon.s1next.databinding.ItemPostBinding;
import cl.monsoon.s1next.viewmodel.PostViewModel;
import cl.monsoon.s1next.widget.EventBus;
public final class PostAdapterDelegate extends AbsAdapterDelegate<List<Object>> {
@Inject
EventBus mEventBus;
@Inject
DownloadPreferencesManager mDownloadPreferencesManager;
private final LayoutInflater mLayoutInflater;
private final DrawableRequestBuilder<String> mAvatarRequestBuilder;
public PostAdapterDelegate(Activity activity, int viewType) {
super(viewType);
App.getAppComponent(activity).inject(this);
mLayoutInflater = activity.getLayoutInflater();
// loading avatars is prior to images in replies
mAvatarRequestBuilder = Glide.with(activity)
.from(String.class)
.error(R.drawable.ic_avatar_placeholder)
.priority(Priority.HIGH)
.transform(new CenterCrop(Glide.get(activity).getBitmapPool()));
}
@Override
public boolean isForViewType(@NonNull List<Object> items, int position) {
return items.get(position) instanceof Post;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent) {
ItemPostBinding itemPostBinding = DataBindingUtil.inflate(mLayoutInflater,
R.layout.item_post, parent, false);
itemPostBinding.setEventBus(mEventBus);
itemPostBinding.setDownloadPreferencesManager(mDownloadPreferencesManager);
itemPostBinding.setDrawableRequestBuilder(mAvatarRequestBuilder);
itemPostBinding.setPostViewModel(new PostViewModel());
return new ItemViewBindingHolder(itemPostBinding);
}
@Override
public void onBindViewHolder(@NonNull List<Object> items, int position, @NonNull RecyclerView.ViewHolder holder) {
ItemPostBinding binding = ((ItemViewBindingHolder) holder).itemPostBinding;
binding.getPostViewModel().post.set((Post) items.get(position));
binding.executePendingBindings();
}
private static final class ItemViewBindingHolder extends RecyclerView.ViewHolder {
private final ItemPostBinding itemPostBinding;
public ItemViewBindingHolder(ItemPostBinding itemPostBinding) {
super(itemPostBinding.getRoot());
this.itemPostBinding = itemPostBinding;
}
}
}