diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/data/di/DataModule.kt b/app/src/main/java/de/jeanlucmakiola/calendula/data/di/DataModule.kt new file mode 100644 index 0000000..09d37a1 --- /dev/null +++ b/app/src/main/java/de/jeanlucmakiola/calendula/data/di/DataModule.kt @@ -0,0 +1,54 @@ +package de.jeanlucmakiola.calendula.data.di + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.preferencesDataStore +import dagger.Binds +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import de.jeanlucmakiola.calendula.data.calendar.AndroidCalendarDataSource +import de.jeanlucmakiola.calendula.data.calendar.CalendarDataSource +import de.jeanlucmakiola.calendula.data.calendar.CalendarRepository +import de.jeanlucmakiola.calendula.data.calendar.CalendarRepositoryImpl +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers +import javax.inject.Singleton + +private val Context.calendulaDataStore: DataStore by preferencesDataStore( + name = "calendula_prefs", +) + +@Module +@InstallIn(SingletonComponent::class) +abstract class DataBindModule { + + @Binds + @Singleton + abstract fun bindCalendarDataSource( + impl: AndroidCalendarDataSource, + ): CalendarDataSource + + @Binds + @Singleton + abstract fun bindCalendarRepository( + impl: CalendarRepositoryImpl, + ): CalendarRepository +} + +@Module +@InstallIn(SingletonComponent::class) +object DataProvideModule { + + @Provides + @Singleton + fun provideDataStore(@ApplicationContext context: Context): DataStore = + context.calendulaDataStore + + @Provides + @IoDispatcher + fun provideIoDispatcher(): CoroutineDispatcher = Dispatchers.IO +}