From b891ee1fe61c4dffc10283a858bc52646dbc8a62 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Tue, 22 Nov 2022 13:32:24 -0700 Subject: [PATCH] recycler: add selection adapter framework Add a framework for selection-based adapters. --- .../detail/recycler/AlbumDetailAdapter.kt | 6 +-- .../detail/recycler/ArtistDetailAdapter.kt | 10 ++-- .../auxio/detail/recycler/DetailAdapter.kt | 4 +- .../org/oxycblt/auxio/home/HomeViewModel.kt | 3 +- .../auxio/home/list/AlbumListFragment.kt | 4 +- .../auxio/home/list/ArtistListFragment.kt | 4 +- .../auxio/home/list/GenreListFragment.kt | 4 +- .../auxio/home/list/SongListFragment.kt | 4 +- .../org/oxycblt/auxio/image/ImageGroup.kt | 4 +- .../auxio/playback/queue/QueueAdapter.kt | 8 +-- .../org/oxycblt/auxio/search/SearchAdapter.kt | 4 +- .../org/oxycblt/auxio/ui/recycler/Adapters.kt | 21 ++------ .../auxio/ui/recycler/DialogRecyclerView.kt | 14 +++++ .../ui/recycler/SelectionIndicatorAdapter.kt | 53 +++++++++++++++++++ .../oxycblt/auxio/ui/recycler/ViewHolders.kt | 16 +++--- 15 files changed, 108 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/org/oxycblt/auxio/ui/recycler/SelectionIndicatorAdapter.kt diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt index 2828a9f32..ee2a2c0ab 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt @@ -30,7 +30,7 @@ import org.oxycblt.auxio.detail.DiscHeader import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.formatDurationMs -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SimpleItemCallback @@ -173,7 +173,7 @@ class DiscHeaderViewHolder(private val binding: ItemDiscHeaderBinding) : } private class AlbumSongViewHolder private constructor(private val binding: ItemAlbumSongBinding) : - IndicatorAdapter.ViewHolder(binding.root) { + PlayingIndicatorAdapter.ViewHolder(binding.root) { fun bind(item: Song, listener: MenuItemListener) { // Hide the track number view if the song does not have a track. if (item.track != null) { @@ -196,7 +196,7 @@ private class AlbumSongViewHolder private constructor(private val binding: ItemA binding.root.setOnClickListener { listener.onItemClick(item) } } - override fun updateIndicator(isActive: Boolean, isPlaying: Boolean) { + override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) { binding.root.isSelected = isActive binding.songTrackBg.isPlaying = isPlaying } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt index 19d0d929d..c9ce5cef4 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt @@ -29,7 +29,7 @@ import org.oxycblt.auxio.databinding.ItemSongBinding import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SimpleItemCallback @@ -154,7 +154,7 @@ private class ArtistDetailViewHolder private constructor(private val binding: It } private class ArtistAlbumViewHolder private constructor(private val binding: ItemParentBinding) : - IndicatorAdapter.ViewHolder(binding.root) { + PlayingIndicatorAdapter.ViewHolder(binding.root) { fun bind(item: Album, listener: MenuItemListener) { binding.parentImage.bind(item) binding.parentName.text = item.resolveName(binding.context) @@ -164,7 +164,7 @@ private class ArtistAlbumViewHolder private constructor(private val binding: Ite binding.root.setOnClickListener { listener.onItemClick(item) } } - override fun updateIndicator(isActive: Boolean, isPlaying: Boolean) { + override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) { binding.root.isSelected = isActive binding.parentImage.isPlaying = isPlaying } @@ -184,7 +184,7 @@ private class ArtistAlbumViewHolder private constructor(private val binding: Ite } private class ArtistSongViewHolder private constructor(private val binding: ItemSongBinding) : - IndicatorAdapter.ViewHolder(binding.root) { + PlayingIndicatorAdapter.ViewHolder(binding.root) { fun bind(item: Song, listener: MenuItemListener) { binding.songAlbumCover.bind(item) binding.songName.text = item.resolveName(binding.context) @@ -193,7 +193,7 @@ private class ArtistSongViewHolder private constructor(private val binding: Item binding.root.setOnClickListener { listener.onItemClick(item) } } - override fun updateIndicator(isActive: Boolean, isPlaying: Boolean) { + override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) { binding.root.isSelected = isActive binding.songAlbumCover.isPlaying = isPlaying } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt index 70e33b0d6..506ae6341 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt @@ -29,7 +29,7 @@ import org.oxycblt.auxio.detail.SortHeader import org.oxycblt.auxio.ui.recycler.AuxioRecyclerView import org.oxycblt.auxio.ui.recycler.Header import org.oxycblt.auxio.ui.recycler.HeaderViewHolder -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SimpleItemCallback @@ -39,7 +39,7 @@ import org.oxycblt.auxio.util.inflater abstract class DetailAdapter( private val listener: L, diffCallback: DiffUtil.ItemCallback -) : IndicatorAdapter(), AuxioRecyclerView.SpanSizeLookup { +) : PlayingIndicatorAdapter(), AuxioRecyclerView.SpanSizeLookup { private var isPlaying = false @Suppress("LeakingThis") override fun getItemCount() = differ.currentList.size diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt index 3079570bb..202afcba2 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt @@ -26,6 +26,7 @@ import org.oxycblt.auxio.home.tabs.Tab import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre +import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Song @@ -58,7 +59,7 @@ class HomeViewModel(application: Application) : private val _genres = MutableStateFlow(listOf()) val genres: StateFlow> get() = _genres - + var tabs: List = visibleTabs private set diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt index 328b926e5..d6cd368f9 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt @@ -31,7 +31,7 @@ import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.playback.secsToMs import org.oxycblt.auxio.ui.recycler.AlbumViewHolder -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SyncListDiffer @@ -117,7 +117,7 @@ class AlbumListFragment : HomeListFragment() { } private class AlbumAdapter(private val listener: MenuItemListener) : - IndicatorAdapter() { + PlayingIndicatorAdapter() { private val differ = SyncListDiffer(this, AlbumViewHolder.DIFFER) override val currentList: List diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt index 067c15913..e82a6362c 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt @@ -28,7 +28,7 @@ import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.ui.recycler.ArtistViewHolder -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SyncListDiffer @@ -93,7 +93,7 @@ class ArtistListFragment : HomeListFragment() { } private class ArtistAdapter(private val listener: MenuItemListener) : - IndicatorAdapter() { + PlayingIndicatorAdapter() { private val differ = SyncListDiffer(this, ArtistViewHolder.DIFFER) override val currentList: List diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt index 0a01bb24e..89adb1f70 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt @@ -28,7 +28,7 @@ import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.ui.recycler.GenreViewHolder -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SyncListDiffer @@ -92,7 +92,7 @@ class GenreListFragment : HomeListFragment() { } private class GenreAdapter(private val listener: MenuItemListener) : - IndicatorAdapter() { + PlayingIndicatorAdapter() { private val differ = SyncListDiffer(this, GenreViewHolder.DIFFER) override val currentList: List diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 629541d4d..1f01f36ca 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -31,7 +31,7 @@ import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.playback.secsToMs import org.oxycblt.auxio.settings.Settings -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SongViewHolder @@ -129,7 +129,7 @@ class SongListFragment : HomeListFragment() { } private class SongAdapter(private val listener: MenuItemListener) : - IndicatorAdapter() { + PlayingIndicatorAdapter() { private val differ = SyncListDiffer(this, SongViewHolder.DIFFER) override val currentList: List diff --git a/app/src/main/java/org/oxycblt/auxio/image/ImageGroup.kt b/app/src/main/java/org/oxycblt/auxio/image/ImageGroup.kt index f8376608e..299d07972 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/ImageGroup.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/ImageGroup.kt @@ -40,8 +40,8 @@ import org.oxycblt.auxio.util.getDimenSize * Effectively a super-charged [StyledImageView]. * * This class enables the following features alongside the base features pf [StyledImageView]: - * - Activation indicator - * - (Eventually) selection indicator + * - Selection indicator + * - (Eventually) activation indicator * - Support for ONE custom view * * This class is primarily intended for list items. For most uses, the simpler [StyledImageView] is diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt index e78364982..1cfdc413c 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt @@ -28,7 +28,7 @@ import com.google.android.material.shape.MaterialShapeDrawable import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.ItemQueueSongBinding import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.SongViewHolder import org.oxycblt.auxio.ui.recycler.SyncListDiffer import org.oxycblt.auxio.util.context @@ -60,7 +60,7 @@ class QueueAdapter(private val listener: QueueItemListener) : } viewHolder.isEnabled = position > currentIndex - viewHolder.updateIndicator(position == currentIndex, isPlaying) + viewHolder.updatePlayingIndicator(position == currentIndex, isPlaying) } fun submitList(newList: List) { @@ -110,7 +110,7 @@ interface QueueItemListener { } class QueueSongViewHolder private constructor(private val binding: ItemQueueSongBinding) : - IndicatorAdapter.ViewHolder(binding.root) { + PlayingIndicatorAdapter.ViewHolder(binding.root) { val bodyView: View get() = binding.body val backgroundView: View @@ -164,7 +164,7 @@ class QueueSongViewHolder private constructor(private val binding: ItemQueueSong binding.songDragHandle.isEnabled = value } - override fun updateIndicator(isActive: Boolean, isPlaying: Boolean) { + override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) { binding.interactBody.isSelected = isActive binding.songAlbumCover.isPlaying = isPlaying } diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt index f8598370a..82a5ac565 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt @@ -30,14 +30,14 @@ import org.oxycblt.auxio.ui.recycler.AuxioRecyclerView import org.oxycblt.auxio.ui.recycler.GenreViewHolder import org.oxycblt.auxio.ui.recycler.Header import org.oxycblt.auxio.ui.recycler.HeaderViewHolder -import org.oxycblt.auxio.ui.recycler.IndicatorAdapter +import org.oxycblt.auxio.ui.recycler.PlayingIndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.ui.recycler.MenuItemListener import org.oxycblt.auxio.ui.recycler.SimpleItemCallback import org.oxycblt.auxio.ui.recycler.SongViewHolder class SearchAdapter(private val listener: MenuItemListener) : - IndicatorAdapter(), AuxioRecyclerView.SpanSizeLookup { + PlayingIndicatorAdapter(), AuxioRecyclerView.SpanSizeLookup { private val differ = AsyncListDiffer(this, DIFFER) override fun getItemCount() = differ.currentList.size diff --git a/app/src/main/java/org/oxycblt/auxio/ui/recycler/Adapters.kt b/app/src/main/java/org/oxycblt/auxio/ui/recycler/Adapters.kt index abd66548d..0775a7ea9 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/recycler/Adapters.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/recycler/Adapters.kt @@ -19,6 +19,7 @@ package org.oxycblt.auxio.ui.recycler import android.view.View import androidx.recyclerview.widget.RecyclerView +import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.util.logW /** @@ -27,7 +28,7 @@ import org.oxycblt.auxio.util.logW * itself. * @author OxygenCobalt */ -abstract class IndicatorAdapter : RecyclerView.Adapter() { +abstract class PlayingIndicatorAdapter : RecyclerView.Adapter() { private var isPlaying = false private var currentItem: Item? = null @@ -37,7 +38,7 @@ abstract class IndicatorAdapter : RecyclerView.Ada if (holder is ViewHolder) { val item = currentList[position] val currentItem = currentItem - holder.updateIndicator(item == currentItem, isPlaying) + holder.updatePlayingIndicator(item == currentItem, isPlaying) } } @@ -92,20 +93,8 @@ abstract class IndicatorAdapter : RecyclerView.Ada val PAYLOAD_INDICATOR_CHANGED = Any() } - /** A ViewHolder that can respond to indicator updates. */ + /** A ViewHolder that can respond to playing ]indicator updates. */ abstract class ViewHolder(root: View) : RecyclerView.ViewHolder(root) { - abstract fun updateIndicator(isActive: Boolean, isPlaying: Boolean) - } -} - -/** - * ViewHolder that correctly resizes the item to match the parent width, which it is not normally. - */ -abstract class DialogViewHolder(root: View) : RecyclerView.ViewHolder(root) { - init { - // Actually make the item full-width, which it won't be in dialogs - root.layoutParams = - RecyclerView.LayoutParams( - RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT) + abstract fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) } } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/recycler/DialogRecyclerView.kt b/app/src/main/java/org/oxycblt/auxio/ui/recycler/DialogRecyclerView.kt index 77813e9cc..f01b6e939 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/recycler/DialogRecyclerView.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/recycler/DialogRecyclerView.kt @@ -19,6 +19,7 @@ package org.oxycblt.auxio.ui.recycler import android.content.Context import android.util.AttributeSet +import android.view.View import android.view.ViewGroup import androidx.annotation.AttrRes import androidx.core.view.isInvisible @@ -93,3 +94,16 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr manager.findLastCompletelyVisibleItemPosition() == (manager.itemCount - 1) } } + +/** + * ViewHolder that correctly resizes the item to match the parent width, which it is not normally + * in dialogs. + */ +abstract class DialogViewHolder(root: View) : RecyclerView.ViewHolder(root) { + init { + // Actually make the item full-width, which it won't be in dialogs + root.layoutParams = + RecyclerView.LayoutParams( + RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT) + } +} diff --git a/app/src/main/java/org/oxycblt/auxio/ui/recycler/SelectionIndicatorAdapter.kt b/app/src/main/java/org/oxycblt/auxio/ui/recycler/SelectionIndicatorAdapter.kt new file mode 100644 index 000000000..8e4ecbd16 --- /dev/null +++ b/app/src/main/java/org/oxycblt/auxio/ui/recycler/SelectionIndicatorAdapter.kt @@ -0,0 +1,53 @@ +package org.oxycblt.auxio.ui.recycler + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import org.oxycblt.auxio.music.Music + +/** + * An adapter that implements selection indicators. + * @author OxygenCobalt + */ +abstract class SelectionIndicatorAdapter : PlayingIndicatorAdapter() { + private var selectedItems = setOf() + + override fun onBindViewHolder( + holder: VH, + position: Int, + payloads: List + ) { + super.onBindViewHolder(holder, position, payloads) + + if (holder is ViewHolder) { + holder.updateSelectionIndicator(selectedItems.contains(currentList[position])) + } + } + + fun updateSelection(items: Set) { + val oldSelectedItems = selectedItems + + if (items == oldSelectedItems) { + return + } + + selectedItems = items + for (i in currentList.indices) { + // TODO: Perhaps add an optimization that allows me to avoid the O(n) iteration + // assuming all list items are unique? + val item = currentList[i] + if (item !is Music) { + continue + } + + if (oldSelectedItems.contains(item) || items.contains(item)) { + notifyItemChanged(i, PAYLOAD_INDICATOR_CHANGED) + } + } + } + + /** A ViewHolder that can respond to selection indicator updates. */ + abstract class ViewHolder(root: View) : RecyclerView.ViewHolder(root) { + abstract fun updateSelectionIndicator(isSelected: Boolean) + } +} + diff --git a/app/src/main/java/org/oxycblt/auxio/ui/recycler/ViewHolders.kt b/app/src/main/java/org/oxycblt/auxio/ui/recycler/ViewHolders.kt index 38d39b9b1..81457db86 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/recycler/ViewHolders.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/recycler/ViewHolders.kt @@ -37,7 +37,7 @@ import org.oxycblt.auxio.util.inflater * @author OxygenCobalt */ class SongViewHolder private constructor(private val binding: ItemSongBinding) : - IndicatorAdapter.ViewHolder(binding.root) { + PlayingIndicatorAdapter.ViewHolder(binding.root) { fun bind(item: Song, listener: MenuItemListener) { binding.songAlbumCover.bind(item) binding.songName.text = item.resolveName(binding.context) @@ -46,7 +46,7 @@ class SongViewHolder private constructor(private val binding: ItemSongBinding) : binding.root.setOnClickListener { listener.onItemClick(item) } } - override fun updateIndicator(isActive: Boolean, isPlaying: Boolean) { + override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) { binding.root.isSelected = isActive binding.songAlbumCover.isPlaying = isPlaying } @@ -69,7 +69,7 @@ class SongViewHolder private constructor(private val binding: ItemSongBinding) : * @author OxygenCobalt */ class AlbumViewHolder private constructor(private val binding: ItemParentBinding) : - IndicatorAdapter.ViewHolder(binding.root) { + PlayingIndicatorAdapter.ViewHolder(binding.root) { fun bind(item: Album, listener: MenuItemListener) { binding.parentImage.bind(item) @@ -79,7 +79,7 @@ class AlbumViewHolder private constructor(private val binding: ItemParentBinding binding.root.setOnClickListener { listener.onItemClick(item) } } - override fun updateIndicator(isActive: Boolean, isPlaying: Boolean) { + override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) { binding.root.isSelected = isActive binding.parentImage.isPlaying = isPlaying } @@ -104,7 +104,7 @@ class AlbumViewHolder private constructor(private val binding: ItemParentBinding * @author OxygenCobalt */ class ArtistViewHolder private constructor(private val binding: ItemParentBinding) : - IndicatorAdapter.ViewHolder(binding.root) { + PlayingIndicatorAdapter.ViewHolder(binding.root) { fun bind(item: Artist, listener: MenuItemListener) { binding.parentImage.bind(item) @@ -125,7 +125,7 @@ class ArtistViewHolder private constructor(private val binding: ItemParentBindin binding.root.setOnClickListener { listener.onItemClick(item) } } - override fun updateIndicator(isActive: Boolean, isPlaying: Boolean) { + override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) { binding.root.isSelected = isActive binding.parentImage.isPlaying = isPlaying } @@ -150,7 +150,7 @@ class ArtistViewHolder private constructor(private val binding: ItemParentBindin * @author OxygenCobalt */ class GenreViewHolder private constructor(private val binding: ItemParentBinding) : - IndicatorAdapter.ViewHolder(binding.root) { + PlayingIndicatorAdapter.ViewHolder(binding.root) { fun bind(item: Genre, listener: MenuItemListener) { binding.parentImage.bind(item) @@ -164,7 +164,7 @@ class GenreViewHolder private constructor(private val binding: ItemParentBinding binding.root.setOnClickListener { listener.onItemClick(item) } } - override fun updateIndicator(isActive: Boolean, isPlaying: Boolean) { + override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) { binding.root.isSelected = isActive binding.parentImage.isPlaying = isPlaying }