diff --git a/app/src/main/java/com/tpstreams/player/MainActivity.kt b/app/src/main/java/com/tpstreams/player/MainActivity.kt index 6b80872..892ac11 100644 --- a/app/src/main/java/com/tpstreams/player/MainActivity.kt +++ b/app/src/main/java/com/tpstreams/player/MainActivity.kt @@ -134,8 +134,8 @@ class MainActivity : AppCompatActivity() { // TPStreams Tab Buttons findViewById(R.id.btn_drm_video).setOnClickListener { val intent = Intent(this, PlayerActivity::class.java).apply { - putExtra(EXTRA_ASSET_ID, "42h2tZ5fmNf") - putExtra(EXTRA_ACCESS_TOKEN, "9327e2d0-fa13-4288-902d-840f32cd0eed") + putExtra(EXTRA_ASSET_ID, "7xbZeQzR36h") + putExtra(EXTRA_ACCESS_TOKEN, "3d9838f3-db51-4fc3-8472-075ab5e40b64") } startActivity(intent) } diff --git a/app/src/main/java/com/tpstreams/player/PlayerActivity.kt b/app/src/main/java/com/tpstreams/player/PlayerActivity.kt index d32edfb..2d40594 100644 --- a/app/src/main/java/com/tpstreams/player/PlayerActivity.kt +++ b/app/src/main/java/com/tpstreams/player/PlayerActivity.kt @@ -2,10 +2,12 @@ package com.tpstreams.player import android.graphics.Color import android.os.Bundle +import android.widget.Toast import androidx.activity.viewModels import androidx.annotation.OptIn import androidx.appcompat.app.AppCompatActivity import androidx.media3.common.util.UnstableApi +import com.tpstreams.player.constants.PlaybackError import com.tpstreams.player.databinding.ActivityPlayerBinding @OptIn(UnstableApi::class) @@ -27,8 +29,17 @@ class PlayerActivity : AppCompatActivity() { viewModel.initPlayer(assetId, accessToken, isTestpress) viewModel.player?.setMaxResolution(1080) binding.playerView.setVideoResolution(720) - binding.playerView.player = viewModel.player + viewModel.player?.listener = object : TPStreamsPlayer.Listener { + override fun onAccessTokenExpired(videoId: String, callback: (String) -> Unit) {} + override fun onError(error: PlaybackError, message: String) {} + + override fun onSubtitleStateChanged(enabled: Boolean, language: String?) { + val state = if (enabled) "ON: $language" else "OFF" + Toast.makeText(this@PlayerActivity, "Subtitles $state and Language: $language", Toast.LENGTH_SHORT).show() + } + } + binding.playerView.player = viewModel.player binding.playerView.setWatermarks( listOf( diff --git a/tpstreams-android-player/src/main/java/com/tpstreams/player/TPStreamsPlayer.kt b/tpstreams-android-player/src/main/java/com/tpstreams/player/TPStreamsPlayer.kt index 0ede185..54ad029 100644 --- a/tpstreams-android-player/src/main/java/com/tpstreams/player/TPStreamsPlayer.kt +++ b/tpstreams-android-player/src/main/java/com/tpstreams/player/TPStreamsPlayer.kt @@ -87,6 +87,8 @@ private constructor( * probes complete. The UI can use this to show a "Diagnosing…" state. */ fun onNetworkDiagnosticsStarted() {} + + fun onSubtitleStateChanged(enabled: Boolean, language: String?) {} } private var isPrepared = false @@ -105,7 +107,11 @@ private constructor( private val networkRecoveryHandler = NetworkRecoveryHandler(context) private val textTrackManager: TextTrackManager by lazy { - TextTrackManager(exoPlayer, trackSelector) + TextTrackManager( + exoPlayer, + trackSelector, + onSubtitleStateChanged = { enabled, language -> _listener?.onSubtitleStateChanged(enabled, language) }, + ) } private val resolutionManager: ResolutionManager by lazy { ResolutionManager(exoPlayer, trackSelector) diff --git a/tpstreams-android-player/src/main/java/com/tpstreams/player/TPStreamsPlayerView.kt b/tpstreams-android-player/src/main/java/com/tpstreams/player/TPStreamsPlayerView.kt index 3f7d7f8..4d11a8f 100644 --- a/tpstreams-android-player/src/main/java/com/tpstreams/player/TPStreamsPlayerView.kt +++ b/tpstreams-android-player/src/main/java/com/tpstreams/player/TPStreamsPlayerView.kt @@ -627,4 +627,8 @@ internal class ViewPlayerListener( override fun onNetworkDiagnosticsStarted() = onNetworkDiagnosticsStartedAction() + + override fun onSubtitleStateChanged(enabled: Boolean, language: String?) { + userListener?.onSubtitleStateChanged(enabled, language) + } } diff --git a/tpstreams-android-player/src/main/java/com/tpstreams/player/tracks/TextTrackManager.kt b/tpstreams-android-player/src/main/java/com/tpstreams/player/tracks/TextTrackManager.kt index 350b6b6..5cb7d11 100644 --- a/tpstreams-android-player/src/main/java/com/tpstreams/player/tracks/TextTrackManager.kt +++ b/tpstreams-android-player/src/main/java/com/tpstreams/player/tracks/TextTrackManager.kt @@ -15,9 +15,11 @@ import androidx.media3.exoplayer.trackselection.DefaultTrackSelector internal class TextTrackManager( private val exoPlayer: ExoPlayer, private val trackSelector: DefaultTrackSelector, + private val onSubtitleStateChanged: ((Boolean, String?) -> Unit)? = null, ) { private var subtitleMetadata: Map = emptyMap() + private var previousSubtitleLanguage: String? = null fun updateSubtitleMetadata(metadata: Map) { subtitleMetadata = metadata @@ -61,6 +63,12 @@ internal class TextTrackManager( if (exoPlayer.isPlaying) { exoPlayer.seekTo(currentPosition) } + + val enabled = language != null + if (language != previousSubtitleLanguage) { + previousSubtitleLanguage = language + onSubtitleStateChanged?.invoke(enabled, language) + } } fun getActiveTextTrack(): Pair? {