package com.marverenic.music.adapter; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; 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.activity.BaseActivity; import com.marverenic.music.databinding.InstanceSongBinding; import com.marverenic.music.fragments.BaseFragment; import com.marverenic.music.model.ModelUtil; import com.marverenic.music.model.Song; import com.marverenic.music.viewmodel.SongViewModel; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView.MeasurableAdapter; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView.SectionedAdapter; import java.util.List; public class SongSection extends HeterogeneousAdapter.ListSection<Song> implements SectionedAdapter, MeasurableAdapter { private BaseActivity mActivity; private BaseFragment mFragment; public SongSection(BaseActivity activity, @NonNull List<Song> data) { super(data); mActivity = activity; } public SongSection(BaseFragment fragment, @NonNull List<Song> data) { super(data); mFragment = fragment; } @Override public int getId(int position) { return (int) get(position).getSongId(); } @Override public EnhancedViewHolder<Song> createViewHolder(HeterogeneousAdapter adapter, ViewGroup parent) { InstanceSongBinding binding = InstanceSongBinding.inflate( LayoutInflater.from(parent.getContext()), parent, false); return new ViewHolder(binding, getData()); } @NonNull @Override public String getSectionName(int position) { char firstChar = ModelUtil.sortableTitle(get(position).getSongName()).charAt(0); return Character.toString(firstChar).toUpperCase(); } @Override public int getViewTypeHeight(RecyclerView recyclerView, int viewType) { return recyclerView.getResources().getDimensionPixelSize(R.dimen.list_height) + recyclerView.getResources().getDimensionPixelSize(R.dimen.divider_height); } private class ViewHolder extends EnhancedViewHolder<Song> { private InstanceSongBinding mBinding; public ViewHolder(InstanceSongBinding binding, List<Song> songList) { super(binding.getRoot()); mBinding = binding; if (mFragment != null) { binding.setViewModel(new SongViewModel(mFragment, songList)); } else if (mActivity != null) { binding.setViewModel(new SongViewModel(mActivity, songList)); } else { throw new RuntimeException("Unable to create view model. This SongSection has not " + "been created with a valid activity or fragment"); } } @Override public void onUpdate(Song s, int sectionPosition) { mBinding.getViewModel().setSong(getData(), sectionPosition); mBinding.executePendingBindings(); } } }