package com.marverenic.music.adapter; import android.view.LayoutInflater; import android.view.ViewGroup; import com.marverenic.adapter.EnhancedViewHolder; import com.marverenic.adapter.HeterogeneousAdapter; import com.marverenic.music.activity.BaseActivity; import com.marverenic.music.data.store.PlaylistStore; import com.marverenic.music.databinding.InstanceSongDragBinding; import com.marverenic.music.model.Playlist; import com.marverenic.music.model.Song; import com.marverenic.music.viewmodel.PlaylistSongViewModel; import java.util.List; public class PlaylistSongSection extends EditableSongSection { private BaseActivity mActivity; private PlaylistStore mPlaylistStore; private Playlist mReference; public PlaylistSongSection(BaseActivity activity, PlaylistStore playlistStore, List<Song> data, Playlist reference) { super(data); mActivity = activity; mPlaylistStore = playlistStore; mReference = reference; } @Override protected void onDrop(int from, int to) { if (from == to) return; mPlaylistStore.editPlaylist(mReference, mData); } @Override public EnhancedViewHolder<Song> createViewHolder(final HeterogeneousAdapter adapter, ViewGroup parent) { InstanceSongDragBinding binding = InstanceSongDragBinding.inflate( LayoutInflater.from(parent.getContext()), parent, false); return new ViewHolder(binding, getData(), adapter); } private class ViewHolder extends EnhancedViewHolder<Song> { private InstanceSongDragBinding mBinding; public ViewHolder(InstanceSongDragBinding binding, List<Song> songList, HeterogeneousAdapter adapter) { super(binding.getRoot()); mBinding = binding; binding.setViewModel( new PlaylistSongViewModel(mActivity, songList, () -> { adapter.notifyDataSetChanged(); mPlaylistStore.editPlaylist(mReference, getData()); })); } @Override public void onUpdate(Song s, int sectionPosition) { mBinding.getViewModel().setIndex(sectionPosition); } } }