No need of DI for the LoadingNode.

This commit is contained in:
Benoit Marty
2025-09-30 11:50:17 +02:00
parent 6be09fedc7
commit 1cd75af666
6 changed files with 14 additions and 33 deletions

View File

@@ -80,7 +80,7 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkData
import io.element.android.libraries.matrix.api.verification.SessionVerificationServiceListener
import io.element.android.libraries.matrix.api.verification.VerificationRequest
import io.element.android.libraries.push.api.notifications.conversations.NotificationConversationService
import io.element.android.libraries.ui.common.nodes.LoadingNode
import io.element.android.libraries.ui.common.nodes.loadingNode
import io.element.android.services.appnavstate.api.AppNavigationStateService
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.first
@@ -281,7 +281,7 @@ class LoggedInFlowNode(
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
return when (navTarget) {
NavTarget.Placeholder -> createNode<LoadingNode>(buildContext)
NavTarget.Placeholder -> loadingNode(buildContext)
NavTarget.LoggedInPermanent -> {
val callback = object : LoggedInNode.Callback {
override fun navigateToNotificationTroubleshoot() {

View File

@@ -56,7 +56,7 @@ import io.element.android.libraries.oidc.api.OidcAction
import io.element.android.libraries.oidc.api.OidcActionFlow
import io.element.android.libraries.sessionstorage.api.LoggedInState
import io.element.android.libraries.sessionstorage.api.SessionStore
import io.element.android.libraries.ui.common.nodes.LoadingNode
import io.element.android.libraries.ui.common.nodes.loadingNode
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
@@ -216,7 +216,7 @@ import timber.log.Timber
return when (navTarget) {
is NavTarget.LoggedInFlow -> {
val matrixClient = matrixSessionCache.getOrNull(navTarget.sessionId)
?: return createNode<LoadingNode>(buildContext).also {
?: return loadingNode(buildContext).also {
Timber.w("Couldn't find any session, go through SplashScreen")
}
val inputs = LoggedInAppScopeFlowNode.Inputs(matrixClient)
@@ -249,7 +249,7 @@ import timber.log.Timber
)
).build()
}
NavTarget.SplashScreen -> createNode<LoadingNode>(buildContext)
NavTarget.SplashScreen -> loadingNode(buildContext)
NavTarget.BugReport -> {
val callback = object : BugReportEntryPoint.Callback {
override fun onDone() {

View File

@@ -31,7 +31,7 @@ import io.element.android.libraries.architecture.BackstackView
import io.element.android.libraries.architecture.BaseFlowNode
import io.element.android.libraries.architecture.createNode
import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.ui.common.nodes.LoadingNode
import io.element.android.libraries.ui.common.nodes.loadingNode
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
@@ -83,7 +83,7 @@ class FtueFlowNode(
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
return when (navTarget) {
NavTarget.Placeholder -> {
createNode<LoadingNode>(buildContext)
loadingNode(buildContext)
}
is NavTarget.SessionVerification -> {
val callback = object : FtueSessionVerificationFlowNode.Callback {

View File

@@ -29,7 +29,7 @@ import io.element.android.libraries.architecture.BackstackView
import io.element.android.libraries.architecture.BaseFlowNode
import io.element.android.libraries.architecture.createNode
import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.ui.common.nodes.LoadingNode
import io.element.android.libraries.ui.common.nodes.loadingNode
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.parcelize.Parcelize
@@ -95,7 +95,7 @@ class LockScreenSettingsFlowNode(
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
return when (navTarget) {
NavTarget.Loading -> {
createNode<LoadingNode>(buildContext)
loadingNode(buildContext)
}
NavTarget.Unlock -> {
val callback = object : PinUnlockNode.Callback {

View File

@@ -1,5 +1,3 @@
import extension.setupDependencyInjection
/*
* Copyright 2025 New Vector Ltd.
*
@@ -15,10 +13,7 @@ android {
namespace = "io.element.android.libraries.ui.common"
}
setupDependencyInjection()
dependencies {
implementation(projects.libraries.architecture)
implementation(libs.appyx.core)
implementation(projects.libraries.designsystem)
implementation(projects.libraries.di)
}

View File

@@ -9,28 +9,14 @@ package io.element.android.libraries.ui.common.nodes
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedInject
import io.element.android.annotations.ContributesNode
import com.bumble.appyx.core.node.node
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
@ContributesNode(AppScope::class)
@AssistedInject
class LoadingNode(
@Assisted buildContext: BuildContext,
@Assisted plugins: List<Plugin>,
) : Node(buildContext, plugins = plugins) {
@Composable
override fun View(modifier: Modifier) {
Box(modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
CircularProgressIndicator()
}
fun loadingNode(buildContext: BuildContext): Node = node(buildContext) { modifier ->
Box(modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
CircularProgressIndicator()
}
}