From 92981961a10ac69f9b97fa5fe0997fbbc1766af8 Mon Sep 17 00:00:00 2001 From: lihenggui Date: Thu, 29 Feb 2024 16:03:47 -0800 Subject: [PATCH] WIP: Add ktor and retrofit dependencies --- build.gradle.kts | 5 +- core/network/build.gradle.kts | 58 ++++++++++++++----- .../kotlin}/AndroidManifest.xml | 0 .../src/{main => commonMain}/assets/news.json | 0 .../{main => commonMain}/assets/topics.json | 0 .../kotlin/JvmUnitTestFakeAssetManager.kt | 0 .../core/network/NiaNetworkDataSource.kt | 0 .../core/network/di/FlavoredNetworkModule.kt | 2 +- .../core/network/di/NetworkModule.kt | 23 +------- .../core/network/fake/FakeAssetManager.kt | 0 .../network/fake/FakeNiaNetworkDataSource.kt | 0 .../core/network/model/NetworkChangeList.kt | 0 .../core/network/model/NetworkNewsResource.kt | 0 .../core/network/model/NetworkTopic.kt | 0 .../network/retrofit/RetrofitNiaNetwork.kt | 0 gradle/libs.versions.toml | 27 +++++++-- 16 files changed, 72 insertions(+), 43 deletions(-) rename core/network/src/{main => androidMain/kotlin}/AndroidManifest.xml (100%) rename core/network/src/{main => commonMain}/assets/news.json (100%) rename core/network/src/{main => commonMain}/assets/topics.json (100%) rename core/network/src/{main => commonMain}/kotlin/JvmUnitTestFakeAssetManager.kt (100%) rename core/network/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt (100%) rename core/network/src/{demo => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt (95%) rename core/network/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt (80%) rename core/network/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt (100%) rename core/network/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt (100%) rename core/network/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt (100%) rename core/network/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt (100%) rename core/network/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt (100%) rename core/network/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt (100%) diff --git a/build.gradle.kts b/build.gradle.kts index 094a9eb3d..6e0f9ab17 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -46,7 +46,8 @@ plugins { alias(libs.plugins.roborazzi) apply false alias(libs.plugins.secrets) apply false alias(libs.plugins.room) apply false - alias(libs.plugins.jetbrainsCompose) apply false - alias(libs.plugins.kotlinMultiplatform) apply false + alias(libs.plugins.jetbrains.compose) apply false + alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.sqldelight.gradle.plugin) apply false + alias(libs.plugins.ktrofit) apply false } diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 689a99e73..8edda61fe 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -15,10 +15,12 @@ */ plugins { - alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.kmp.library) alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.kotlin.inject) + alias(libs.plugins.ktrofit) id("kotlinx-serialization") + id("com.google.devtools.ksp") id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") } @@ -38,17 +40,45 @@ secrets { defaultPropertiesFileName = "secrets.defaults.properties" } -dependencies { - api(libs.kotlinx.datetime) - api(projects.core.common) - api(projects.core.model) - - implementation(libs.coil.kt) - implementation(libs.coil.kt.svg) - implementation(libs.kotlinx.serialization.json) - implementation(libs.okhttp.logging) - implementation(libs.retrofit.core) - implementation(libs.retrofit.kotlin.serialization) +kotlin { + sourceSets { + commonMain.dependencies { + api(libs.kotlinx.datetime) + api(projects.core.common) + api(projects.core.model) + implementation(libs.coil.kt) + implementation(libs.coil.kt.svg) + implementation(libs.kotlinx.serialization.json) + implementation(libs.ktor.client.core) + implementation(libs.ktor.client.json) + implementation(libs.ktor.client.logging) + implementation(libs.ktor.client.serialization) + implementation(libs.ktor.client.content.negotiation) + implementation(libs.ktor.serialization.kotlinx.json) + implementation(libs.ktorfit.lib) + implementation(libs.ktorfit.ksp) + } + commonTest.dependencies { + implementation(libs.kotlinx.coroutines.test) + } + androidMain.dependencies { + implementation(libs.ktor.client.android) + } + appleMain.dependencies { + implementation(libs.ktor.client.darwin) + } + jsMain.dependencies { + implementation(libs.ktor.client.js) + } + jvmMain.dependencies { + implementation(libs.ktor.client.java) + } + mingwMain.dependencies { + implementation(libs.ktor.client.winhttp) + } + } +} - testImplementation(libs.kotlinx.coroutines.test) +dependencies { + add("kspCommonMainMetadata", libs.ktorfit.ksp) } diff --git a/core/network/src/main/AndroidManifest.xml b/core/network/src/androidMain/kotlin/AndroidManifest.xml similarity index 100% rename from core/network/src/main/AndroidManifest.xml rename to core/network/src/androidMain/kotlin/AndroidManifest.xml diff --git a/core/network/src/main/assets/news.json b/core/network/src/commonMain/assets/news.json similarity index 100% rename from core/network/src/main/assets/news.json rename to core/network/src/commonMain/assets/news.json diff --git a/core/network/src/main/assets/topics.json b/core/network/src/commonMain/assets/topics.json similarity index 100% rename from core/network/src/main/assets/topics.json rename to core/network/src/commonMain/assets/topics.json diff --git a/core/network/src/main/kotlin/JvmUnitTestFakeAssetManager.kt b/core/network/src/commonMain/kotlin/JvmUnitTestFakeAssetManager.kt similarity index 100% rename from core/network/src/main/kotlin/JvmUnitTestFakeAssetManager.kt rename to core/network/src/commonMain/kotlin/JvmUnitTestFakeAssetManager.kt diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt diff --git a/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt similarity index 95% rename from core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt index 850b00201..60744eeab 100644 --- a/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt +++ b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt similarity index 80% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt index a68683c7c..7a54b0fc9 100644 --- a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt +++ b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt @@ -16,36 +16,17 @@ package com.google.samples.apps.nowinandroid.core.network.di -import android.content.Context -import androidx.tracing.trace -import coil.ImageLoader -import coil.decode.SvgDecoder -import coil.util.DebugLogger -import com.google.samples.apps.nowinandroid.core.network.BuildConfig import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.components.SingletonComponent +import de.jensklingenberg.ktorfit.Call import kotlinx.serialization.json.Json -import okhttp3.Call -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import javax.inject.Singleton +import me.tatarka.inject.annotations.Provides -@Module -@InstallIn(SingletonComponent::class) internal object NetworkModule { - @Provides - @Singleton fun providesNetworkJson(): Json = Json { ignoreUnknownKeys = true } - @Provides - @Singleton fun providesFakeAssetManager( @ApplicationContext context: Context, ): FakeAssetManager = FakeAssetManager(context.assets::open) diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt b/core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt rename to core/network/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7c3190f05..c82347cda 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ androidxTracing = "1.3.0-alpha02" androidxUiAutomator = "2.2.0" androidxWindowManager = "1.2.0" androidxWork = "2.9.0" -coil = "2.5.0" +coil = "3.0.0-alpha06" dependencyGuard = "0.4.3" firebaseBom = "32.4.0" firebaseCrashlyticsPlugin = "2.9.9" @@ -73,6 +73,8 @@ junit = "4.13.2" sqldelight = "2.0.1" kotlinInject = '0.6.3' multiplatform-settings = "1.1.1" +ktor = "3.0.0-beta-1" +ktrofit = "1.12.0" [libraries] accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" } @@ -116,8 +118,9 @@ androidx-test-uiautomator = { group = "androidx.test.uiautomator", name = "uiaut androidx-tracing-ktx = { group = "androidx.tracing", name = "tracing-ktx", version.ref = "androidxTracing" } androidx-work-ktx = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "androidxWork" } androidx-work-testing = { group = "androidx.work", name = "work-testing", version.ref = "androidxWork" } -coil-kt = { group = "io.coil-kt", name = "coil", version.ref = "coil" } -coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } +coil-kt = { group = "io.coil-kt", name = "coil3", version.ref = "coil" } +coil-core = { group = "io.coil-kt", name = "coil-core", version.ref = "coil" } +coil-kt-compose = { group = "io.coil-kt", name = "coil-compose-core", version.ref = "coil" } coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics-ktx" } firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebaseBom" } @@ -176,6 +179,19 @@ multiplatform-settings = { group = "com.russhwolf", name = "multiplatform-settin multiplatform-settings-test = { group = "com.russhwolf", name = "multiplatform-settings-test", version.ref = "multiplatform-settings" } multiplatform-settings-serialization = { group = "com.russhwolf", name = "multiplatform-settings-serialization", version.ref = "multiplatform-settings" } multiplatform-settings-coroutines = { group = "com.russhwolf", name = "multiplatform-settings-coroutines", version.ref = "multiplatform-settings" } +ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" } +ktor-client-json = { group = "io.ktor", name = "ktor-client-json", version.ref = "ktor" } +ktor-client-logging = { group = "io.ktor", name = "ktor-client-logging", version.ref = "ktor" } +ktor-client-serialization = { group = "io.ktor", name = "ktor-client-serialization", version.ref = "ktor" } +ktor-client-content-negotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" } +ktor-client-android = { group = "io.ktor", name = "ktor-client-android", version.ref = "ktor" } +ktor-client-darwin = { group = "io.ktor", name = "ktor-client-darwin", version.ref = "ktor" } +ktor-client-java = { group = "io.ktor", name = "ktor-client-java", version.ref = "ktor" } +ktor-client-js = { group = "io.ktor", name = "ktor-client-js", version.ref = "ktor" } +ktor-client-winhttp = { group = "io.ktor", name = "ktor-client-winhttp", version.ref = "ktor" } +ktor-serialization-kotlinx-json = { group = "io.ktor", name = "ktor-serialization-kotlinx-json", version.ref = "ktor" } +ktorfit-ksp = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-ksp", version.ref = "ktrofit" } +ktorfit-lib = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-lib", version.ref = "ktrofit" } # Dependencies of the included build-logic android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } @@ -204,9 +220,10 @@ protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } room = { id = "androidx.room", version.ref = "room" } secrets = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "secrets" } -jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } -kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } +jetbrains-compose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } sqldelight-gradle-plugin = { id = "app.cash.sqldelight", version.ref = "sqldelight" } +ktrofit = { id = "de.jensklingenberg.ktorfit", version.ref = "ktrofit" } # Plugins defined by this project nowinandroid-android-application = { id = "nowinandroid.android.application", version = "unspecified" }