Reusing SessionToken for all Playback connections

This commit is contained in:
Vitor Pamplona
2023-12-17 18:44:18 -05:00
parent 97c78aaa3c
commit 2371e0678a
@@ -4,11 +4,14 @@ import android.content.ComponentName
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.util.LruCache
import androidx.media3.session.MediaController import androidx.media3.session.MediaController
import androidx.media3.session.SessionToken import androidx.media3.session.SessionToken
import com.google.common.util.concurrent.MoreExecutors import com.google.common.util.concurrent.MoreExecutors
object PlaybackClientController { object PlaybackClientController {
val cache = LruCache<Int, SessionToken>(1)
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class) @androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
fun prepareController( fun prepareController(
controllerID: String, controllerID: String,
@@ -25,9 +28,14 @@ object PlaybackClientController {
bundle.putString("uri", videoUri) bundle.putString("uri", videoUri)
bundle.putString("callbackUri", callbackUri) bundle.putString("callbackUri", callbackUri)
val sessionTokenLocal = SessionToken(context, ComponentName(context, PlaybackService::class.java)) var session = cache.get(context.hashCode())
if (session == null) {
session = SessionToken(context, ComponentName(context, PlaybackService::class.java))
cache.put(context.hashCode(), session)
}
val controllerFuture = MediaController val controllerFuture = MediaController
.Builder(context, sessionTokenLocal) .Builder(context, session)
.setConnectionHints(bundle) .setConnectionHints(bundle)
.buildAsync() .buildAsync()