Skip to content

Commit acdaa10

Browse files
committed
setting up network module
1 parent 88d1631 commit acdaa10

File tree

6 files changed

+64
-37
lines changed

6 files changed

+64
-37
lines changed

app/src/main/java/com/hover/stax/di/Modules.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,6 @@ val ktorModule = module {
137137

138138
single { EnvironmentProvider(androidApplication(), get()) }
139139

140-
single {
141-
KtorClientFactory(get(), get()).create(
142-
Android.create {
143-
connectTimeout = TIMEOUT
144-
}
145-
)
146-
}
147140
}
148141

149142
val datastoreModule = module {

internal/datastore/src/main/java/com/hover/stax/datastore/di/DataStoreModule.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,24 @@
1616
package com.hover.stax.datastore.di
1717

1818
import android.content.Context
19+
import androidx.datastore.core.DataStore
20+
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
21+
import androidx.datastore.preferences.SharedPreferencesMigration
22+
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
23+
import androidx.datastore.preferences.core.Preferences
24+
import androidx.datastore.preferences.core.emptyPreferences
25+
import androidx.datastore.preferences.preferencesDataStoreFile
26+
import com.hover.stax.datastore.DefaultTokenProvider
27+
import com.hover.stax.datastore.TokenProvider
1928
import dagger.Module
2029
import dagger.Provides
2130
import dagger.hilt.InstallIn
2231
import dagger.hilt.android.qualifiers.ApplicationContext
2332
import dagger.hilt.components.SingletonComponent
2433
import kotlinx.coroutines.CoroutineScope
34+
import kotlinx.coroutines.Dispatchers
2535
import kotlinx.coroutines.SupervisorJob
2636
import javax.inject.Singleton
27-
import androidx.datastore.core.DataStore
28-
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
29-
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
30-
import androidx.datastore.preferences.core.Preferences
31-
import androidx.datastore.preferences.preferencesDataStoreFile
32-
import androidx.datastore.preferences.SharedPreferencesMigration
33-
import androidx.datastore.preferences.core.emptyPreferences
34-
import kotlinx.coroutines.Dispatchers
3537

3638
@Module
3739
@InstallIn(SingletonComponent::class)
@@ -56,4 +58,9 @@ object DataStoreModule {
5658
) {
5759
context.preferencesDataStoreFile(name = "stax.datastore")
5860
}
61+
62+
@Provides
63+
@Singleton
64+
fun provideTokenProvider(datastore: DataStore<Preferences>): TokenProvider =
65+
DefaultTokenProvider(datastore)
5966
}

internal/network/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ plugins {
1919
}
2020

2121
dependencies {
22+
implementation(project(":internal:datastore"))
23+
2224
implementation(libs.core.ktx)
25+
2326
api(libs.bundles.network)
2427
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.hover.stax.network.di
2+
3+
import android.content.Context
4+
import com.hover.stax.datastore.TokenProvider
5+
import com.hover.stax.network.ktor.EnvironmentProvider
6+
import com.hover.stax.network.ktor.KtorClientFactory
7+
import dagger.Module
8+
import dagger.Provides
9+
import dagger.hilt.InstallIn
10+
import dagger.hilt.android.qualifiers.ApplicationContext
11+
import dagger.hilt.components.SingletonComponent
12+
import io.ktor.client.HttpClient
13+
import io.ktor.client.engine.HttpClientEngine
14+
import io.ktor.client.engine.android.Android
15+
import javax.inject.Singleton
16+
17+
@Module
18+
@InstallIn(SingletonComponent::class)
19+
object NetworkModule {
20+
21+
@Provides
22+
@Singleton
23+
fun provideHttpClientEngine(): HttpClientEngine = Android.create {
24+
connectTimeout = 10_000
25+
}
26+
27+
@Provides
28+
@Singleton
29+
fun providesEnvironmentProvider(
30+
@ApplicationContext context: Context,
31+
): EnvironmentProvider = EnvironmentProvider(
32+
context,
33+
)
34+
35+
@Provides
36+
@Singleton
37+
fun provideHttpClient(
38+
engine: HttpClientEngine,
39+
tokenProvider: TokenProvider,
40+
environmentProvider: EnvironmentProvider
41+
): HttpClient =
42+
KtorClientFactory(tokenProvider, environmentProvider).create(engine)
43+
}

app/src/main/java/com/hover/stax/ktor/EnvironmentProvider.kt renamed to internal/network/src/main/java/com/hover/stax/network/ktor/EnvironmentProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package com.hover.stax.ktor
16+
package com.hover.stax.network.ktor
1717

1818
import android.content.Context
1919
import com.hover.stax.BuildConfig

app/src/main/java/com/hover/stax/ktor/KtorClientFactory.kt renamed to internal/network/src/main/java/com/hover/stax/network/ktor/KtorClientFactory.kt

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,5 @@
1-
/*
2-
* Copyright 2022 Stax
3-
*
4-
* Licensed under the Apache License, Version 2.0 (the "License");
5-
* you may not use this file except in compliance with the License.
6-
* You may obtain a copy of the License at
7-
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
9-
*
10-
* Unless required by applicable law or agreed to in writing, software
11-
* distributed under the License is distributed on an "AS IS" BASIS,
12-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-
* See the License for the specific language governing permissions and
14-
* limitations under the License.
15-
*/
16-
package com.hover.stax.ktor
17-
18-
import com.hover.stax.data.remote.dto.authorization.TokenRefresh
19-
import com.hover.stax.data.remote.dto.authorization.TokenResponse
1+
package com.hover.stax.network.ktor
2+
203
import com.hover.stax.datastore.DefaultTokenProvider
214
import com.hover.stax.datastore.TokenProvider
225
import io.ktor.client.HttpClient
@@ -42,8 +25,6 @@ import io.ktor.serialization.kotlinx.json.json
4225
import kotlinx.coroutines.flow.firstOrNull
4326
import kotlinx.serialization.json.Json
4427

45-
private const val REFRESH = "refresh_token"
46-
4728
class KtorClientFactory(
4829
private val tokenProvider: TokenProvider,
4930
private val environmentProvider: EnvironmentProvider

0 commit comments

Comments
 (0)