Introduce SelectionMode enum

This commit is contained in:
Florian Renaud
2023-03-22 11:35:07 +01:00
parent 195af44391
commit 0bdf0c1692
8 changed files with 27 additions and 16 deletions

View File

@@ -19,6 +19,7 @@ package io.element.android.features.createroom.impl.addpeople
import androidx.compose.runtime.Composable
import io.element.android.features.selectusers.api.SelectUsersPresenter
import io.element.android.features.selectusers.api.SelectUsersPresenterArgs
import io.element.android.features.selectusers.api.SelectionMode
import io.element.android.libraries.architecture.Presenter
import javax.inject.Inject
@@ -27,7 +28,7 @@ class AddPeoplePresenter @Inject constructor(
) : Presenter<AddPeopleState> {
private val selectUsersPresenter by lazy {
selectUsersPresenterFactory.create(SelectUsersPresenterArgs(isMultiSelectionEnabled = true))
selectUsersPresenterFactory.create(SelectUsersPresenterArgs(SelectionMode.Multiple))
}
@Composable

View File

@@ -17,6 +17,7 @@
package io.element.android.features.createroom.impl.addpeople
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.selectusers.api.SelectionMode
import io.element.android.features.selectusers.api.aSelectUsersState
import io.element.android.features.selectusers.api.aSetOfSelectedUsers
@@ -27,14 +28,14 @@ open class AddPeopleStateProvider : PreviewParameterProvider<AddPeopleState> {
aAddPeopleState().copy(
selectUsersState = aSelectUsersState().copy(
selectedUsers = aSetOfSelectedUsers(),
isMultiSelectionEnabled = true,
selectionMode = SelectionMode.Multiple,
)
),
aAddPeopleState().copy(
selectUsersState = aSelectUsersState().copy(
selectedUsers = aSetOfSelectedUsers(),
isSearchActive = true,
isMultiSelectionEnabled = true,
selectionMode = SelectionMode.Multiple,
)
)
)

View File

@@ -19,6 +19,7 @@ package io.element.android.features.createroom.impl.root
import androidx.compose.runtime.Composable
import io.element.android.features.selectusers.api.SelectUsersPresenter
import io.element.android.features.selectusers.api.SelectUsersPresenterArgs
import io.element.android.features.selectusers.api.SelectionMode
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.matrix.ui.model.MatrixUser
import timber.log.Timber
@@ -29,7 +30,7 @@ class CreateRoomRootPresenter @Inject constructor(
) : Presenter<CreateRoomRootState> {
private val presenter by lazy {
presenterFactory.create(SelectUsersPresenterArgs(isMultiSelectionEnabled = false))
presenterFactory.create(SelectUsersPresenterArgs(SelectionMode.Single))
}
@Composable

View File

@@ -17,5 +17,10 @@
package io.element.android.features.selectusers.api
data class SelectUsersPresenterArgs(
val isMultiSelectionEnabled: Boolean,
val selectionMode: SelectionMode,
)
enum class SelectionMode {
Single,
Multiple,
}

View File

@@ -27,6 +27,8 @@ data class SelectUsersState(
val selectedUsers: ImmutableSet<MatrixUser>,
val selectedUsersListState: LazyListState,
val isSearchActive: Boolean,
val isMultiSelectionEnabled: Boolean,
val selectionMode: SelectionMode,
val eventSink: (SelectUsersEvents) -> Unit,
)
) {
val isMultiSelectionEnabled = selectionMode == SelectionMode.Multiple
}

View File

@@ -30,11 +30,11 @@ open class SelectUsersStateProvider : PreviewParameterProvider<SelectUsersState>
aSelectUsersState().copy(
isSearchActive = false,
selectedUsers = aSetOfSelectedUsers(),
isMultiSelectionEnabled = true
selectionMode = SelectionMode.Multiple,
),
aSelectUsersState().copy(isSearchActive = true),
aSelectUsersState().copy(isSearchActive = true, searchQuery = "someone"),
aSelectUsersState().copy(isSearchActive = true, searchQuery = "someone", isMultiSelectionEnabled = true),
aSelectUsersState().copy(isSearchActive = true, searchQuery = "someone", selectionMode = SelectionMode.Multiple),
aSelectUsersState().copy(
isSearchActive = true,
searchQuery = "@someone:matrix.org",
@@ -44,7 +44,7 @@ open class SelectUsersStateProvider : PreviewParameterProvider<SelectUsersState>
aSelectUsersState().copy(
isSearchActive = true,
searchQuery = "@someone:matrix.org",
isMultiSelectionEnabled = true,
selectionMode = SelectionMode.Multiple,
selectedUsers = aSetOfSelectedUsers(),
searchResults = aListOfResults(),
)
@@ -60,7 +60,7 @@ fun aSelectUsersState() = SelectUsersState(
firstVisibleItemIndex = 0,
firstVisibleItemScrollOffset = 0,
),
isMultiSelectionEnabled = false,
selectionMode = SelectionMode.Single,
eventSink = {}
)

View File

@@ -102,7 +102,7 @@ class DefaultSelectUsersPresenter @AssistedInject constructor(
selectedUsers = selectedUsers.value.reversed().toImmutableSet(),
selectedUsersListState = selectedUsersListState,
isSearchActive = isSearchActive,
isMultiSelectionEnabled = args.isMultiSelectionEnabled,
selectionMode = args.selectionMode,
eventSink = ::handleEvents,
)
}

View File

@@ -23,6 +23,7 @@ import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat
import io.element.android.features.selectusers.api.SelectUsersEvents
import io.element.android.features.selectusers.api.SelectUsersPresenterArgs
import io.element.android.features.selectusers.api.SelectionMode
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.ui.components.aMatrixUser
import io.element.android.libraries.matrix.ui.model.MatrixUser
@@ -37,7 +38,7 @@ class DefaultSelectUsersPresenterTests {
@Test
fun `present - initial state for single selection`() = runTest {
val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(isMultiSelectionEnabled = false))
val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(SelectionMode.Single))
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {
@@ -52,7 +53,7 @@ class DefaultSelectUsersPresenterTests {
@Test
fun `present - initial state for multiple selection`() = runTest {
val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(isMultiSelectionEnabled = true))
val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(SelectionMode.Multiple))
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {
@@ -67,7 +68,7 @@ class DefaultSelectUsersPresenterTests {
@Test
fun `present - update search query`() = runTest {
val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(isMultiSelectionEnabled = false))
val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(SelectionMode.Single))
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {
@@ -96,7 +97,7 @@ class DefaultSelectUsersPresenterTests {
mockkConstructor(LazyListState::class)
coJustRun { anyConstructed<LazyListState>().scrollToItem(index = any()) }
val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(isMultiSelectionEnabled = false))
val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(SelectionMode.Single))
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {