diff --git a/.github/workflows/android_build.yml b/.github/workflows/android_build.yml index 64f85abd..4a7af26f 100644 --- a/.github/workflows/android_build.yml +++ b/.github/workflows/android_build.yml @@ -10,7 +10,7 @@ jobs: build: runs-on: ubuntu-latest - timeout-minutes: 15 + timeout-minutes: 30 steps: diff --git a/.gitignore b/.gitignore index 50e2675d..205e52a4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ local.properties play_config.* keystore.* Gemfile.lock +build diff --git a/core/image/build.gradle.kts b/core/image/build.gradle.kts new file mode 100644 index 00000000..5b70f5b4 --- /dev/null +++ b/core/image/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + alias(libs.plugins.convention.library) + alias(libs.plugins.convention.library.compose) +} + +dependencies { + implementation(project(":core:core")) + + implementation(libs.bundles.ktor) + implementation(libs.bundles.okhttp) + implementation(libs.coil.ktor) +} \ No newline at end of file diff --git a/core/image/src/main/kotlin/st/slex/scplashscreen/core/image/AppImageRequest.kt b/core/image/src/main/kotlin/st/slex/scplashscreen/core/image/AppImageRequest.kt new file mode 100644 index 00000000..e9acdec3 --- /dev/null +++ b/core/image/src/main/kotlin/st/slex/scplashscreen/core/image/AppImageRequest.kt @@ -0,0 +1,32 @@ +package st.slex.scplashscreen.core.image + +import android.content.Context +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext +import coil3.request.CachePolicy +import coil3.request.ImageRequest + +object AppImageRequest { + + @Composable + fun createImageRequestBuilder(url: String): ImageRequest.Builder { + val context = LocalContext.current + return remember { + createImageRequestBuilder(context, url) + .placeholderMemoryCacheKey(url) + } + } + + fun createImageRequestBuilder( + context: Context, + url: String + ): ImageRequest.Builder = ImageRequest + .Builder(context) + .data(url) + .networkCachePolicy(CachePolicy.ENABLED) + .diskCachePolicy(CachePolicy.ENABLED) + .memoryCachePolicy(CachePolicy.ENABLED) + .diskCacheKey(url) + .memoryCacheKey(url) +} \ No newline at end of file diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index d0220f2f..e3568ade 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -7,6 +7,7 @@ dependencies { implementation(project(":core:core")) implementation(project(":core:navigation")) implementation(project(":core:network")) + implementation(project(":core:image")) api(libs.androidx.compose.navigation) implementation(libs.androidx.paging.runtime) diff --git a/core/ui/src/main/java/st/slex/csplashscreen/core/ui/components/ImageComponent.kt b/core/ui/src/main/java/st/slex/csplashscreen/core/ui/components/ImageComponent.kt index 8334561d..33b691eb 100644 --- a/core/ui/src/main/java/st/slex/csplashscreen/core/ui/components/ImageComponent.kt +++ b/core/ui/src/main/java/st/slex/csplashscreen/core/ui/components/ImageComponent.kt @@ -3,10 +3,9 @@ package st.slex.csplashscreen.core.ui.components import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalContext -import coil.compose.AsyncImage -import coil.request.CachePolicy -import coil.request.ImageRequest +import coil3.compose.AsyncImage +import coil3.request.crossfade +import st.slex.scplashscreen.core.image.AppImageRequest.createImageRequestBuilder @Composable fun ImageComponent( @@ -16,14 +15,7 @@ fun ImageComponent( ) { AsyncImage( modifier = modifier, - model = ImageRequest.Builder(LocalContext.current) - .data(url) - .placeholderMemoryCacheKey(url) - .memoryCacheKey(url) - .diskCacheKey(url) - .networkCachePolicy(CachePolicy.ENABLED) - .diskCachePolicy(CachePolicy.ENABLED) - .memoryCachePolicy(CachePolicy.ENABLED) + model = createImageRequestBuilder(url) .crossfade(true) .build(), contentDescription = null, diff --git a/core/ui/src/main/java/st/slex/csplashscreen/core/ui/components/base/PhotosBaseLazyList.kt b/core/ui/src/main/java/st/slex/csplashscreen/core/ui/components/base/PhotosBaseLazyList.kt index 0daca577..5a7e2f75 100644 --- a/core/ui/src/main/java/st/slex/csplashscreen/core/ui/components/base/PhotosBaseLazyList.kt +++ b/core/ui/src/main/java/st/slex/csplashscreen/core/ui/components/base/PhotosBaseLazyList.kt @@ -32,7 +32,6 @@ fun PhotosBaseLazyList( vertical = Dimen.large ), ) { - items( count = items.itemCount, key = items.itemKey(key), diff --git a/fastlane/report.xml b/fastlane/report.xml index 8c2feae2..1582ee6a 100644 --- a/fastlane/report.xml +++ b/fastlane/report.xml @@ -5,17 +5,17 @@ - + - + - + diff --git a/feature/photo-detail/build.gradle.kts b/feature/photo-detail/build.gradle.kts index c39f0593..acc9ae7c 100644 --- a/feature/photo-detail/build.gradle.kts +++ b/feature/photo-detail/build.gradle.kts @@ -10,4 +10,5 @@ dependencies { implementation(project(":core:network")) implementation(project(":core:photos")) implementation(project(":core:favourite")) + implementation(project(":core:image")) } diff --git a/feature/photo-detail/src/main/java/st/slex/csplashscreen/feature/photo_detail/ui/utils/WallpaperSetUseCaseImpl.kt b/feature/photo-detail/src/main/java/st/slex/csplashscreen/feature/photo_detail/ui/utils/WallpaperSetUseCaseImpl.kt index 3883d9d7..752eedb4 100644 --- a/feature/photo-detail/src/main/java/st/slex/csplashscreen/feature/photo_detail/ui/utils/WallpaperSetUseCaseImpl.kt +++ b/feature/photo-detail/src/main/java/st/slex/csplashscreen/feature/photo_detail/ui/utils/WallpaperSetUseCaseImpl.kt @@ -2,31 +2,23 @@ package st.slex.csplashscreen.feature.photo_detail.ui.utils import android.app.WallpaperManager import android.content.Context -import androidx.core.graphics.drawable.toBitmap -import coil.ImageLoader -import coil.request.CachePolicy -import coil.request.ImageRequest +import coil3.SingletonImageLoader +import coil3.toBitmap +import st.slex.scplashscreen.core.image.AppImageRequest class WallpaperSetUseCaseImpl( private val context: Context, ) : WallpaperSetUseCase { override operator fun invoke(url: String) { - val imageLoader = ImageLoader(context) - val imageRequest = ImageRequest.Builder(context) - .data(url) - .diskCacheKey(url) - .memoryCacheKey(url) - .placeholderMemoryCacheKey(url) - .diskCachePolicy(CachePolicy.READ_ONLY) - .diskCachePolicy(CachePolicy.READ_ONLY) - .diskCachePolicy(CachePolicy.READ_ONLY) + val request = AppImageRequest + .createImageRequestBuilder(context, url) .listener { _, result -> WallpaperManager .getInstance(context) - .setBitmap(result.drawable.toBitmap()) + .setBitmap(result.image.toBitmap()) } .build() - imageLoader.enqueue(imageRequest) + SingletonImageLoader.get(context).enqueue(request) } } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2d8585e6..40d58801 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,14 +1,14 @@ [versions] androidDesugarJdkLibs = "2.1.4" -kotlin = "2.0.20" -androidGradlePlugin = "8.8.0" -androidTools = "31.8.0" +kotlin = "2.1.0" +androidGradlePlugin = "8.8.1" +androidTools = "31.8.1" minSdk = "28" targetSdk = "35" compileSdk = "35" -versionName = "1.75" -versionCode = "22" +versionName = "1.76" +versionCode = "23" ktx = "1.15.0" material = "1.12.0" @@ -17,11 +17,11 @@ immutableCollection = "0.3.5" lifecycle = "2.8.7" coroutines = "1.9.0" -composeBom = "2025.01.01" +composeBom = "2025.02.00" composeGradle = "1.7.0" -composeNavigation = "2.8.6" +composeNavigation = "2.8.7" accompanist = "0.30.0" -coilCompose = "2.5.0" +coil = "3.0.2" composeActivity = "1.10.0" koin = "4.0.0" @@ -37,11 +37,11 @@ robolectric = "4.9" androidxTest = "1.6.1" room = "2.6.1" -ksp = "2.0.20-1.0.24" +ksp = "2.1.0-1.0.28" mockito = "2.19.0" -vkompose = "0.6.1-k2" +vkompose = "0.7" serialization = "1.7.3" -paging = "3.3.5" +paging = "3.3.6" slf4j = "1.7.9" coroutineTest = "1.9.0" [libraries] @@ -79,7 +79,8 @@ androidx-compose-tooling = { group = "androidx.compose.ui", name = "ui-tooling" androidx-compose-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } -coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coilCompose" } +coil-compose = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref = "coil" } +coil-ktor = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" } androidx-compose-paging = { group = "androidx.paging", name = "paging-compose", version.ref = "paging" } androidx-paging-runtime = { group = "androidx.paging", name = "paging-runtime-ktx", version.ref = "paging" } diff --git a/settings.gradle.kts b/settings.gradle.kts index e08cf90b..a06be248 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,6 +26,7 @@ include(":core:navigation") include(":core:network") include(":core:photos") include(":core:collection") +include(":core:image") include(":feature:home") include(":feature:collection")