From d2a648f79d5c9ee116c48b937370f51b0e07dde6 Mon Sep 17 00:00:00 2001 From: Sasikanth Date: Thu, 20 Feb 2025 12:00:17 +0530 Subject: [PATCH] Bump dependencies (#792) * Bump compile and target SDK for Android * Bump dependencies * Handle nullable version name in `ApplicationComponent` * Set default cache strategy in `FavIconImageLoader` * Use `rememberModalBottomSheetState` in `FeedInfoBottomSheet` * Fix errors in `FavIconFetcher` * Use `rememberModalBottomSheetState` in `GroupSelectionSheet` * Run spotless apply * Disable native cache kind --- .idea/runConfigurations.xml | 4 ++ gradle.properties | 1 + gradle/libs.versions.toml | 59 +++++++++---------- gradle/wrapper/gradle-wrapper.properties | 2 +- .../rss/reader/di/ApplicationComponent.kt | 2 +- .../rss/reader/favicons/FavIconFetcher.kt | 18 +++--- .../rss/reader/favicons/FavIconImageLoader.kt | 2 +- .../rss/reader/feed/ui/FeedInfoBottomSheet.kt | 5 +- .../groupselection/ui/GroupSelectionSheet.kt | 5 +- 9 files changed, 50 insertions(+), 48 deletions(-) diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml index 931b96c3c..16660f1d8 100644 --- a/.idea/runConfigurations.xml +++ b/.idea/runConfigurations.xml @@ -5,8 +5,12 @@ diff --git a/gradle.properties b/gradle.properties index 07ec5eeb1..898b325fb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,6 +2,7 @@ org.gradle.jvmargs=-Xmx4096M -Dkotlin.daemon.jvm.options\="-Xmx4096M" #Kotlin kotlin.code.style=official +kotlin.native.cacheKind=none #MPP kotlin.mpp.stability.nowarn=true kotlin.mpp.enableCInteropCommonization=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cf39838f5..b729141c5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,55 +1,55 @@ [versions] -kotlin = "2.0.21" +kotlin = "2.1.10" android_gradle_plugin = "8.8.1" -compose = "1.7.0" +compose = "1.8.0-alpha03" +compose_material_icons_extended = "1.7.3" -android_sdk_compile = "34" -android_sdk_target = "34" +android_sdk_compile = "35" +android_sdk_target = "35" android_sdk_min = "26" sqldelight = "2.0.2" -ktor = "2.3.12" -kotlinx_coroutines = "1.9.0" -kotlinx_date_time = "0.6.1" +ktor = "2.3.13" +kotlinx_coroutines = "1.10.1" +kotlinx_date_time = "0.6.2" kotlinx_immutable_collections = "0.3.8" -kotlinx_serialization_json = "1.7.3" +kotlinx_serialization_json = "1.8.0" decompose = "3.0.0" -essenty = "2.1.0" -androidx_activity = "1.9.2" +essenty = "2.4.0" +androidx_activity = "1.10.0" androidx_appcompat = "1.7.0" -androidx_core = "1.13.1" -androidx_collection = "1.4.4" +androidx_core = "1.15.0" +androidx_collection = "1.4.5" androidx_test_runner = "1.6.2" androidx_test_rules = "1.6.1" -androidx_work = "2.9.1" -androidx_datastore = "1.1.1" +androidx_work = "2.10.0" +androidx_datastore = "1.1.2" androidx_browser = "1.8.0" -androidx_annotation = "1.8.2" -coil = "3.0.0-alpha09" -spotless = "6.25.0" +androidx_annotation = "1.9.1" +coil = "3.1.0" +spotless = "7.0.0" ktfmt = "0.44" kotlininject = "0.7.2" -ksp = "2.0.21-1.0.25" +ksp = "2.1.10-1.0.30" material_color_utilities = "1.0.0-alpha01" ksoup = "0.1.2" sqliteAndroid = "3.45.0" windowSizeClass = "0.5.0" -desugarJdk = "2.1.2" +desugarJdk = "2.1.4" lyricist = "1.7.0" -atomicfu = "0.25.0" -okio = "3.9.1" +atomicfu = "0.27.0" +okio = "3.10.2" paging = "3.3.0-alpha02-0.5.1" stately = "2.1.0" -xmlutil = "0.90.1" +xmlutil = "0.90.3" ktxml = "0.3.2" -uri = "0.0.18" -webview = "1.9.40-alpha03" +webview = "1.9.40" uuid = "0.8.4" -bugsnag-plugin = "8.1.0" -bugsnag = "6.8.0" +bugsnag-plugin = "8.2.0" +bugsnag = "6.12.0" crashkios-bugsnag = "0.9.0" -kermit = "2.0.4" -reorderable = "2.3.3" +kermit = "2.0.5" +reorderable = "2.4.3" korlibs = "6.0.0" filekit = "0.8.8" @@ -60,7 +60,7 @@ compose_ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "compose" } compose_ui_util = { module = "org.jetbrains.compose.ui:ui-util", version.ref = "compose" } compose_material = { module = "org.jetbrains.compose.material:material", version.ref = "compose" } compose_material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "compose" } -compose_material_icons_extended = { module = "org.jetbrains.compose.material:material-icons-extended", version.ref = "compose" } +compose_material_icons_extended = { module = "org.jetbrains.compose.material:material-icons-extended", version.ref = "compose_material_icons_extended" } compose_resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "compose" } ktor_core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } ktor_client_okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" } @@ -114,7 +114,6 @@ stately-iso-collections = { module = "co.touchlab:stately-iso-collections", vers xmlutil-core = { module = "io.github.pdvrieze.xmlutil:core", version.ref = "xmlutil" } xmlutil-serialization = { module = "io.github.pdvrieze.xmlutil:serialization", version.ref = "xmlutil" } ktxml = { module = "org.kobjects.ktxml:core", version.ref = "ktxml" } -uri = { module = "com.eygraber:uri-kmp", version.ref = "uri" } webview = { module = "io.github.kevinnzou:compose-webview-multiplatform", version.ref = "webview" } uuid = { module = "com.benasher44:uuid", version.ref = "uuid" } bugsnag = { module = "com.bugsnag:bugsnag-android", version.ref = "bugsnag" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72b8..e18bc253b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME 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 28a665ac6..45537487c 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 @@ -52,7 +52,7 @@ abstract class ApplicationComponent(@get:Provides val context: Context) : } return AppInfo( - versionName = packageInfo.versionName, + versionName = packageInfo.versionName ?: "0.0.1", versionCode = versionCode, isDebugBuild = (applicationInfo.flags and FLAG_DEBUGGABLE) != 0, cachePath = { context.cacheDir.absolutePath } diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/favicons/FavIconFetcher.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/favicons/FavIconFetcher.kt index af4a33a27..7e17fbfe9 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/favicons/FavIconFetcher.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/favicons/FavIconFetcher.kt @@ -30,8 +30,8 @@ import coil3.fetch.FetchResult import coil3.fetch.Fetcher import coil3.fetch.SourceFetchResult import coil3.getExtra -import coil3.network.CacheResponse import coil3.network.CacheStrategy +import coil3.network.ConnectivityChecker import coil3.network.HttpException import coil3.network.NetworkClient import coil3.network.NetworkFetcher @@ -68,25 +68,24 @@ class FavIconFetcher( val snapshot = readFromDiskCache() try { // Fast path: fetch the fav icon from the disk cache without performing a network request. - var output: CacheStrategy.Output? = null + var output: CacheStrategy.ReadResult? = null if (snapshot != null) { var cacheResponse = snapshot.toCacheResponse() if (cacheResponse != null) { - val input = CacheStrategy.Input(cacheResponse, newRequest(), options) - output = cacheStrategy.value.compute(input) - cacheResponse = output.cacheResponse + output = cacheStrategy.value.read(cacheResponse, newRequest(), options) + cacheResponse = output.response } if (cacheResponse != null) { return SourceFetchResult( source = snapshot.toImageSource(), - mimeType = getMimeType(url, cacheResponse.responseHeaders[CONTENT_TYPE]), + mimeType = getMimeType(url, cacheResponse.headers[CONTENT_TYPE]), dataSource = DataSource.DISK, ) } } // Slow path: fetch the fav icon by parsing response HTML - val networkRequest = output?.networkRequest ?: newRequest() + val networkRequest = output?.request ?: newRequest() return executeNetworkRequest(networkRequest) { response -> // Write the response to the disk cache then open a new snapshot. val responseBody = checkNotNull(response.body) { "body == null" } @@ -207,9 +206,9 @@ class FavIconFetcher( return contentType?.substringBefore(';') } - private fun DiskCache.Snapshot.toCacheResponse(): CacheResponse? { + private fun DiskCache.Snapshot.toCacheResponse(): NetworkResponse? { return try { - fileSystem.read(metadata) { CacheResponse(this) } + fileSystem.read(metadata) { NetworkResponse(body = NetworkResponseBody(this)) } } catch (_: IOException) { // If we can't parse the metadata, ignore this entry. null @@ -283,6 +282,7 @@ class FavIconFetcher( networkClient = networkClientLazy, diskCache = diskCacheLazy, cacheStrategy = cacheStrategyLazy, + connectivityChecker = ConnectivityChecker.ONLINE ) } ) diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/favicons/FavIconImageLoader.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/favicons/FavIconImageLoader.kt index 9313edc36..fcf168e2c 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/favicons/FavIconImageLoader.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/favicons/FavIconImageLoader.kt @@ -47,7 +47,7 @@ object FavIconImageLoader { add( FavIconFetcher.Factory( networkClient = { HttpClient().asNetworkClient() }, - cacheStrategy = { CacheStrategy() } + cacheStrategy = { CacheStrategy.DEFAULT } ) ) } diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/feed/ui/FeedInfoBottomSheet.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/feed/ui/FeedInfoBottomSheet.kt index 89a327b63..acf8f9ce5 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/feed/ui/FeedInfoBottomSheet.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/feed/ui/FeedInfoBottomSheet.kt @@ -51,9 +51,9 @@ import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet -import androidx.compose.material3.SheetState import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect @@ -69,7 +69,6 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.style.TextAlign @@ -126,7 +125,7 @@ fun FeedInfoBottomSheet( .only(WindowInsetsSides.Bottom) .union(WindowInsets.ime.only(WindowInsetsSides.Bottom)) }, - sheetState = SheetState(skipPartiallyExpanded = true, density = LocalDensity.current), + sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true), scrimColor = SYSTEM_SCRIM ) { Column( diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/groupselection/ui/GroupSelectionSheet.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/groupselection/ui/GroupSelectionSheet.kt index 057cb5f8d..f8dd5ab66 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/groupselection/ui/GroupSelectionSheet.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/groupselection/ui/GroupSelectionSheet.kt @@ -39,8 +39,8 @@ import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet -import androidx.compose.material3.SheetState import androidx.compose.material3.Text +import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -51,7 +51,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp import app.cash.paging.compose.collectAsLazyPagingItems import dev.sasikanth.rss.reader.components.Button @@ -79,7 +78,7 @@ fun GroupSelectionSheet(presenter: GroupSelectionPresenter, modifier: Modifier = .only(WindowInsetsSides.Bottom) .union(WindowInsets.ime.only(WindowInsetsSides.Bottom)) }, - sheetState = SheetState(skipPartiallyExpanded = true, density = LocalDensity.current), + sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true), scrimColor = SYSTEM_SCRIM ) { val state by presenter.state.collectAsState()