chore: use libraries toml

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2025-11-29 15:45:20 +01:00
parent cdc03ec3a7
commit 968b3dccd1
9 changed files with 233 additions and 147 deletions

View File

@ -4,34 +4,18 @@ import java.io.FileInputStream
import java.util.Properties
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.plugin.serialization")
id("org.jetbrains.kotlin.plugin.compose")
id("com.mikepenz.aboutlibraries.plugin")
id("com.google.dagger.hilt.android")
id("com.google.devtools.ksp")
id("io.sentry.android.gradle") version "4.12.0"
id("app.cash.sqldelight") version "2.0.1"
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.aboutlibraries)
alias(libs.plugins.hilt)
alias(libs.plugins.ksp)
alias(libs.plugins.sentry.android)
alias(libs.plugins.sqldelight)
alias(libs.plugins.google.services)
id("kotlin-kapt")
id("kotlin-parcelize")
id("com.google.gms.google-services")
}
val composeBomVersion = "2025.03.00"
val accompanistVersion = "0.34.0"
val okhttpVersion = "4.12.0"
val navVersion = "2.9.0"
val hiltVersion = "2.57"
val glideVersion = "5.0.5"
val ktorVersion = "3.3.2"
val media3Version = "1.7.1"
val material3Version = "1.4.0-alpha15"
val androidXTestVersion = "1.6.1"
object LivekitVersion {
val core = "2.21.0"
val componentsCompose = "1.4.0"
}
fun property(fileName: String, propertyName: String, fallbackEnv: String? = null): String? {
@ -187,138 +171,111 @@ sentry {
}
dependencies {
// Android/Kotlin Core
implementation("androidx.core:core-ktx:1.16.0")
implementation("org.jetbrains.kotlin:kotlin-reflect:2.0.20")
implementation(project(":core:model"))
// Kotlinx - various first-party extensions for Kotlin
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-cbor:1.6.1")
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
implementation("androidx.profileinstaller:profileinstaller:1.4.1")
implementation(libs.android.core.ktx)
implementation(libs.kotlin.reflect)
// Compose BOM
val composeBom = platform("androidx.compose:compose-bom:$composeBomVersion")
implementation(libs.kotlin.serialization.json)
implementation(libs.kotlin.serialization.cbor)
implementation(libs.kotlin.datetime)
val composeBom = platform(libs.compose.bom)
implementation(composeBom)
testImplementation(composeBom)
androidTestImplementation(composeBom)
// Jetpack Compose
implementation("androidx.compose.ui:ui:1.8.2")
implementation("androidx.compose.ui:ui-util")
implementation("androidx.compose.material3:material3:$material3Version")
implementation("androidx.compose.material3:material3-window-size-class:$material3Version")
implementation("androidx.compose.material:material-icons-core:1.7.8")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.runtime:runtime-livedata")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.9.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.1")
implementation("androidx.activity:activity-compose:1.10.1")
implementation(libs.compose.ui)
implementation(libs.compose.ui.util)
implementation(libs.compose.ui.tooling.preview)
implementation(libs.compose.material3)
implementation(libs.compose.material3.windowsizeclass)
implementation(libs.compose.material.icons.core)
implementation(libs.compose.runtime.livedata)
implementation(libs.lifecycle.runtime.ktx)
implementation(libs.lifecycle.viewmodel.compose)
implementation(libs.activity.compose)
// Accompanist - Jetpack Compose Extensions
implementation("com.google.accompanist:accompanist-systemuicontroller:$accompanistVersion")
implementation("com.google.accompanist:accompanist-permissions:$accompanistVersion")
implementation(libs.accompanist.systemuicontroller)
implementation(libs.accompanist.permissions)
// KTOR - HTTP+WebSocket Library
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-logging:$ktorVersion")
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
implementation("io.ktor:ktor-client-okhttp:$ktorVersion")
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.logging)
implementation(libs.ktor.client.contentnegotiation)
implementation(libs.ktor.client.okhttp)
implementation(libs.ktor.serialization.kotlinx.json)
// Screen Navigation
implementation("androidx.navigation:navigation-compose:$navVersion")
implementation(libs.navigation.compose)
// Jetpack Compose Tooling
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")
debugImplementation(libs.compose.ui.tooling)
debugImplementation(libs.compose.ui.test.manifest)
// Hilt - Dependency Injection
implementation("com.google.dagger:hilt-android:$hiltVersion")
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
kapt("com.google.dagger:hilt-compiler:$hiltVersion")
implementation(libs.hilt.android)
implementation(libs.hilt.navigation.compose)
kapt(libs.hilt.compiler)
// Glide - Image Loading
implementation("com.github.bumptech.glide:glide:$glideVersion")
implementation("com.github.bumptech.glide:compose:1.0.0-beta01")
implementation("com.github.bumptech.glide:okhttp3-integration:5.0.5")
ksp("com.github.bumptech.glide:ksp:$glideVersion")
implementation(libs.glide)
implementation(libs.glide.compose)
ksp(libs.glide.ksp)
// AboutLibraries - automated OSS library attribution
implementation("com.mikepenz:aboutlibraries-core:11.3.0-rc02")
implementation(libs.aboutlibraries.core)
// Sentry - crash reporting
implementation("io.sentry:sentry-android:8.13.2")
implementation("io.sentry:sentry-compose-android:8.13.2")
implementation(libs.sentry.android)
implementation(libs.sentry.compose.android)
// Other AndroidX libraries
implementation("androidx.documentfile:documentfile:1.1.0")
implementation("androidx.browser:browser:1.8.0")
implementation("androidx.webkit:webkit:1.14.0")
implementation("androidx.core:core-splashscreen:1.2.0-beta02")
implementation("androidx.palette:palette-ktx:1.0.0")
implementation("androidx.core:core-telecom:1.0.0")
implementation(libs.android.profileinstaller)
implementation(libs.android.documentfile)
implementation(libs.android.browser)
implementation(libs.android.webkit)
implementation(libs.android.palette)
implementation(libs.android.core.telecom)
implementation(libs.android.core.splashscreen)
implementation(libs.android.constraintlayout)
implementation(libs.android.constraintlayout.compose)
implementation(libs.android.appcompat)
implementation(libs.android.material)
implementation(libs.android.datastore)
implementation(libs.android.datastore.preferences)
// Libraries used for legacy View-based UI
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
implementation("androidx.appcompat:appcompat:1.7.1")
implementation("com.google.android.material:material:1.12.0")
implementation(libs.hcaptcha)
// hCaptcha - captcha provider
implementation("com.github.hcaptcha:hcaptcha-android-sdk:3.8.1")
coreLibraryDesugaring(libs.desugar.jdk.libs)
// JDK Desugaring - polyfill for new Java APIs
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
implementation(libs.media3.exoplayer)
implementation(libs.media3.exoplayer.hls)
implementation(libs.media3.okhttp)
implementation(libs.media3.ui)
// AndroidX Media3 w/ ExoPlayer
implementation("androidx.media3:media3-exoplayer:$media3Version")
implementation("androidx.media3:media3-exoplayer-hls:$media3Version")
implementation("androidx.media3:media3-datasource-okhttp:$media3Version")
implementation("androidx.media3:media3-ui:$media3Version")
implementation(libs.zoomable.image)
implementation(libs.zoomable.image.glide)
implementation(libs.haze)
implementation(libs.haze.materials)
// Compose libraries
implementation("me.saket.telephoto:zoomable-image:1.0.0-alpha02")
implementation("me.saket.telephoto:zoomable-image-glide:1.0.0-alpha02")
implementation("androidx.constraintlayout:constraintlayout-compose:1.1.1")
implementation("dev.chrisbanes.haze:haze:1.6.4")
implementation("dev.chrisbanes.haze:haze-materials:1.6.4")
implementation(libs.zxing.core)
implementation(libs.quickie.bundled)
// QR code related
implementation("com.google.zxing:core:3.5.3")
implementation("io.github.g00fy2.quickie:quickie-bundled:1.11.0")
implementation(libs.sqldelight.android.driver)
// Persistence
implementation("app.cash.sqldelight:android-driver:2.0.1")
implementation("androidx.datastore:datastore:1.1.7")
implementation("androidx.datastore:datastore-preferences:1.1.7")
implementation(libs.jetbrains.markdown)
implementation(libs.highlights)
// Markup
implementation("org.jetbrains:markdown:0.7.3")
implementation("dev.snipme:highlights:1.0.0")
// implementation(libs.livekit.android)
// implementation(libs.livekit.android.camerax)
// implementation(libs.livekit.android.compose)
// Livekit
// implementation("io.livekit:livekit-android:${LivekitVersion.core}")
// implementation("io.livekit:livekit-android-camerax:${LivekitVersion.core}")
// implementation("io.livekit:livekit-android-compose-components:${LivekitVersion.componentsCompose}")
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.messaging)
// Firebase - Cloud Messaging
implementation(platform("com.google.firebase:firebase-bom:33.15.0"))
implementation("com.google.firebase:firebase-messaging")
implementation(libs.shimmer)
// Shimmer - loading animations
implementation("com.valentinilk.shimmer:compose-shimmer:1.3.1")
debugImplementation(libs.chucker)
releaseImplementation(libs.chucker.noop)
// Chucker - HTTP inspector
debugImplementation("com.github.chuckerteam.chucker:library:4.0.0")
releaseImplementation("com.github.chuckerteam.chucker:library-no-op:4.0.0")
implementation(libs.square.logcat)
// Square Logcat
implementation("com.squareup.logcat:logcat:0.1")
// Testing
androidTestImplementation("androidx.test:runner:$androidXTestVersion")
androidTestImplementation("androidx.test:rules:$androidXTestVersion")
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
androidTestImplementation(libs.android.test.core)
androidTestImplementation(libs.android.test.rules)
androidTestImplementation(libs.compose.ui.test.junit4)
}
aboutLibraries {

View File

@ -1,6 +1,5 @@
package chat.stoat.api.schemas
import chat.stoat.api.StoatAPI
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@ -8,8 +7,4 @@ import kotlinx.serialization.Serializable
data class Session(
@SerialName("_id") val id: String,
val name: String
) {
fun isCurrent(): Boolean {
return id == StoatAPI.sessionId
}
}
)

View File

@ -66,7 +66,7 @@ class SessionSettingsScreenViewModel : ViewModel() {
fun fetchSessions() {
viewModelScope.launch {
sessions.addAll(fetchAllSessions())
currentSession = sessions.firstOrNull { it.isCurrent() }
currentSession = sessions.firstOrNull { it.id === StoatAPI.sessionId }
Log.d(
"SessionSettingsScreen",
"Current session: $currentSession. Current session ID: ${StoatAPI.sessionId}"
@ -260,7 +260,7 @@ fun SessionSettingsScreen(
items(viewModel.sessions.size) {
val item = viewModel.sessions[it]
if (item.isCurrent()) {
if (item.id == StoatAPI.sessionId) {
return@items
}

View File

@ -1,13 +1,14 @@
plugins {
id("com.android.application") version "8.11.1" apply false
id("com.android.library") version "8.11.1" apply false
id("org.jetbrains.kotlin.android") version "2.2.0" apply false
id("org.jetbrains.kotlin.plugin.serialization") version "2.2.0" apply false
id("org.jetbrains.kotlin.plugin.compose") version "2.2.0" apply false
id("com.google.dagger.hilt.android") version "2.57" apply false
id("com.mikepenz.aboutlibraries.plugin") version "11.3.0-rc02" apply false
id("com.google.devtools.ksp") version "2.2.0-2.0.2" apply false
id("com.google.gms.google-services") version "4.4.2" apply false
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.serialization) apply false
alias(libs.plugins.kotlin.compose) apply false
alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.hilt) apply false
alias(libs.plugins.aboutlibraries) apply false
alias(libs.plugins.ksp) apply false
alias(libs.plugins.google.services) apply false
}
tasks.register<Delete>("clean") {

1
core/model/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,13 @@
plugins {
id("java-library")
id("org.jetbrains.kotlin.jvm")
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11
}
}

View File

@ -0,0 +1,4 @@
package chat.stoat.core.model
class CoreModel {
}

114
gradle/libs.versions.toml Normal file
View File

@ -0,0 +1,114 @@
[versions]
kotlin = "2.2.0"
kotlin-serialization = "1.6.3"
ksp = "2.2.0-2.0.2"
agp = "8.11.1"
hilt = "2.57"
google-services = "4.4.2"
sentry = "8.13.2" # This is separate from the gradle plugin version which is defined ad hoc below
sqldelight = "2.0.1"
compose-bom = "2025.03.00"
material3 = "1.4.0-alpha15"
lifecycle = "2.9.1"
accompanist = "0.34.0"
ktor = "3.3.2"
glide = "5.0.5"
aboutlibraries = "11.3.0-rc02"
media3 = "1.7.1"
telephoto = "1.0.0-alpha02"
haze = "1.6.4"
chucker = "4.0.0"
androidx-test = "1.6.1"
livekit = "2.21.0"
livekit-compose = "1.4.0"
[libraries]
android-core-ktx = { module = "androidx.core:core-ktx", version = "1.16.0" }
android-profileinstaller = { module = "androidx.profileinstaller:profileinstaller", version = "1.4.1" }
android-documentfile = { module = "androidx.documentfile:documentfile", version = "1.1.0" }
android-browser = { module = "androidx.browser:browser", version = "1.8.0" }
android-webkit = { module = "androidx.webkit:webkit", version = "1.14.0" }
android-palette = { module = "androidx.palette:palette-ktx", version = "1.0.0" }
android-core-splashscreen = { module = "androidx.core:core-splashscreen", version = "1.2.0-beta02" }
android-core-telecom = { module = "androidx.core:core-telecom", version = "1.0.0" }
android-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version = "2.2.1" }
android-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version = "1.1.1" }
android-appcompat = { module = "androidx.appcompat:appcompat", version = "1.7.1" }
android-material = { module = "com.google.android.material:material", version = "1.12.0" }
android-test-core = { module = "androidx.test:runner", version.ref = "androidx-test" }
android-test-rules = { module = "androidx.test:rules", version.ref = "androidx-test" }
android-datastore = { module = "androidx.datastore:datastore", version = "1.1.7" }
android-datastore-preferences = { module = "androidx.datastore:datastore-preferences", version = "1.1.7" }
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
kotlin-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlin-serialization" }
kotlin-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "kotlin-serialization" }
kotlin-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version = "0.4.0" }
compose-bom = { module = "androidx.compose:compose-bom", version.ref = "compose-bom" }
compose-ui = { module = "androidx.compose.ui:ui", version = "1.8.2" }
compose-ui-util = { module = "androidx.compose.ui:ui-util" }
compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" }
compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "material3" }
compose-material3-windowsizeclass = { module = "androidx.compose.material3:material3-window-size-class", version.ref = "material3" }
compose-material-icons-core = { module = "androidx.compose.material:material-icons-core", version = "1.7.8" }
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" }
compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4" }
lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle" }
lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" }
activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" }
accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" }
accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" }
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" }
ktor-client-contentnegotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
navigation-compose = { module = "androidx.navigation:navigation-compose", version = "2.9.0" }
hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" }
hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version = "1.2.0" }
hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" }
glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" }
glide-compose = { module = "com.github.bumptech.glide:compose", version = "1.0.0-beta01" }
glide-ksp = { module = "com.github.bumptech.glide:ksp", version.ref = "glide" }
aboutlibraries-core = { module = "com.mikepenz:aboutlibraries-core", version.ref = "aboutlibraries" }
sentry-android = { module = "io.sentry:sentry-android", version.ref = "sentry" }
sentry-compose-android = { module = "io.sentry:sentry-compose-android", version.ref = "sentry" }
hcaptcha = { module = "com.github.hcaptcha:hcaptcha-android-sdk", version = "3.8.1" }
desugar-jdk-libs = { module = "com.android.tools:desugar_jdk_libs", version = "2.1.5" }
media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" }
media3-exoplayer-hls = { module = "androidx.media3:media3-exoplayer-hls", version.ref = "media3" }
media3-okhttp = { module = "androidx.media3:media3-datasource-okhttp", version.ref = "media3" }
media3-ui = { module = "androidx.media3:media3-ui", version.ref = "media3" }
zoomable-image = { module = "me.saket.telephoto:zoomable-image", version.ref = "telephoto" }
zoomable-image-glide = { module = "me.saket.telephoto:zoomable-image-glide", version.ref = "telephoto" }
haze = { module = "dev.chrisbanes.haze:haze", version.ref = "haze" }
haze-materials = { module = "dev.chrisbanes.haze:haze-materials", version.ref = "haze" }
zxing-core = { module = "com.google.zxing:core", version = "3.5.3" }
quickie-bundled = { module = "io.github.g00fy2.quickie:quickie-bundled", version = "1.11.0" }
sqldelight-android-driver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
jetbrains-markdown = { module = "org.jetbrains:markdown", version = "0.7.3" }
highlights = { module = "dev.snipme:highlights", version = "1.0.0" }
firebase-bom = { module = "com.google.firebase:firebase-bom", version = "33.15.0" }
firebase-messaging = { module = "com.google.firebase:firebase-messaging" }
shimmer = { module = "com.valentinilk.shimmer:compose-shimmer", version = "1.3.1" }
chucker = { module = "com.github.chuckerteam.chucker:library", version.ref = "chucker" }
chucker-noop = { module = "com.github.chuckerteam.chucker:library-noop", version.ref = "chucker" }
square-logcat = { module = "com.squareup.logcat:logcat", version = "0.1" }
livekit-android = { module = "io.livekit:livekit-android", version.ref = "livekit" }
livekit-android-camerax = { module = "io.livekit:android-camerax", version.ref = "livekit" }
livekit-android-compose = { module = "io.livekit:livekit-android-compose-components", version.ref = "livekit-compose" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
google-services = { id = "com.google.gms.google-services", version.ref = "google-services" }
sentry-android = { id = "io.sentry.android.gradle", version = "4.12.0" }
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }

View File

@ -25,3 +25,4 @@ dependencyResolutionManagement {
}
rootProject.name = "Stoat"
include(":app")
include(":core:model")