0
0
mirror of https://github.com/mediathekview/zapp.git synced 2024-09-20 04:12:14 +02:00

Use koin to set up the basic singletons inside the app

This commit is contained in:
Christine Emrich 2021-01-14 17:39:07 +01:00
parent 982835433c
commit 7f3ac87bfe
3 changed files with 43 additions and 17 deletions

View File

@ -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'
}

View File

@ -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()
}

View File

@ -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