-
Notifications
You must be signed in to change notification settings - Fork 0
/
DependencyInjection.kt
98 lines (88 loc) · 3.03 KB
/
DependencyInjection.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.mindbyromanzanoni.di
import android.content.Context
import android.content.SharedPreferences
import android.util.Log
import com.mindbyromanzanoni.BuildConfig
import com.mindbyromanzanoni.retrofit.ApiService
import com.mindbyromanzanoni.sharedPreference.SharedPrefs
import com.mindbyromanzanoni.utils.constant.AppConstants
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object DependencyInjection {
@Provides
@Singleton
fun provideOkHttpClient(
interceptor: Interceptor,
loggingInterceptor: HttpLoggingInterceptor
): OkHttpClient {
return OkHttpClient().newBuilder()
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.addInterceptor(interceptor)
.addInterceptor(loggingInterceptor)
.build()
}
@Provides
@Singleton
fun provideInterceptor(sharedPref: SharedPrefs): Interceptor {
return Interceptor { chain ->
val original = chain.request()
val request = original.newBuilder()
val token = sharedPref.getString(AppConstants.USER_AUTH_TOKEN)
if (token.isEmpty().not()) {
Log.v(AppConstants.MY_LOG_TAG, "token ${sharedPref.getString(AppConstants.USER_AUTH_TOKEN)}")
request.header("Authorization", sharedPref.getString(AppConstants.USER_AUTH_TOKEN)
).addHeader("Accept", "application/json").build()
}
request.build()
chain.proceed(request.build())
}
}
@Provides
@Singleton
fun provideLoggingInterceptor(): HttpLoggingInterceptor {
return HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
}
}
@Provides
@Singleton
fun provideConverterFactory(): GsonConverterFactory =
GsonConverterFactory.create()
@Provides
@Singleton
fun provideRetrofit(
okHttpClient: OkHttpClient,
gsonConverterFactory: GsonConverterFactory
): Retrofit {
return Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.client(okHttpClient)
.addConverterFactory(gsonConverterFactory)
.build()
}
@Provides
@Singleton
fun provideApiService(retrofit: Retrofit): ApiService = retrofit.create(ApiService::class.java)
@Provides
@Singleton
fun providerSharedPref(@ApplicationContext context: Context): SharedPreferences {
return context.getSharedPreferences(
AppConstants.SHARED_PREFERENCE_NAME,
Context.MODE_PRIVATE
)
}
}