diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectEvents.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectEvents.kt index a3512c419c..d0911b9b09 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectEvents.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectEvents.kt @@ -11,10 +11,7 @@ package io.element.android.libraries.roomselect.impl import io.element.android.libraries.matrix.ui.model.SelectRoomInfo sealed interface RoomSelectEvents { - data class SetSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvents - - // TODO remove to restore multi-selection - data object RemoveSelectedRoom : RoomSelectEvents + data class ToggleSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvents data object ToggleSearchActive : RoomSelectEvents data class UpdateVisibleRange(val range: IntRange) : RoomSelectEvents } diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt index b7547b8a45..ec1a60f0d3 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt @@ -69,17 +69,14 @@ class RoomSelectPresenter( fun handleEvent(event: RoomSelectEvents) { when (event) { - is RoomSelectEvents.SetSelectedRoom -> { - selectedRooms = persistentListOf(event.room) - // Restore for multi-selection -// val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId } -// selectedRooms = if (index >= 0) { -// selectedRooms.removeAt(index) -// } else { -// selectedRooms.add(event.room) -// } + is RoomSelectEvents.ToggleSelectedRoom -> { + val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId } + selectedRooms = if (index >= 0) { + selectedRooms.removeAt(index) + } else { + selectedRooms.add(event.room) + } } - RoomSelectEvents.RemoveSelectedRoom -> selectedRooms = persistentListOf() RoomSelectEvents.ToggleSearchActive -> isSearchActive = !isSearchActive is RoomSelectEvents.UpdateVisibleRange -> coroutineScope.launch { dataSource.updateVisibleRange(event.range) diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt index 69f091ddc4..ee6f125e5a 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt @@ -71,15 +71,12 @@ fun RoomSelectView( onSubmit: (List) -> Unit, modifier: Modifier = Modifier, ) { - @Suppress("UNUSED_PARAMETER") fun onRoomRemoved(roomInfo: SelectRoomInfo) { - // TODO toggle selection when multi-selection is enabled - state.eventSink(RoomSelectEvents.RemoveSelectedRoom) + state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo)) } @Composable - fun SelectedRoomsHelper(isForwarding: Boolean, selectedRooms: ImmutableList) { - if (isForwarding) return + fun SelectedRoomsHelper(selectedRooms: ImmutableList) { SelectedRooms( selectedRooms = selectedRooms, onRemoveRoom = ::onRoomRemoved, @@ -148,8 +145,6 @@ fun RoomSelectView( LazyColumn(state = lazyListState) { item { SelectedRoomsHelper( - // TODO state.isForwarding - isForwarding = false, selectedRooms = state.selectedRooms ) } @@ -159,7 +154,7 @@ fun RoomSelectView( roomSummary, isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId }, onSelection = { roomSummary -> - state.eventSink(RoomSelectEvents.SetSelectedRoom(roomSummary)) + state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary)) } ) HorizontalDivider(modifier = Modifier.fillMaxWidth()) @@ -169,11 +164,9 @@ fun RoomSelectView( } if (!state.isSearchActive) { - // TODO restore for multi-selection -// SelectedRoomsHelper( -// isForwarding = state.isForwarding, -// selectedRooms = state.selectedRooms -// ) + SelectedRoomsHelper( + selectedRooms = state.selectedRooms + ) Spacer(modifier = Modifier.height(20.dp)) if (state.resultState is SearchBarResultState.Results) { @@ -184,7 +177,7 @@ fun RoomSelectView( roomSummary, isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId }, onSelection = { roomSummary -> - state.eventSink(RoomSelectEvents.SetSelectedRoom(roomSummary)) + state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary)) } ) HorizontalDivider(modifier = Modifier.fillMaxWidth()) diff --git a/libraries/roomselect/impl/src/test/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenterTest.kt b/libraries/roomselect/impl/src/test/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenterTest.kt index 67c1b52231..f4024355f2 100644 --- a/libraries/roomselect/impl/src/test/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenterTest.kt +++ b/libraries/roomselect/impl/src/test/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenterTest.kt @@ -117,9 +117,9 @@ class RoomSelectPresenterTest { }.test { val initialState = awaitItem() val roomInfo = roomSummary.toSelectRoomInfo() - initialState.eventSink(RoomSelectEvents.SetSelectedRoom(roomInfo)) + initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo)) assertThat(awaitItem().selectedRooms).isEqualTo(persistentListOf(roomInfo)) - initialState.eventSink(RoomSelectEvents.RemoveSelectedRoom) + initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo)) assertThat(awaitItem().selectedRooms).isEmpty() cancel() }