From b2c7c479e087d0514b91b84a844b84678beb1fb1 Mon Sep 17 00:00:00 2001 From: syed-tp Date: Wed, 1 Apr 2026 19:54:28 +0530 Subject: [PATCH 1/2] fix: resolve Media3 binary compatibility crashes in DownloadHelper callbacks --- gradle/libs.versions.toml | 2 +- .../com/tpstreams/player/download/DownloadController.kt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 581f20c..f66a314 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ espressoCore = "3.6.1" lifecycleRuntimeKtx = "2.9.1" appcompat = "1.7.1" material = "1.12.0" -media3 = "1.7.1" +media3 = "1.8.0" okhttp = "4.12.0" coroutines = "1.10.2" constraintlayout = "2.2.1" diff --git a/tpstreams-android-player/src/main/java/com/tpstreams/player/download/DownloadController.kt b/tpstreams-android-player/src/main/java/com/tpstreams/player/download/DownloadController.kt index 3ac6e2f..441cf3d 100644 --- a/tpstreams-android-player/src/main/java/com/tpstreams/player/download/DownloadController.kt +++ b/tpstreams-android-player/src/main/java/com/tpstreams/player/download/DownloadController.kt @@ -219,7 +219,7 @@ object DownloadController { ) helper.prepare(object : DownloadHelper.Callback { - override fun onPrepared(helper: DownloadHelper) { + override fun onPrepared(helper: DownloadHelper, helperPrepared: Boolean) { try { val resolutions = mutableListOf() val bitrates = mutableMapOf() @@ -285,7 +285,7 @@ object DownloadController { ) helper.prepare(object : DownloadHelper.Callback { - override fun onPrepared(helper: DownloadHelper) { + override fun onPrepared(helper: DownloadHelper, helperPrepared: Boolean) { try { Log.d(TAG, "Download prepared for: ${mediaItem.mediaId}") val baseRequest = helper.getDownloadRequest(mediaItem.mediaId.toByteArray()) @@ -453,7 +453,7 @@ object DownloadController { ) helper.prepare(object : DownloadHelper.Callback { - override fun onPrepared(helper: DownloadHelper) { + override fun onPrepared(helper: DownloadHelper, helperPrepared: Boolean) { try { val drmFormat = findDrmFormat(helper) if (drmFormat != null) { From 7bf4c74140226d3de08db445ac0c0e716766ff80 Mon Sep 17 00:00:00 2001 From: syed-tp Date: Wed, 1 Apr 2026 20:20:12 +0530 Subject: [PATCH 2/2] fix: handle unavailable download tracks in DownloadController and update .gitignore to ignore openspec files --- .../player/download/DownloadController.kt | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/tpstreams-android-player/src/main/java/com/tpstreams/player/download/DownloadController.kt b/tpstreams-android-player/src/main/java/com/tpstreams/player/download/DownloadController.kt index 441cf3d..2e062ef 100644 --- a/tpstreams-android-player/src/main/java/com/tpstreams/player/download/DownloadController.kt +++ b/tpstreams-android-player/src/main/java/com/tpstreams/player/download/DownloadController.kt @@ -219,7 +219,13 @@ object DownloadController { ) helper.prepare(object : DownloadHelper.Callback { - override fun onPrepared(helper: DownloadHelper, helperPrepared: Boolean) { + override fun onPrepared(helper: DownloadHelper, tracksInfoAvailable: Boolean) { + if (!tracksInfoAvailable) { + callback(emptyList(), emptyMap()) + helper.release() + return + } + try { val resolutions = mutableListOf() val bitrates = mutableMapOf() @@ -285,7 +291,12 @@ object DownloadController { ) helper.prepare(object : DownloadHelper.Callback { - override fun onPrepared(helper: DownloadHelper, helperPrepared: Boolean) { + override fun onPrepared(helper: DownloadHelper, tracksInfoAvailable: Boolean) { + if (!tracksInfoAvailable) { + helper.release() + return + } + try { Log.d(TAG, "Download prepared for: ${mediaItem.mediaId}") val baseRequest = helper.getDownloadRequest(mediaItem.mediaId.toByteArray()) @@ -453,7 +464,13 @@ object DownloadController { ) helper.prepare(object : DownloadHelper.Callback { - override fun onPrepared(helper: DownloadHelper, helperPrepared: Boolean) { + override fun onPrepared(helper: DownloadHelper, tracksInfoAvailable: Boolean) { + if (!tracksInfoAvailable) { + onError?.invoke("No tracks available") + helper.release() + return + } + try { val drmFormat = findDrmFormat(helper) if (drmFormat != null) {