Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[![CI-MASTER](https://github.com/jarroyoesp/ComposeMultiplatformApp/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/jarroyoesp/ComposeMultiplatformApp/actions/workflows/ci.yml)
[![Latest release](https://img.shields.io/github/v/release/JetBrains/compose-multiplatform?color=blue&label=Compose%20multiplatform)](https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.7.0)
[![Latest release](https://img.shields.io/github/v/release/JetBrains/compose-multiplatform?color=blue&label=Compose%20multiplatform)](https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.7.1)
![Kotlin Version](https://img.shields.io/badge/Kotlin-2.0.21-blue?logo=kotlin&logoColor=white)
<div align="center">
<img alt="Compose multiplatform charts" src="./screenshots/compose_multiplatform_logo.png"/>
Expand Down Expand Up @@ -43,7 +43,7 @@ Current supported Platforms are:
- [Kotlin Multiplatform Navigation](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-navigation-routing.html): Provides navigation components for Kotlin Multiplatform projects using Compose.
- [Kotlin Multiplatform ViewModel](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-viewmodel.html): Manages UI-related data and state in Kotlin Multiplatform projects using Compose.
- [ConstraintLayout Multiplatform](https://github.com/Lavmee/constraintlayout-compose-multiplatform): Brings ConstraintLayout functionality to Kotlin Multiplatform projects with Compose.
- [Image Loader - Kamel](https://github.com/Kamel-Media/Kamel): Efficient image loading library for Compose multiplatform projects.
- [Coil](https://coil-kt.github.io/coil/): Efficient image loading library for Compose multiplatform projects.
- [Logger](https://github.com/touchlab/Kermit): Logging library for Kotlin Multiplatform projects.
- [Unit Tests](https://github.com/junit-team/junit5): Automated tests to verify the behavior of individual code units.

Expand Down

Large diffs are not rendered by default.

2,104 changes: 1,040 additions & 1,064 deletions app/versions/dependencies/debugRuntimeClasspathDependencies.txt

Large diffs are not rendered by default.

2,199 changes: 1,054 additions & 1,145 deletions app/versions/dependencies/debugUnitTestRuntimeClasspathDependencies.txt

Large diffs are not rendered by default.

2,062 changes: 1,019 additions & 1,043 deletions app/versions/dependencies/releaseRuntimeClasspathDependencies.txt

Large diffs are not rendered by default.

2,157 changes: 1,033 additions & 1,124 deletions app/versions/dependencies/releaseUnitTestRuntimeClasspathDependencies.txt

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<uses-sdk
android:minSdkVersion="24"
android:targetSdkVersion="34" />
android:targetSdkVersion="35" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Expand Down Expand Up @@ -51,9 +51,6 @@
android:name="androidx.startup.InitializationProvider"
android:authorities="com.jarroyo.composeapp.debug.androidx-startup"
android:exported="false" >
<meta-data
android:name="io.kamel.core.ApplicationContextInitializer"
android:value="androidx.startup" />
<meta-data
android:name="androidx.emoji2.text.EmojiCompatInitializer"
android:value="androidx.startup" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<uses-sdk
android:minSdkVersion="24"
android:targetSdkVersion="34" />
android:targetSdkVersion="35" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Expand Down Expand Up @@ -52,9 +52,6 @@
android:name="androidx.startup.InitializationProvider"
android:authorities="com.jarroyo.composeapp.androidx-startup"
android:exported="false" >
<meta-data
android:name="io.kamel.core.ApplicationContextInitializer"
android:value="androidx.startup" />
<meta-data
android:name="androidx.emoji2.text.EmojiCompatInitializer"
android:value="androidx.startup" />
Expand Down
Binary file modified build-conventions/build/libs/build-conventions.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ val config = extensions.create<ConfigExt>("config").apply {
extensions.create<AndroidConfigExt>("android").apply {
accountType.convention("com.jarroyo.composeapp.auth")
applicationId.convention("com.jarroyo.composeapp")
compileSdk.convention(34)
compileSdk.convention(35)
javaVersion.convention(JavaVersion.VERSION_17)
minSdk.convention(24)
targetSdk.convention(34)
targetSdk.convention(35)
}

extensions.create<ParamsConfigExt>("params").apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,22 +61,25 @@ kotlin {
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.navigation.compose)
implementation(libs.calendar)
implementation(libs.coil.compose)
implementation(libs.coroutines.core)
implementation(libs.kamel)
implementation(libs.koin.annotations)
implementation(libs.koin.compose)
implementation(libs.koin.compose.viewmodel)
implementation(libs.koin.core)
implementation(libs.kotlin.result)
implementation(libs.multiplatform.log)

implementation(libs.coil.compose.core)
implementation(libs.coil.compose)
implementation(libs.coil.network)
}

commonTest.dependencies {
api(libs.apollo.testing.support)
api(libs.coroutines.test)
api(libs.junit)
api(libs.kotlin.test)
// api(libs.kotlin.test.junit)
}

val desktopMain by getting {
Expand Down
37 changes: 17 additions & 20 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ aboutlibraries = "11.2.3"
accompanist = "0.36.0"
agp = "8.1.4"
androidCompileSdk = "34"
androidx-compose = "1.7.4"
androidx-compose = "1.7.5"
androidx-datastore = "1.1.1"
androidx-lifecycle = "2.8.6"
androidx-navigation = "2.8.3"
androidx-lifecycle = "2.8.7"
androidx-navigation = "2.8.4"
androidx-room = "2.6.1"
apollo = "4.0.1"
apollo = "4.1.0"
coil3 = "3.0.3"
coroutines = "1.9.0"
detekt = "1.23.7"
diktat = "1.2.5"
Expand All @@ -25,16 +26,15 @@ koin = "4.0.0"
koin-ksp = "1.4.0"
kotlin = "2.0.21"
kotlinpoet = "1.18.1"
kotlin-multiplatform = "1.7.0"
kotlin-multiplatform = "1.7.1"
kotlin-result = "2.0.0"
kotlinx-datetime="0.6.0"
ksp = "2.0.21-1.0.25"
ksp = "2.0.21-1.0.26"
ktlint = "0.43.0"
ktor = "2.3.12"
ktor = "3.0.0"
mockk = "1.13.13"
okhttp = "4.12.0"
prettier = "2.7.1"
retrofit = "2.9.0"
sqlDelight = "2.0.2"

[libraries]
Expand All @@ -48,22 +48,22 @@ accompanist-pager-indicators = { module = "com.google.accompanist:accompanist-pa
accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" }
accompanist-placeholder = { module = "com.google.accompanist:accompanist-placeholder-material", version.ref = "accompanist" }
accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" }
android-maps-utils = { module = "com.google.maps.android:android-maps-utils", version = "3.8.2" }
android-maps-utils = { module = "com.google.maps.android:android-maps-utils", version = "3.9.0" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" }
androidx-appcompat = { module = "androidx.appcompat:appcompat", version = "1.7.0" }
androidx-compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "androidx-compose" }
androidx-compose-layout = { module = "androidx.compose.foundation:foundation-layout", version.ref = "androidx-compose" }
androidx-compose-material = { module = "androidx.compose.material:material", version.ref = "androidx-compose" }
androidx-compose-material-icons-extended = { module = "androidx.compose.material:material-icons-extended", version.ref = "androidx-compose" }
androidx-compose-material3 = { module = "androidx.compose.material3:material3", version = "1.3.0" }
androidx-compose-material3 = { module = "androidx.compose.material3:material3", version = "1.3.1" }
androidx-compose-runtime = { module = "androidx.compose.runtime:runtime", version.ref = "androidx-compose" }
androidx-compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata", version.ref = "androidx-compose" }
androidx-compose-test = { module = "androidx.compose.test:test-core", version.ref = "androidx-compose" }
androidx-compose-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "androidx-compose" }
androidx-compose-ui = { module = "androidx.compose.ui:ui", version.ref = "androidx-compose" }
androidx-compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "androidx-compose" }
androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "androidx-compose" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version = "1.13.1" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version = "1.15.0" }
androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version = "1.0.1" }
androidx-customview = { module = "androidx.customview:customview", version = "1.2.0-alpha02" }
androidx-customview-poolingcontainer = { module = "androidx.customview:customview-poolingcontainer", version = "1.0.0" }
Expand All @@ -79,7 +79,7 @@ androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecy
androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "jetbrains-navigation" }
androidx-navigation-fragment = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "androidx-navigation" }
androidx-navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "androidx-navigation" }
androidx-paging = { module = "androidx.paging:paging-compose", version = "3.3.2" }
androidx-paging = { module = "androidx.paging:paging-compose", version = "3.3.4" }
androidx-palette = { module = "androidx.palette:palette", version = "1.0.0" }
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "androidx-room" }
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "androidx-room" }
Expand All @@ -99,15 +99,17 @@ apollo-cache = { module = "com.apollographql.apollo:apollo-normalized-cache", ve
apollo-cache-sqlite = { module = "com.apollographql.apollo:apollo-normalized-cache-sqlite", version.ref = "apollo" }
apollo-testing-support = { module = "com.apollographql.apollo:apollo-testing-support", version.ref = "apollo" }
calendar = { module = "com.kizitonwose.calendar:compose-multiplatform", version = "2.5.4" }
coil-compose = { module = "io.coil-kt:coil-compose", version = "2.7.0" }
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil3" }
coil-compose-core = { module = "io.coil-kt.coil3:coil-compose-core", version.ref = "coil3" }
coil-network = { module = "io.coil-kt.coil3:coil-network-ktor3", version = "3.0.4" }
composecharts = { module = "io.github.bytebeats:compose-charts", version = "0.2.1" }
compose-placeholder = { module = "com.eygraber:compose-placeholder", version = "1.0.8" }
compose-webview = { module = "io.github.kevinnzou:compose-webview-multiplatform", version = "1.7.8" }
coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" }
coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "coroutines" }
coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" }
desugar = { module = "com.android.tools:desugar_jdk_libs", version = "2.1.2" }
desugar = { module = "com.android.tools:desugar_jdk_libs", version = "2.1.3" }
detekt = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" }
detekt-rules-compose = { module = "ru.kode:detekt-rules-compose", version = "1.4.0" }
detekt-twitter-compose-rules = { module = "com.twitter.compose.rules:detekt", version = "0.0.26" }
Expand All @@ -117,7 +119,6 @@ hilt-android-testing = { module = "com.google.dagger:hilt-android-testing", vers
hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" }
hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version = "1.2.0" }
junit = { module = "junit:junit", version = "4.13.2" }
kamel = { module = "media.kamel:kamel-image", version = "0.9.5" }
koin-android = {module = "io.insert-koin:koin-android", version = "3.5.3"}
koin-annotations = {module = "io.insert-koin:koin-annotations", version.ref = "koin-ksp"}
koin-compose-viewmodel = {module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin"}
Expand Down Expand Up @@ -158,9 +159,6 @@ okhttp3-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version
play-core-ktx = { module = "com.google.android.play:core-ktx", version = "1.8.1" }
play-services-maps = { module = "com.google.android.gms:play-services-maps", version = "19.0.0" }
process-phoenix = { module = "com.jakewharton:process-phoenix", version = "3.0.0" }
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
retrofit-converter-scalars = { module = "com.squareup.retrofit2:converter-scalars", version = "2.11.0" }
retrofit-kotlinx-serialization = { module = "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", version = "1.0.0" }
robolectric = { module = "org.robolectric:robolectric", version = "4.13" }
seismic = { module = "com.squareup:seismic", version = "1.0.3" }
speeddial = { module = "com.leinardi.android:speed-dial.compose", version = "2.0.0-alpha01" }
Expand All @@ -174,7 +172,7 @@ tink = { module = "com.google.crypto.tink:tink-android", version = "1.15.0" }

# plugins
plugin-aboutlibraries = { module = "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin", version.ref = "aboutlibraries" }
plugin-android-gradle = { module = "com.android.tools.build:gradle", version = "8.7.1" }
plugin-android-gradle = { module = "com.android.tools.build:gradle", version = "8.7.2" }
plugin-androidcachefix = { module = "gradle.plugin.org.gradle.android:android-cache-fix-gradle-plugin", version = "3.0" }
plugin-androidx-navigation-safeargs = { module = "androidx.navigation:navigation-safe-args-gradle-plugin", version.ref = "androidx-navigation" }
plugin-appversioning = { module = "io.github.reactivecircus.appversioning:app-versioning-gradle-plugin", version = "1.3.2" }
Expand All @@ -192,7 +190,6 @@ plugin-spotless = { module = "com.diffplug.spotless:spotless-plugin-gradle", ver
plugin-versions = "com.github.ben-manes:gradle-versions-plugin:0.51.0"
plugin-versions-update = "nl.littlerobots.vcu:plugin:0.8.4"
plugin-violation = { module = "se.bjurr.violations:violation-comments-to-github-gradle-plugin", version = "1.70.0" }
androidx-test-ext-junit115 = { group = "androidx.test.ext", name = "junit", version.ref = "junit" }

[plugins]
apollo = { id = "com.apollographql.apollo", version.ref = "apollo" }
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Card
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
Expand All @@ -18,16 +16,15 @@ import androidx.compose.material.icons.filled.Star
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import co.touchlab.kermit.Logger
import coil3.compose.AsyncImage
import com.jarroyo.composeapp.library.network.api.graphql.fragment.LaunchFragment
import com.jarroyo.feature.home.shared.ext.format
import com.jarroyo.feature.home.shared.ui.HomeContract.Event
import com.jarroyo.library.ui.shared.component.placeholder
import com.jarroyo.library.ui.shared.theme.Spacing
import io.kamel.image.KamelImage
import io.kamel.image.asyncPainterResource
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTime

Expand All @@ -49,18 +46,15 @@ fun HomeItem(
Column(
modifier = Modifier.fillMaxWidth(),
) {
KamelImage(
resource = asyncPainterResource(item.links?.flickr_images?.firstOrNull().orEmpty()),
contentDescription = null,
modifier = Modifier
.fillMaxWidth()
.heightIn(0.dp, max = 50.dp)
.placeholder(
visible = placeholder,
),
contentScale = ContentScale.Crop,
onLoading = { CircularProgressIndicator() },
)
item.links?.flickr_images?.firstOrNull()?.let { url ->
AsyncImage(
model = url,
contentDescription = "",
onError = { error ->
Logger.d("AsyncImage onError: ${error.result.throwable}")
},
)
}
Column(
modifier = Modifier.padding(Spacing.x02),
verticalArrangement = Arrangement.spacedBy(4.dp),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.Scaffold
Expand All @@ -23,18 +22,16 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import coil3.compose.AsyncImage
import com.jarroyo.composeapp.library.network.api.graphql.fragment.LaunchFragment
import com.jarroyo.composeapp.library.network.api.graphql.fragment.RocketFragment
import com.jarroyo.feature.home.shared.ui.launchdetail.LaunchDetailContract.Effect
import com.jarroyo.feature.home.shared.ui.launchdetail.LaunchDetailContract.Event
import com.jarroyo.feature.home.shared.ui.launchdetail.LaunchDetailContract.State
import com.jarroyo.library.ui.shared.component.placeholder
import com.jarroyo.library.ui.shared.theme.Spacing
import io.kamel.image.KamelImage
import io.kamel.image.asyncPainterResource
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.onEach
Expand Down Expand Up @@ -120,14 +117,9 @@ private fun DetailItem(
modifier = Modifier.placeholder(placeholder)
.clickable { sendEvent(Event.OnOpenUrl(launch?.links?.article_link.orEmpty())) },
)
KamelImage(
resource = asyncPainterResource(
launch?.links?.flickr_images?.firstOrNull().orEmpty(),
),
contentDescription = null,
modifier = Modifier.fillMaxWidth().placeholder(placeholder),
alignment = Alignment.TopCenter,
onLoading = { CircularProgressIndicator() },
AsyncImage(
model = launch?.links?.flickr_images?.firstOrNull().orEmpty(),
contentDescription = "",
)
}
}
Expand Down
1 change: 0 additions & 1 deletion modules/library-network-api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ kotlin {
api(libs.apollo)
api(libs.apollo.adapters)
api(libs.apollo.cache)
api(libs.retrofit)
implementation(libs.apollo.cache.sqlite)
implementation(libs.kotlinx.serialization)
}
Expand Down
Loading