From ce14942dde4dcdf8212a730fd56408e236e12b54 Mon Sep 17 00:00:00 2001 From: Kelvin Bush Date: Fri, 4 Feb 2022 13:54:15 +0300 Subject: [PATCH] adding kotlin serialization Signed-off-by: Kelvin Bush --- app/build.gradle | 15 ++++---- .../com/kelvinbush/nectar/di/NetworkModule.kt | 35 +++++++++---------- .../nectar/domain/model/CartProduct.kt | 4 +++ .../nectar/domain/model/NetworkProduct.kt | 8 +++-- .../nectar/navigation/DetailsNavArguments.kt | 5 +++ .../kelvinbush/nectar/navigation/NavGraph.kt | 12 +++++++ 6 files changed, 48 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/com/kelvinbush/nectar/navigation/DetailsNavArguments.kt diff --git a/app/build.gradle b/app/build.gradle index 499966c..d11eedd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,6 +5,7 @@ plugins { id 'dagger.hilt.android.plugin' id 'com.google.gms.google-services' id 'kotlin-parcelize' + id 'kotlinx-serialization' } android { @@ -68,16 +69,12 @@ dependencies { debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" implementation "com.google.accompanist:accompanist-insets:0.18.0" - //retrofit - implementation "com.squareup.retrofit2:retrofit:$retrofit_version" - implementation "com.squareup.moshi:moshi-kotlin:$moshi_version" - kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version" - implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version" - /*implementation 'com.squareup.retrofit2:converter-gson:2.9.0' - implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0")*/ + // Retrofit && KotlinX Serialization + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0") + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2" - // KotlinX Serialization -// implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0" //hilt implementation("com.google.dagger:hilt-android:$hilt_version") diff --git a/app/src/main/java/com/kelvinbush/nectar/di/NetworkModule.kt b/app/src/main/java/com/kelvinbush/nectar/di/NetworkModule.kt index 9175020..1d1d544 100644 --- a/app/src/main/java/com/kelvinbush/nectar/di/NetworkModule.kt +++ b/app/src/main/java/com/kelvinbush/nectar/di/NetworkModule.kt @@ -1,24 +1,25 @@ package com.kelvinbush.nectar.di import android.content.Context +import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import com.kelvinbush.nectar.data.AuthInterceptor import com.kelvinbush.nectar.data.remote.FruityApi import com.kelvinbush.nectar.util.Constants.BASE_URL -import com.kelvinbush.nectar.util.DefaultIfNullFactory -import com.squareup.moshi.Moshi -import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.json.Json +import okhttp3.MediaType import okhttp3.OkHttpClient import retrofit2.Retrofit -import retrofit2.converter.moshi.MoshiConverterFactory import java.util.concurrent.TimeUnit import javax.inject.Singleton +@ExperimentalSerializationApi @Module @InstallIn(SingletonComponent::class) object NetworkModule { @@ -35,22 +36,18 @@ object NetworkModule { @Provides @Singleton - fun provideMoshi(): Moshi = - Moshi.Builder() - .add(DefaultIfNullFactory()) - .addLast(KotlinJsonAdapterFactory()) + fun provideRetrofitInstance(okHttpClient: OkHttpClient): Retrofit { + val contentType = MediaType.get("application/json") + val json = Json { + ignoreUnknownKeys = true + isLenient = true + } + return Retrofit.Builder() + .baseUrl(BASE_URL) + .client(okHttpClient) + .addConverterFactory(json.asConverterFactory(contentType)) .build() - - @Provides - @Singleton - fun provideRetrofitInstance( - okHttpClient: OkHttpClient, - moshi: Moshi, - ): Retrofit = Retrofit.Builder() - .baseUrl(BASE_URL) - .client(okHttpClient) - .addConverterFactory(MoshiConverterFactory.create(moshi).asLenient()) - .build() + } @Provides diff --git a/app/src/main/java/com/kelvinbush/nectar/domain/model/CartProduct.kt b/app/src/main/java/com/kelvinbush/nectar/domain/model/CartProduct.kt index c41699c..80a0251 100644 --- a/app/src/main/java/com/kelvinbush/nectar/domain/model/CartProduct.kt +++ b/app/src/main/java/com/kelvinbush/nectar/domain/model/CartProduct.kt @@ -1,12 +1,15 @@ package com.kelvinbush.nectar.domain.model +import kotlinx.serialization.Serializable +@Serializable data class CartProduct( val id: String, val quantity: Int, val product: Product ) +@Serializable data class Product( val name: String, val imageUrl: String, @@ -14,6 +17,7 @@ data class Product( ) +@Serializable data class CartItemList( val cartItems: List? = emptyList(), ) diff --git a/app/src/main/java/com/kelvinbush/nectar/domain/model/NetworkProduct.kt b/app/src/main/java/com/kelvinbush/nectar/domain/model/NetworkProduct.kt index 6f9842f..971a130 100644 --- a/app/src/main/java/com/kelvinbush/nectar/domain/model/NetworkProduct.kt +++ b/app/src/main/java/com/kelvinbush/nectar/domain/model/NetworkProduct.kt @@ -1,6 +1,8 @@ package com.kelvinbush.nectar.domain.model +import kotlinx.serialization.Serializable +@Serializable data class NetworkProduct( val id: String, val name: String, @@ -11,20 +13,20 @@ data class NetworkProduct( val inventory: ProductInventory, ) - +@Serializable data class ProductCategory( val id: String, val name: String, val description: String, ) - +@Serializable data class ProductInventory( val id: String, val quantity: Int, ) - +@Serializable data class AllNetworkProducts( val result: List? = emptyList(), ) diff --git a/app/src/main/java/com/kelvinbush/nectar/navigation/DetailsNavArguments.kt b/app/src/main/java/com/kelvinbush/nectar/navigation/DetailsNavArguments.kt new file mode 100644 index 0000000..a098222 --- /dev/null +++ b/app/src/main/java/com/kelvinbush/nectar/navigation/DetailsNavArguments.kt @@ -0,0 +1,5 @@ +package com.kelvinbush.nectar.navigation + +/*data class DetailsNavArguments( + val navArguments: List<> +)*/ diff --git a/app/src/main/java/com/kelvinbush/nectar/navigation/NavGraph.kt b/app/src/main/java/com/kelvinbush/nectar/navigation/NavGraph.kt index 759ba5e..2344de4 100644 --- a/app/src/main/java/com/kelvinbush/nectar/navigation/NavGraph.kt +++ b/app/src/main/java/com/kelvinbush/nectar/navigation/NavGraph.kt @@ -17,9 +17,11 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavDestination.Companion.hierarchy import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavHostController +import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.navArgument import coil.annotation.ExperimentalCoilApi import com.kelvinbush.nectar.R import com.kelvinbush.nectar.domain.model.ProductDetail @@ -42,6 +44,15 @@ import com.kelvinbush.nectar.util.Constants.DETAIL_ARGUMENT_KEY @ExperimentalMaterialApi @Composable fun SetUpNavGraph(navController: NavHostController) { + + val detailNavArguments = listOf( + navArgument("name") { type = NavType.StringType }, + navArgument("price") { type = NavType.FloatType }, + navArgument("imageUrl") { type = NavType.StringType }, + navArgument("description") { type = NavType.StringType }, + navArgument("id") { type = NavType.StringType } + ) + Scaffold( bottomBar = { MyBottomNav(navController = navController) } ) { @@ -71,6 +82,7 @@ fun SetUpNavGraph(navController: NavHostController) { } } + @Composable fun MyBottomNav(navController: NavHostController) { val bottomItems = listOf(