Cleanup codebase

This commit is contained in:
Benoit Marty 2025-08-13 16:42:01 +02:00
parent 6a050569f5
commit f3425c3388
20 changed files with 28 additions and 48 deletions

View file

@ -14,7 +14,6 @@ import io.element.android.libraries.architecture.FeatureEntryPoint
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
interface CreateRoomEntryPoint : FeatureEntryPoint { interface CreateRoomEntryPoint : FeatureEntryPoint {
fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder
interface NodeBuilder { interface NodeBuilder {
@ -22,7 +21,7 @@ interface CreateRoomEntryPoint : FeatureEntryPoint {
fun build(): Node fun build(): Node
} }
interface Callback: Plugin { interface Callback : Plugin {
fun onRoomCreated(roomId: RoomId) fun onRoomCreated(roomId: RoomId)
} }
} }

View file

@ -1,4 +1,3 @@
import extension.ComponentMergingStrategy
import extension.setupAnvil import extension.setupAnvil
/* /*

View file

@ -44,7 +44,6 @@ class CreateRoomFlowNode @AssistedInject constructor(
buildContext = buildContext, buildContext = buildContext,
plugins = plugins plugins = plugins
) { ) {
private fun onRoomCreated(roomId: RoomId) { private fun onRoomCreated(roomId: RoomId) {
plugins<CreateRoomEntryPoint.Callback>().forEach { it.onRoomCreated(roomId) } plugins<CreateRoomEntryPoint.Callback>().forEach { it.onRoomCreated(roomId) }
} }

View file

@ -18,9 +18,7 @@ import javax.inject.Inject
@ContributesBinding(SessionScope::class) @ContributesBinding(SessionScope::class)
class DefaultCreateRoomEntryPoint @Inject constructor() : CreateRoomEntryPoint { class DefaultCreateRoomEntryPoint @Inject constructor() : CreateRoomEntryPoint {
override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): CreateRoomEntryPoint.NodeBuilder { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): CreateRoomEntryPoint.NodeBuilder {
val plugins = ArrayList<Plugin>() val plugins = ArrayList<Plugin>()
return object : CreateRoomEntryPoint.NodeBuilder { return object : CreateRoomEntryPoint.NodeBuilder {

View file

@ -30,7 +30,6 @@ class AddPeopleNode @AssistedInject constructor(
invitePeoplePresenterFactory: InvitePeoplePresenter.Factory, invitePeoplePresenterFactory: InvitePeoplePresenter.Factory,
private val invitePeopleRenderer: InvitePeopleRenderer, private val invitePeopleRenderer: InvitePeopleRenderer,
) : Node(buildContext, plugins = plugins) { ) : Node(buildContext, plugins = plugins) {
data class Inputs( data class Inputs(
val joinedRoom: JoinedRoom val joinedRoom: JoinedRoom
) : NodeInputs ) : NodeInputs
@ -51,8 +50,9 @@ class AddPeopleNode @AssistedInject constructor(
val state = invitePeoplePresenter.present() val state = invitePeoplePresenter.present()
AddPeopleView( AddPeopleView(
state = state, state = state,
invitePeopleView = { invitePeopleRenderer.Render(state, Modifier) }, onFinish = ::onFinish,
onFinish = ::onFinish ) {
) invitePeopleRenderer.Render(state, Modifier)
}
} }
} }

View file

@ -30,9 +30,9 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable @Composable
fun AddPeopleView( fun AddPeopleView(
state: InvitePeopleState, state: InvitePeopleState,
invitePeopleView: @Composable () -> Unit,
onFinish: () -> Unit, onFinish: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
invitePeopleView: @Composable () -> Unit,
) { ) {
HeaderFooterPage( HeaderFooterPage(
modifier = modifier, modifier = modifier,

View file

@ -7,7 +7,6 @@
package io.element.android.features.createroom.impl.configureroom package io.element.android.features.createroom.impl.configureroom
import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.ui.media.AvatarAction import io.element.android.libraries.matrix.ui.media.AvatarAction
sealed interface ConfigureRoomEvents { sealed interface ConfigureRoomEvents {

View file

@ -18,7 +18,6 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import im.vector.app.features.analytics.plan.MobileScreen import im.vector.app.features.analytics.plan.MobileScreen
import io.element.android.anvilannotations.ContributesNode import io.element.android.anvilannotations.ContributesNode
import io.element.android.libraries.architecture.inputs
import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.api.AnalyticsService
@ -30,8 +29,7 @@ class ConfigureRoomNode @AssistedInject constructor(
private val presenter: ConfigureRoomPresenter, private val presenter: ConfigureRoomPresenter,
private val analyticsService: AnalyticsService, private val analyticsService: AnalyticsService,
) : Node(buildContext, plugins = plugins) { ) : Node(buildContext, plugins = plugins) {
interface Callback : Plugin {
interface Callback: Plugin {
fun onCreateRoomSuccess(roomId: RoomId) fun onCreateRoomSuccess(roomId: RoomId)
} }
@ -43,7 +41,7 @@ class ConfigureRoomNode @AssistedInject constructor(
) )
} }
private fun onCreateRoomSuccess(roomId: RoomId){ private fun onCreateRoomSuccess(roomId: RoomId) {
plugins<Callback>().forEach { it.onCreateRoomSuccess(roomId) } plugins<Callback>().forEach { it.onCreateRoomSuccess(roomId) }
} }

View file

@ -12,7 +12,6 @@ import io.element.android.libraries.androidutils.file.safeDelete
import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.flow.getAndUpdate
import java.io.File import java.io.File
import javax.inject.Inject import javax.inject.Inject

View file

@ -139,8 +139,6 @@ class ConfigureRoomPresenterTest {
val initialState = initialState() val initialState = initialState()
var expectedConfig = CreateRoomConfig() var expectedConfig = CreateRoomConfig()
assertThat(initialState.config).isEqualTo(expectedConfig) assertThat(initialState.config).isEqualTo(expectedConfig)
// Room name // Room name
initialState.eventSink(ConfigureRoomEvents.RoomNameChanged(A_ROOM_NAME)) initialState.eventSink(ConfigureRoomEvents.RoomNameChanged(A_ROOM_NAME))
var newState = awaitItem() var newState = awaitItem()
@ -250,7 +248,7 @@ class ConfigureRoomPresenterTest {
val matrixClient = createMatrixClient() val matrixClient = createMatrixClient()
val analyticsService = FakeAnalyticsService() val analyticsService = FakeAnalyticsService()
val mediaPreProcessor = FakeMediaPreProcessor() val mediaPreProcessor = FakeMediaPreProcessor()
val dataStore = CreateRoomConfigStore( FakeRoomAliasHelper()) val dataStore = CreateRoomConfigStore(FakeRoomAliasHelper())
val presenter = createConfigureRoomPresenter( val presenter = createConfigureRoomPresenter(
dataStore = dataStore, dataStore = dataStore,
mediaPreProcessor = mediaPreProcessor, mediaPreProcessor = mediaPreProcessor,

View file

@ -11,9 +11,7 @@ import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.JoinedRoom
interface InvitePeoplePresenter : Presenter<InvitePeopleState> { interface InvitePeoplePresenter : Presenter<InvitePeopleState> {
interface Factory { interface Factory {
fun create(room: JoinedRoom): InvitePeoplePresenter fun create(room: JoinedRoom): InvitePeoplePresenter
} }
} }

View file

@ -10,7 +10,7 @@ package io.element.android.features.invitepeople.impl
import io.element.android.features.invitepeople.api.InvitePeopleEvents import io.element.android.features.invitepeople.api.InvitePeopleEvents
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
sealed interface DefaultInvitePeopleEvents: InvitePeopleEvents { sealed interface DefaultInvitePeopleEvents : InvitePeopleEvents {
data class ToggleUser(val user: MatrixUser) : DefaultInvitePeopleEvents data class ToggleUser(val user: MatrixUser) : DefaultInvitePeopleEvents
data class UpdateSearchQuery(val query: String) : DefaultInvitePeopleEvents data class UpdateSearchQuery(val query: String) : DefaultInvitePeopleEvents
data class OnSearchActiveChanged(val active: Boolean) : DefaultInvitePeopleEvents data class OnSearchActiveChanged(val active: Boolean) : DefaultInvitePeopleEvents

View file

@ -52,7 +52,6 @@ class DefaultInvitePeoplePresenter @AssistedInject constructor(
@AppCoroutineScope private val coroutineScope: CoroutineScope, @AppCoroutineScope private val coroutineScope: CoroutineScope,
private val appErrorStateService: AppErrorStateService, private val appErrorStateService: AppErrorStateService,
) : InvitePeoplePresenter { ) : InvitePeoplePresenter {
@AssistedFactory @AssistedFactory
@ContributesBinding(SessionScope::class) @ContributesBinding(SessionScope::class)
interface Factory : InvitePeoplePresenter.Factory { interface Factory : InvitePeoplePresenter.Factory {

View file

@ -21,4 +21,4 @@ data class DefaultInvitePeopleState(
val selectedUsers: ImmutableList<MatrixUser>, val selectedUsers: ImmutableList<MatrixUser>,
override val isSearchActive: Boolean, override val isSearchActive: Boolean,
override val eventSink: (InvitePeopleEvents) -> Unit override val eventSink: (InvitePeopleEvents) -> Unit
): InvitePeopleState ) : InvitePeopleState

View file

@ -43,7 +43,6 @@ fun InvitePeopleView(
state: DefaultInvitePeopleState, state: DefaultInvitePeopleState,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
Column( Column(
modifier = modifier.fillMaxWidth(), modifier = modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp),

View file

@ -19,7 +19,6 @@ import im.vector.app.features.analytics.plan.MobileScreen
import io.element.android.anvilannotations.ContributesNode import io.element.android.anvilannotations.ContributesNode
import io.element.android.features.invitepeople.api.InvitePeoplePresenter import io.element.android.features.invitepeople.api.InvitePeoplePresenter
import io.element.android.features.invitepeople.api.InvitePeopleRenderer import io.element.android.features.invitepeople.api.InvitePeopleRenderer
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.JoinedRoom
import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.api.AnalyticsService
@ -28,12 +27,11 @@ import io.element.android.services.analytics.api.AnalyticsService
class RoomInviteMembersNode @AssistedInject constructor( class RoomInviteMembersNode @AssistedInject constructor(
@Assisted buildContext: BuildContext, @Assisted buildContext: BuildContext,
@Assisted plugins: List<Plugin>, @Assisted plugins: List<Plugin>,
private val room: JoinedRoom,
private val analyticsService: AnalyticsService, private val analyticsService: AnalyticsService,
private val invitePeopleRenderer: InvitePeopleRenderer, private val invitePeopleRenderer: InvitePeopleRenderer,
private val invitePeoplePresenterFactory: InvitePeoplePresenter.Factory, room: JoinedRoom,
invitePeoplePresenterFactory: InvitePeoplePresenter.Factory,
) : Node(buildContext, plugins = plugins) { ) : Node(buildContext, plugins = plugins) {
init { init {
lifecycle.subscribe( lifecycle.subscribe(
onResume = { onResume = {
@ -50,9 +48,10 @@ class RoomInviteMembersNode @AssistedInject constructor(
RoomInviteMembersView( RoomInviteMembersView(
state = state, state = state,
modifier = modifier, modifier = modifier,
invitePeopleView = { invitePeopleRenderer.Render(state, Modifier) },
onBackClick = { navigateUp() }, onBackClick = { navigateUp() },
onSubmitClick = { navigateUp() } onDone = { navigateUp() }
) ) {
invitePeopleRenderer.Render(state, Modifier)
}
} }
} }

View file

@ -7,9 +7,7 @@
package io.element.android.features.roomdetails.impl.invite package io.element.android.features.roomdetails.impl.invite
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -18,7 +16,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.features.invitepeople.api.InvitePeopleEvents import io.element.android.features.invitepeople.api.InvitePeopleEvents
import io.element.android.features.invitepeople.api.InvitePeopleState import io.element.android.features.invitepeople.api.InvitePeopleState
import io.element.android.features.invitepeople.api.InvitePeopleStateProvider import io.element.android.features.invitepeople.api.InvitePeopleStateProvider
@ -34,10 +31,10 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable @Composable
fun RoomInviteMembersView( fun RoomInviteMembersView(
state: InvitePeopleState, state: InvitePeopleState,
invitePeopleView: @Composable () -> Unit,
onBackClick: () -> Unit, onBackClick: () -> Unit,
onSubmitClick: () -> Unit, onDone: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
invitePeopleView: @Composable () -> Unit,
) { ) {
Scaffold( Scaffold(
modifier = modifier, modifier = modifier,
@ -52,7 +49,7 @@ fun RoomInviteMembersView(
}, },
onSubmitClick = { onSubmitClick = {
state.eventSink(InvitePeopleEvents.SendInvites) state.eventSink(InvitePeopleEvents.SendInvites)
onSubmitClick() onDone()
}, },
canSend = state.canInvite, canSend = state.canInvite,
) )
@ -60,13 +57,12 @@ fun RoomInviteMembersView(
) { padding -> ) { padding ->
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(padding) .padding(padding)
.consumeWindowInsets(padding), .consumeWindowInsets(padding),
) { ) {
invitePeopleView() invitePeopleView()
} }
} }
} }
@ -97,6 +93,6 @@ internal fun RoomInviteMembersViewPreview(@PreviewParameter(InvitePeopleStatePro
state = state, state = state,
invitePeopleView = {}, invitePeopleView = {},
onBackClick = {}, onBackClick = {},
onSubmitClick = {}, onDone = {},
) )
} }

View file

@ -12,11 +12,11 @@ import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow import app.cash.molecule.moleculeFlow
import app.cash.turbine.test import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.invitepeople.test.FakeStartDMAction
import io.element.android.features.startchat.api.ConfirmingStartDmWithMatrixUser import io.element.android.features.startchat.api.ConfirmingStartDmWithMatrixUser
import io.element.android.features.startchat.api.StartDMAction import io.element.android.features.startchat.api.StartDMAction
import io.element.android.features.startchat.impl.userlist.FakeUserListPresenter import io.element.android.features.startchat.impl.userlist.FakeUserListPresenter
import io.element.android.features.startchat.impl.userlist.FakeUserListPresenterFactory import io.element.android.features.startchat.impl.userlist.FakeUserListPresenterFactory
import io.element.android.features.invitepeople.test.FakeStartDMAction
import io.element.android.features.startchat.impl.userlist.UserListDataStore import io.element.android.features.startchat.impl.userlist.UserListDataStore
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.api.FeatureFlags

View file

@ -20,8 +20,8 @@ import androidx.compose.runtime.setValue
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.features.startchat.api.StartDMAction
import io.element.android.features.enterprise.api.SessionEnterpriseService import io.element.android.features.enterprise.api.SessionEnterpriseService
import io.element.android.features.startchat.api.StartDMAction
import io.element.android.features.userprofile.api.UserProfileEvents import io.element.android.features.userprofile.api.UserProfileEvents
import io.element.android.features.userprofile.api.UserProfileState import io.element.android.features.userprofile.api.UserProfileState
import io.element.android.features.userprofile.api.UserProfileState.ConfirmationDialog import io.element.android.features.userprofile.api.UserProfileState.ConfirmationDialog

View file

@ -13,10 +13,10 @@ import app.cash.molecule.moleculeFlow
import app.cash.turbine.ReceiveTurbine import app.cash.turbine.ReceiveTurbine
import app.cash.turbine.test import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.enterprise.test.FakeSessionEnterpriseService
import io.element.android.features.invitepeople.test.FakeStartDMAction
import io.element.android.features.startchat.api.ConfirmingStartDmWithMatrixUser import io.element.android.features.startchat.api.ConfirmingStartDmWithMatrixUser
import io.element.android.features.startchat.api.StartDMAction import io.element.android.features.startchat.api.StartDMAction
import io.element.android.features.invitepeople.test.FakeStartDMAction
import io.element.android.features.enterprise.test.FakeSessionEnterpriseService
import io.element.android.features.userprofile.api.UserProfileEvents import io.element.android.features.userprofile.api.UserProfileEvents
import io.element.android.features.userprofile.api.UserProfileState import io.element.android.features.userprofile.api.UserProfileState
import io.element.android.features.userprofile.api.UserProfileVerificationState import io.element.android.features.userprofile.api.UserProfileVerificationState