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 5cc3ceb42..b78145a0b 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -122,7 +122,10 @@ class AlbumDetailFragment : Fragment() { // Update the play button depending on the current playback status // If playing this album -> Make button show media controls // If not playing this album -> Make button update playback to the artist - private fun updatePlayButton(mode: PlaybackMode, binding: FragmentAlbumDetailBinding) { + private fun updatePlayButton( + mode: PlaybackMode, + binding: FragmentAlbumDetailBinding + ) { playbackModel.currentParent.value?.let { parent -> if (mode == PlaybackMode.IN_ALBUM && parent.id == detailModel.currentAlbum.value!!.id diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 10d3e58e0..410755d90 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -105,7 +105,10 @@ class ArtistDetailFragment : Fragment() { // Update the play button depending on the current playback status // If playing this artist -> Make button show media controls // If not playing this artist -> Make button update playback to the artist - private fun updatePlayButton(mode: PlaybackMode, binding: FragmentArtistDetailBinding) { + private fun updatePlayButton( + mode: PlaybackMode, + binding: FragmentArtistDetailBinding + ) { playbackModel.currentParent.value?.let { parent -> if (mode == PlaybackMode.IN_ARTIST && parent.id == detailModel.currentArtist.value!!.id @@ -123,7 +126,7 @@ class ArtistDetailFragment : Fragment() { binding.artistPlay.setImageResource(R.drawable.ic_play) binding.artistPlay.setOnClickListener { - playbackModel.play(detailModel.currentArtist.value!!, false) + playbackModel.play(detailModel.currentAlbum.value!!, false) } } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/coil/MosaicFetcher.kt b/app/src/main/java/org/oxycblt/auxio/music/coil/MosaicFetcher.kt index 853321439..fe13a2470 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/coil/MosaicFetcher.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/coil/MosaicFetcher.kt @@ -16,8 +16,8 @@ import coil.fetch.SourceResult import coil.size.Size import okio.buffer import okio.source -import java.io.InputStream import org.oxycblt.auxio.R +import java.io.InputStream const val MOSAIC_BITMAP_SIZE = 512 const val MOSAIC_BITMAP_INCREMENT = 256 diff --git a/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackFragment.kt index 5e4317f08..a84126702 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackFragment.kt @@ -61,13 +61,21 @@ class CompactPlaybackFragment : Fragment() { // TODO: Fix the thing where the icons will animate on startup playbackModel.isPlaying.observe(viewLifecycleOwner) { - if (it) { - // Animate the icon transition when the playing status switches - binding.playbackControls.setImageDrawable(iconPauseToPlay) - iconPauseToPlay.start() + if (playbackModel.canAnimate) { + if (it) { + // Animate the icon transition when the playing status switches + binding.playbackControls.setImageDrawable(iconPauseToPlay) + iconPauseToPlay.start() + } else { + binding.playbackControls.setImageDrawable(iconPlayToPause) + iconPlayToPause.start() + } } else { - binding.playbackControls.setImageDrawable(iconPlayToPause) - iconPlayToPause.start() + if (it) { + binding.playbackControls.setImageResource(R.drawable.ic_pause) + } else { + binding.playbackControls.setImageResource(R.drawable.ic_play) + } } } @@ -80,9 +88,9 @@ class CompactPlaybackFragment : Fragment() { return binding.root } - override fun onDestroy() { - super.onDestroy() + override fun onPause() { + super.onPause() - playbackModel.updateStaticIconStatus(true) + playbackModel.resetAnimStatus() } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index ab7efbfb4..d72c28651 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -44,10 +44,14 @@ class PlaybackViewModel : ViewModel() { val isShuffling: LiveData get() = mIsShuffling private val mShuffleSeed = MutableLiveData(-1L) + val shuffleSeed: LiveData get() = mShuffleSeed private val mIsSeeking = MutableLiveData(false) val isSeeking: LiveData get() = mIsSeeking + private var mCanAnimate = false + val canAnimate: Boolean get() = mCanAnimate + // Formatted variants of the duration val formattedCurrentDuration = Transformations.map(mCurrentDuration) { it.toDuration() @@ -136,6 +140,8 @@ class PlaybackViewModel : ViewModel() { // Invert, not directly set the playing/shuffling status // Used by the toggle buttons in playback fragment. fun invertPlayingStatus() { + mCanAnimate = true + mIsPlaying.value = !mIsPlaying.value!! } @@ -183,6 +189,10 @@ class PlaybackViewModel : ViewModel() { updatePlayback(mQueue.value!![mCurrentIndex.value!!]) } + fun resetAnimStatus() { + mCanAnimate = false + } + private fun updatePlayback(song: Song) { mCurrentSong.value = song mCurrentDuration.value = 0 diff --git a/app/src/main/res/drawable/ic_pause.xml b/app/src/main/res/drawable/ic_pause.xml index c24a9a423..71352025e 100644 --- a/app/src/main/res/drawable/ic_pause.xml +++ b/app/src/main/res/drawable/ic_pause.xml @@ -1,10 +1,10 @@ + android:tint="@color/control_color"> diff --git a/app/src/main/res/drawable/ic_play.xml b/app/src/main/res/drawable/ic_play.xml index bb10b275c..1791be931 100644 --- a/app/src/main/res/drawable/ic_play.xml +++ b/app/src/main/res/drawable/ic_play.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/layout/fragment_album_detail.xml b/app/src/main/res/layout/fragment_album_detail.xml index 85a2e1c4e..2892daf08 100644 --- a/app/src/main/res/layout/fragment_album_detail.xml +++ b/app/src/main/res/layout/fragment_album_detail.xml @@ -110,11 +110,12 @@ android:layout_height="0dp" android:layout_marginTop="@dimen/margin_tiny" android:layout_marginEnd="@dimen/margin_tiny" + android:tint="@color/background" android:background="@drawable/ui_circular_button" android:backgroundTint="?android:attr/colorPrimary" android:contentDescription="@string/description_play" - android:onClick="@{() -> playbackModel.play(album, false)}" android:src="@drawable/ic_play" + android:onClick="@{() -> playbackModel.play(album, false)}" app:layout_constraintBottom_toBottomOf="@+id/album_details" app:layout_constraintDimensionRatio="1:1" app:layout_constraintEnd_toStartOf="@+id/album_shuffle" diff --git a/app/src/main/res/layout/fragment_artist_detail.xml b/app/src/main/res/layout/fragment_artist_detail.xml index 9b0fcf6c6..bee34fd8c 100644 --- a/app/src/main/res/layout/fragment_artist_detail.xml +++ b/app/src/main/res/layout/fragment_artist_detail.xml @@ -98,7 +98,7 @@ app:layout_constraintTop_toBottomOf="@+id/artist_genre" tools:text="2 Albums, 20 Songs" /> - + + tools:src="@drawable/ic_play_to_pause" /> \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index cb36175d3..e1a317a10 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -14,6 +14,7 @@ 10dp 16dp 24dp + 26dp 32dp 64dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b669012e3..973e9e3d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -24,6 +24,7 @@ A-Z Z-A Shuffle + Play Search Library…