diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8056f82..8520634 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" package="com.owenlejeune.mydex"> + + create(service: Class): T { + return retrofit.create(service) + } + + fun addInterceptor(interceptor: Interceptor) { + val iClient = client.httpClient.newBuilder() + .addInterceptor(interceptor) + .build() + retrofit = retrofit.newBuilder() + .client(iClient) + .build() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/mydex/api/ConverterFactoryFactory.kt b/app/src/main/java/com/owenlejeune/mydex/api/ConverterFactoryFactory.kt new file mode 100644 index 0000000..d89f26d --- /dev/null +++ b/app/src/main/java/com/owenlejeune/mydex/api/ConverterFactoryFactory.kt @@ -0,0 +1,9 @@ +package com.owenlejeune.mydex.api + +import retrofit2.Converter + +interface ConverterFactoryFactory { + + fun get(): Converter.Factory + +} diff --git a/app/src/main/java/com/owenlejeune/mydex/api/DebugHttpClient.kt b/app/src/main/java/com/owenlejeune/mydex/api/DebugHttpClient.kt new file mode 100644 index 0000000..d59540c --- /dev/null +++ b/app/src/main/java/com/owenlejeune/mydex/api/DebugHttpClient.kt @@ -0,0 +1,11 @@ +package com.owenlejeune.mydex.api + +import com.facebook.stetho.okhttp3.StethoInterceptor +import okhttp3.OkHttpClient + +class DebugHttpClient: HttpClient { + override val httpClient: OkHttpClient + get() = OkHttpClient.Builder() + .addNetworkInterceptor(StethoInterceptor()) + .build() +} \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/mydex/api/GsonConverter.kt b/app/src/main/java/com/owenlejeune/mydex/api/GsonConverter.kt new file mode 100644 index 0000000..105a8ce --- /dev/null +++ b/app/src/main/java/com/owenlejeune/mydex/api/GsonConverter.kt @@ -0,0 +1,17 @@ +package com.owenlejeune.mydex.api + +import com.google.gson.Gson +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject +import retrofit2.Converter +import retrofit2.converter.gson.GsonConverterFactory + +class GsonConverter: ConverterFactoryFactory, KoinComponent { + + private val gson: Gson by inject() + + override fun get(): Converter.Factory { + return GsonConverterFactory.create(gson) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/mydex/api/HttpClient.kt b/app/src/main/java/com/owenlejeune/mydex/api/HttpClient.kt new file mode 100644 index 0000000..30acd21 --- /dev/null +++ b/app/src/main/java/com/owenlejeune/mydex/api/HttpClient.kt @@ -0,0 +1,7 @@ +package com.owenlejeune.mydex.api + +import okhttp3.OkHttpClient + +interface HttpClient { + val httpClient: OkHttpClient +} diff --git a/app/src/main/java/com/owenlejeune/mydex/api/ProdHttpClient.kt b/app/src/main/java/com/owenlejeune/mydex/api/ProdHttpClient.kt new file mode 100644 index 0000000..f3844c3 --- /dev/null +++ b/app/src/main/java/com/owenlejeune/mydex/api/ProdHttpClient.kt @@ -0,0 +1,8 @@ +package com.owenlejeune.mydex.api + +import okhttp3.OkHttpClient + +class ProdHttpClient: HttpClient { + override val httpClient: OkHttpClient + get() = OkHttpClient.Builder().build() +} \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/mydex/api/pokeapi/PokeApiClient.kt b/app/src/main/java/com/owenlejeune/mydex/api/pokeapi/PokeApiClient.kt index b4c8a0f..a4a5eea 100644 --- a/app/src/main/java/com/owenlejeune/mydex/api/pokeapi/PokeApiClient.kt +++ b/app/src/main/java/com/owenlejeune/mydex/api/pokeapi/PokeApiClient.kt @@ -1,4 +1,20 @@ package com.owenlejeune.mydex.api.pokeapi -class PokeApiClient { +import com.owenlejeune.mydex.api.Client +import com.owenlejeune.mydex.preferences.AppPreferences +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject +import org.koin.core.parameter.parametersOf + +class PokeApiClient: KoinComponent { + + companion object { + const val BASE_URL = "https://pokeapi.co/api/v2/" + } + + private val client: Client by inject { parametersOf(BASE_URL) } + private val preferences: AppPreferences by inject() + + + } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/mydex/di/modules.kt b/app/src/main/java/com/owenlejeune/mydex/di/modules.kt index f09f319..3bf066a 100644 --- a/app/src/main/java/com/owenlejeune/mydex/di/modules.kt +++ b/app/src/main/java/com/owenlejeune/mydex/di/modules.kt @@ -1,8 +1,33 @@ package com.owenlejeune.mydex.di +import com.google.gson.GsonBuilder +import com.google.gson.TypeAdapterFactory +import com.owenlejeune.mydex.BuildConfig +import com.owenlejeune.mydex.api.* +import com.owenlejeune.mydex.api.pokeapi.PokeApiClient import com.owenlejeune.mydex.preferences.AppPreferences import org.koin.dsl.module +val networkModule = module { + single { if (BuildConfig.DEBUG) DebugHttpClient() else ProdHttpClient() } + single { GsonConverter() } + factory { (baseUrl: String) -> Client(baseUrl) } + + single> { + listOf(FlattenTypeAdapterFactory()) + } + + single { + GsonBuilder().apply { + get>().forEach { taf -> registerTypeAdapterFactory(taf) } + } + } + + single { PokeApiClient() } +} + val preferencesModule = module { single { AppPreferences(get()) } -} \ No newline at end of file +} + +val Modules = listOf(networkModule, preferencesModule) \ No newline at end of file