14fe450b72
apple / swift (push) Successful in 53s
ci / web (push) Successful in 35s
ci / docs-site (push) Successful in 35s
ci / bench (push) Successful in 1m48s
deb / build-publish (push) Successful in 3m28s
decky / build-publish (push) Successful in 10s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 4s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 4s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 4s
ci / rust (push) Successful in 6m59s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 8s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 5s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 5m46s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 5m44s
docker / deploy-docs (push) Successful in 19s
android / android (push) Successful in 2m41s
Replace the ad-hoc screen switching with a Material3 bottom NavigationBar. Two top-level destinations — Connect (Home icon) and Settings (gear) — persist across tab switches; the immersive stream view is shown full-screen, outside the bar. Settings is now a tab, so its button is dropped from the Connect screen. - app/build.gradle.kts: + androidx.compose.material:material-icons-core (tab icons). - MainActivity: Screen sealed interface -> Tab enum; App() wraps the tabs in a Scaffold with a NavigationBar bottomBar (streamHandle != 0 -> StreamScreen full-screen); ConnectScreen drops the onOpenSettings param + the Settings button. Verified live (emulator): the bar renders with Connect/Settings; tapping a tab swaps content and moves the selected indicator; the bar persists on both tabs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69 lines
2.4 KiB
Kotlin
69 lines
2.4 KiB
Kotlin
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||
|
||
plugins {
|
||
id("com.android.application")
|
||
// AGP 9 built-in Kotlin: NO org.jetbrains.kotlin.android. The Compose compiler plugin is
|
||
// supplied by AGP, so it's applied without a version.
|
||
id("org.jetbrains.kotlin.plugin.compose")
|
||
}
|
||
|
||
android {
|
||
namespace = "io.unom.punktfunk"
|
||
compileSdk = 37 // Android 17 — required by androidx.core 1.19.0; targetSdk stays 36 for now.
|
||
|
||
defaultConfig {
|
||
applicationId = "io.unom.punktfunk"
|
||
minSdk = 31
|
||
targetSdk = 36
|
||
versionCode = 1
|
||
versionName = "0.0.1"
|
||
ndk { abiFilters += listOf("arm64-v8a", "x86_64") }
|
||
}
|
||
|
||
buildTypes {
|
||
release {
|
||
isMinifyEnabled = false // scaffold; enable R8 + shrinkResources later
|
||
}
|
||
}
|
||
|
||
buildFeatures { compose = true }
|
||
|
||
compileOptions {
|
||
sourceCompatibility = JavaVersion.VERSION_21
|
||
targetCompatibility = JavaVersion.VERSION_21
|
||
}
|
||
packaging {
|
||
jniLibs {
|
||
useLegacyPackaging = false
|
||
// punktfunk-core is statically linked into libpunktfunk_android.so (rlib). Its standalone
|
||
// cdylib (built because the core crate also declares crate-type = cdylib) is never loaded
|
||
// by Kotlin — drop it from the APK rather than ship ~5–9 MB of dead code.
|
||
excludes += "**/libpunktfunk_core.so"
|
||
}
|
||
}
|
||
}
|
||
|
||
kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_21) } }
|
||
|
||
dependencies {
|
||
implementation(project(":kit"))
|
||
|
||
val composeBom = platform("androidx.compose:compose-bom:2026.05.01")
|
||
implementation(composeBom)
|
||
|
||
implementation("androidx.core:core-ktx:1.19.0")
|
||
implementation("androidx.activity:activity-compose:1.13.0")
|
||
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.10.0")
|
||
|
||
implementation("androidx.compose.ui:ui")
|
||
implementation("androidx.compose.ui:ui-tooling-preview")
|
||
implementation("androidx.compose.foundation:foundation")
|
||
implementation("androidx.compose.material3:material3")
|
||
implementation("androidx.compose.material:material-icons-core") // bottom-bar tab icons
|
||
debugImplementation("androidx.compose.ui:ui-tooling")
|
||
|
||
// Android TV components (we target phone + TV) land in the TV-UI milestone:
|
||
// implementation("androidx.tv:tv-material:1.1.0")
|
||
// The manifest already declares leanback so the scaffold installs on TV.
|
||
}
|