From fbe7476ba7d3756565e690c8f36e57989f43c084 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 6 Nov 2025 10:59:24 +0100 Subject: [PATCH] change(roles and permissions): use @RoomCoroutineScope instead of local scope --- .../impl/roles/ChangeRolesPresenter.kt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/roles/ChangeRolesPresenter.kt b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/roles/ChangeRolesPresenter.kt index e2049336a2..87a659f7ce 100644 --- a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/roles/ChangeRolesPresenter.kt +++ b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/roles/ChangeRolesPresenter.kt @@ -15,7 +15,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import dev.zacsweers.metro.Assisted @@ -27,6 +26,7 @@ import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.designsystem.theme.components.SearchBarResultState +import io.element.android.libraries.di.annotations.RoomCoroutineScope import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.RoomMember @@ -41,12 +41,10 @@ import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext @AssistedInject class ChangeRolesPresenter( @@ -54,6 +52,7 @@ class ChangeRolesPresenter( private val room: JoinedRoom, private val dispatchers: CoroutineDispatchers, private val analyticsService: AnalyticsService, + @RoomCoroutineScope private val roomCoroutineScope: CoroutineScope, ) : Presenter { @AssistedFactory fun interface Factory { @@ -62,7 +61,6 @@ class ChangeRolesPresenter( @Composable override fun present(): ChangeRolesState { - val coroutineScope = rememberCoroutineScope() val dataSource = remember { RoomMemberListDataSource(room, dispatchers) } var query by rememberSaveable { mutableStateOf(null) } var searchActive by rememberSaveable { mutableStateOf(false) } @@ -145,7 +143,7 @@ class ChangeRolesPresenter( saveState.value = AsyncAction.ConfirmingNoParams } !saveState.value.isLoading() -> { - coroutineScope.save(usersWithRole.value, selectedUsers, saveState) + roomCoroutineScope.save(usersWithRole.value, selectedUsers, saveState) } } } @@ -217,11 +215,7 @@ class ChangeRolesPresenter( } .onSuccess { // Asynchronously reload the room members - launch { - withContext(NonCancellable) { - room.updateMembers() - } - } + launch { room.updateMembers() } saveState.value = AsyncAction.Success(true) } }