service: attempt to band-aid foreground limit

This commit is contained in:
Alexander Capehart 2025-01-11 20:01:01 -07:00
parent ad4b9a3859
commit a1289ffaca
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47

View file

@ -34,8 +34,15 @@ import androidx.media.MediaBrowserServiceCompat
import androidx.media.utils.MediaConstants import androidx.media.utils.MediaConstants
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.oxycblt.auxio.music.service.MusicServiceFragment import org.oxycblt.auxio.music.service.MusicServiceFragment
import org.oxycblt.auxio.playback.service.PlaybackServiceFragment import org.oxycblt.auxio.playback.service.PlaybackServiceFragment
import timber.log.Timber as L
@AndroidEntryPoint @AndroidEntryPoint
class AuxioService : class AuxioService :
@ -46,6 +53,10 @@ class AuxioService :
@Inject lateinit var musicFragmentFactory: MusicServiceFragment.Factory @Inject lateinit var musicFragmentFactory: MusicServiceFragment.Factory
private lateinit var musicFragment: MusicServiceFragment private lateinit var musicFragment: MusicServiceFragment
private val delayScopeJob = Job() + Dispatchers.Main
private val delayScope = CoroutineScope(delayScopeJob)
private var currentDelayJob: Job? = null
@SuppressLint("WrongConstant") @SuppressLint("WrongConstant")
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
@ -68,10 +79,18 @@ class AuxioService :
} }
private fun onHandleForeground(intent: Intent?) { private fun onHandleForeground(intent: Intent?) {
currentDelayJob?.cancel()
currentDelayJob =
delayScope.launch {
// The foreground limiter is fussy and doesn't like us starting a foreground
// service too early despite having the right to do so at this point. Comply
// and artificially delay (to user detriment...)
delay(250)
val startId = intent?.getIntExtra(INTENT_KEY_START_ID, -1) ?: -1 val startId = intent?.getIntExtra(INTENT_KEY_START_ID, -1) ?: -1
musicFragment.start() musicFragment.start()
playbackFragment.start(startId) playbackFragment.start(startId)
} }
}
override fun onTaskRemoved(rootIntent: Intent?) { override fun onTaskRemoved(rootIntent: Intent?) {
super.onTaskRemoved(rootIntent) super.onTaskRemoved(rootIntent)
@ -80,6 +99,7 @@ class AuxioService :
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
delayScopeJob.cancel()
musicFragment.release() musicFragment.release()
playbackFragment.release() playbackFragment.release()
} }