ganfra
2 years ago
18 changed files with 176 additions and 104 deletions
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
package io.element.android.x.di |
||||
|
||||
import com.squareup.anvil.annotations.ContributesTo |
||||
import com.squareup.anvil.annotations.MergeSubcomponent |
||||
import dagger.BindsInstance |
||||
import dagger.Subcomponent |
||||
import io.element.android.x.core.di.DaggerMavericksBindings |
||||
import io.element.android.x.matrix.MatrixClient |
||||
|
||||
@SingleIn(SessionScope::class) |
||||
@MergeSubcomponent(SessionScope::class) |
||||
interface SessionComponent: DaggerMavericksBindings { |
||||
|
||||
fun matrixClient(): MatrixClient |
||||
|
||||
@Subcomponent.Builder |
||||
interface Builder { |
||||
@BindsInstance |
||||
fun client(matrixClient: MatrixClient): Builder |
||||
fun build(): SessionComponent |
||||
} |
||||
|
||||
@ContributesTo(AppScope::class) |
||||
interface ParentBindings { |
||||
fun sessionComponentBuilder(): Builder |
||||
} |
||||
} |
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
package io.element.android.x.di |
||||
|
||||
import android.content.Context |
||||
import io.element.android.x.core.di.bindings |
||||
import io.element.android.x.matrix.MatrixClient |
||||
import java.util.concurrent.ConcurrentHashMap |
||||
import javax.inject.Inject |
||||
|
||||
@SingleIn(AppScope::class) |
||||
class SessionComponentsOwner @Inject constructor(@ApplicationContext private val context: Context) { |
||||
|
||||
private val sessionComponents = ConcurrentHashMap<String, SessionComponent>() |
||||
var activeSessionComponent: SessionComponent? = null |
||||
private set |
||||
|
||||
fun setActive(sessionId: String) { |
||||
val sessionComponent = sessionComponents[sessionId] |
||||
if (activeSessionComponent != sessionComponent) { |
||||
activeSessionComponent = sessionComponent |
||||
} |
||||
} |
||||
|
||||
fun create(matrixClient: MatrixClient) { |
||||
val sessionId = matrixClient.sessionId |
||||
val sessionComponent = |
||||
context.bindings<SessionComponent.ParentBindings>().sessionComponentBuilder() |
||||
.client(matrixClient).build() |
||||
sessionComponents[sessionId] = sessionComponent |
||||
setActive(sessionId) |
||||
} |
||||
|
||||
fun releaseActiveSession() { |
||||
activeSessionComponent?.also { |
||||
release(it.matrixClient().sessionId) |
||||
} |
||||
} |
||||
|
||||
fun release(sessionId: String) { |
||||
val sessionComponent = sessionComponents.remove(sessionId) |
||||
if (activeSessionComponent == sessionComponent) { |
||||
activeSessionComponent = null |
||||
} |
||||
} |
||||
|
||||
} |
@ -1,19 +0,0 @@
@@ -1,19 +0,0 @@
|
||||
package io.element.android.x.matrix |
||||
|
||||
import android.annotation.SuppressLint |
||||
import android.app.Application |
||||
import kotlinx.coroutines.CoroutineScope |
||||
|
||||
|
||||
object MatrixInstance { |
||||
@SuppressLint("StaticFieldLeak") |
||||
private lateinit var instance: Matrix |
||||
|
||||
fun init(context: Application, coroutineScope: CoroutineScope) { |
||||
instance = Matrix(coroutineScope, context) |
||||
} |
||||
|
||||
fun getInstance(): Matrix { |
||||
return instance |
||||
} |
||||
} |
Loading…
Reference in new issue