feat(di): add Hilt AppModule with Retrofit, Room and repository bindings
This commit is contained in:
86
app/src/main/java/com/radiola/di/AppModule.kt
Normal file
86
app/src/main/java/com/radiola/di/AppModule.kt
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
package com.radiola.di
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.room.Room
|
||||||
|
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
||||||
|
import com.radiola.data.local.AppDatabase
|
||||||
|
import com.radiola.data.remote.RecordApi
|
||||||
|
import com.radiola.data.repository.FavoritesRepositoryImpl
|
||||||
|
import com.radiola.data.repository.NowPlayingRepositoryImpl
|
||||||
|
import com.radiola.data.repository.SettingsRepositoryImpl
|
||||||
|
import com.radiola.data.repository.StationRepositoryImpl
|
||||||
|
import com.radiola.data.repository.TrackHistoryRepositoryImpl
|
||||||
|
import com.radiola.domain.repository.FavoritesRepository
|
||||||
|
import com.radiola.domain.repository.NowPlayingRepository
|
||||||
|
import com.radiola.domain.repository.SettingsRepository
|
||||||
|
import com.radiola.domain.repository.StationRepository
|
||||||
|
import com.radiola.domain.repository.TrackHistoryRepository
|
||||||
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
|
import kotlinx.serialization.json.Json
|
||||||
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Module
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
|
object AppModule {
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideJson(): Json = Json {
|
||||||
|
ignoreUnknownKeys = true
|
||||||
|
coerceInputValues = true
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideOkHttpClient(): OkHttpClient = OkHttpClient.Builder()
|
||||||
|
.addInterceptor(HttpLoggingInterceptor().apply {
|
||||||
|
level = HttpLoggingInterceptor.Level.BASIC
|
||||||
|
})
|
||||||
|
.build()
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideRetrofit(okHttpClient: OkHttpClient, json: Json): Retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl("https://www.radiorecord.ru/")
|
||||||
|
.client(okHttpClient)
|
||||||
|
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
|
||||||
|
.build()
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideRecordApi(retrofit: Retrofit): RecordApi = retrofit.create(RecordApi::class.java)
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideDatabase(@ApplicationContext context: Context): AppDatabase =
|
||||||
|
Room.databaseBuilder(context, AppDatabase::class.java, "radiola.db")
|
||||||
|
.build()
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideStationRepository(impl: StationRepositoryImpl): StationRepository = impl
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideNowPlayingRepository(impl: NowPlayingRepositoryImpl): NowPlayingRepository = impl
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideFavoritesRepository(impl: FavoritesRepositoryImpl): FavoritesRepository = impl
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideTrackHistoryRepository(impl: TrackHistoryRepositoryImpl): TrackHistoryRepository = impl
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideSettingsRepository(impl: SettingsRepositoryImpl): SettingsRepository = impl
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user