Browse Source

Introduce SelectionMode enum

test/jme/compound-poc
Florian Renaud 2 years ago
parent
commit
9153d8ced3
  1. 3
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenter.kt
  2. 5
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleStateProvider.kt
  3. 3
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt
  4. 7
      features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersPresenterArgs.kt
  5. 6
      features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt
  6. 8
      features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt
  7. 2
      features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt
  8. 9
      features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt

3
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 @@ -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( @@ -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

5
features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleStateProvider.kt

@ -17,6 +17,7 @@ @@ -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> { @@ -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,
)
)
)

3
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 @@ -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( @@ -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

7
features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersPresenterArgs.kt

@ -17,5 +17,10 @@ @@ -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,
}

6
features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt

@ -27,6 +27,8 @@ data class SelectUsersState( @@ -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
}

8
features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt

@ -30,11 +30,11 @@ open class SelectUsersStateProvider : PreviewParameterProvider<SelectUsersState> @@ -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> @@ -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( @@ -60,7 +60,7 @@ fun aSelectUsersState() = SelectUsersState(
firstVisibleItemIndex = 0,
firstVisibleItemScrollOffset = 0,
),
isMultiSelectionEnabled = false,
selectionMode = SelectionMode.Single,
eventSink = {}
)

2
features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt

@ -102,7 +102,7 @@ class DefaultSelectUsersPresenter @AssistedInject constructor( @@ -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,
)
}

9
features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt

@ -23,6 +23,7 @@ import app.cash.turbine.test @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 {

Loading…
Cancel
Save