Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15cf1dff authored by cketti's avatar cketti
Browse files

Add KOIN for dependency injection

parent 5ebc9e40
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ androidCompileSdkVersion=27
androidBuildToolsVersion=27.0.3
androidSupportLibraryVersion=27.0.2
timberVersion=4.5.1
koinVersion=0.9.1

robolectricVersion=3.7.1
junitVersion=4.12
+2 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ dependencies {
    implementation 'com.xwray:groupie:2.0.3'
    implementation 'com.xwray:groupie-kotlin-android-extensions:2.0.3'
    implementation "org.jetbrains.anko:anko-coroutines:0.10.4"
    implementation "org.koin:koin-android-architecture:${koinVersion}"

    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

@@ -50,6 +51,7 @@ dependencies {
    testImplementation "com.google.truth:truth:${truthVersion}"
    testImplementation "org.mockito:mockito-core:${mockitoVersion}"
    testImplementation "org.jdom:jdom2:2.0.6"
    testImplementation "org.koin:koin-test:${koinVersion}"
}

android {
+43 −0
Original line number Diff line number Diff line
package com.fsck.k9

import android.app.Application
import com.fsck.k9.ui.settings.settingsUiModule
import org.koin.Koin
import org.koin.KoinContext
import org.koin.android.ext.koin.with
import org.koin.android.logger.AndroidLogger
import org.koin.core.parameter.Parameters
import org.koin.dsl.module.applicationContext
import org.koin.log.EmptyLogger
import org.koin.standalone.StandAloneContext

object DI {
    private val mainModule = applicationContext {
        bean { Preferences.getPreferences(get()) }
    }

    val appModules = listOf(
        mainModule,
        settingsUiModule
    )

    @JvmStatic fun start(application: Application) {
        @Suppress("ConstantConditionIf")
        Koin.logger = if (BuildConfig.DEBUG) AndroidLogger() else EmptyLogger()

        StandAloneContext.startKoin(appModules) with application
    }

    @JvmOverloads
    @JvmStatic
    fun <T : Any> get(clazz: Class<T>, name: String = "", parameters: Parameters = { emptyMap() }): T {
        val koinContext = StandAloneContext.koinContext as KoinContext
        val kClass = clazz.kotlin

        return if (name.isEmpty()) {
            koinContext.resolveInstance(kClass, parameters) { koinContext.beanRegistry.searchAll(kClass) }
        } else {
            koinContext.resolveInstance(kClass, parameters) { koinContext.beanRegistry.searchByName(name) }
        }
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -530,6 +530,7 @@ public class K9 extends Application {

        super.onCreate();
        app = this;
        DI.start(this);
        Globals.setContext(this);

        K9MailLib.setDebugStatus(new K9MailLib.DebugStatus() {
+6 −7
Original line number Diff line number Diff line
package com.fsck.k9.ui.account

import android.arch.lifecycle.LiveData
import android.content.Context
import com.fsck.k9.Account
import com.fsck.k9.Preferences
import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.launch
import org.jetbrains.anko.coroutines.experimental.bg

class AccountsLiveData(context: Context) : LiveData<List<Account>>() {
class AccountsLiveData(val preferences: Preferences) : LiveData<List<Account>>() {
    init {
        loadAccountsAsync(context)
        loadAccountsAsync()
    }

    private fun loadAccountsAsync(context: Context) {
    private fun loadAccountsAsync() {
        launch(UI) {
            val accounts = bg {
                loadAccounts(context)
                loadAccounts()
            }

            value = accounts.await()
        }
    }

    private fun loadAccounts(context: Context): List<Account> {
        return Preferences.getPreferences(context).accounts
    private fun loadAccounts(): List<Account> {
        return preferences.accounts
    }
}
Loading