diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 93919fb..43affde 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -21,7 +21,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: temurin
- java-version: 17
+ java-version: 21
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
with:
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 4b9c9dd..7602852 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -32,7 +32,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: temurin
- java-version: 17
+ java-version: 21
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
with:
@@ -46,7 +46,7 @@ jobs:
source: ./site
destination: ./_site
- name: Upload artifact
- uses: actions/upload-pages-artifact@v4
+ uses: actions/upload-pages-artifact@v5
# Deployment job
deploy:
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index ed1fb0d..07ec4df 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -38,7 +38,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: temurin
- java-version: 17
+ java-version: 21
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
with:
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 61482c6..fb41ca5 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -17,7 +17,6 @@
-
-
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index c224ad5..90d1b4b 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,7 @@
-
+
+
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 28098ce..bca438e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,11 @@
> - 🏠 Internal
> - 💅 Polish
+## v1.14.0 (2026-04-20)
+
+* 🚀 Added support for THEOplayer 11.0. ([#98](https://github.com/THEOplayer/android-ui/pull/98))
+* 🚀 Updated to Jetpack Compose version 1.10.6 ([BOM](https://developer.android.com/jetpack/compose/bom) 2026.03.01).
+
## v1.13.4 (2026-04-07)
* 🐛 The language menu now prefers to show CEA-608/708 closed caption tracks with their localized language name (if available) instead of their language code (e.g. "en") or channel number (e.g. "CC1"). ([#84](https://github.com/THEOplayer/android-ui/pull/84), [#95](https://github.com/THEOplayer/android-ui/pull/95))
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 7a13303..54edd78 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -3,7 +3,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
plugins {
alias(libs.plugins.android.application)
- alias(libs.plugins.kotlin.android)
alias(libs.plugins.compose.compiler)
}
@@ -54,12 +53,9 @@ android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
- }
- kotlin {
- compilerOptions {
- apiVersion = KotlinVersion.KOTLIN_2_0
- jvmTarget = JvmTarget.JVM_1_8
- }
+
+ // Required by Google IMA SDK v3.37.0+
+ isCoreLibraryDesugaringEnabled = true
}
buildFeatures {
compose = true
@@ -71,11 +67,20 @@ android {
}
}
+kotlin {
+ compilerOptions {
+ apiVersion = KotlinVersion.KOTLIN_2_0
+ jvmTarget = JvmTarget.JVM_1_8
+ }
+}
+
dependencies {
val mavenImplementation = configurations.getByName("mavenImplementation")
val latestPlayerImplementation = configurations.getByName("latestPlayerImplementation")
val minPlayerImplementation = configurations.getByName("minPlayerImplementation")
+ coreLibraryDesugaring(libs.androidTools.desugarJdkLibs)
+
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ktx)
diff --git a/build.gradle.kts b/build.gradle.kts
index 96bcfa5..5ec283a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -13,7 +13,6 @@ buildscript {
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
- alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.compose.compiler) apply false
alias(libs.plugins.dokka) apply false
}
diff --git a/gradle.properties b/gradle.properties
index f6c4344..8054b3d 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -25,6 +25,5 @@ android.nonFinalResIds=true
org.gradle.configuration-cache=true
# Enable Dokka v2
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
-org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
# The version of the THEOplayer Open Video UI for Android.
-version=1.13.4
+version=1.14.0
diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties
new file mode 100644
index 0000000..5c34300
--- /dev/null
+++ b/gradle/gradle-daemon-jvm.properties
@@ -0,0 +1,13 @@
+#This file is generated by updateDaemonJvm
+toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/56a19bc915b9ba2eb62ba7554c61b919/redirect
+toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/398ffe3949748bfb1d5636f023d228fd/redirect
+toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/56a19bc915b9ba2eb62ba7554c61b919/redirect
+toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/398ffe3949748bfb1d5636f023d228fd/redirect
+toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/e99bae143b75f9a10ead10248f02055e/redirect
+toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/04e088f8677de3b384108493cc9481d0/redirect
+toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/56a19bc915b9ba2eb62ba7554c61b919/redirect
+toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/398ffe3949748bfb1d5636f023d228fd/redirect
+toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/e55dccbfe27cb97945148c61a39c89c5/redirect
+toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/dbd05c4936d573642f94cd149e1356c8/redirect
+toolchainVendor=JETBRAINS
+toolchainVersion=21
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 0840087..feefc37 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -2,23 +2,24 @@
android-minSdk = "23"
android-compileSdk = "36"
android-targetSdk = "36"
-gradle = "8.13.0"
-kotlin = "2.2.10"
-ktx = "1.17.0"
-lifecycle-compose = "2.9.3"
+gradle = "9.1.1"
+kotlin = "2.3.20"
+ktx = "1.18.0"
+lifecycle-compose = "2.10.0"
activity-compose = "1.13.0"
appcompat = "1.7.1"
-compose-bom = "2025.08.01"
+compose-bom = "2026.03.01"
junit4 = "4.13.2"
mockk = "1.14.9"
-playServices-castFramework = "21.5.0"
-ui-test-junit4 = "1.9.0" # ...not in BOM for some reason?
+playServices-castFramework = "22.3.1"
+ui-test-junit4 = "1.10.6" # ...not in BOM for some reason?
androidx-junit = "1.3.0"
androidx-espresso = "3.7.0"
androidx-mediarouter = "1.8.1"
-dokka = "2.0.0"
-theoplayer = { prefer = "10.+", strictly = "[7.6.0, 11.0)" }
-theoplayer-compile = { prefer = "10.+", strictly = "[10.13.0, 11.0)" }
+desugar-jdk-libs = "2.1.5"
+dokka = "2.2.0"
+theoplayer = { prefer = "11.+", strictly = "[7.6.0, 12.0)" }
+theoplayer-compile = { prefer = "11.+", strictly = "[10.13.0, 12.0)" }
theoplayer-min = { strictly = "7.6.0" }
core = "1.18.0"
core-pip = "1.0.0-alpha02"
@@ -42,6 +43,7 @@ androidx-espresso = { group = "androidx.test.espresso", name = "espresso-core",
androidx-mediarouter = { group = "androidx.mediarouter", name = "mediarouter", version.ref = "androidx-mediarouter" }
androidx-core = { group = "androidx.core", name = "core", version.ref = "core" }
androidx-core-pip = { group = "androidx.core", name = "core-pip", version.ref = "core-pip" }
+androidTools-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar-jdk-libs" }
playServices-castFramework = { group = "com.google.android.gms", name = "play-services-cast-framework", version.ref = "playServices-castFramework" }
gradle-plugin = { group = "com.android.tools.build", name = "gradle", version.ref = "gradle" }
dokka-base = { group = "org.jetbrains.dokka", name = "dokka-base", version.ref = "dokka" }
@@ -60,7 +62,6 @@ theoplayer-compile = { group = "com.theoplayer.theoplayer-sdk-android", name = "
[plugins]
android-application = { id = "com.android.application", version.ref = "gradle" }
android-library = { id = "com.android.library", version.ref = "gradle" }
-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
dokka-javadoc = { id = "org.jetbrains.dokka-javadoc" }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 3c51327..90fee24 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Mon Nov 20 16:01:06 CET 2023
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/settings.gradle.kts b/settings.gradle.kts
index ede4760..4c36ccb 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -5,6 +5,9 @@ pluginManagement {
gradlePluginPortal()
}
}
+plugins {
+ id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
+}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
diff --git a/ui/build.gradle.kts b/ui/build.gradle.kts
index 96fdcf2..2c568c6 100644
--- a/ui/build.gradle.kts
+++ b/ui/build.gradle.kts
@@ -11,7 +11,6 @@ buildscript {
plugins {
alias(libs.plugins.android.library)
- alias(libs.plugins.kotlin.android)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.dokka)
alias(libs.plugins.dokka.javadoc)
@@ -44,12 +43,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
- kotlin {
- compilerOptions {
- apiVersion = KotlinVersion.KOTLIN_2_0
- jvmTarget = JvmTarget.JVM_1_8
- }
- }
buildFeatures {
compose = true
}
@@ -67,6 +60,13 @@ android {
}
}
+kotlin {
+ compilerOptions {
+ apiVersion = KotlinVersion.KOTLIN_2_0
+ jvmTarget = JvmTarget.JVM_1_8
+ }
+}
+
dependencies {
implementation(platform(libs.androidx.compose.bom))
@@ -97,7 +97,7 @@ dependencies {
dokka {
moduleName = rootProject.name
- dokkaSourceSets.main {
+ dokkaSourceSets.configureEach {
sourceLink {
localDirectory = file("src/main/java")
remoteUrl("https://github.com/THEOplayer/android-ui/blob/${version}/ui/src/main/java")
@@ -106,8 +106,8 @@ dokka {
externalDocumentationLinks {
register("com.theoplayer.android.api") {
- url("https://optiview.dolby.com/docs/theoplayer/v10/api-reference/android/")
- packageListUrl("https://optiview.dolby.com/docs/theoplayer/v10/api-reference/android/package-list")
+ url("https://optiview.dolby.com/docs/theoplayer/v11/api-reference/android/")
+ packageListUrl("https://optiview.dolby.com/docs/theoplayer/v11/api-reference/android/package-list")
}
}
}