Procházet zdrojové kódy

add network support in core*

MrOzOn před 5 roky
rodič
revize
598d85e5e2

+ 6 - 0
core/src/main/java/com/mrozon/core/CoreProvidersFactory.kt

@@ -2,11 +2,17 @@ package com.mrozon.core
 
 import androidx.lifecycle.ViewModelProvider
 import com.mrozon.core_api.db.DatabaseProvider
+import com.mrozon.core_api.network.NetworkProvider
 import com.mrozon.core_api.providers.AppProvider
 import com.mrozon.core_impl.db.DaggerDatabaseComponent
+import com.mrozon.core_impl.network.DaggerNetworkComponent
 
 object CoreProvidersFactory {
     fun createDatabaseBuilder(appProvider: AppProvider): DatabaseProvider {
         return DaggerDatabaseComponent.builder().appProvider(appProvider).build()
     }
+
+    fun createNetworkBuilder(): NetworkProvider {
+        return DaggerNetworkComponent.create()
+    }
 }

+ 2 - 0
core_api/build.gradle

@@ -33,6 +33,8 @@ dependencies {
     implementation dagger
     kapt daggerCompiler
     implementation room
+    implementation okhttp
+    implementation converterGson
 
     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

+ 26 - 0
core_api/src/main/java/com/mrozon/core_api/network/HealthDiaryService.kt

@@ -0,0 +1,26 @@
+package com.mrozon.core_api.network
+
+import retrofit2.Response
+import retrofit2.http.GET
+import retrofit2.http.Path
+import retrofit2.http.Query
+
+interface HealthDiaryService {
+    companion object {
+        const val ENDPOINT = "https://rebrickable.com/api/v3/"
+    }
+
+//    @GET("lego/themes/")
+//    suspend fun getThemes(@Query("page") page: Int? = null,
+//                          @Query("page_size") pageSize: Int? = null,
+//                          @Query("ordering") order: String? = null): Response<ResultsResponse<LegoTheme>>
+//
+//    @GET("lego/sets/")
+//    suspend fun getSets(@Query("page") page: Int? = null,
+//                        @Query("page_size") pageSize: Int? = null,
+//                        @Query("theme_id") themeId: Int? = null,
+//                        @Query("ordering") order: String? = null): Response<ResultsResponse<LegoSet>>
+//
+//    @GET("lego/sets/{id}/")
+//    suspend fun getSet(@Path("id") id: String): Response<LegoSet>
+}

+ 6 - 0
core_api/src/main/java/com/mrozon/core_api/network/NetworkProvider.kt

@@ -0,0 +1,6 @@
+package com.mrozon.core_api.network
+
+interface NetworkProvider {
+
+    fun provideNetworkService(): HealthDiaryService
+}

+ 4 - 0
core_impl/build.gradle

@@ -34,6 +34,10 @@ dependencies {
     implementation dagger
     kapt daggerCompiler
     implementation room
+    implementation okhttp
+    implementation loggingInterceptor
+    implementation gson
+    implementation converterGson
 
     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

+ 11 - 0
core_impl/src/main/java/com/mrozon/core_impl/network/NetworkComponent.kt

@@ -0,0 +1,11 @@
+package com.mrozon.core_impl.network
+
+import com.mrozon.core_api.network.NetworkProvider
+import dagger.Component
+import javax.inject.Singleton
+
+@Singleton
+@Component(
+    modules = [NetworkModule::class]
+)
+interface NetworkComponent : NetworkProvider

+ 59 - 0
core_impl/src/main/java/com/mrozon/core_impl/network/NetworkModule.kt

@@ -0,0 +1,59 @@
+package com.mrozon.core_impl.network
+
+import okhttp3.logging.HttpLoggingInterceptor.Level.BODY
+import okhttp3.logging.HttpLoggingInterceptor.Level.NONE
+import com.google.gson.Gson
+import com.mrozon.core_api.network.HealthDiaryService
+import com.mrozon.core_impl.BuildConfig
+import dagger.Module
+import dagger.Provides
+import okhttp3.OkHttpClient
+import okhttp3.logging.HttpLoggingInterceptor
+import retrofit2.Retrofit
+import retrofit2.converter.gson.GsonConverterFactory
+import javax.inject.Singleton
+
+@Module
+class NetworkModule {
+
+    @Provides
+    @Singleton
+    fun provideGson(): Gson = Gson()
+
+    @Provides
+    @Singleton
+    fun provideGsonConverterFactory(gson: Gson): GsonConverterFactory =
+        GsonConverterFactory.create(gson)
+
+    @Provides
+    fun provideLoggingInterceptor() =
+        HttpLoggingInterceptor().apply { level = if (BuildConfig.DEBUG) BODY else NONE }
+
+    @Provides
+    fun provideOkHttpClient(interceptor: HttpLoggingInterceptor): OkHttpClient =
+        OkHttpClient.Builder()
+            .addInterceptor(interceptor)
+            .build()
+
+    @Singleton
+    @Provides
+    fun provideNetworkService(okhttpClient: OkHttpClient,
+                              converterFactory: GsonConverterFactory
+    ) = provideService(okhttpClient, converterFactory, HealthDiaryService::class.java)
+
+    private fun <T> provideService(okhttpClient: OkHttpClient,
+                                   converterFactory: GsonConverterFactory, clazz: Class<T>): T {
+        return createRetrofit(okhttpClient, converterFactory).create(clazz)
+    }
+
+    private fun createRetrofit(
+        okhttpClient: OkHttpClient,
+        converterFactory: GsonConverterFactory
+    ): Retrofit {
+        return Retrofit.Builder()
+            .baseUrl(HealthDiaryService.ENDPOINT)
+            .client(okhttpClient)
+            .addConverterFactory(converterFactory)
+            .build()
+    }
+}

+ 31 - 19
scripts/deps_versions.gradle

@@ -1,37 +1,49 @@
 ext {
 
-    retrofitVersion = '2.6.1'
-    jsr330Version = '1'
+
+//    jsr330Version = '1'
     daggerVersion = '2.25.2'
     roomVersion = '2.1.0'
-    picassoVersion = '2.71828'
-    flexLayoutVersion = '1.1.1'
-    viewPager2Version = '1.0.0-rc01'
-    coroutinesVersion = '1.1.1'
-    materialVersion = '1.1.0-beta02'
+//    picassoVersion = '2.71828'
+//    flexLayoutVersion = '1.1.1'
+//    viewPager2Version = '1.0.0-rc01'
+//    coroutinesVersion = '1.1.1'
+//    materialVersion = '1.1.0-beta02'
     navigationVersion = '2.3.0'
     timberVersion = '4.7.1'
+    retrofitVersion = '2.6.1'
+    gsonVersion = '2.8.2'
+    okhttpVersion = '3.10.0'
 
-    retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion"
-    jsr330 = "javax.inject:javax.inject:$jsr330Version"
+//    retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion"
+//    jsr330 = "javax.inject:javax.inject:$jsr330Version"
+    // DI
     dagger = "com.google.dagger:dagger:$daggerVersion"
     daggerCompiler = "com.google.dagger:dagger-compiler:$daggerVersion"
+    // Room
     room = "androidx.room:room-runtime:$roomVersion"
     roomCompiler = "androidx.room:room-compiler:$roomVersion"
-    picasso = "com.squareup.picasso:picasso:$picassoVersion"
-    flexLayout = "com.google.android:flexbox:$flexLayoutVersion"
-    viewPager2 = "androidx.viewpager2:viewpager2:$viewPager2Version"
-    coroutinesDependencies = [
-            'coroutines_core'   : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion",
-            'coroutines_android': "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
-    ]
-
-    material = "com.google.android.material:material:$materialVersion"
+//    picasso = "com.squareup.picasso:picasso:$picassoVersion"
+//    flexLayout = "com.google.android:flexbox:$flexLayoutVersion"
+//    viewPager2 = "androidx.viewpager2:viewpager2:$viewPager2Version"
+//    coroutinesDependencies = [
+//            'coroutines_core'   : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion",
+//            'coroutines_android': "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
+//    ]
+//
+//    material = "com.google.android.material:material:$materialVersion"
 
+    // Navigation
     navigationFragment = "androidx.navigation:navigation-fragment-ktx:$navigationVersion"
     navigationUi = "androidx.navigation:navigation-ui-ktx:$navigationVersion"
     // Dynamic Feature Module Support
     navigationDynamicFeatures = "androidx.navigation:navigation-dynamic-features-fragment:$navigationVersion"
-
+    // Logging
     timber = "com.jakewharton.timber:timber:$timberVersion"
+    // Networking
+    gson = "com.google.code.gson:gson:$gsonVersion"
+    retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion"
+    converterGson = "com.squareup.retrofit2:converter-gson:$retrofitVersion"
+    okhttp = "com.squareup.okhttp3:okhttp:$okhttpVersion"
+    loggingInterceptor = "com.squareup.okhttp3:logging-interceptor:$okhttpVersion"
 }