From ad04c4e2ed3b170fe5481551cb5c616f0606c9b3 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 31 May 2022 23:26:06 +0530 Subject: [PATCH] Fixed Now playing viewpager lag --- .../monkey/retromusic/service/MusicService.kt | 16 +++++++++++----- .../monkey/retromusic/service/PlaybackManager.kt | 2 ++ 2 files changed, 13 insertions(+), 5 deletions(-) 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 2c390b59b..512cd3839 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 @@ -88,6 +88,7 @@ import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition import com.google.android.gms.cast.framework.CastSession import kotlinx.coroutines.* +import kotlinx.coroutines.Dispatchers.Default import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import org.koin.java.KoinJavaComponent.get @@ -792,11 +793,16 @@ class MusicService : MediaBrowserServiceCompat(), } fun playSongAt(position: Int) { - openTrackAndPrepareNextAt(position) { success -> - if (success) { - play() - } else { - showToast(resources.getString(R.string.unplayable_file)) + // Every chromecast method needs to run on main thread or you are greeted with IllegalStateException + // So it will use Main dispatcher + // And by using Default dispatcher for local playback we are reduce the burden of main thread + serviceScope.launch(if(playbackManager.isLocalPlayback) Default else Main) { + openTrackAndPrepareNextAt(position) { success -> + if (success) { + play() + } else { + showToast(resources.getString(R.string.unplayable_file)) + } } } } 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 060faa125..9186bd534 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 @@ -16,6 +16,8 @@ class PlaybackManager(val context: Context) { var playback: Playback? = null private var playbackLocation = PlaybackLocation.LOCAL + val isLocalPlayback get() = playbackLocation== PlaybackLocation.LOCAL + val audioSessionId: Int get() = if (playback != null) { playback!!.audioSessionId