diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 527fdd9..b1a19bc 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -29,6 +29,9 @@ android {
)
}
}
+ buildFeatures {
+ buildConfig = true
+ }
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
@@ -51,6 +54,7 @@ dependencies {
implementation(libs.okhttp)
implementation(libs.retrofit)
+ implementation(project(":core:common"))
implementation(project(":core:network"))
implementation(project(":core:database"))
diff --git a/app/src/main/java/ru/fincode/tsudesk/di/NetworkDebugModule.kt b/app/src/main/java/ru/fincode/tsudesk/di/NetworkDebugModule.kt
new file mode 100644
index 0000000..e21ae77
--- /dev/null
+++ b/app/src/main/java/ru/fincode/tsudesk/di/NetworkDebugModule.kt
@@ -0,0 +1,24 @@
+package ru.fincode.tsudesk.di
+
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import ru.fincode.tsudesk.BuildConfig
+import ru.fincode.tsudesk.core.common.config.AppConfig
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object AppConfigModule {
+ const val BASE_URL = "https://tulsu.ru/schedule/queries/"
+
+ @Provides
+ @Singleton
+ fun provideAppConfig(): AppConfig =
+ AppConfig(
+ isDebug = BuildConfig.DEBUG,
+ baseUrl = BASE_URL,
+ networkTimeoutSec = 30L
+ )
+}
diff --git a/core/common/src/main/AndroidManifest.xml b/core/common/src/main/AndroidManifest.xml
deleted file mode 100644
index a5918e6..0000000
--- a/core/common/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/core/common/src/main/java/ru/fincode/tsudesk/core/common/config/AppConfig.kt b/core/common/src/main/java/ru/fincode/tsudesk/core/common/config/AppConfig.kt
new file mode 100644
index 0000000..33d19b3
--- /dev/null
+++ b/core/common/src/main/java/ru/fincode/tsudesk/core/common/config/AppConfig.kt
@@ -0,0 +1,7 @@
+package ru.fincode.tsudesk.core.common.config
+
+data class AppConfig(
+ val isDebug: Boolean,
+ val baseUrl: String,
+ val networkTimeoutSec: Long
+)
diff --git a/core/database/src/main/AndroidManifest.xml b/core/database/src/main/AndroidManifest.xml
deleted file mode 100644
index a5918e6..0000000
--- a/core/database/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts
index acfaf8b..7fc2d8a 100644
--- a/core/network/build.gradle.kts
+++ b/core/network/build.gradle.kts
@@ -48,4 +48,6 @@ dependencies {
api(libs.moshi)
api(libs.moshiKotlin)
api(libs.retrofitMoshi)
+
+ implementation(project(":core:common"))
}
\ No newline at end of file
diff --git a/core/network/src/main/AndroidManifest.xml b/core/network/src/main/AndroidManifest.xml
deleted file mode 100644
index a5918e6..0000000
--- a/core/network/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/Constants.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/Constants.kt
index 2816251..a2ebcbf 100644
--- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/Constants.kt
+++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/Constants.kt
@@ -1,5 +1,5 @@
package ru.fincode.tsudesk.core.network
object Constants {
- const val BASE_URL = "https://tulsu.ru/schedule/queries/"
+
}
\ No newline at end of file
diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt
new file mode 100644
index 0000000..2c5a5d8
--- /dev/null
+++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt
@@ -0,0 +1,29 @@
+package ru.fincode.tsudesk.core.network
+
+import okhttp3.OkHttpClient
+import ru.fincode.tsudesk.core.common.config.AppConfig
+import ru.fincode.tsudesk.core.network.interceptor.DebugInterceptor
+import java.util.concurrent.TimeUnit
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class OkHttpClientFactory @Inject constructor(
+ private val appConfig: AppConfig,
+ private val debugInterceptor: DebugInterceptor
+) {
+
+ fun create(): OkHttpClient {
+ val builder = OkHttpClient.Builder()
+ .connectTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS)
+ .readTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS)
+ .writeTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS)
+ .retryOnConnectionFailure(true)
+
+ if (appConfig.isDebug) {
+ builder.addInterceptor(debugInterceptor)
+ }
+
+ return builder.build()
+ }
+}
diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitProvider.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitFactory.kt
similarity index 84%
rename from core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitProvider.kt
rename to core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitFactory.kt
index 598c353..9eb967f 100644
--- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitProvider.kt
+++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/RetrofitFactory.kt
@@ -1,21 +1,21 @@
package ru.fincode.tsudesk.core.network
-import com.squareup.moshi.Moshi
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
-import javax.inject.Inject
+import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
+import javax.inject.Inject
import javax.inject.Singleton
@Singleton
-class RetrofitProvider @Inject constructor() {
+class RetrofitFactory @Inject constructor() {
private val moshi: Moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
- fun execute(baseUrl: String, client: OkHttpClient): Retrofit =
+ fun create(baseUrl: String, client: OkHttpClient): Retrofit =
Retrofit.Builder()
.baseUrl(baseUrl)
.client(client)
diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/OkHttpModule.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/OkHttpModule.kt
index 76f4936..6daf6cf 100644
--- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/OkHttpModule.kt
+++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/OkHttpModule.kt
@@ -5,26 +5,15 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
-import ru.fincode.tsudesk.core.network.interceptor.DebugInterceptor
-import java.util.concurrent.TimeUnit
+import ru.fincode.tsudesk.core.network.OkHttpClientFactory
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object OkHttpModule {
- private const val TIMEOUT = 30L
-
@Provides
@Singleton
- fun provideOkHttpClient(
- ): OkHttpClient {
- return OkHttpClient.Builder()
- .connectTimeout(TIMEOUT, TimeUnit.SECONDS)
- .readTimeout(TIMEOUT, TimeUnit.SECONDS)
- .writeTimeout(TIMEOUT, TimeUnit.SECONDS)
- .retryOnConnectionFailure(true)
- .addInterceptor(DebugInterceptor())
- .build()
- }
+ fun provideOkHttpClient(factory: OkHttpClientFactory): OkHttpClient =
+ factory.create()
}
diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/RetrofitModule.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/RetrofitModule.kt
index efb14b6..331d4e1 100644
--- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/RetrofitModule.kt
+++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/di/RetrofitModule.kt
@@ -6,8 +6,8 @@ import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
import retrofit2.Retrofit
-import ru.fincode.tsudesk.core.network.Constants
-import ru.fincode.tsudesk.core.network.RetrofitProvider
+import ru.fincode.tsudesk.core.common.config.AppConfig
+import ru.fincode.tsudesk.core.network.RetrofitFactory
import javax.inject.Singleton
@Module
@@ -17,8 +17,12 @@ object RetrofitModule {
@Provides
@Singleton
fun provideRetrofit(
- provider: RetrofitProvider,
- client: OkHttpClient
+ factory: RetrofitFactory,
+ client: OkHttpClient,
+ appConfig: AppConfig
): Retrofit =
- provider.execute(Constants.BASE_URL, client)
+ factory.create(
+ baseUrl = appConfig.baseUrl,
+ client = client
+ )
}
diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/DebugInterceptor.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/DebugInterceptor.kt
index f360378..edf203e 100644
--- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/DebugInterceptor.kt
+++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/DebugInterceptor.kt
@@ -3,18 +3,20 @@ package ru.fincode.tsudesk.core.network.interceptor
import android.util.Log
import okhttp3.Interceptor
import okhttp3.Response
+import javax.inject.Inject
+import javax.inject.Singleton
private const val TAG = "NETWORK_DEBUG"
-class DebugInterceptor : Interceptor {
+@Singleton
+class DebugInterceptor @Inject constructor() : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
Log.d(TAG, "URL: ${request.url}")
Log.d(TAG, "Method: ${request.method}")
- Log.d(TAG, "Headers: ${request.headers}")
return chain.proceed(request)
}
-}
\ No newline at end of file
+}
diff --git a/core/ui/src/main/AndroidManifest.xml b/core/ui/src/main/AndroidManifest.xml
deleted file mode 100644
index a5918e6..0000000
--- a/core/ui/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file