diff --git a/app/build.gradle b/app/build.gradle index b8ce3daa..04b7bf8f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'com.mikepenz.aboutlibraries.plugin' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' +apply plugin: 'koin' android { @@ -159,7 +160,12 @@ dependencies { implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // about libraries view - implementation 'com.mikepenz:aboutlibraries:8.6.5' + implementation "com.mikepenz:aboutlibraries:$about_libraries_version" + + // koin dependency injection + implementation "org.koin:koin-androidx-scope:$koin_version" + implementation "org.koin:koin-androidx-viewmodel:$koin_version" + implementation "org.koin:koin-androidx-fragment:$koin_version" implementation 'org.jetbrains:annotations-java5:20.1.0' } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/ZappApplicationBase.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/ZappApplicationBase.kt index 5495ad7d..2a8727ae 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/ZappApplicationBase.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/ZappApplicationBase.kt @@ -7,7 +7,7 @@ import de.christinecoenen.code.zapp.app.mediathek.controller.downloads.DownloadC import de.christinecoenen.code.zapp.app.player.IPlaybackPositionRepository import de.christinecoenen.code.zapp.app.player.PersistedPlaybackPositionRepository import de.christinecoenen.code.zapp.app.settings.repository.SettingsRepository -import de.christinecoenen.code.zapp.persistence.Database.Companion.getInstance +import de.christinecoenen.code.zapp.persistence.Database import de.christinecoenen.code.zapp.repositories.ChannelRepository import de.christinecoenen.code.zapp.repositories.MediathekRepository import de.christinecoenen.code.zapp.utils.system.NotificationHelper.createBackgroundPlaybackChannel @@ -18,6 +18,11 @@ import org.acra.annotation.AcraCore import org.acra.annotation.AcraDialog import org.acra.annotation.AcraMailSender import org.acra.data.StringFormat +import org.koin.android.ext.koin.androidContext +import org.koin.android.ext.koin.androidLogger +import org.koin.core.Koin +import org.koin.core.context.startKoin +import org.koin.dsl.module import timber.log.Timber @AcraCore( @@ -58,17 +63,19 @@ import timber.log.Timber ) abstract class ZappApplicationBase : Application() { - lateinit var channelRepository: ChannelRepository - private set + val channelRepository: ChannelRepository + get() = koin.get() - lateinit var mediathekRepository: MediathekRepository - private set + val mediathekRepository: MediathekRepository + get() = koin.get() - lateinit var downloadController: DownloadController - private set + val downloadController: DownloadController + get() = koin.get() - lateinit var playbackPositionRepository: IPlaybackPositionRepository - private set + val playbackPositionRepository: IPlaybackPositionRepository + get() = koin.get() + + private lateinit var koin: Koin fun reportError(throwable: Throwable?) { if (ACRA.isInitialised()) { @@ -87,15 +94,23 @@ abstract class ZappApplicationBase : Application() { val settingsRepository = SettingsRepository(this) AppCompatDelegate.setDefaultNightMode(settingsRepository.uiMode) - channelRepository = ChannelRepository(this) + val appModule = module { - val database = getInstance(this) + single { ChannelRepository(androidContext()) } + single { Database.getInstance(androidContext()) } + single { MediathekRepository(get()) } + single { PersistedPlaybackPositionRepository(get()) } + single { DownloadController(androidContext(), get()) } - mediathekRepository = MediathekRepository(database) - playbackPositionRepository = PersistedPlaybackPositionRepository(mediathekRepository) - downloadController = DownloadController(this, mediathekRepository) + } + + koin = startKoin { + androidLogger() + androidContext(this@ZappApplicationBase) + modules(appModule) + }.koin } protected abstract fun setUpLogging() - + } diff --git a/build.gradle b/build.gradle index 324f5775..1af7d784 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext.koin_version = '2.2.2' + ext.about_libraries_version = '8.6.5' + repositories { google() jcenter() @@ -14,7 +17,9 @@ buildscript { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21" - classpath "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:8.6.2" + classpath "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:$about_libraries_version" + + classpath "org.koin:koin-gradle-plugin:$koin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files