Some cleanup:

- Remove unnecessary `GlobalScope`.
- Rename `Component` to `Graph`, `DaggerComponentOwner` to `DependencyInjectionGraphOwner`.
- Rename component builders to factories, where necessary.
This commit is contained in:
Jorge Martín 2025-09-01 16:11:10 +02:00
parent 6a05e1b911
commit 08bbe3fdaa
20 changed files with 99 additions and 127 deletions

View file

@ -9,17 +9,16 @@ package io.element.android.x
import android.app.Application
import androidx.startup.AppInitializer
import dev.zacsweers.metro.asContribution
import dev.zacsweers.metro.createGraphFactory
import io.element.android.features.cachecleaner.api.CacheCleanerInitializer
import io.element.android.libraries.di.DaggerComponentOwner
import io.element.android.x.di.AppComponent
import io.element.android.x.di.globalGraph
import io.element.android.libraries.di.DependencyInjectionGraphOwner
import io.element.android.x.di.AppGraph
import io.element.android.x.info.logApplicationInfo
import io.element.android.x.initializer.CrashInitializer
import io.element.android.x.initializer.PlatformInitializer
class ElementXApplication : Application(), DaggerComponentOwner {
override val daggerComponent: AppComponent = globalGraph.asContribution<AppComponent.Factory>().create(this)
class ElementXApplication : Application(), DependencyInjectionGraphOwner {
override val graph: AppGraph = createGraphFactory<AppGraph.Factory>().create(this)
override fun onCreate() {
super.onCreate()

View file

@ -21,7 +21,7 @@ import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.core.plugin.Plugin
import io.element.android.appnav.RootFlowNode
import io.element.android.libraries.architecture.createNode
import io.element.android.libraries.di.DaggerComponentOwner
import io.element.android.libraries.di.DependencyInjectionGraphOwner
import io.element.android.libraries.di.annotations.ApplicationContext
import kotlinx.coroutines.launch
import kotlinx.parcelize.Parcelize
@ -38,8 +38,8 @@ class MainNode(
buildContext = buildContext,
plugins = plugins,
),
DaggerComponentOwner {
override val daggerComponent = (context as DaggerComponentOwner).daggerComponent
DependencyInjectionGraphOwner {
override val graph = (context as DependencyInjectionGraphOwner).graph
override fun resolve(navTarget: RootNavTarget, buildContext: BuildContext): Node {
return createNode<RootFlowNode>(buildContext = buildContext)

View file

@ -9,22 +9,20 @@ package io.element.android.x.di
import android.content.Context
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesTo
import dev.zacsweers.metro.GraphExtension
import dev.zacsweers.metro.DependencyGraph
import dev.zacsweers.metro.Provides
import io.element.android.libraries.architecture.NodeFactoriesBindings
import io.element.android.libraries.di.annotations.ApplicationContext
@GraphExtension(AppScope::class)
interface AppComponent : NodeFactoriesBindings {
val sessionComponentFactory: SessionComponent.Factory
@DependencyGraph(AppScope::class)
interface AppGraph : NodeFactoriesBindings {
val sessionGraphFactory: SessionGraph.Factory
@ContributesTo(GlobalScope::class)
@GraphExtension.Factory
@DependencyGraph.Factory
interface Factory {
fun create(
@ApplicationContext @Provides
context: Context
): AppComponent
): AppGraph
}
}

View file

@ -16,10 +16,10 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom
@ContributesBinding(SessionScope::class)
@Inject
class DefaultRoomComponentFactory(
private val sessionComponent: SessionComponent,
private val sessionGraph: SessionGraph,
) : RoomComponentFactory {
override fun create(room: JoinedRoom): Any {
return sessionComponent.roomComponentFactory
return sessionGraph.roomGraphFactory
.create(room, room)
}
}

View file

@ -10,15 +10,15 @@ package io.element.android.x.di
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.Inject
import io.element.android.appnav.di.SessionComponentFactory
import io.element.android.appnav.di.SessionGraphFactory
import io.element.android.libraries.matrix.api.MatrixClient
@ContributesBinding(AppScope::class)
@Inject
class DefaultSessionComponentFactory(
private val appComponent: AppComponent
) : SessionComponentFactory {
class DefaultSessionGraphFactory(
private val appGraph: AppGraph
) : SessionGraphFactory {
override fun create(client: MatrixClient): Any {
return appComponent.sessionComponentFactory.createSessionComponent(client)
return appGraph.sessionGraphFactory.create(client)
}
}

View file

@ -1,16 +0,0 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
import dev.zacsweers.metro.DependencyGraph
import dev.zacsweers.metro.createGraph
@DependencyGraph(GlobalScope::class)
interface GlobalGraph
internal val globalGraph = createGraph<GlobalGraph>()

View file

@ -1,10 +0,0 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
class GlobalScope private constructor()

View file

@ -17,13 +17,13 @@ import io.element.android.libraries.matrix.api.room.BaseRoom
import io.element.android.libraries.matrix.api.room.JoinedRoom
@GraphExtension(RoomScope::class)
interface RoomComponent : NodeFactoriesBindings {
interface RoomGraph : NodeFactoriesBindings {
@ContributesTo(SessionScope::class)
@GraphExtension.Factory
interface Factory {
fun create(
@Provides joinedRoom: JoinedRoom,
@Provides baseRoom: BaseRoom
): RoomComponent
): RoomGraph
}
}

View file

@ -16,12 +16,12 @@ import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.matrix.api.MatrixClient
@GraphExtension(SessionScope::class)
interface SessionComponent : NodeFactoriesBindings {
val roomComponentFactory: RoomComponent.Factory
interface SessionGraph : NodeFactoriesBindings {
val roomGraphFactory: RoomGraph.Factory
@ContributesTo(AppScope::class)
@GraphExtension.Factory
interface Factory {
fun createSessionComponent(@Provides matrixClient: MatrixClient): SessionComponent
fun create(@Provides matrixClient: MatrixClient): SessionGraph
}
}