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

View File

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

View File

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

View File

@ -1,13 +1,14 @@
plugins { plugins {
id("com.android.application") version "8.11.1" apply false alias(libs.plugins.android.application) apply false
id("com.android.library") version "8.11.1" apply false alias(libs.plugins.android.library) apply false
id("org.jetbrains.kotlin.android") version "2.2.0" apply false alias(libs.plugins.kotlin.android) apply false
id("org.jetbrains.kotlin.plugin.serialization") version "2.2.0" apply false alias(libs.plugins.kotlin.serialization) apply false
id("org.jetbrains.kotlin.plugin.compose") version "2.2.0" apply false alias(libs.plugins.kotlin.compose) apply false
id("com.google.dagger.hilt.android") version "2.57" apply false alias(libs.plugins.kotlin.jvm) apply false
id("com.mikepenz.aboutlibraries.plugin") version "11.3.0-rc02" apply false alias(libs.plugins.hilt) apply false
id("com.google.devtools.ksp") version "2.2.0-2.0.2" apply false alias(libs.plugins.aboutlibraries) apply false
id("com.google.gms.google-services") version "4.4.2" apply false alias(libs.plugins.ksp) apply false
alias(libs.plugins.google.services) apply false
} }
tasks.register<Delete>("clean") { 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" rootProject.name = "Stoat"
include(":app") include(":app")
include(":core:model")