Introduce SessionComponent

This commit is contained in:
ganfra 2022-12-16 17:24:55 +01:00
parent eba807e37a
commit 0a06ca0539
18 changed files with 176 additions and 104 deletions

View file

@ -3,29 +3,33 @@ package io.element.android.x
import android.app.Application
import androidx.startup.AppInitializer
import io.element.android.x.core.di.DaggerComponentOwner
import io.element.android.x.core.di.bindings
import io.element.android.x.di.AppBindings
import io.element.android.x.di.AppComponent
import io.element.android.x.di.DaggerAppComponent
import io.element.android.x.di.SessionComponentsOwner
import io.element.android.x.initializer.CoilInitializer
import io.element.android.x.initializer.MatrixInitializer
import io.element.android.x.initializer.MavericksInitializer
import io.element.android.x.matrix.MatrixInstance
import kotlinx.coroutines.CoroutineName
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.plus
class ElementXApplication : Application(), DaggerComponentOwner {
override lateinit var daggerComponent: Any
private lateinit var appComponent: AppComponent
private var sessionComponentsOwner: SessionComponentsOwner? = null
private val applicationScope = MainScope() + CoroutineName("ElementX Scope")
override val daggerComponent: Any
get() = listOfNotNull(sessionComponentsOwner?.activeSessionComponent, appComponent)
override fun onCreate() {
super.onCreate()
daggerComponent = DaggerAppComponent.factory().create(applicationContext)
MatrixInstance.init(this, applicationScope)
appComponent = DaggerAppComponent.factory().create(applicationContext)
sessionComponentsOwner = bindings<AppBindings>().sessionComponentsOwner()
AppInitializer.getInstance(this).apply {
initializeComponent(MatrixInitializer::class.java)
initializeComponent(CoilInitializer::class.java)
initializeComponent(MavericksInitializer::class.java)
}
}
}