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

5
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 package io.element.android.features.createroom.impl.addpeople
import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.aSelectUsersState
import io.element.android.features.selectusers.api.aSetOfSelectedUsers import io.element.android.features.selectusers.api.aSetOfSelectedUsers
@ -27,14 +28,14 @@ open class AddPeopleStateProvider : PreviewParameterProvider<AddPeopleState> {
aAddPeopleState().copy( aAddPeopleState().copy(
selectUsersState = aSelectUsersState().copy( selectUsersState = aSelectUsersState().copy(
selectedUsers = aSetOfSelectedUsers(), selectedUsers = aSetOfSelectedUsers(),
isMultiSelectionEnabled = true, selectionMode = SelectionMode.Multiple,
) )
), ),
aAddPeopleState().copy( aAddPeopleState().copy(
selectUsersState = aSelectUsersState().copy( selectUsersState = aSelectUsersState().copy(
selectedUsers = aSetOfSelectedUsers(), selectedUsers = aSetOfSelectedUsers(),
isSearchActive = true, 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
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import io.element.android.features.selectusers.api.SelectUsersPresenter import io.element.android.features.selectusers.api.SelectUsersPresenter
import io.element.android.features.selectusers.api.SelectUsersPresenterArgs 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.architecture.Presenter
import io.element.android.libraries.matrix.ui.model.MatrixUser import io.element.android.libraries.matrix.ui.model.MatrixUser
import timber.log.Timber import timber.log.Timber
@ -29,7 +30,7 @@ class CreateRoomRootPresenter @Inject constructor(
) : Presenter<CreateRoomRootState> { ) : Presenter<CreateRoomRootState> {
private val presenter by lazy { private val presenter by lazy {
presenterFactory.create(SelectUsersPresenterArgs(isMultiSelectionEnabled = false)) presenterFactory.create(SelectUsersPresenterArgs(SelectionMode.Single))
} }
@Composable @Composable

7
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 package io.element.android.features.selectusers.api
data class SelectUsersPresenterArgs( 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(
val selectedUsers: ImmutableSet<MatrixUser>, val selectedUsers: ImmutableSet<MatrixUser>,
val selectedUsersListState: LazyListState, val selectedUsersListState: LazyListState,
val isSearchActive: Boolean, val isSearchActive: Boolean,
val isMultiSelectionEnabled: Boolean, val selectionMode: SelectionMode,
val eventSink: (SelectUsersEvents) -> Unit, 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>
aSelectUsersState().copy( aSelectUsersState().copy(
isSearchActive = false, isSearchActive = false,
selectedUsers = aSetOfSelectedUsers(), selectedUsers = aSetOfSelectedUsers(),
isMultiSelectionEnabled = true selectionMode = SelectionMode.Multiple,
), ),
aSelectUsersState().copy(isSearchActive = true), aSelectUsersState().copy(isSearchActive = true),
aSelectUsersState().copy(isSearchActive = true, searchQuery = "someone"), 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( aSelectUsersState().copy(
isSearchActive = true, isSearchActive = true,
searchQuery = "@someone:matrix.org", searchQuery = "@someone:matrix.org",
@ -44,7 +44,7 @@ open class SelectUsersStateProvider : PreviewParameterProvider<SelectUsersState>
aSelectUsersState().copy( aSelectUsersState().copy(
isSearchActive = true, isSearchActive = true,
searchQuery = "@someone:matrix.org", searchQuery = "@someone:matrix.org",
isMultiSelectionEnabled = true, selectionMode = SelectionMode.Multiple,
selectedUsers = aSetOfSelectedUsers(), selectedUsers = aSetOfSelectedUsers(),
searchResults = aListOfResults(), searchResults = aListOfResults(),
) )
@ -60,7 +60,7 @@ fun aSelectUsersState() = SelectUsersState(
firstVisibleItemIndex = 0, firstVisibleItemIndex = 0,
firstVisibleItemScrollOffset = 0, firstVisibleItemScrollOffset = 0,
), ),
isMultiSelectionEnabled = false, selectionMode = SelectionMode.Single,
eventSink = {} eventSink = {}
) )

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

Loading…
Cancel
Save