From 1a2e858bf120c9b8a4be572ca0da34c1ec8bc10f Mon Sep 17 00:00:00 2001 From: Ceyhun Ozgoc Date: Fri, 3 Apr 2026 13:13:59 +0200 Subject: [PATCH 1/3] Declare leanback launcher support --- advertising-optiview-ads/src/main/AndroidManifest.xml | 8 ++++++++ background-playback/src/main/AndroidManifest.xml | 8 ++++++++ basic-playback/src/main/AndroidManifest.xml | 8 ++++++++ custom-surface-rendering/src/main/AndroidManifest.xml | 8 ++++++++ drm-playback/src/main/AndroidManifest.xml | 8 ++++++++ full-screen-handling/src/main/AndroidManifest.xml | 8 ++++++++ google-cast/src/main/AndroidManifest.xml | 8 ++++++++ google-dai/src/main/AndroidManifest.xml | 8 ++++++++ google-ima/src/main/AndroidManifest.xml | 8 ++++++++ localization/src/main/AndroidManifest.xml | 8 ++++++++ metadata-handling/src/main/AndroidManifest.xml | 8 ++++++++ offline-playback/src/main/AndroidManifest.xml | 8 ++++++++ open-video-ui/src/main/AndroidManifest.xml | 8 ++++++++ pip-handling/src/main/AndroidManifest.xml | 8 ++++++++ simple-ott/src/main/AndroidManifest.xml | 8 ++++++++ streaming-millicast/src/main/AndroidManifest.xml | 8 ++++++++ streaming-theolive/src/main/AndroidManifest.xml | 8 ++++++++ 17 files changed, 136 insertions(+) diff --git a/advertising-optiview-ads/src/main/AndroidManifest.xml b/advertising-optiview-ads/src/main/AndroidManifest.xml index 0a69522..cb525f3 100644 --- a/advertising-optiview-ads/src/main/AndroidManifest.xml +++ b/advertising-optiview-ads/src/main/AndroidManifest.xml @@ -1,6 +1,13 @@ + + + + + + + + diff --git a/basic-playback/src/main/AndroidManifest.xml b/basic-playback/src/main/AndroidManifest.xml index 0a69522..cb525f3 100644 --- a/basic-playback/src/main/AndroidManifest.xml +++ b/basic-playback/src/main/AndroidManifest.xml @@ -1,6 +1,13 @@ + + + + + + + + diff --git a/drm-playback/src/main/AndroidManifest.xml b/drm-playback/src/main/AndroidManifest.xml index 6ad827c..487084f 100644 --- a/drm-playback/src/main/AndroidManifest.xml +++ b/drm-playback/src/main/AndroidManifest.xml @@ -3,6 +3,13 @@ + + + + diff --git a/full-screen-handling/src/main/AndroidManifest.xml b/full-screen-handling/src/main/AndroidManifest.xml index 4c48a4c..3da2adc 100644 --- a/full-screen-handling/src/main/AndroidManifest.xml +++ b/full-screen-handling/src/main/AndroidManifest.xml @@ -3,6 +3,13 @@ + + + + diff --git a/google-cast/src/main/AndroidManifest.xml b/google-cast/src/main/AndroidManifest.xml index 34134e0..d0c0765 100644 --- a/google-cast/src/main/AndroidManifest.xml +++ b/google-cast/src/main/AndroidManifest.xml @@ -4,6 +4,13 @@ + + + + diff --git a/google-dai/src/main/AndroidManifest.xml b/google-dai/src/main/AndroidManifest.xml index e96f5fd..19c03ad 100644 --- a/google-dai/src/main/AndroidManifest.xml +++ b/google-dai/src/main/AndroidManifest.xml @@ -3,6 +3,13 @@ + + + + diff --git a/google-ima/src/main/AndroidManifest.xml b/google-ima/src/main/AndroidManifest.xml index e96f5fd..19c03ad 100644 --- a/google-ima/src/main/AndroidManifest.xml +++ b/google-ima/src/main/AndroidManifest.xml @@ -3,6 +3,13 @@ + + + + diff --git a/localization/src/main/AndroidManifest.xml b/localization/src/main/AndroidManifest.xml index ec50aff..8750ac7 100644 --- a/localization/src/main/AndroidManifest.xml +++ b/localization/src/main/AndroidManifest.xml @@ -1,6 +1,13 @@ + + + + + + + + diff --git a/offline-playback/src/main/AndroidManifest.xml b/offline-playback/src/main/AndroidManifest.xml index 4b93785..e705afa 100644 --- a/offline-playback/src/main/AndroidManifest.xml +++ b/offline-playback/src/main/AndroidManifest.xml @@ -9,6 +9,13 @@ + + + + diff --git a/open-video-ui/src/main/AndroidManifest.xml b/open-video-ui/src/main/AndroidManifest.xml index f025651..5cf542b 100644 --- a/open-video-ui/src/main/AndroidManifest.xml +++ b/open-video-ui/src/main/AndroidManifest.xml @@ -1,6 +1,13 @@ + + + + + + + + diff --git a/simple-ott/src/main/AndroidManifest.xml b/simple-ott/src/main/AndroidManifest.xml index a8ed247..84c983b 100644 --- a/simple-ott/src/main/AndroidManifest.xml +++ b/simple-ott/src/main/AndroidManifest.xml @@ -6,6 +6,13 @@ + + + + diff --git a/streaming-millicast/src/main/AndroidManifest.xml b/streaming-millicast/src/main/AndroidManifest.xml index 0a69522..cb525f3 100644 --- a/streaming-millicast/src/main/AndroidManifest.xml +++ b/streaming-millicast/src/main/AndroidManifest.xml @@ -1,6 +1,13 @@ + + + + + + + + Date: Fri, 3 Apr 2026 13:15:13 +0200 Subject: [PATCH 2/3] Add banner for Android TV --- .../src/main/AndroidManifest.xml | 1 + .../src/main/AndroidManifest.xml | 1 + basic-playback/src/main/AndroidManifest.xml | 1 + common/src/main/res/drawable/tv_banner.xml | 65 +++++++++++++++++++ .../src/main/AndroidManifest.xml | 1 + drm-playback/src/main/AndroidManifest.xml | 1 + .../src/main/AndroidManifest.xml | 1 + google-cast/src/main/AndroidManifest.xml | 1 + google-dai/src/main/AndroidManifest.xml | 1 + google-ima/src/main/AndroidManifest.xml | 1 + localization/src/main/AndroidManifest.xml | 1 + .../src/main/AndroidManifest.xml | 1 + offline-playback/src/main/AndroidManifest.xml | 1 + open-video-ui/src/main/AndroidManifest.xml | 1 + pip-handling/src/main/AndroidManifest.xml | 1 + simple-ott/src/main/AndroidManifest.xml | 1 + .../src/main/AndroidManifest.xml | 1 + .../src/main/AndroidManifest.xml | 1 + 18 files changed, 82 insertions(+) create mode 100644 common/src/main/res/drawable/tv_banner.xml diff --git a/advertising-optiview-ads/src/main/AndroidManifest.xml b/advertising-optiview-ads/src/main/AndroidManifest.xml index cb525f3..c892a03 100644 --- a/advertising-optiview-ads/src/main/AndroidManifest.xml +++ b/advertising-optiview-ads/src/main/AndroidManifest.xml @@ -9,6 +9,7 @@ android:required="false" /> diff --git a/background-playback/src/main/AndroidManifest.xml b/background-playback/src/main/AndroidManifest.xml index 0fba871..56d4259 100644 --- a/background-playback/src/main/AndroidManifest.xml +++ b/background-playback/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ android:required="false" /> diff --git a/basic-playback/src/main/AndroidManifest.xml b/basic-playback/src/main/AndroidManifest.xml index cb525f3..c892a03 100644 --- a/basic-playback/src/main/AndroidManifest.xml +++ b/basic-playback/src/main/AndroidManifest.xml @@ -9,6 +9,7 @@ android:required="false" /> diff --git a/common/src/main/res/drawable/tv_banner.xml b/common/src/main/res/drawable/tv_banner.xml new file mode 100644 index 0000000..6a2ad85 --- /dev/null +++ b/common/src/main/res/drawable/tv_banner.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/custom-surface-rendering/src/main/AndroidManifest.xml b/custom-surface-rendering/src/main/AndroidManifest.xml index 89ebd1e..12ede14 100644 --- a/custom-surface-rendering/src/main/AndroidManifest.xml +++ b/custom-surface-rendering/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:required="false" /> diff --git a/drm-playback/src/main/AndroidManifest.xml b/drm-playback/src/main/AndroidManifest.xml index 487084f..83432b0 100644 --- a/drm-playback/src/main/AndroidManifest.xml +++ b/drm-playback/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:required="false" /> diff --git a/full-screen-handling/src/main/AndroidManifest.xml b/full-screen-handling/src/main/AndroidManifest.xml index 3da2adc..2c7b2f9 100644 --- a/full-screen-handling/src/main/AndroidManifest.xml +++ b/full-screen-handling/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:required="false" /> diff --git a/google-cast/src/main/AndroidManifest.xml b/google-cast/src/main/AndroidManifest.xml index d0c0765..6a84443 100644 --- a/google-cast/src/main/AndroidManifest.xml +++ b/google-cast/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ android:required="false" /> diff --git a/google-dai/src/main/AndroidManifest.xml b/google-dai/src/main/AndroidManifest.xml index 19c03ad..a51e73b 100644 --- a/google-dai/src/main/AndroidManifest.xml +++ b/google-dai/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:required="false" /> diff --git a/google-ima/src/main/AndroidManifest.xml b/google-ima/src/main/AndroidManifest.xml index 19c03ad..a51e73b 100644 --- a/google-ima/src/main/AndroidManifest.xml +++ b/google-ima/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:required="false" /> diff --git a/localization/src/main/AndroidManifest.xml b/localization/src/main/AndroidManifest.xml index 8750ac7..1dc17f7 100644 --- a/localization/src/main/AndroidManifest.xml +++ b/localization/src/main/AndroidManifest.xml @@ -9,6 +9,7 @@ android:required="false" /> diff --git a/simple-ott/src/main/AndroidManifest.xml b/simple-ott/src/main/AndroidManifest.xml index 84c983b..7c56929 100644 --- a/simple-ott/src/main/AndroidManifest.xml +++ b/simple-ott/src/main/AndroidManifest.xml @@ -14,6 +14,7 @@ android:required="false" /> diff --git a/streaming-theolive/src/main/AndroidManifest.xml b/streaming-theolive/src/main/AndroidManifest.xml index cb525f3..c892a03 100644 --- a/streaming-theolive/src/main/AndroidManifest.xml +++ b/streaming-theolive/src/main/AndroidManifest.xml @@ -9,6 +9,7 @@ android:required="false" /> From 9f46ba086fcf4ab8f4c8318a48f8b9efa7d8812c Mon Sep 17 00:00:00 2001 From: Ceyhun Ozgoc Date: Fri, 3 Apr 2026 13:15:57 +0200 Subject: [PATCH 3/3] Add check for Cast API for safety --- .../sample/playback/cast/PlayerActivity.kt | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/google-cast/src/main/java/com/theoplayer/sample/playback/cast/PlayerActivity.kt b/google-cast/src/main/java/com/theoplayer/sample/playback/cast/PlayerActivity.kt index 6eff3f7..622de5f 100644 --- a/google-cast/src/main/java/com/theoplayer/sample/playback/cast/PlayerActivity.kt +++ b/google-cast/src/main/java/com/theoplayer/sample/playback/cast/PlayerActivity.kt @@ -1,5 +1,6 @@ package com.theoplayer.sample.playback.cast +import android.content.Context import android.os.Bundle import android.util.Log import androidx.activity.compose.setContent @@ -15,6 +16,8 @@ import androidx.fragment.app.FragmentActivity import androidx.mediarouter.app.MediaRouteButton import com.google.android.gms.cast.framework.CastButtonFactory import com.google.android.gms.cast.framework.CastContext +import com.google.android.gms.common.ConnectionResult +import com.google.android.gms.common.GoogleApiAvailability import com.theoplayer.android.api.THEOplayerConfig import com.theoplayer.android.api.THEOplayerGlobal import com.theoplayer.android.api.THEOplayerView @@ -36,8 +39,25 @@ class PlayerActivity : FragmentActivity() { override fun onCreate(savedInstanceState: Bundle?) { + // Check if Cast API is available on the device (Google Play Services is available, CastContext can be initialized, and device is not an Android TV). + fun isCastAvailable(context: Context): Boolean { + when (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)) { + ConnectionResult.SUCCESS -> { + try { + CastContext.getSharedInstance(context) + return true + } catch (_: Exception) { + return false + } + } + else -> return false + } + } + // Initialize Chromecast immediately, for automatic receiver discovery to work correctly. - CastContext.getSharedInstance(this) + if (isCastAvailable(applicationContext)) { + CastContext.getSharedInstance(this) + } // Enable all debug logs from THEOplayer. THEOplayerGlobal.getSharedInstance(this).logger.enableAllTags() @@ -185,7 +205,9 @@ class PlayerActivity : FragmentActivity() { // CastButtonFactory.setUpMediaRouteButton() method. factory = { _ -> MediaRouteButton(context).apply { - CastButtonFactory.setUpMediaRouteButton(context, this) + if (isCastAvailable(applicationContext)) { + CastButtonFactory.setUpMediaRouteButton(context, this) + } } } )