From 9153d8ced345c40ed09290929dd3b712d94da2f3 Mon Sep 17 00:00:00 2001 From: Florian Renaud Date: Wed, 22 Mar 2023 11:35:07 +0100 Subject: [PATCH] Introduce SelectionMode enum --- .../createroom/impl/addpeople/AddPeoplePresenter.kt | 3 ++- .../createroom/impl/addpeople/AddPeopleStateProvider.kt | 5 +++-- .../createroom/impl/root/CreateRoomRootPresenter.kt | 3 ++- .../features/selectusers/api/SelectUsersPresenterArgs.kt | 7 ++++++- .../android/features/selectusers/api/SelectUsersState.kt | 6 ++++-- .../features/selectusers/api/SelectUsersStateProvider.kt | 8 ++++---- .../selectusers/impl/DefaultSelectUsersPresenter.kt | 2 +- .../selectusers/impl/DefaultSelectUsersPresenterTests.kt | 9 +++++---- 8 files changed, 27 insertions(+), 16 deletions(-) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenter.kt index d16ad164fc..51b2928862 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenter.kt @@ -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 { private val selectUsersPresenter by lazy { - selectUsersPresenterFactory.create(SelectUsersPresenterArgs(isMultiSelectionEnabled = true)) + selectUsersPresenterFactory.create(SelectUsersPresenterArgs(SelectionMode.Multiple)) } @Composable diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleStateProvider.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleStateProvider.kt index 37428071d7..a1c0e6bdf2 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleStateProvider.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleStateProvider.kt @@ -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 { 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, ) ) ) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt index b30483bd61..2f3f3ded4a 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt @@ -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 { private val presenter by lazy { - presenterFactory.create(SelectUsersPresenterArgs(isMultiSelectionEnabled = false)) + presenterFactory.create(SelectUsersPresenterArgs(SelectionMode.Single)) } @Composable diff --git a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersPresenterArgs.kt b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersPresenterArgs.kt index 35db78eaac..543e73b77e 100644 --- a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersPresenterArgs.kt +++ b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersPresenterArgs.kt @@ -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, +} diff --git a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt index 86437d2872..a858703350 100644 --- a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt +++ b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt @@ -27,6 +27,8 @@ data class SelectUsersState( val selectedUsers: ImmutableSet, val selectedUsersListState: LazyListState, val isSearchActive: Boolean, - val isMultiSelectionEnabled: Boolean, + val selectionMode: SelectionMode, val eventSink: (SelectUsersEvents) -> Unit, -) +) { + val isMultiSelectionEnabled = selectionMode == SelectionMode.Multiple +} diff --git a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt index e85b68e986..790bd010c0 100644 --- a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt +++ b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt @@ -30,11 +30,11 @@ open class SelectUsersStateProvider : PreviewParameterProvider 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 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 = {} ) diff --git a/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt b/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt index e1522e83d2..2176317aba 100644 --- a/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt +++ b/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt @@ -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, ) } diff --git a/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt b/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt index db4e74a5f1..0df0ec88ec 100644 --- a/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt +++ b/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt @@ -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().scrollToItem(index = any()) } - val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(isMultiSelectionEnabled = false)) + val presenter = DefaultSelectUsersPresenter(SelectUsersPresenterArgs(SelectionMode.Single)) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test {