From 3954a65faa382caafcfd28f40af8bebd9f3f1661 Mon Sep 17 00:00:00 2001 From: John O'Reilly Date: Sat, 4 Oct 2025 17:03:07 +0100 Subject: [PATCH] dependency updates --- build-logic/src/main/kotlin/Dependencies.kt | 2 +- compose-web/build.gradle.kts | 12 +-- compose-web/src/wasmJsMain/kotlin/Main.kt | 11 +-- gradle/libs.versions.toml | 73 +++++++++---------- maestro/Confetti.flow | 17 ----- shared/build.gradle.kts | 2 - .../ui/sessions/SessionDetailsViewShared.kt | 2 +- .../ui/sessions/SessionListGridView.kt | 2 +- .../ui/speakers/SpeakersDetailsView.kt | 2 +- .../confetti/ui/speakers/SpeakersGridView.kt | 2 +- 10 files changed, 51 insertions(+), 74 deletions(-) delete mode 100644 maestro/Confetti.flow diff --git a/build-logic/src/main/kotlin/Dependencies.kt b/build-logic/src/main/kotlin/Dependencies.kt index 582f51077..b946a2502 100644 --- a/build-logic/src/main/kotlin/Dependencies.kt +++ b/build-logic/src/main/kotlin/Dependencies.kt @@ -2,7 +2,7 @@ object AndroidSdk { const val min = 24 - const val compile = 35 + const val compile = 36 const val target = compile } diff --git a/compose-web/build.gradle.kts b/compose-web/build.gradle.kts index 4d10400ea..15d01343e 100644 --- a/compose-web/build.gradle.kts +++ b/compose-web/build.gradle.kts @@ -1,3 +1,7 @@ +@file:OptIn(ExperimentalWasmDsl::class) + +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl + plugins { kotlin("multiplatform") id("kotlinx-serialization") @@ -16,10 +20,6 @@ kotlin { } } binaries.executable() - - tasks.named(compilations["main"].processResourcesTaskName) { - from(projects.shared.dependencyProject.file("src/commonMain/composeResources")) - } } sourceSets { @@ -35,7 +35,3 @@ kotlin { } } } - -compose.experimental { - web.application {} -} diff --git a/compose-web/src/wasmJsMain/kotlin/Main.kt b/compose-web/src/wasmJsMain/kotlin/Main.kt index 3ff153fe2..f90909615 100644 --- a/compose-web/src/wasmJsMain/kotlin/Main.kt +++ b/compose-web/src/wasmJsMain/kotlin/Main.kt @@ -1,6 +1,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.window.CanvasBasedWindow +import androidx.compose.ui.window.ComposeViewport import com.apollographql.apollo.ApolloClient import com.arkivanov.decompose.DefaultComponentContext import com.arkivanov.essenty.lifecycle.Lifecycle @@ -34,10 +35,10 @@ fun main() { ) - CanvasBasedWindow("Confetti", canvasElementId = "confettiCanvas") { - MaterialTheme { - App(appComponent) - } - } + ComposeViewport(content = { + MaterialTheme { + App(appComponent) + } + }) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9568a88a7..780cb636d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,48 +1,46 @@ [versions] -kotlin = "2.2.20-Beta1" -ksp = "2.2.20-Beta1-2.0.2" +kotlin = "2.2.20" +ksp = "2.2.20-2.0.2" kotlinx-coroutines = "1.10.2" kotlinx-datetime = "0.6.0" kotlinx-serialization = "1.9.0" -apollo-kotlin-execution = "0.1.1-SNAPSHOT-fd7fa806b95c5b9046494989a7dd478c47237e12" -compatPatrouille = "0.0.0" +apollo-kotlin-execution = "0.1.1" +compatPatrouille = "0.0.2" -agp = "8.11.1" -activity-compose = "1.10.1" -androidx-lifecycle = "2.9.2" +agp = "8.11.2" +activity-compose = "1.11.0" +androidx-lifecycle = "2.9.4" androidx-datastore = "1.1.7" -apollo = "4.3.2" -apollo-cache = "1.0.0-alpha.4" -compose = "1.8.3" -compose-hot-reload = "1.0.0-beta03" -composeLifecyleRuntime="2.9.1" -compose-multiplatform = "1.8.2" -compose-material3 = "1.3.2" +apollo = "4.3.3" +apollo-cache = "1.0.0-alpha.6" +compose = "1.9.2" +compose-hot-reload = "1.0.0-beta09" +composeLifecyleRuntime="2.9.4" +compose-multiplatform = "1.9.0" +compose-material3 = "1.4.0" composeWindowSize = "0.5.0" credentials = "1.5.0" -decompose = "3.4.0-alpha03" +decompose = "3.4.0" doistx-normalize = "1.2.0" essenty = "2.5.0" googleid = "1.1.1" horologist = "0.8.2-alpha" io-coil-kt = "2.7.0" -io-coil3-kt = "3.2.0" -kermit = "2.0.6" -kmmbridge = "0.5.7" -koin = "4.1.0" +io-coil3-kt = "3.3.0" +kermit = "2.0.8" +kmmbridge = "1.2.1" +koin = "4.1.1" kotlinx-coroutines-play-services = "1.10.2" -lifecycle = "2.9.2" -lifecycle-livedata-ktx = "2.9.2" -materialkolor = "3.0.0" +lifecycle = "2.9.4" +lifecycle-livedata-ktx = "2.9.4" +materialkolor = "3.0.1" multiplatform-settings = "1.3.0" -nav-compose = "2.9.4" -okio = "3.15.0" -permissions = "0.19.1" -permissionsCompose = "0.19.1" -permissionsNotifications = "0.19.1" +nav-compose = "2.9.5" +okio = "3.16.0" +permissions = "0.20.1" protolayout = "1.3.0" -robolectric = "4.15.1" -room = "2.7.2" +robolectric = "4.16" +room = "2.8.1" tiles-tooling-preview = "1.5.0" wear = "1.3.0" wear-watchface = "1.3.0-alpha07" @@ -52,13 +50,13 @@ work-runtime-ktx = "2.10.2" spring = "3.5.3" generativeai = "0.9.0-1.1.0" buildkonfig = "0.17.1" -roborazzi = "1.46.1" -screenshot = "0.0.1-alpha10" +roborazzi = "1.50.0" +screenshot = "0.0.1-alpha11" [libraries] activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activity-compose" } -androidx-benchmarkmacro = "androidx.benchmark:benchmark-macro-junit4:1.3.4" +androidx-benchmarkmacro = "androidx.benchmark:benchmark-macro-junit4:1.4.1" androidx-complications-rendering = { module = "androidx.wear.watchface:watchface-complications-rendering", version.ref = "wear-watchface"} androidx-compose-ui-tooling = { module = "androidx.wear.compose:compose-ui-tooling", version.ref = "wear-compose" } androidx-credentials = { module = "androidx.credentials:credentials", version.ref = "credentials" } @@ -88,8 +86,8 @@ apollo-runtime = { module = "com.apollographql.apollo:apollo-runtime" } apollo-execution-spring = { module = "com.apollographql.execution:apollo-execution-spring", version.ref = "apollo-kotlin-execution" } apollo-execution-reporting = { module = "com.apollographql.execution:apollo-execution-reporting", version.ref = "apollo-kotlin-execution" } apollo-execution-gradle-plugin = { module = "com.apollographql.execution:apollo-execution-gradle-plugin", version.ref = "apollo-kotlin-execution" } -permissions-compose = { module = "dev.icerock.moko:permissions-compose", version.ref = "permissionsCompose" } -permissions-notifications = { module = "dev.icerock.moko:permissions-notifications", version.ref = "permissionsNotifications" } +permissions-compose = { module = "dev.icerock.moko:permissions-compose", version.ref = "permissions" } +permissions-notifications = { module = "dev.icerock.moko:permissions-notifications", version.ref = "permissions" } permissions = { module = "dev.icerock.moko:permissions", version.ref = "permissions" } spring-boot = { module = "org.springframework.boot:spring-boot", version.ref = "spring" } spring-boot-starter-logging = { module = "org.springframework.boot:spring-boot-starter-logging", version.ref = "spring" } @@ -111,6 +109,7 @@ coil-svg = { module = "io.coil-kt:coil-svg", version.ref = "io-coil-kt" } coil-test = { module = "io.coil-kt:coil-test", version.ref = "io-coil-kt" } coil3-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "io-coil3-kt" } coil3-network-ktor = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "io-coil3-kt" } +ktor-client-cio = { group = "io.ktor", name = "ktor-client-cio", version = "3.3.0" } materialkolor = { module = "com.materialkolor:material-kolor", version.ref = "materialkolor" } compose-material = { module = "androidx.compose.material:material", version.ref = "compose" } @@ -182,9 +181,9 @@ multiplatform-settings-serialization = { module = "com.russhwolf:multiplatform-s multiplatform-settings-coroutines = { module = "com.russhwolf:multiplatform-settings-serialization", version.ref = "multiplatform-settings" } multiplatform-settings-make-observable = { module = "com.russhwolf:multiplatform-settings-make-observable", version.ref = "multiplatform-settings" } multiplatform-settings-datastore = { module = "com.russhwolf:multiplatform-settings-datastore", version.ref = "multiplatform-settings" } -okhttp = "com.squareup.okhttp3:okhttp:5.0.0" -okhttp-coroutines = "com.squareup.okhttp3:okhttp-coroutines:5.0.0" -okhttp-logging-interceptor = "com.squareup.okhttp3:logging-interceptor:5.0.0" +okhttp = "com.squareup.okhttp3:okhttp:5.1.0" +okhttp-coroutines = "com.squareup.okhttp3:okhttp-coroutines:5.1.0" +okhttp-logging-interceptor = "com.squareup.okhttp3:logging-interceptor:5.1.0" play-services-auth = "com.google.android.gms:play-services-auth:21.3.0" plugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } plugin-android-application = { module = "com.android.tools.build:gradle", version.ref = "agp" } diff --git a/maestro/Confetti.flow b/maestro/Confetti.flow deleted file mode 100644 index 83c547793..000000000 --- a/maestro/Confetti.flow +++ /dev/null @@ -1,17 +0,0 @@ -appId: dev.johnoreilly.confetti ---- -- launchApp: - clearState: true -#- scrollUntilVisible: -# element: -# id: androidmakers2025 -- tapOn: - id: androidmakers2025 -- assertVisible: "AndroidMakers by droidcon 2025" -- scrollUntilVisible: - element: - text: "Kotlin and Compose Multiplatform.*" -- tapOn: "Kotlin and Compose Multiplatform.*" -- assertVisible: "Kotlin and Compose Multiplatform patterns for iOS interop" -- tapOn: "Back" - diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 4809026f8..9c687b574 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -262,8 +262,6 @@ kmmbridge { spm() } -addGithubPackagesRepository() - kotlin.sourceSets.all { languageSettings.optIn("kotlin.experimental.ExperimentalObjCName") } diff --git a/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/sessions/SessionDetailsViewShared.kt b/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/sessions/SessionDetailsViewShared.kt index b339ba29d..696a9047e 100644 --- a/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/sessions/SessionDetailsViewShared.kt +++ b/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/sessions/SessionDetailsViewShared.kt @@ -152,7 +152,7 @@ internal fun SessionSpeakerInfo( ) { Row { speaker.photoUrl?.let { - val url = "https://confetti-app.dev/images/avatar/${conference}/${speaker.id}" + val url = speaker.photoUrl //"https://confetti-app.dev/images/avatar/${conference}/${speaker.id}" SubcomposeAsyncImage( model = url, contentDescription = speaker.name, diff --git a/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/sessions/SessionListGridView.kt b/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/sessions/SessionListGridView.kt index 56eae7097..4930bb74b 100644 --- a/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/sessions/SessionListGridView.kt +++ b/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/sessions/SessionListGridView.kt @@ -249,7 +249,7 @@ private fun Speakers(conference: String, session: SessionDetails) { verticalAlignment = Alignment.CenterVertically ) { if (speaker.speakerDetails.photoUrl?.isNotEmpty() == true) { - val url = "https://confetti-app.dev/images/avatar/${conference}/${speaker.id}" + val url = speaker.speakerDetails.photoUrl //"https://confetti-app.dev/images/avatar/${conference}/${speaker.id}" AsyncImage( model = url, contentDescription = speaker.speakerDetails.name, diff --git a/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/speakers/SpeakersDetailsView.kt b/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/speakers/SpeakersDetailsView.kt index 9478e6394..d5237d23c 100644 --- a/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/speakers/SpeakersDetailsView.kt +++ b/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/speakers/SpeakersDetailsView.kt @@ -100,7 +100,7 @@ fun SpeakerDetailsView( Spacer(modifier = Modifier.size(16.dp)) - val url = "https://confetti-app.dev/images/avatar/${conference}/${speaker.id}" + val url = speaker.photoUrl // "https://confetti-app.dev/images/avatar/${conference}/${speaker.id}" AsyncImage( model = url, contentDescription = speaker.name, diff --git a/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/speakers/SpeakersGridView.kt b/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/speakers/SpeakersGridView.kt index 219f5419a..f31f272c3 100644 --- a/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/speakers/SpeakersGridView.kt +++ b/shared/src/commonMain/kotlin/dev/johnoreilly/confetti/ui/speakers/SpeakersGridView.kt @@ -43,7 +43,7 @@ fun SpeakerGridView( ) { // proxy image requests through backend - val url = "https://confetti-app.dev/images/avatar/${conference}/${speaker.id}" + val url = speaker.photoUrl //"https://confetti-app.dev/images/avatar/${conference}/${speaker.id}" SubcomposeAsyncImage( model = url, contentDescription = speaker.name,