package com.github.libretube.util import android.app.ActivityManager import android.content.Context import android.content.Intent import androidx.core.content.ContextCompat import com.github.libretube.constants.IntentData import com.github.libretube.services.BackgroundMode /** * Helper for starting a new Instance of the [BackgroundMode] */ object BackgroundHelper { /** * Start the foreground service [BackgroundMode] to play in background. [position] * is seek to position specified in milliseconds in the current [videoId]. */ fun playOnBackground( context: Context, videoId: String, position: Long? = null, playlistId: String? = null, channelId: String? = null, keepQueue: Boolean? = null ) { // create an intent for the background mode service val intent = Intent(context, BackgroundMode::class.java) intent.putExtra(IntentData.videoId, videoId) intent.putExtra(IntentData.playlistId, playlistId) intent.putExtra(IntentData.channelId, channelId) intent.putExtra(IntentData.position, position) intent.putExtra(IntentData.keepQueue, keepQueue) // start the background mode as foreground service ContextCompat.startForegroundService(context, intent) } /** * Stop the [BackgroundMode] service if it is running. */ fun stopBackgroundPlay(context: Context) { if (!isServiceRunning(context, BackgroundMode::class.java)) return // Intent to stop background mode service val intent = Intent(context, BackgroundMode::class.java) context.stopService(intent) } /** * Check if the given service as [serviceClass] is currently running. */ fun isServiceRunning(context: Context, serviceClass: Class<*>): Boolean { val manager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager @Suppress("DEPRECATION") for (service in manager.getRunningServices(Int.MAX_VALUE)) { if (serviceClass.name == service.service.className) { return true } } return false } }