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 @@ -20,7 +20,5 @@ import io.element.android.libraries.matrix.ui.model.MatrixUser
sealed interface CreateRoomRootEvents {
object InvitePeople : CreateRoomRootEvents
data class SelectUser(val matrixUser: MatrixUser) : CreateRoomRootEvents
data class CreateDM(val matrixUser: MatrixUser) : CreateRoomRootEvents
object CancelCreateDM : CreateRoomRootEvents
data class StartDM(val matrixUser: MatrixUser) : 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 @@ -18,13 +18,9 @@ package io.element.android.features.createroom.impl.root
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
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.SelectUsersPresenterArgs
import io.element.android.features.selectusers.api.SelectionMode
@ -52,35 +48,24 @@ class CreateRoomRootPresenter @Inject constructor( @@ -52,35 +48,24 @@ class CreateRoomRootPresenter @Inject constructor(
val selectUsersState = presenter.present()
val localCoroutineScope = rememberCoroutineScope()
var showCreateDmConfirmationDialog by rememberSaveable { mutableStateOf(false) }
val startDmAction: MutableState<Async<RoomId>> = remember { mutableStateOf(Async.Uninitialized) }
fun handleEvents(event: CreateRoomRootEvents) {
when (event) {
is CreateRoomRootEvents.SelectUser -> {
is CreateRoomRootEvents.StartDM -> {
val existingDM = matrixClient.findDM(event.matrixUser.id)
if (existingDM == null) {
showCreateDmConfirmationDialog = true
localCoroutineScope.createDM(event.matrixUser, startDmAction)
} else {
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
}
}
return CreateRoomRootState(
selectUsersState = selectUsersState,
showCreateDmConfirmationDialog = showCreateDmConfirmationDialog,
startDmAction = startDmAction.value,
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 @@ -22,7 +22,6 @@ import io.element.android.libraries.matrix.api.core.RoomId
data class CreateRoomRootState(
val selectUsersState: SelectUsersState,
val showCreateDmConfirmationDialog: Boolean,
val startDmAction: Async<RoomId>,
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 @@ -27,7 +27,7 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot
get() = sequenceOf(
aCreateRoomRootState(),
aCreateRoomRootState().copy(
showCreateDmConfirmationDialog = true,
startDmAction = Async.Loading(),
selectUsersState = aMatrixUser().let {
aSelectUsersState().copy(
searchQuery = it.id.value,
@ -36,13 +36,12 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot @@ -36,13 +36,12 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot
isSearchActive = true,
)
}
),
)
)
}
fun aCreateRoomRootState() = CreateRoomRootState(
eventSink = {},
startDmAction = Async.Uninitialized,
showCreateDmConfirmationDialog = false,
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 @@ -42,7 +42,6 @@ import io.element.android.features.createroom.impl.R
import io.element.android.features.selectusers.api.SelectUsersView
import io.element.android.libraries.architecture.Async
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.ElementPreviewLight
import io.element.android.libraries.designsystem.theme.components.CenterAlignedTopAppBar
@ -51,7 +50,6 @@ import io.element.android.libraries.designsystem.theme.components.IconButton @@ -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.Text
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.ui.strings.R as StringR
@ -85,7 +83,7 @@ fun CreateRoomRootView( @@ -85,7 +83,7 @@ fun CreateRoomRootView(
SelectUsersView(
modifier = Modifier.fillMaxWidth(),
state = state.selectUsersState,
onUserSelected = { state.eventSink(CreateRoomRootEvents.SelectUser(it)) },
onUserSelected = { state.eventSink(CreateRoomRootEvents.StartDM(it)) },
)
if (!state.selectUsersState.isSearchActive) {
@ -97,8 +95,6 @@ fun CreateRoomRootView( @@ -97,8 +95,6 @@ fun CreateRoomRootView(
}
}
CreateDmConfirmationDialog(state)
if (state.startDmAction is Async.Loading) {
ProgressDialog(text = "Creating room...")
}
@ -172,26 +168,6 @@ fun CreateRoomActionButton( @@ -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
@Composable
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 { @@ -73,7 +73,7 @@ class CreateRoomRootPresenterTests {
}.test {
val initialState = awaitItem()
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 { @@ -22,6 +22,5 @@ sealed interface SelectUsersEvents {
data class UpdateSearchQuery(val query: String) : SelectUsersEvents
data class AddToSelection(val matrixUser: MatrixUser) : SelectUsersEvents
data class RemoveFromSelection(val matrixUser: MatrixUser) : SelectUsersEvents
object ClearSelection : 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( @@ -79,7 +79,6 @@ class DefaultSelectUsersPresenter @AssistedInject constructor(
localCoroutineScope.scrollToFirstSelectedUser(selectedUsersListState)
}
is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList()
SelectUsersEvents.ClearSelection -> selectedUsers.value = persistentListOf()
}
}

Loading…
Cancel
Save