diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 7ea262fb6..baae0a8c0 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -72,7 +72,7 @@ class MainFragment : Fragment() { navController?.let { binding.navBar.setOnNavigationItemSelectedListener { item -> - navigateWithItem(item, navController) + navigateWithItem(item, it) } } @@ -87,6 +87,7 @@ class MainFragment : Fragment() { ) binding.compactPlayback.visibility = View.GONE + playbackModel.resetCanAnimate() } else { binding.compactPlayback.visibility = View.VISIBLE } @@ -103,8 +104,6 @@ class MainFragment : Fragment() { * Some custom navigator code based off [NavigationUI] that makes animations function */ private fun navigateWithItem(item: MenuItem, navController: NavController): Boolean { - // Custom navigator code so that animations actually function - // [Which doesn't happen if I use BottomNavigationView.setupWithNavController() if (item.itemId != navController.currentDestination!!.id) { val builder = NavOptions.Builder().setLaunchSingleTop(true) 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 a100e18e0..42f4b4979 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/CompactPlaybackFragment.kt @@ -1,6 +1,7 @@ package org.oxycblt.auxio.playback import android.graphics.drawable.AnimatedVectorDrawable +import android.os.Build import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -30,7 +31,7 @@ class CompactPlaybackFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { val binding = FragmentCompactPlaybackBinding.inflate(inflater) val iconPauseToPlay = ContextCompat.getDrawable( @@ -74,13 +75,21 @@ class CompactPlaybackFragment : Fragment() { } 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(iconPlayToPause) + iconPlayToPause.start() + } else { + binding.playbackControls.setImageDrawable(iconPauseToPlay) + iconPauseToPlay.start() + } } else { - binding.playbackControls.setImageDrawable(iconPlayToPause) - iconPlayToPause.start() + if (it) { + binding.playbackControls.setImageResource(R.drawable.ic_pause_large) + } else { + binding.playbackControls.setImageResource(R.drawable.ic_play_large) + } } } @@ -92,4 +101,10 @@ class CompactPlaybackFragment : Fragment() { return binding.root } + + override fun onDestroy() { + super.onDestroy() + + playbackModel.resetCanAnimate() + } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt index 77636f052..eec28b562 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt @@ -107,13 +107,13 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener { if (it) { // Animate the playing status and switch the button to the accent color // if its playing, and back to a inactive gray if not. - binding.playbackPlayPause.setImageDrawable(iconPauseToPlay) - iconPauseToPlay.start() + binding.playbackPlayPause.setImageDrawable(iconPlayToPause) + iconPlayToPause.start() binding.playbackPlayPause.backgroundTintList = accentColor } else { - binding.playbackPlayPause.setImageDrawable(iconPlayToPause) - iconPlayToPause.start() + binding.playbackPlayPause.setImageDrawable(iconPauseToPlay) + iconPauseToPlay.start() binding.playbackPlayPause.backgroundTintList = controlColor } 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 b3d10dc34..264f8cf22 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -58,6 +58,9 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { private val mLoopMode = MutableLiveData(LoopMode.NONE) val loopMode: LiveData get() = mLoopMode + private var mCanAnimate = false + val canAnimate: Boolean get() = mCanAnimate + // Other private val mIsSeeking = MutableLiveData(false) val isSeeking: LiveData get() = mIsSeeking @@ -238,6 +241,8 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { // Flip the playing status. fun invertPlayingStatus() { + mCanAnimate = true + playbackManager.setPlayingStatus(!playbackManager.isPlaying) } @@ -270,6 +275,10 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { } } + fun resetCanAnimate() { + mCanAnimate = false + } + // --- OVERRIDES --- override fun onCleared() { @@ -308,6 +317,8 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { override fun onPlayingUpdate(isPlaying: Boolean) { mIsPlaying.value = isPlaying + + mCanAnimate = true } override fun onShuffleUpdate(isShuffling: Boolean) { 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 de877c4e9..b061b929f 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 @@ -545,6 +545,7 @@ class PlaybackStateManager private constructor() { mShuffleSeed = playbackState.shuffleSeed mIsInUserQueue = playbackState.inUserQueue mIndex = playbackState.index + mIsPlaying = false callbacks.forEach { it.onSeekConfirm(mPosition) diff --git a/app/src/main/res/drawable/ic_pause_large.xml b/app/src/main/res/drawable/ic_pause_large.xml new file mode 100644 index 000000000..a5c824431 --- /dev/null +++ b/app/src/main/res/drawable/ic_pause_large.xml @@ -0,0 +1,26 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_pause_to_play.xml b/app/src/main/res/drawable/ic_pause_to_play.xml index ddce07446..cace5f88f 100644 --- a/app/src/main/res/drawable/ic_pause_to_play.xml +++ b/app/src/main/res/drawable/ic_pause_to_play.xml @@ -1,59 +1,30 @@ - + xmlns:aapt="http://schemas.android.com/aapt" + android:drawable="@drawable/ic_pause_large"> - - - - - - - - - - - - - - + - + @@ -66,8 +37,8 @@ https://github.com/ashutoshgngwr/noice android:duration="200" android:interpolator="@android:interpolator/fast_out_slow_in" android:propertyName="rotation" - android:valueFrom="0" - android:valueTo="90" + android:valueFrom="-90" + android:valueTo="0" android:valueType="floatType" /> diff --git a/app/src/main/res/drawable/ic_play_large.xml b/app/src/main/res/drawable/ic_play_large.xml new file mode 100644 index 000000000..d73b84e8e --- /dev/null +++ b/app/src/main/res/drawable/ic_play_large.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_play_to_pause.xml b/app/src/main/res/drawable/ic_play_to_pause.xml index ca802e281..ad77e8d30 100644 --- a/app/src/main/res/drawable/ic_play_to_pause.xml +++ b/app/src/main/res/drawable/ic_play_to_pause.xml @@ -1,38 +1,6 @@ - - - - - - - - - - - - - - - + xmlns:aapt="http://schemas.android.com/aapt" + android:drawable="@drawable/ic_play_large"> @@ -41,8 +9,8 @@ https://github.com/ashutoshgngwr/noice android:duration="200" android:interpolator="@android:interpolator/fast_out_slow_in" android:propertyName="pathData" - android:valueFrom="M6,7.5L6,10.5L18,10.5L18,7.5Z" - android:valueTo="M8.25,6L8.25,12L18.75,12L18.75,12Z" + android:valueFrom="M8.25,6L8.25,12L18.75,12L18.75,12Z" + android:valueTo="M6,7.5L6,10.5L18,10.5L18,7.5Z" android:valueType="pathType" /> @@ -55,8 +23,8 @@ https://github.com/ashutoshgngwr/noice android:duration="200" android:interpolator="@android:interpolator/fast_out_slow_in" android:propertyName="pathData" - android:valueFrom="M6,16.5L6,13.5L18,13.5L18,16.5Z" - android:valueTo="M8.25,18L8.25,12L18.75,12L18.75,12Z" + android:valueFrom="M8.25,18L8.25,12L18.75,12L18.75,12Z" + android:valueTo="M6,16.5L6,13.5L18,13.5L18,16.5Z" android:valueType="pathType" /> @@ -69,8 +37,8 @@ https://github.com/ashutoshgngwr/noice android:duration="200" android:interpolator="@android:interpolator/fast_out_slow_in" android:propertyName="rotation" - android:valueFrom="-90" - android:valueTo="0" + android:valueFrom="0" + android:valueTo="90" android:valueType="floatType" />