From 6a41e301d9d39239831821062cfa713985443dcc Mon Sep 17 00:00:00 2001 From: Shcherbatykh Oleg Date: Fri, 13 Feb 2026 10:34:09 +0300 Subject: [PATCH] Add build type params, fix network module structure --- app/build.gradle.kts | 4 +++ .../fincode/tsudesk/di/NetworkDebugModule.kt | 24 +++++++++++++++ core/common/src/main/AndroidManifest.xml | 4 --- .../tsudesk/core/common/config/AppConfig.kt | 7 +++++ core/database/src/main/AndroidManifest.xml | 4 --- core/network/build.gradle.kts | 2 ++ core/network/src/main/AndroidManifest.xml | 4 --- .../fincode/tsudesk/core/network/Constants.kt | 2 +- .../core/network/OkHttpClientFactory.kt | 29 +++++++++++++++++++ ...RetrofitProvider.kt => RetrofitFactory.kt} | 8 ++--- .../tsudesk/core/network/di/OkHttpModule.kt | 17 ++--------- .../tsudesk/core/network/di/RetrofitModule.kt | 14 +++++---- .../network/interceptor/DebugInterceptor.kt | 8 +++-- core/ui/src/main/AndroidManifest.xml | 4 --- 14 files changed, 88 insertions(+), 43 deletions(-) create mode 100644 app/src/main/java/ru/fincode/tsudesk/di/NetworkDebugModule.kt delete mode 100644 core/common/src/main/AndroidManifest.xml create mode 100644 core/common/src/main/java/ru/fincode/tsudesk/core/common/config/AppConfig.kt delete mode 100644 core/database/src/main/AndroidManifest.xml delete mode 100644 core/network/src/main/AndroidManifest.xml create mode 100644 core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt rename core/network/src/main/java/ru/fincode/tsudesk/core/network/{RetrofitProvider.kt => RetrofitFactory.kt} (84%) delete mode 100644 core/ui/src/main/AndroidManifest.xml 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