diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index 4de3f35e9..aabb2bfa9 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -13,6 +13,7 @@ import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentAlbumDetailBinding import org.oxycblt.auxio.detail.adapters.AlbumSongAdapter import org.oxycblt.auxio.music.MusicStore +import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.state.PlaybackMode import org.oxycblt.auxio.ui.disable @@ -55,6 +56,8 @@ class AlbumDetailFragment : DetailFragment() { } ) + var lastHolder: AlbumSongAdapter.ViewHolder? = null + // --- UI SETUP --- binding.lifecycleOwner = this @@ -126,9 +129,36 @@ class AlbumDetailFragment : DetailFragment() { } } + playbackModel.song.observe(viewLifecycleOwner) { song -> + if (song != null) { + val pos = detailModel.albumSortMode.value!!.getSortedSongList( + detailModel.currentAlbum.value!!.songs + ).indexOfFirst { it.id == song.id } + + if (pos != -1) { + binding.albumSongRecycler.post { + lastHolder?.removePlaying() + + lastHolder = ( + binding.albumSongRecycler.getChildViewHolder( + binding.albumSongRecycler.getChildAt(pos) + ) as AlbumSongAdapter.ViewHolder + ) + + lastHolder?.setPlaying(requireContext()) + } + + return@observe + } else { + lastHolder?.removePlaying() + } + } + + lastHolder?.removePlaying() + } + playbackModel.navToItem.observe(viewLifecycleOwner) { if (it != null) { - /* if (it is Song) { // Calculate where the item for the currently played song is, and navigate to there. val pos = detailModel.albumSortMode.value!!.getSortedSongList( @@ -139,7 +169,7 @@ class AlbumDetailFragment : DetailFragment() { binding.albumSongRecycler.post { // Only scroll after UI creation val y = binding.albumSongRecycler.y + - binding.albumSongRecycler.getChildAt(pos).y + binding.albumSongRecycler.getChildAt(pos).y binding.nestedScroll.scrollTo(0, y.toInt()) } @@ -147,8 +177,6 @@ class AlbumDetailFragment : DetailFragment() { playbackModel.doneWithNavToItem() } } - TODO: Re-add scroll if you find a way to implement the playing indicators on song items - */ if (detailModel.currentAlbum.value!!.id == playbackModel.song.value!!.album.id) { playbackModel.doneWithNavToItem() diff --git a/app/src/main/java/org/oxycblt/auxio/detail/adapters/AlbumSongAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/adapters/AlbumSongAdapter.kt index ad9f5558e..59bd1a091 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/adapters/AlbumSongAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/adapters/AlbumSongAdapter.kt @@ -1,5 +1,6 @@ package org.oxycblt.auxio.detail.adapters +import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -8,6 +9,8 @@ import org.oxycblt.auxio.databinding.ItemAlbumSongBinding import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.recycler.DiffCallback import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder +import org.oxycblt.auxio.ui.accent +import org.oxycblt.auxio.ui.toColor /** * An adapter for displaying the [Song]s of an album. @@ -30,11 +33,25 @@ class AlbumSongAdapter( inner class ViewHolder( private val binding: ItemAlbumSongBinding, ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { + private val normalColor = binding.songName.currentTextColor + private val inactiveColor = binding.songTrack.currentTextColor override fun onBind(data: Song) { binding.song = data binding.songName.requestLayout() } + + fun setPlaying(context: Context) { + val accentColor = accent.first.toColor(context) + + binding.songName.setTextColor(accentColor) + binding.songTrack.setTextColor(accentColor) + } + + fun removePlaying() { + binding.songName.setTextColor(normalColor) + binding.songTrack.setTextColor(inactiveColor) + } } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index e2085e922..f26be2b8a 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -468,8 +468,6 @@ class PlaybackStateManager private constructor() { database.writeQueue(queueItems) } - getCommonGenre() - val time = System.currentTimeMillis() - start Log.d(this::class.simpleName, "Save finished in ${time}ms")