Fixes generateForegroundServiceDidNotStartInTimeException on Samsung phones

This commit is contained in:
Vitor Pamplona 2023-08-19 14:44:39 -04:00
parent 70c4c69bbf
commit 0af141c5b7

View File

@ -26,15 +26,35 @@ class PlaybackService : MediaSessionService() {
return ProgressiveMediaSource.Factory(VideoCache.get(Amethyst.instance, HttpClient.getHttpClient())) return ProgressiveMediaSource.Factory(VideoCache.get(Amethyst.instance, HttpClient.getHttpClient()))
} }
fun lazyHlsDS(): MultiPlayerPlaybackManager {
managerHls?.let { return it }
val newInstance = MultiPlayerPlaybackManager(newHslDataSource(), videoViewedPositionCache)
managerHls = newInstance
return newInstance
}
fun lazyProgressiveDS(): MultiPlayerPlaybackManager {
managerProgressive?.let { return it }
val newInstance = MultiPlayerPlaybackManager(newProgressiveDataSource(), videoViewedPositionCache)
managerProgressive = newInstance
return newInstance
}
fun lazyLocalDS(): MultiPlayerPlaybackManager {
managerLocal?.let { return it }
val newInstance = MultiPlayerPlaybackManager(cachedPositions = videoViewedPositionCache)
managerLocal = newInstance
return newInstance
}
// Create your Player and MediaSession in the onCreate lifecycle event // Create your Player and MediaSession in the onCreate lifecycle event
@OptIn(UnstableApi::class) @OptIn(UnstableApi::class)
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
managerHls = MultiPlayerPlaybackManager(newHslDataSource(), videoViewedPositionCache)
managerProgressive = MultiPlayerPlaybackManager(newProgressiveDataSource(), videoViewedPositionCache)
managerLocal = MultiPlayerPlaybackManager(cachedPositions = videoViewedPositionCache)
// Stop all videos and recreates all managers when the proxy changes. // Stop all videos and recreates all managers when the proxy changes.
HttpClient.proxyChangeListeners.add(this@PlaybackService::onProxyUpdated) HttpClient.proxyChangeListeners.add(this@PlaybackService::onProxyUpdated)
} }
@ -62,11 +82,11 @@ class PlaybackService : MediaSessionService() {
fun getAppropriateMediaSessionManager(fileName: String): MultiPlayerPlaybackManager? { fun getAppropriateMediaSessionManager(fileName: String): MultiPlayerPlaybackManager? {
return if (fileName.startsWith("file")) { return if (fileName.startsWith("file")) {
managerLocal lazyLocalDS()
} else if (fileName.endsWith("m3u8")) { } else if (fileName.endsWith("m3u8")) {
managerHls lazyHlsDS()
} else { } else {
managerProgressive lazyProgressiveDS()
} }
} }