diff --git a/app/src/main/java/code/name/monkey/retromusic/service/AudioFader.kt b/app/src/main/java/code/name/monkey/retromusic/service/AudioFader.kt index bdb58f3fe..3548a8c27 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/AudioFader.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/AudioFader.kt @@ -10,10 +10,10 @@ import code.name.monkey.retromusic.util.PreferenceUtil class AudioFader { companion object { - inline fun createFadeAnimator( + fun createFadeAnimator( fadeInMp: MediaPlayer, fadeOutMp: MediaPlayer, - crossinline endAction: (animator: Animator) -> Unit, /* Code to run when Animator Ends*/ + endAction: (animator: Animator) -> Unit, /* Code to run when Animator Ends*/ ): Animator? { val duration = PreferenceUtil.crossFadeDuration * 1000 if (duration == 0) { @@ -34,15 +34,14 @@ class AudioFader { } } - @JvmStatic fun startFadeAnimator( playback: Playback, fadeIn: Boolean, /* fadeIn -> true fadeOut -> false*/ - callback: Runnable, /* Code to run when Animator Ends*/ + callback: Runnable? = null, /* Code to run when Animator Ends*/ ) { val duration = PreferenceUtil.audioFadeDuration.toLong() if (duration == 0L) { - callback.run() + callback?.run() return } val startValue = if (fadeIn) 0f else 1.0f @@ -50,12 +49,10 @@ class AudioFader { val animator = ValueAnimator.ofFloat(startValue, endValue) animator.duration = duration animator.addUpdateListener { animation: ValueAnimator -> - playback.setVolume( - animation.animatedValue as Float - ) + playback.setVolume(animation.animatedValue as Float) } animator.doOnEnd { - callback.run() + callback?.run() } animator.start() } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt b/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt index 64ba695a9..7ce084f7c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt @@ -37,7 +37,7 @@ class CrossFadePlayer(context: Context) : LocalPlayback(context) { private var crossFadeAnimator: Animator? = null override var callbacks: PlaybackCallbacks? = null private var crossFadeDuration = PreferenceUtil.crossFadeDuration - private var isCrossFading = false + var isCrossFading = false init { player1.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt index c45d9b83e..d1c274cc9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt @@ -770,11 +770,10 @@ class MusicService : MediaBrowserServiceCompat(), @Synchronized fun play() { - playbackManager.play(onNotInitialized = { playSongAt(getPosition()) }) { - if (notHandledMetaChangedForCurrentTrack) { - handleChangeInternal(META_CHANGED) - notHandledMetaChangedForCurrentTrack = false - } + playbackManager.play { playSongAt(getPosition()) } + if (notHandledMetaChangedForCurrentTrack) { + handleChangeInternal(META_CHANGED) + notHandledMetaChangedForCurrentTrack = false } notifyChange(PLAY_STATE_CHANGED) } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/PlaybackManager.kt b/app/src/main/java/code/name/monkey/retromusic/service/PlaybackManager.kt index 983968044..83fa7302b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/PlaybackManager.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/PlaybackManager.kt @@ -47,16 +47,19 @@ class PlaybackManager(val context: Context) { playback?.callbacks = callbacks } - fun play(onNotInitialized: () -> Unit = {}, onPlay: () -> Unit = {}) { + fun play(onNotInitialized: () -> Unit) { if (playback != null && !playback!!.isPlaying) { if (!playback!!.isInitialized) { onNotInitialized() } else { openAudioEffectSession() if (playbackLocation == PlaybackLocation.LOCAL) { - AudioFader.startFadeAnimator(playback!!, true) { - // Code when Animator Ends - onPlay() + if (playback is CrossFadePlayer) { + if (!(playback as CrossFadePlayer).isCrossFading) { + AudioFader.startFadeAnimator(playback!!, true) + } + } else { + AudioFader.startFadeAnimator(playback!!, true) } } if (shouldSetSpeed) {