Skip to content

Commit 8434d5b

Browse files
committed
chore: Switch from Kamel to Coil3
1 parent 303c2df commit 8434d5b

File tree

4 files changed

+40
-72
lines changed

4 files changed

+40
-72
lines changed

composeApp/build.gradle.kts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ kotlin {
5353
implementation(compose.material3)
5454
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class)
5555
implementation(compose.components.resources)
56+
implementation(libs.coil)
5657
implementation(libs.napier)
5758
implementation(libs.kotlinx.coroutines.core)
5859
implementation(libs.insetsx)
@@ -67,7 +68,6 @@ kotlin {
6768
implementation(libs.multiplatformSettings)
6869
implementation(libs.koin.core)
6970
implementation(libs.koin.compose)
70-
implementation(libs.kamel.image)
7171
implementation(libs.kotlinx.datetime)
7272
implementation(libs.sqlDelight.coroutines.extensions)
7373
api(libs.moko.permissions)
@@ -77,6 +77,9 @@ kotlin {
7777
implementation(libs.voyager.koin)
7878
implementation(libs.uri.kmp)
7979
implementation(libs.stately.common)
80+
implementation(libs.coil)
81+
implementation(libs.coil.compose)
82+
implementation(libs.coil.ktor)
8083
}
8184
}
8285

composeApp/src/commonMain/kotlin/dev/ishubhamsingh/splashy/core/navigation/TopLevelScreen.kt

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import androidx.compose.material3.SnackbarHostState
3737
import androidx.compose.material3.Text
3838
import androidx.compose.material3.TopAppBarDefaults
3939
import androidx.compose.runtime.Composable
40-
import androidx.compose.runtime.CompositionLocalProvider
4140
import androidx.compose.runtime.remember
4241
import androidx.compose.runtime.rememberCoroutineScope
4342
import androidx.compose.ui.Modifier
@@ -67,10 +66,8 @@ import dev.ishubhamsingh.splashy.resources.Res
6766
import dev.ishubhamsingh.splashy.resources.app_name
6867
import dev.ishubhamsingh.splashy.resources.hat
6968
import dev.ishubhamsingh.splashy.ui.components.SnowFallComponent
70-
import dev.ishubhamsingh.splashy.ui.components.getKamelConfig
7169
import dev.ishubhamsingh.splashy.ui.theme.getLatoRegular
7270
import dev.ishubhamsingh.splashy.ui.theme.getLobsterRegular
73-
import io.kamel.image.config.LocalKamelConfig
7471
import org.jetbrains.compose.resources.ExperimentalResourceApi
7572
import org.jetbrains.compose.resources.painterResource
7673
import org.jetbrains.compose.resources.stringResource
@@ -83,32 +80,30 @@ class TopLevelScreen : Screen {
8380
val coroutineScope = rememberCoroutineScope()
8481

8582
TabNavigator(HomeTab) {
86-
CompositionLocalProvider(LocalKamelConfig provides getKamelConfig()) {
87-
Scaffold(
88-
topBar = { AppTopBar() },
89-
bottomBar = { BottomNavigationComponent() },
90-
snackbarHost = {
91-
SnackbarHost(hostState = snackBarHostState) {
92-
Snackbar(
93-
containerColor = MaterialTheme.colorScheme.secondaryContainer,
94-
contentColor = MaterialTheme.colorScheme.secondary,
95-
shape = CircleShape,
96-
modifier = Modifier.padding(16.dp)
97-
) {
98-
Text(text = it.visuals.message, fontFamily = getLatoRegular(), fontSize = 16.sp)
99-
}
100-
}
101-
},
102-
content = { paddingValues ->
103-
Surface(
104-
modifier = Modifier.padding(paddingValues),
105-
color = MaterialTheme.colorScheme.surface
83+
Scaffold(
84+
topBar = { AppTopBar() },
85+
bottomBar = { BottomNavigationComponent() },
86+
snackbarHost = {
87+
SnackbarHost(hostState = snackBarHostState) {
88+
Snackbar(
89+
containerColor = MaterialTheme.colorScheme.secondaryContainer,
90+
contentColor = MaterialTheme.colorScheme.secondary,
91+
shape = CircleShape,
92+
modifier = Modifier.padding(16.dp)
10693
) {
107-
CurrentTab()
94+
Text(text = it.visuals.message, fontFamily = getLatoRegular(), fontSize = 16.sp)
10895
}
10996
}
110-
)
111-
}
97+
},
98+
content = { paddingValues ->
99+
Surface(
100+
modifier = Modifier.padding(paddingValues),
101+
color = MaterialTheme.colorScheme.surface
102+
) {
103+
CurrentTab()
104+
}
105+
}
106+
)
112107
}
113108
}
114109

composeApp/src/commonMain/kotlin/dev/ishubhamsingh/splashy/ui/components/ComposeReusables.kt

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -91,34 +91,21 @@ import androidx.compose.ui.unit.Dp
9191
import androidx.compose.ui.unit.dp
9292
import androidx.compose.ui.unit.sp
9393
import cafe.adriel.voyager.navigator.Navigator
94+
import coil3.compose.AsyncImage
95+
import coil3.compose.LocalPlatformContext
96+
import coil3.request.ImageRequest
9497
import compose.icons.EvaIcons
9598
import compose.icons.evaicons.Outline
9699
import compose.icons.evaicons.outline.ArrowIosBack
97100
import compose.icons.evaicons.outline.ArrowheadUp
98101
import compose.icons.evaicons.outline.CloseCircle
99102
import compose.icons.evaicons.outline.Search
100-
import dev.ishubhamsingh.splashy.core.network.KtorLogger
101103
import dev.ishubhamsingh.splashy.features.categoriesPhotos.ui.CategoryType
102104
import dev.ishubhamsingh.splashy.models.Favourite
103105
import dev.ishubhamsingh.splashy.models.Photo
104106
import dev.ishubhamsingh.splashy.resources.Res
105107
import dev.ishubhamsingh.splashy.resources.lbl_search
106108
import io.github.aakira.napier.Napier
107-
import io.kamel.core.config.DefaultHttpCacheSize
108-
import io.kamel.core.config.KamelConfig
109-
import io.kamel.core.config.httpFetcher
110-
import io.kamel.core.config.takeFrom
111-
import io.kamel.image.KamelImage
112-
import io.kamel.image.asyncPainterResource
113-
import io.kamel.image.config.Default
114-
import io.kamel.image.config.imageBitmapDecoder
115-
import io.ktor.client.plugins.HttpRequestRetry
116-
import io.ktor.client.plugins.defaultRequest
117-
import io.ktor.client.plugins.logging.LogLevel
118-
import io.ktor.client.plugins.logging.Logging
119-
import io.ktor.client.request.header
120-
import io.ktor.http.CacheControl
121-
import io.ktor.http.isSuccess
122109
import kotlin.random.Random
123110
import kotlinx.coroutines.launch
124111
import org.jetbrains.compose.resources.stringResource
@@ -383,38 +370,19 @@ fun CategoriesCardItem(
383370
}
384371
}
385372

386-
@Composable
387-
fun getKamelConfig() = KamelConfig {
388-
takeFrom(KamelConfig.Default)
389-
imageBitmapCacheSize = 500
390-
imageBitmapDecoder()
391-
392-
httpFetcher {
393-
httpCache(DefaultHttpCacheSize)
394-
defaultRequest { header("Cache-Control", "max-age=31536000") }
395-
396-
CacheControl.MaxAge(maxAgeSeconds = 31536)
397-
398-
install(HttpRequestRetry) {
399-
maxRetries = 3
400-
retryIf { _, httpResponse -> !httpResponse.status.isSuccess() }
401-
}
402-
403-
install(Logging) {
404-
logger = KtorLogger()
405-
level = LogLevel.INFO
406-
}
407-
}
408-
}
409-
410373
@Composable
411374
fun ImageViewComponent(url: String, altDescription: String?) {
412-
KamelImage(
413-
resource = asyncPainterResource(data = url),
375+
AsyncImage(
376+
model =
377+
ImageRequest.Builder(LocalPlatformContext.current)
378+
.data(url)
379+
.diskCacheKey(url)
380+
.memoryCacheKey(url)
381+
.build(),
414382
contentDescription = altDescription,
415383
modifier = Modifier.fillMaxSize(),
416384
contentScale = ContentScale.Crop,
417-
animationSpec = tween()
385+
alignment = Alignment.Center
418386
)
419387
}
420388

gradle/libs.versions.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
kotlin = "2.0.0"
44
agp = "8.4.1"
55
compose = "1.6.11"
6+
coil = "3.0.0-alpha06"
67
androidx-appcompat = "1.7.0"
78
androidx-activityCompose = "1.9.0"
89
compose-uitooling = "1.6.7"
@@ -18,7 +19,6 @@ multiplatformSettings = "1.1.1"
1819
koin = "3.5.6"
1920
koin-compose = "1.1.5"
2021
sqlDelight = "2.0.2"
21-
kamel = "0.9.5"
2222
spotless = "6.25.0"
2323
ktfmt = "0.44"
2424
statelyCommon = "2.0.7"
@@ -32,6 +32,9 @@ uri-kmp = "0.0.18"
3232
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
3333
androidx-activityCompose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" }
3434
compose-uitooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose-uitooling" }
35+
coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil"}
36+
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil"}
37+
coil-ktor = { module = "io.coil-kt.coil3:coil-network-ktor", version.ref = "coil"}
3538
material = { module = "com.google.android.material:material", version.ref = "material" }
3639
napier = { module = "io.github.aakira:napier", version.ref = "napier" }
3740
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
@@ -58,7 +61,6 @@ sqlDelight-driver-native = { module = "app.cash.sqldelight:native-driver", versi
5861
sqlDelight-driver-sqljs = { module = "app.cash.sqldelight:sqljs-driver", version.ref = "sqlDelight" }
5962
sqlDelight-coroutines-extensions = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqlDelight" }
6063
sqlDelight-sqlite-dialect = { module = "app.cash.sqldelight:sqlite-3-24-dialect", version.ref = "sqlDelight" }
61-
kamel-image = { module = "media.kamel:kamel-image", version.ref = "kamel" }
6264
stately-common = { module = "co.touchlab:stately-common", version.ref = "statelyCommon" }
6365
voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" }
6466
voyager-tabNavigator = { module = "cafe.adriel.voyager:voyager-tab-navigator", version.ref = "voyager" }

0 commit comments

Comments
 (0)