Skip to content

Commit 48707ba

Browse files
committed
Dagger2 AppModule, Retrofit2 Header 정의
1 parent 741ab31 commit 48707ba

File tree

6 files changed

+63
-24
lines changed

6 files changed

+63
-24
lines changed

app/src/main/java/com/ddd/attendance/check/di/DDDComponent.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
import com.ddd.attendance.check.DDDApplication
2-
import com.ddd.attendance.check.di.module.ActivityBindingModule
3-
import com.ddd.attendance.check.di.module.NetworkModule
4-
import com.ddd.attendance.check.di.module.RepositoryModule
5-
import com.ddd.attendance.check.di.module.ViewModelModule
2+
import com.ddd.attendance.check.di.module.*
63
import dagger.BindsInstance
74
import dagger.Component
85
import dagger.android.support.AndroidSupportInjectionModule
@@ -15,6 +12,7 @@ import javax.inject.Singleton
1512
NetworkModule::class,
1613
ViewModelModule::class,
1714
ActivityBindingModule::class,
15+
AppModule::class,
1816
RepositoryModule::class]
1917
)
2018
interface DDDComponent {

app/src/main/java/com/ddd/attendance/check/di/module/ActivityBindingModule.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.ddd.attendance.check.di.module
22

3-
import com.ddd.attendance.check.di.scope.ActivityScoped
3+
import com.ddd.attendance.check.di.qualifier.PerActivity
44
import com.ddd.attendance.check.ui.LoginActivity
55
import com.ddd.attendance.check.ui.MainActivity
66
import dagger.Module
@@ -9,11 +9,11 @@ import dagger.android.ContributesAndroidInjector
99

1010
@Module
1111
abstract class ActivityBindingModule {
12-
@ActivityScoped
12+
@PerActivity
1313
@ContributesAndroidInjector
1414
abstract fun mainActivity(): MainActivity
1515

16-
@ActivityScoped
16+
@PerActivity
1717
@ContributesAndroidInjector
1818
abstract fun loginActivity(): LoginActivity
1919

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.ddd.attendance.check.di.module
2+
3+
import android.content.Context
4+
import com.ddd.attendance.check.DDDApplication
5+
import com.ddd.attendance.check.di.qualifier.ForApplication
6+
import dagger.Module
7+
import dagger.Provides
8+
import javax.inject.Singleton
9+
10+
@Module
11+
class AppModule {
12+
@Provides
13+
@Singleton
14+
@ForApplication
15+
fun provideApplicationContext(application: DDDApplication): Context {
16+
return application.applicationContext
17+
}
18+
}
Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package com.ddd.attendance.check.di.module
22

3+
import android.content.Context
34
import com.ddd.attendance.check.BuildConfig
5+
import com.ddd.attendance.check.DDDApplication
46
import com.ddd.attendance.check.api.ApiService
7+
import com.ddd.attendance.check.extension.SharedPreferHelper
8+
import com.ddd.attendance.check.extension.SharedPreferHelper.DATA_PREFER
9+
import com.ddd.attendance.check.extension.get
510
import com.google.gson.Gson
611
import com.google.gson.GsonBuilder
712
import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory
@@ -14,45 +19,44 @@ import okhttp3.OkHttpClient
1419
import okhttp3.logging.HttpLoggingInterceptor
1520
import retrofit2.Retrofit
1621
import retrofit2.converter.gson.GsonConverterFactory
17-
import javax.inject.Singleton
1822

1923

2024
@Module
2125
class NetworkModule {
2226

2327
@Provides
24-
@Singleton
25-
fun provideGson(): Gson {
26-
return GsonBuilder()
27-
.setLenient()
28-
.create()
29-
}
30-
31-
@Provides
32-
@Singleton
33-
fun provideInterceptor(): Interceptor {
28+
fun provideInterceptor(application: DDDApplication): Interceptor {
3429
return Interceptor { chain ->
3530
val request = chain.request()
36-
val headers = request.headers().newBuilder().apply {
37-
}.add("Authorization", Credentials.basic("", "")).build()
31+
val token = application.getSharedPreferences(DATA_PREFER, Context.MODE_PRIVATE).get(SharedPreferHelper.TOKEN_KEY, "")
32+
val headers = request.headers().newBuilder()
33+
.add(HEADER_AUTH_PARAM,
34+
if (token.isNotEmpty()) token
35+
else Credentials.basic(BuildConfig.BASIC_AUTH_USER_NAME, BuildConfig.BASIC_AUTH_USER_PASSWORD))
36+
.build()
3837
chain.proceed(request.newBuilder().headers(headers).build())
3938
}
4039
}
4140

4241
@Provides
43-
@Singleton
4442
fun createClient(interceptor: Interceptor): OkHttpClient {
4543
return OkHttpClient.Builder().apply {
4644
addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.HEADERS))
4745
if (BuildConfig.DEBUG) addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
48-
connectTimeout(15, TimeUnit.SECONDS)
49-
readTimeout(15, TimeUnit.SECONDS)
46+
connectTimeout(NETWORK_TIME_OUT, TimeUnit.SECONDS)
47+
readTimeout(NETWORK_TIME_OUT, TimeUnit.SECONDS)
5048
addInterceptor(interceptor)
5149
}.build()
5250
}
5351

5452
@Provides
55-
@Singleton
53+
fun provideGson(): Gson {
54+
return GsonBuilder()
55+
.setLenient()
56+
.create()
57+
}
58+
59+
@Provides
5660
fun provideApiService(okHttpClient: OkHttpClient, gson: Gson): ApiService {
5761
return Retrofit.Builder()
5862
.baseUrl(BuildConfig.BASE_URL)
@@ -62,4 +66,9 @@ class NetworkModule {
6266
.build()
6367
.create(ApiService::class.java)
6468
}
69+
70+
companion object {
71+
const val HEADER_AUTH_PARAM = "Authorization"
72+
const val NETWORK_TIME_OUT: Long = 15
73+
}
6574
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.ddd.attendance.check.di.qualifier
2+
3+
import javax.inject.Qualifier
4+
5+
@Qualifier
6+
@Retention(AnnotationRetention.RUNTIME)
7+
annotation class ForApplication
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.ddd.attendance.check.di.qualifier
2+
3+
import javax.inject.Scope
4+
5+
@Retention(value = AnnotationRetention.RUNTIME)
6+
@Scope
7+
annotation class PerActivity

0 commit comments

Comments
 (0)