Skip to content

Commit 39daef8

Browse files
committed
fix(cache): replace custom ETag strategy with OkHttp native cache
Drop ETagCacheStrategy, ETagOfflineFallbackInterceptor, and per-request etagRevalidation() in favor of OkHttp built-in HTTP cache. This gives us max-age freshness, conditional If-None-Match revalidation, and offline stale-serve out of the box. Coil disk cache is disabled so OkHttp is the single disk layer, fixing the icons-flashing-on-launch bug caused by Coil DefaultCacheStrategy bypassing freshness checks. Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 0424208 commit 39daef8

4 files changed

Lines changed: 7 additions & 375 deletions

File tree

apps/flipcash/app/src/main/kotlin/com/flipcash/app/FlipcashApp.kt

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,12 @@ import androidx.work.Configuration
77
import coil3.ImageLoader
88
import coil3.PlatformContext
99
import coil3.SingletonImageLoader
10-
import coil3.annotation.ExperimentalCoilApi
11-
import coil3.disk.DiskCache
12-
import coil3.disk.directory
1310
import coil3.network.okhttp.OkHttpNetworkFetcherFactory
1411
import coil3.request.CachePolicy
1512
import coil3.request.crossfade
1613
import com.flipcash.app.auth.AuthManager
17-
import com.flipcash.app.core.cache.ETagCacheStrategy
18-
import com.flipcash.app.core.cache.ETagOfflineFallbackInterceptor
14+
import okhttp3.Cache
15+
import okhttp3.OkHttpClient
1916
import com.flipcash.app.currency.PreferredCurrencyController
2017
import com.getcode.opencode.repositories.EventRepository
2118
import com.getcode.utils.trace
@@ -53,23 +50,16 @@ class FlipcashApp : Application(), Configuration.Provider, SingletonImageLoader.
5350
trace("app onCreate end")
5451
}
5552

56-
@OptIn(ExperimentalCoilApi::class)
5753
override fun newImageLoader(context: PlatformContext): ImageLoader {
54+
val okHttpClient = OkHttpClient.Builder()
55+
.cache(Cache(context.cacheDir.resolve("http_image_cache"), 50L * 1024 * 1024))
56+
.build()
5857
return ImageLoader.Builder(context)
5958
.crossfade(true)
6059
.memoryCachePolicy(CachePolicy.ENABLED)
61-
.diskCachePolicy(CachePolicy.ENABLED)
62-
.diskCache {
63-
DiskCache.Builder()
64-
.directory(context.cacheDir.resolve("image_cache"))
65-
.maxSizePercent(0.2)
66-
.build()
67-
}
60+
.diskCachePolicy(CachePolicy.DISABLED)
6861
.components {
69-
add(ETagOfflineFallbackInterceptor())
70-
add(OkHttpNetworkFetcherFactory(
71-
cacheStrategy = { ETagCacheStrategy() },
72-
))
62+
add(OkHttpNetworkFetcherFactory(callFactory = { okHttpClient }))
7363
}
7464
.build()
7565
}

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/cache/ETagRevalidation.kt

Lines changed: 0 additions & 151 deletions
This file was deleted.

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/ui/TokenImageWithName.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import coil3.compose.LocalPlatformContext
2020
import coil3.request.ImageRequest
2121
import coil3.request.crossfade
2222
import coil3.request.error
23-
import com.flipcash.app.core.cache.etagRevalidation
2423
import com.getcode.opencode.model.financial.Token
2524
import com.getcode.theme.CodeTheme
2625
import com.getcode.ui.components.R
@@ -108,7 +107,6 @@ fun TokenIcon(
108107
.data(image)
109108
.crossfade(false)
110109
.error(R.drawable.ic_placeholder_user)
111-
.etagRevalidation()
112110
.build(),
113111
contentDescription = null,
114112
contentScale = ContentScale.Crop,

0 commit comments

Comments
 (0)