From 4839eda461a951a587578bb1f07bdc0a2bd4db2f Mon Sep 17 00:00:00 2001 From: Sasikanth Miriyampalli Date: Thu, 8 Aug 2024 12:59:40 +0530 Subject: [PATCH 1/2] Fix dynamic color state not updating when list is changed when app is refreshing --- .../kotlin/dev/sasikanth/rss/reader/home/ui/FeaturedSection.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/home/ui/FeaturedSection.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/home/ui/FeaturedSection.kt index 0228a0906..c35a38f28 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/home/ui/FeaturedSection.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/home/ui/FeaturedSection.kt @@ -116,7 +116,7 @@ internal fun FeaturedSection( systemBarsEndPadding } - LaunchedEffect(pagerState) { + LaunchedEffect(pagerState, featuredPosts) { snapshotFlow { val settledPage = pagerState.settledPage try { From ae10f1dde245b3d5ee7f0c4ac360d298b4d2c0d1 Mon Sep 17 00:00:00 2001 From: Sasikanth Miriyampalli Date: Thu, 8 Aug 2024 13:15:29 +0530 Subject: [PATCH 2/2] Provide cache path using `AppInfo` --- .../dev/sasikanth/rss/reader/app/AppInfo.kt | 7 +++++- .../rss/reader/di/ApplicationComponent.kt | 3 ++- .../reader/di/ImageLoaderComponent.android.kt | 6 ----- .../rss/reader/di/ImageLoaderComponent.kt | 11 ++++++--- .../rss/reader/di/ApplicationComponent.kt | 18 +++++++++++++++ .../rss/reader/di/ImageLoaderComponent.ios.kt | 23 ------------------- 6 files changed, 34 insertions(+), 34 deletions(-) diff --git a/core/base/src/commonMain/kotlin/dev/sasikanth/rss/reader/app/AppInfo.kt b/core/base/src/commonMain/kotlin/dev/sasikanth/rss/reader/app/AppInfo.kt index 738e347a8..9b5ee3c9e 100644 --- a/core/base/src/commonMain/kotlin/dev/sasikanth/rss/reader/app/AppInfo.kt +++ b/core/base/src/commonMain/kotlin/dev/sasikanth/rss/reader/app/AppInfo.kt @@ -16,4 +16,9 @@ package dev.sasikanth.rss.reader.app -data class AppInfo(val versionCode: Int, val versionName: String, val isDebugBuild: Boolean) +data class AppInfo( + val versionCode: Int, + val versionName: String, + val isDebugBuild: Boolean, + val cachePath: () -> String, +) diff --git a/shared/src/androidMain/kotlin/dev/sasikanth/rss/reader/di/ApplicationComponent.kt b/shared/src/androidMain/kotlin/dev/sasikanth/rss/reader/di/ApplicationComponent.kt index c9819c360..50f9de20f 100644 --- a/shared/src/androidMain/kotlin/dev/sasikanth/rss/reader/di/ApplicationComponent.kt +++ b/shared/src/androidMain/kotlin/dev/sasikanth/rss/reader/di/ApplicationComponent.kt @@ -54,7 +54,8 @@ abstract class ApplicationComponent(@get:Provides val context: Context) : return AppInfo( versionName = packageInfo.versionName, versionCode = versionCode, - isDebugBuild = (applicationInfo.flags and FLAG_DEBUGGABLE) != 0 + isDebugBuild = (applicationInfo.flags and FLAG_DEBUGGABLE) != 0, + cachePath = { context.cacheDir.absolutePath } ) } diff --git a/shared/src/androidMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.android.kt b/shared/src/androidMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.android.kt index fdee4522d..539d16a0d 100644 --- a/shared/src/androidMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.android.kt +++ b/shared/src/androidMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.android.kt @@ -19,14 +19,8 @@ package dev.sasikanth.rss.reader.di import android.content.Context import coil3.PlatformContext import me.tatarka.inject.annotations.Provides -import okio.Path -import okio.Path.Companion.toPath actual interface ImageLoaderPlatformComponent { @Provides fun providePlatformContext(context: Context): PlatformContext = context - - @Provides - fun diskCache(application: Context): Path = - application.cacheDir.absolutePath.toPath().resolve("dev_sasikanth_rss_reader_images_cache") } diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.kt index e5e885f9e..a4571f7d7 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.kt @@ -20,8 +20,9 @@ import coil3.ImageLoader import coil3.PlatformContext import coil3.disk.DiskCache import coil3.memory.MemoryCache +import dev.sasikanth.rss.reader.app.AppInfo import me.tatarka.inject.annotations.Provides -import okio.Path +import okio.Path.Companion.toPath expect interface ImageLoaderPlatformComponent @@ -32,11 +33,15 @@ interface ImageLoaderComponent : ImageLoaderPlatformComponent { @Provides fun imageLoader( platformContext: PlatformContext, - cachePath: Path, + appInfo: AppInfo, ): ImageLoader { return ImageLoader.Builder(platformContext) .memoryCache { MemoryCache.Builder().maxSizePercent(platformContext, percent = 0.25).build() } - .diskCache { DiskCache.Builder().directory(cachePath).build() } + .diskCache { + DiskCache.Builder() + .directory(appInfo.cachePath().toPath().resolve("dev_sasikanth_rss_reader_images_cache")) + .build() + } .build() } } diff --git a/shared/src/iosMain/kotlin/dev/sasikanth/rss/reader/di/ApplicationComponent.kt b/shared/src/iosMain/kotlin/dev/sasikanth/rss/reader/di/ApplicationComponent.kt index 6b18a2c79..52bfa9a51 100644 --- a/shared/src/iosMain/kotlin/dev/sasikanth/rss/reader/di/ApplicationComponent.kt +++ b/shared/src/iosMain/kotlin/dev/sasikanth/rss/reader/di/ApplicationComponent.kt @@ -20,9 +20,13 @@ import dev.sasikanth.rss.reader.data.repository.RssRepository import dev.sasikanth.rss.reader.data.repository.SettingsRepository import dev.sasikanth.rss.reader.di.scopes.AppScope import kotlin.experimental.ExperimentalNativeApi +import kotlinx.cinterop.ExperimentalForeignApi import me.tatarka.inject.annotations.Component import me.tatarka.inject.annotations.Provides import platform.Foundation.NSBundle +import platform.Foundation.NSCachesDirectory +import platform.Foundation.NSFileManager +import platform.Foundation.NSUserDomainMask import platform.UIKit.UIViewController @AppScope @@ -45,5 +49,19 @@ abstract class ApplicationComponent( versionName = NSBundle.mainBundle.infoDictionary?.get("CFBundleShortVersionString") as? String ?: "", isDebugBuild = Platform.isDebugBinary, + cachePath = { NSFileManager.defaultManager.cacheDir } ) + + @OptIn(ExperimentalForeignApi::class) + private val NSFileManager.cacheDir: String + get() = + URLForDirectory( + directory = NSCachesDirectory, + inDomain = NSUserDomainMask, + appropriateForURL = null, + create = true, + error = null, + ) + ?.path + .orEmpty() } diff --git a/shared/src/iosMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.ios.kt b/shared/src/iosMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.ios.kt index 018321c71..155146212 100644 --- a/shared/src/iosMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.ios.kt +++ b/shared/src/iosMain/kotlin/dev/sasikanth/rss/reader/di/ImageLoaderComponent.ios.kt @@ -17,32 +17,9 @@ package dev.sasikanth.rss.reader.di import coil3.PlatformContext -import kotlinx.cinterop.ExperimentalForeignApi import me.tatarka.inject.annotations.Provides -import okio.Path -import okio.Path.Companion.toPath -import platform.Foundation.NSCachesDirectory -import platform.Foundation.NSFileManager -import platform.Foundation.NSUserDomainMask actual interface ImageLoaderPlatformComponent { @Provides fun providePlatformContext(): PlatformContext = PlatformContext.INSTANCE - - @Provides - fun diskCache(): Path = - NSFileManager.defaultManager.cacheDir.toPath().resolve("dev_sasikanth_rss_reader_images_cache") - - @OptIn(ExperimentalForeignApi::class) - private val NSFileManager.cacheDir: String - get() = - URLForDirectory( - directory = NSCachesDirectory, - inDomain = NSUserDomainMask, - appropriateForURL = null, - create = true, - error = null, - ) - ?.path - .orEmpty() }