|
@@ -1,16 +1,86 @@
|
|
|
package com.zaojiao.http.di
|
|
|
|
|
|
+import android.content.Context
|
|
|
+import coil.ImageLoader
|
|
|
+import coil.decode.SvgDecoder
|
|
|
import dagger.Module
|
|
|
import dagger.Provides
|
|
|
+import dagger.hilt.InstallIn
|
|
|
+import dagger.hilt.android.qualifiers.ApplicationContext
|
|
|
+import dagger.hilt.components.SingletonComponent
|
|
|
import okhttp3.OkHttpClient
|
|
|
+import okhttp3.logging.HttpLoggingInterceptor
|
|
|
+import retrofit2.Retrofit
|
|
|
+import retrofit2.converter.gson.GsonConverterFactory
|
|
|
+import java.util.concurrent.TimeUnit
|
|
|
+import javax.inject.Named
|
|
|
import javax.inject.Singleton
|
|
|
|
|
|
@Module
|
|
|
-class HttpModule {
|
|
|
+@InstallIn(SingletonComponent::class)
|
|
|
+object HttpModule {
|
|
|
+ @Provides
|
|
|
+ @Singleton
|
|
|
+ @Named("timeout")
|
|
|
+ fun provideTimeout(): Long {
|
|
|
+ return 30 * 1000
|
|
|
+ }
|
|
|
+
|
|
|
+ @Provides
|
|
|
+ @Singleton
|
|
|
+ @Named("endpoint")
|
|
|
+ fun provideEndpoint(): String {
|
|
|
+ return "https://open.api.luojigou.vip"
|
|
|
+ }
|
|
|
|
|
|
+ @Provides
|
|
|
@Singleton
|
|
|
+ fun provideHttpLoggingInterceptor(): HttpLoggingInterceptor {
|
|
|
+ return HttpLoggingInterceptor()
|
|
|
+ .apply {
|
|
|
+ setLevel(HttpLoggingInterceptor.Level.BODY)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Provides
|
|
|
- fun provideHttpClient(): OkHttpClient {
|
|
|
- return OkHttpClient.Builder().build()
|
|
|
+ @Singleton
|
|
|
+ fun provideOkHttpClient(
|
|
|
+ @Named("timeout") timeout: Long,
|
|
|
+ loggingInterceptor: HttpLoggingInterceptor,
|
|
|
+ ): OkHttpClient {
|
|
|
+ return OkHttpClient.Builder()
|
|
|
+ .connectTimeout(timeout, TimeUnit.MILLISECONDS)
|
|
|
+ .readTimeout(timeout, TimeUnit.MILLISECONDS)
|
|
|
+ .writeTimeout(timeout, TimeUnit.MILLISECONDS)
|
|
|
+ .retryOnConnectionFailure(true)
|
|
|
+ .followRedirects(false)
|
|
|
+ .followSslRedirects(false)
|
|
|
+ .build()
|
|
|
+ }
|
|
|
+
|
|
|
+ @Provides
|
|
|
+ @Singleton
|
|
|
+ fun provideRetrofitClient(
|
|
|
+ okHttpClient: OkHttpClient,
|
|
|
+ @Named("endpoint") endpoint: String,
|
|
|
+ ): Retrofit {
|
|
|
+ return Retrofit.Builder()
|
|
|
+ .client(okHttpClient)
|
|
|
+ .baseUrl(endpoint)
|
|
|
+ .addConverterFactory(GsonConverterFactory.create())
|
|
|
+ .build()
|
|
|
+ }
|
|
|
+
|
|
|
+ @Provides
|
|
|
+ @Singleton
|
|
|
+ fun provideImageLoader(
|
|
|
+ @ApplicationContext application: Context,
|
|
|
+ okHttpClient: OkHttpClient,
|
|
|
+ ): ImageLoader {
|
|
|
+ return ImageLoader.Builder(application)
|
|
|
+ .callFactory(okHttpClient)
|
|
|
+ .components { add(SvgDecoder.Factory()) }
|
|
|
+ .respectCacheHeaders(false)
|
|
|
+ .build()
|
|
|
}
|
|
|
}
|