Browse Source

Remove confirmation dialog

test/jme/compound-poc
Florian Renaud 2 years ago
parent
commit
55dc2c5da8
  1. 4
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt
  2. 19
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt
  3. 1
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootState.kt
  4. 5
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt
  5. 26
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt
  6. 2
      features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt
  7. 1
      features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersEvents.kt
  8. 1
      features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt

4
features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt

@ -20,7 +20,5 @@ import io.element.android.libraries.matrix.ui.model.MatrixUser
sealed interface CreateRoomRootEvents { sealed interface CreateRoomRootEvents {
object InvitePeople : CreateRoomRootEvents object InvitePeople : CreateRoomRootEvents
data class SelectUser(val matrixUser: MatrixUser) : CreateRoomRootEvents data class StartDM(val matrixUser: MatrixUser) : CreateRoomRootEvents
data class CreateDM(val matrixUser: MatrixUser) : CreateRoomRootEvents
object CancelCreateDM : CreateRoomRootEvents
} }

19
features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt

@ -18,13 +18,9 @@ package io.element.android.features.createroom.impl.root
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import io.element.android.features.selectusers.api.SelectUsersEvents
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.features.selectusers.api.SelectionMode
@ -52,35 +48,24 @@ class CreateRoomRootPresenter @Inject constructor(
val selectUsersState = presenter.present() val selectUsersState = presenter.present()
val localCoroutineScope = rememberCoroutineScope() val localCoroutineScope = rememberCoroutineScope()
var showCreateDmConfirmationDialog by rememberSaveable { mutableStateOf(false) }
val startDmAction: MutableState<Async<RoomId>> = remember { mutableStateOf(Async.Uninitialized) } val startDmAction: MutableState<Async<RoomId>> = remember { mutableStateOf(Async.Uninitialized) }
fun handleEvents(event: CreateRoomRootEvents) { fun handleEvents(event: CreateRoomRootEvents) {
when (event) { when (event) {
is CreateRoomRootEvents.SelectUser -> { is CreateRoomRootEvents.StartDM -> {
val existingDM = matrixClient.findDM(event.matrixUser.id) val existingDM = matrixClient.findDM(event.matrixUser.id)
if (existingDM == null) { if (existingDM == null) {
showCreateDmConfirmationDialog = true localCoroutineScope.createDM(event.matrixUser, startDmAction)
} else { } else {
startDmAction.value = Async.Success(existingDM.roomId) startDmAction.value = Async.Success(existingDM.roomId)
} }
} }
is CreateRoomRootEvents.CreateDM -> {
showCreateDmConfirmationDialog = false
localCoroutineScope.createDM(event.matrixUser, startDmAction)
}
CreateRoomRootEvents.CancelCreateDM -> {
showCreateDmConfirmationDialog = false
selectUsersState.eventSink(SelectUsersEvents.ClearSelection)
}
CreateRoomRootEvents.InvitePeople -> Unit // Todo Handle invite people action CreateRoomRootEvents.InvitePeople -> Unit // Todo Handle invite people action
} }
} }
return CreateRoomRootState( return CreateRoomRootState(
selectUsersState = selectUsersState, selectUsersState = selectUsersState,
showCreateDmConfirmationDialog = showCreateDmConfirmationDialog,
startDmAction = startDmAction.value, startDmAction = startDmAction.value,
eventSink = ::handleEvents, eventSink = ::handleEvents,
) )

1
features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootState.kt

@ -22,7 +22,6 @@ import io.element.android.libraries.matrix.api.core.RoomId
data class CreateRoomRootState( data class CreateRoomRootState(
val selectUsersState: SelectUsersState, val selectUsersState: SelectUsersState,
val showCreateDmConfirmationDialog: Boolean,
val startDmAction: Async<RoomId>, val startDmAction: Async<RoomId>,
val eventSink: (CreateRoomRootEvents) -> Unit, val eventSink: (CreateRoomRootEvents) -> Unit,
) )

5
features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt

@ -27,7 +27,7 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot
get() = sequenceOf( get() = sequenceOf(
aCreateRoomRootState(), aCreateRoomRootState(),
aCreateRoomRootState().copy( aCreateRoomRootState().copy(
showCreateDmConfirmationDialog = true, startDmAction = Async.Loading(),
selectUsersState = aMatrixUser().let { selectUsersState = aMatrixUser().let {
aSelectUsersState().copy( aSelectUsersState().copy(
searchQuery = it.id.value, searchQuery = it.id.value,
@ -36,13 +36,12 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot
isSearchActive = true, isSearchActive = true,
) )
} }
), )
) )
} }
fun aCreateRoomRootState() = CreateRoomRootState( fun aCreateRoomRootState() = CreateRoomRootState(
eventSink = {}, eventSink = {},
startDmAction = Async.Uninitialized, startDmAction = Async.Uninitialized,
showCreateDmConfirmationDialog = false,
selectUsersState = aSelectUsersState(), selectUsersState = aSelectUsersState(),
) )

26
features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt

@ -42,7 +42,6 @@ import io.element.android.features.createroom.impl.R
import io.element.android.features.selectusers.api.SelectUsersView import io.element.android.features.selectusers.api.SelectUsersView
import io.element.android.libraries.architecture.Async import io.element.android.libraries.architecture.Async
import io.element.android.libraries.designsystem.components.ProgressDialog import io.element.android.libraries.designsystem.components.ProgressDialog
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.preview.ElementPreviewLight
import io.element.android.libraries.designsystem.theme.components.CenterAlignedTopAppBar import io.element.android.libraries.designsystem.theme.components.CenterAlignedTopAppBar
@ -51,7 +50,6 @@ import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.ui.model.getBestName
import io.element.android.libraries.designsystem.R as DrawableR import io.element.android.libraries.designsystem.R as DrawableR
import io.element.android.libraries.ui.strings.R as StringR import io.element.android.libraries.ui.strings.R as StringR
@ -85,7 +83,7 @@ fun CreateRoomRootView(
SelectUsersView( SelectUsersView(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
state = state.selectUsersState, state = state.selectUsersState,
onUserSelected = { state.eventSink(CreateRoomRootEvents.SelectUser(it)) }, onUserSelected = { state.eventSink(CreateRoomRootEvents.StartDM(it)) },
) )
if (!state.selectUsersState.isSearchActive) { if (!state.selectUsersState.isSearchActive) {
@ -97,8 +95,6 @@ fun CreateRoomRootView(
} }
} }
CreateDmConfirmationDialog(state)
if (state.startDmAction is Async.Loading) { if (state.startDmAction is Async.Loading) {
ProgressDialog(text = "Creating room...") ProgressDialog(text = "Creating room...")
} }
@ -172,26 +168,6 @@ fun CreateRoomActionButton(
} }
} }
@Composable
fun CreateDmConfirmationDialog(
state: CreateRoomRootState,
modifier: Modifier = Modifier,
) {
if (state.showCreateDmConfirmationDialog) {
val selectedUser = state.selectUsersState.selectedUsers.firstOrNull()
if (selectedUser != null) {
ConfirmationDialog(
modifier = modifier,
title = "Start chat",
content = "You're about starting a chat with ${selectedUser.getBestName()}, do you want to continue?",
submitText = stringResource(io.element.android.libraries.ui.strings.R.string.action_continue),
onSubmitClicked = { state.eventSink(CreateRoomRootEvents.CreateDM(selectedUser)) },
onDismiss = { state.eventSink(CreateRoomRootEvents.CancelCreateDM) },
)
}
}
}
@Preview @Preview
@Composable @Composable
fun CreateRoomRootViewLightPreview(@PreviewParameter(CreateRoomRootStateProvider::class) state: CreateRoomRootState) = fun CreateRoomRootViewLightPreview(@PreviewParameter(CreateRoomRootStateProvider::class) state: CreateRoomRootState) =

2
features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt

@ -73,7 +73,7 @@ class CreateRoomRootPresenterTests {
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
val matrixUser = MatrixUser(UserId("@name:matrix.org")) val matrixUser = MatrixUser(UserId("@name:matrix.org"))
initialState.eventSink(CreateRoomRootEvents.SelectUser(matrixUser)) initialState.eventSink(CreateRoomRootEvents.StartDM(matrixUser))
} }
} }
} }

1
features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersEvents.kt

@ -22,6 +22,5 @@ sealed interface SelectUsersEvents {
data class UpdateSearchQuery(val query: String) : SelectUsersEvents data class UpdateSearchQuery(val query: String) : SelectUsersEvents
data class AddToSelection(val matrixUser: MatrixUser) : SelectUsersEvents data class AddToSelection(val matrixUser: MatrixUser) : SelectUsersEvents
data class RemoveFromSelection(val matrixUser: MatrixUser) : SelectUsersEvents data class RemoveFromSelection(val matrixUser: MatrixUser) : SelectUsersEvents
object ClearSelection : SelectUsersEvents
data class OnSearchActiveChanged(val active: Boolean) : SelectUsersEvents data class OnSearchActiveChanged(val active: Boolean) : SelectUsersEvents
} }

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

@ -79,7 +79,6 @@ class DefaultSelectUsersPresenter @AssistedInject constructor(
localCoroutineScope.scrollToFirstSelectedUser(selectedUsersListState) localCoroutineScope.scrollToFirstSelectedUser(selectedUsersListState)
} }
is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList() is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList()
SelectUsersEvents.ClearSelection -> selectedUsers.value = persistentListOf()
} }
} }

Loading…
Cancel
Save