From 22924533e9573694e6e98ea121a7bf1ff9fcb59d Mon Sep 17 00:00:00 2001 From: wjdrjs00 Date: Wed, 1 Apr 2026 17:56:28 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Feat:=20Coil=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=9F=AC=EB=A6=AC=20=EC=BB=A4=EC=8A=A4=ED=85=80=20ImageLoader?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 1 + .../threegap/bitnagil/BitnagilApplication.kt | 40 ++++++++++++++++++- .../bitnagil/di/core/CoilEntryPoint.kt | 14 +++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/threegap/bitnagil/di/core/CoilEntryPoint.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7417a8f0..6e2bd0c0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -100,4 +100,5 @@ dependencies { implementation(libs.bundles.retrofit) implementation(platform(libs.okhttp.bom)) implementation(libs.bundles.okhttp) + implementation(libs.bundles.coil) } diff --git a/app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt b/app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt index 0676666e..e9465c31 100644 --- a/app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt +++ b/app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt @@ -1,16 +1,54 @@ package com.threegap.bitnagil import android.app.Application +import coil3.ImageLoader +import coil3.PlatformContext +import coil3.SingletonImageLoader +import coil3.disk.DiskCache +import coil3.memory.MemoryCache +import coil3.network.okhttp.OkHttpNetworkFetcherFactory +import coil3.request.CachePolicy +import coil3.request.crossfade +import coil3.util.DebugLogger import com.kakao.sdk.common.KakaoSdk +import com.threegap.bitnagil.di.core.CoilEntryPoint +import dagger.hilt.EntryPoints import dagger.hilt.android.HiltAndroidApp +import okio.Path.Companion.toOkioPath @HiltAndroidApp -class BitnagilApplication : Application() { +class BitnagilApplication : Application(), SingletonImageLoader.Factory { + override fun onCreate() { super.onCreate() initKakaoSdk() } + override fun newImageLoader(context: PlatformContext): ImageLoader { + val okHttpClient = EntryPoints + .get(this, CoilEntryPoint::class.java) + .noneAuthOkHttpClient() + + return ImageLoader.Builder(context) + .components { add(OkHttpNetworkFetcherFactory(callFactory = { okHttpClient })) } + .memoryCache { + MemoryCache.Builder() + .maxSizePercent(context, percent = 0.25) + .build() + } + .diskCache { + DiskCache.Builder() + .directory(cacheDir.resolve("image_cache").toOkioPath()) + .maxSizeBytes(50L * 1024 * 1024) + .build() + } + .memoryCachePolicy(CachePolicy.ENABLED) + .diskCachePolicy(CachePolicy.ENABLED) + .crossfade(true) + .logger(if (BuildConfig.DEBUG) DebugLogger() else null) + .build() + } + private fun initKakaoSdk() { KakaoSdk.init(this, BuildConfig.KAKAO_NATIVE_APP_KEY) } diff --git a/app/src/main/java/com/threegap/bitnagil/di/core/CoilEntryPoint.kt b/app/src/main/java/com/threegap/bitnagil/di/core/CoilEntryPoint.kt new file mode 100644 index 00000000..c2cc7278 --- /dev/null +++ b/app/src/main/java/com/threegap/bitnagil/di/core/CoilEntryPoint.kt @@ -0,0 +1,14 @@ +package com.threegap.bitnagil.di.core + +import com.threegap.bitnagil.network.NoneAuth +import dagger.hilt.EntryPoint +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import okhttp3.OkHttpClient + +@EntryPoint +@InstallIn(SingletonComponent::class) +interface CoilEntryPoint { + @NoneAuth + fun noneAuthOkHttpClient(): OkHttpClient +} From be0d01e49929f92269ed5044c08770401ac47664 Mon Sep 17 00:00:00 2001 From: wjdrjs00 Date: Wed, 1 Apr 2026 17:57:08 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Refactor:=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EB=A1=9C=EB=94=A9=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/template/CollapsibleHeader.kt | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/presentation/src/main/java/com/threegap/bitnagil/presentation/screen/home/component/template/CollapsibleHeader.kt b/presentation/src/main/java/com/threegap/bitnagil/presentation/screen/home/component/template/CollapsibleHeader.kt index c1969480..dff8a893 100644 --- a/presentation/src/main/java/com/threegap/bitnagil/presentation/screen/home/component/template/CollapsibleHeader.kt +++ b/presentation/src/main/java/com/threegap/bitnagil/presentation/screen/home/component/template/CollapsibleHeader.kt @@ -14,6 +14,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.LineHeightStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.foundation.Image import coil3.compose.AsyncImage import com.threegap.bitnagil.designsystem.BitnagilTheme import com.threegap.bitnagil.designsystem.R @@ -53,15 +54,24 @@ fun CollapsibleHeader( ) } - AsyncImage( - model = dailyEmotion.imageUrl, - modifier = Modifier - .align(Alignment.TopEnd) - .size(baseImageWidth, baseImageHeight), - contentDescription = null, - placeholder = painterResource(R.drawable.default_emotion), - error = painterResource(R.drawable.default_emotion), - ) + if (dailyEmotion.imageUrl.isEmpty()) { + Image( + painter = painterResource(R.drawable.default_emotion), + modifier = Modifier + .align(Alignment.TopEnd) + .size(baseImageWidth, baseImageHeight), + contentDescription = null, + ) + } else { + AsyncImage( + model = dailyEmotion.imageUrl, + modifier = Modifier + .align(Alignment.TopEnd) + .size(baseImageWidth, baseImageHeight), + contentDescription = null, + error = painterResource(R.drawable.default_emotion), + ) + } } } From bdf825c5b33352eb4fb77f96c0741925c2341670 Mon Sep 17 00:00:00 2001 From: wjdrjs00 Date: Thu, 2 Apr 2026 21:12:17 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Refactor:=20Coil=20ImageLoader=20=EB=82=B4?= =?UTF-8?q?=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=BA=90=EC=8B=9C=20?= =?UTF-8?q?=EC=A0=95=EC=B1=85=20=EC=84=A4=EC=A0=95=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt b/app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt index e9465c31..392de4eb 100644 --- a/app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt +++ b/app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt @@ -7,7 +7,6 @@ import coil3.SingletonImageLoader import coil3.disk.DiskCache import coil3.memory.MemoryCache import coil3.network.okhttp.OkHttpNetworkFetcherFactory -import coil3.request.CachePolicy import coil3.request.crossfade import coil3.util.DebugLogger import com.kakao.sdk.common.KakaoSdk @@ -42,8 +41,6 @@ class BitnagilApplication : Application(), SingletonImageLoader.Factory { .maxSizeBytes(50L * 1024 * 1024) .build() } - .memoryCachePolicy(CachePolicy.ENABLED) - .diskCachePolicy(CachePolicy.ENABLED) .crossfade(true) .logger(if (BuildConfig.DEBUG) DebugLogger() else null) .build()