Files
castarr/app/build.gradle.kts
be-nj 869060c56f
Some checks failed
Build TV app / build (push) Failing after 2s
Pick clubs from the top three divisions, and stop the rail from crashing
The club shortcut now offers every club of the first three German
divisions instead of two hard-coded ones. Up to three can be active at
once; benjamin and tobiasb still start with Hansa and the VfB switched on.

Also fixes a crash on the left jump out of the channel list: the jump
targeted a FocusRequester bound to the selected rail row, and a row that
is scrolled out of a LazyColumn is not composed, so requesting focus on it
threw. Jumps are now attempted and fall back to normal focus movement.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 02:54:04 +02:00

107 lines
3.3 KiB
Kotlin

plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.plugin.compose")
}
android {
namespace = "dev.castarr.tv"
compileSdk = 35
defaultConfig {
applicationId = "dev.castarr.tv"
minSdk = 26
targetSdk = 35
versionCode = 27
versionName = "0.10.1"
}
// Release signing from environment (see ~/.keys/castarr-release.env on the
// build host); unsigned release build when unset.
val storeFileEnv = System.getenv("CASTARR_STORE_FILE")
if (storeFileEnv != null) {
signingConfigs {
create("release") {
storeFile = file(storeFileEnv)
storePassword = System.getenv("CASTARR_STORE_PASSWORD")
keyAlias = System.getenv("CASTARR_KEY_ALIAS")
keyPassword = System.getenv("CASTARR_STORE_PASSWORD")
}
}
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
if (storeFileEnv != null) {
signingConfig = signingConfigs.getByName("release")
}
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
allWarningsAsErrors = true
}
// Global layout rule: everything test-related lives under tests/.
sourceSets {
getByName("test") {
java.setSrcDirs(listOf("../tests/unit"))
}
}
testOptions {
unitTests.all {
it.reports.junitXml.outputLocation.set(file("../tests/runs/junit"))
it.reports.html.outputLocation.set(file("../tests/runs/junit-html"))
}
}
buildFeatures {
compose = true
buildConfig = true
}
lint {
// Media3's UI classes are @UnstableApi; the opt-in lint check would
// otherwise fail release builds.
disable += "UnsafeOptInUsageError"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.15.0")
implementation(platform("androidx.compose:compose-bom:2024.10.01"))
implementation("androidx.activity:activity-compose:1.9.3")
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.foundation:foundation")
implementation("androidx.tv:tv-material:1.0.0")
implementation("androidx.compose.material3:material3")
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.7")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
implementation("androidx.media3:media3-exoplayer:1.4.1")
implementation("androidx.media3:media3-exoplayer-hls:1.4.1")
implementation("androidx.media3:media3-ui:1.4.1")
implementation("androidx.media3:media3-session:1.4.1")
implementation("org.nanohttpd:nanohttpd:2.3.1")
implementation("org.nanohttpd:nanohttpd-websocket:2.3.1")
implementation("com.google.zxing:core:3.5.3")
implementation("io.coil-kt:coil-compose:2.7.0")
testImplementation("junit:junit:4.13.2")
}
// Full JDK for javac via toolchain (host may only have a JRE); resolved by
// the foojay convention plugin in settings.
kotlin {
jvmToolchain(17)
}