LibreTube/app/src/main/java/com/github/libretube/util/BackgroundHelper.kt

64 lines
2.1 KiB
Kotlin
Raw Normal View History

2022-07-23 19:11:57 +05:30
package com.github.libretube.util
import android.app.ActivityManager
2022-07-23 19:11:57 +05:30
import android.content.Context
import android.content.Intent
import androidx.core.content.ContextCompat
2022-09-08 23:49:44 +05:30
import com.github.libretube.constants.IntentData
2022-07-23 19:11:57 +05:30
import com.github.libretube.services.BackgroundMode
2022-08-08 14:13:46 +05:30
/**
* Helper for starting a new Instance of the [BackgroundMode]
*/
2022-07-23 19:11:57 +05:30
object BackgroundHelper {
/**
* Start the foreground service [BackgroundMode] to play in background. [position]
* is seek to position specified in milliseconds in the current [videoId].
*/
2022-07-23 19:11:57 +05:30
fun playOnBackground(
context: Context,
videoId: String,
2022-08-08 14:13:46 +05:30
position: Long? = null,
playlistId: String? = null,
channelId: String? = null,
keepQueue: Boolean? = null
2022-07-23 19:11:57 +05:30
) {
2022-08-08 14:13:46 +05:30
// create an intent for the background mode service
2022-07-23 19:11:57 +05:30
val intent = Intent(context, BackgroundMode::class.java)
2022-09-08 23:49:44 +05:30
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)
2022-08-08 14:13:46 +05:30
// start the background mode as foreground service
ContextCompat.startForegroundService(context, intent)
2022-07-23 19:11:57 +05:30
}
/**
* 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
}
2022-07-23 19:11:57 +05:30
}