package com.marverenic.music.adapter; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.view.LayoutInflater; import android.view.ViewGroup; import com.marverenic.adapter.EnhancedViewHolder; import com.marverenic.adapter.HeterogeneousAdapter; import com.marverenic.music.R; import com.marverenic.music.databinding.InstanceRuleBinding; import com.marverenic.music.model.playlistrules.AutoPlaylistRule; import com.marverenic.music.viewmodel.RuleViewModel; import java.util.List; public class RuleSection extends HeterogeneousAdapter.ListSection<AutoPlaylistRule> { public RuleSection(@NonNull List<AutoPlaylistRule> data) { super(data); } @Override public EnhancedViewHolder<AutoPlaylistRule> createViewHolder(HeterogeneousAdapter adapter, ViewGroup parent) { InstanceRuleBinding binding = InstanceRuleBinding.inflate( LayoutInflater.from(parent.getContext()), parent, false); return new ViewHolder(binding, adapter); } @Override public int getId(int position) { return get(position).hashCode(); } public class ViewHolder extends EnhancedViewHolder<AutoPlaylistRule> { private InstanceRuleBinding mBinding; public ViewHolder(InstanceRuleBinding binding, HeterogeneousAdapter adapter) { super(binding.getRoot()); mBinding = binding; RuleViewModel viewModel = new RuleViewModel(itemView.getContext()); viewModel.setOnRemovalListener(index -> { AutoPlaylistRule removed = getData().remove(index); adapter.notifyDataSetChanged(); Snackbar.make(itemView, R.string.confirm_removed_rule, Snackbar.LENGTH_SHORT) .setAction(R.string.action_undo, v -> { getData().add(index, removed); adapter.notifyDataSetChanged(); }) .show(); }); mBinding.setViewModel(viewModel); } @Override public void onUpdate(AutoPlaylistRule rule, int position) { mBinding.getViewModel().setRule(getData(), position); } } }