Removes Tor leaks when loading thumbnails for vides automatically from the ExoPlayer

This commit is contained in:
Vitor Pamplona
2025-04-01 11:56:47 -04:00
parent bd02515209
commit 99ef1fc168
2 changed files with 12 additions and 0 deletions
@@ -27,6 +27,8 @@ import androidx.annotation.OptIn
import androidx.media3.common.MediaItem import androidx.media3.common.MediaItem
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.DataSourceBitmapLoader
import androidx.media3.datasource.okhttp.OkHttpDataSource
import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.session.MediaSession import androidx.media3.session.MediaSession
import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.Futures
@@ -36,6 +38,7 @@ import com.vitorpamplona.quartz.utils.TimeUtils
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import okhttp3.OkHttpClient
class SessionListener( class SessionListener(
val session: MediaSession, val session: MediaSession,
@@ -51,6 +54,7 @@ class SessionListener(
*/ */
class MediaSessionPool( class MediaSessionPool(
val exoPlayerPool: ExoPlayerPool, val exoPlayerPool: ExoPlayerPool,
val okHttpClient: OkHttpClient,
val reset: (MediaSession) -> Unit, val reset: (MediaSession) -> Unit,
) { ) {
val globalCallback = MediaSessionCallback(this) val globalCallback = MediaSessionCallback(this)
@@ -79,6 +83,7 @@ class MediaSessionPool(
} }
} }
@UnstableApi
fun newSession( fun newSession(
id: String, id: String,
context: Context, context: Context,
@@ -87,6 +92,12 @@ class MediaSessionPool(
MediaSession MediaSession
.Builder(context, exoPlayerPool.acquirePlayer(context)) .Builder(context, exoPlayerPool.acquirePlayer(context))
.apply { .apply {
setBitmapLoader(
DataSourceBitmapLoader(
DataSourceBitmapLoader.DEFAULT_EXECUTOR_SERVICE.get(),
OkHttpDataSource.Factory(okHttpClient),
),
)
setId(id) setId(id)
setCallback(globalCallback) setCallback(globalCallback)
}.build() }.build()
@@ -43,6 +43,7 @@ class PlaybackService : MediaSessionService() {
fun newPool(okHttp: OkHttpClient): MediaSessionPool = fun newPool(okHttp: OkHttpClient): MediaSessionPool =
MediaSessionPool( MediaSessionPool(
ExoPlayerPool(ExoPlayerBuilder(okHttp)), ExoPlayerPool(ExoPlayerBuilder(okHttp)),
okHttpClient = okHttp,
reset = { session -> reset = { session ->
(session.player as ExoPlayer).apply { (session.player as ExoPlayer).apply {
repeatMode = Player.REPEAT_MODE_ONE repeatMode = Player.REPEAT_MODE_ONE