From 125178c36f519a1113d2e6d6d7877a0894a96103 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 21 Jan 2026 17:44:53 +0100 Subject: [PATCH] Refactor AddRoomToSpaceSearchDataSource to use AssistedInject --- .../space/impl/addroom/AddRoomToSpacePresenter.kt | 9 ++++++--- .../impl/addroom/AddRoomToSpaceSearchDataSource.kt | 14 +++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpacePresenter.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpacePresenter.kt index c5d6f012cd..0516b102e5 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpacePresenter.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpacePresenter.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction @@ -38,9 +39,8 @@ import kotlinx.coroutines.launch @Inject class AddRoomToSpacePresenter( private val spaceRoomList: SpaceRoomList, - private val dataSource: AddRoomToSpaceSearchDataSource, private val spaceService: SpaceService, - @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, + private val dataSourceFactory: AddRoomToSpaceSearchDataSource.Factory, ) : Presenter { @Composable @@ -50,6 +50,9 @@ class AddRoomToSpacePresenter( var isSearchActive by remember { mutableStateOf(false) } val saveAction = remember { mutableStateOf>(AsyncAction.Uninitialized) } + val coroutineScope = rememberCoroutineScope() + val dataSource = remember { dataSourceFactory.create(coroutineScope) } + // Update search query in data source LaunchedEffect(searchQuery) { dataSource.setSearchQuery(searchQuery) @@ -94,7 +97,7 @@ class AddRoomToSpacePresenter( searchQuery = "" } AddRoomToSpaceEvent.Save -> { - sessionCoroutineScope.addRoomsToSpace( + coroutineScope.addRoomsToSpace( selectedRooms = selectedRooms, addAction = saveAction, ) diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpaceSearchDataSource.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpaceSearchDataSource.kt index f6a69320c6..64603faaca 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpaceSearchDataSource.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpaceSearchDataSource.kt @@ -8,6 +8,9 @@ package io.element.android.features.space.impl.addroom +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.AssistedInject import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.api.MatrixClient @@ -25,6 +28,7 @@ import io.element.android.libraries.matrix.ui.model.SelectRoomInfo import io.element.android.libraries.matrix.ui.model.toSelectRoomInfo import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine @@ -40,17 +44,25 @@ private const val MAX_SUGGESTIONS_COUNT = 5 * DataSource for rooms that can be added to a space. * Filters out DMs, spaces, rooms already in the space, and only includes rooms the user has joined. */ -@Inject +@AssistedInject class AddRoomToSpaceSearchDataSource( + @Assisted coroutineScope: CoroutineScope, roomListService: RoomListService, spaceRoomList: SpaceRoomList, private val matrixClient: MatrixClient, private val coroutineDispatchers: CoroutineDispatchers, ) { + + @AssistedFactory + interface Factory { + fun create(coroutineScope: CoroutineScope): AddRoomToSpaceSearchDataSource + } + private val roomList = roomListService.createRoomList( pageSize = PAGE_SIZE, initialFilter = RoomListFilter.all(), source = RoomList.Source.All, + coroutineScope = coroutineScope, ) private val spaceChildrenFlow = spaceRoomList.spaceRoomsFlow.map { spaceChildren ->