From 1a3a8230409963bddea91f35883b0abee1a7ec94 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 16 Nov 2022 13:31:29 +0100 Subject: [PATCH] Extract ConfirmationDialog to the design system module --- .../roomlist/components/RoomListTopBar.kt | 60 ++------------ .../components/dialogs/ConfirmationDialog.kt | 80 +++++++++++++++++++ 2 files changed, 88 insertions(+), 52 deletions(-) create mode 100644 libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt index 3117587284..2421a41e73 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt @@ -3,10 +3,6 @@ package io.element.android.x.features.roomlist.components import Avatar -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ExitToApp import androidx.compose.material3.* @@ -16,8 +12,8 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.dp import io.element.android.x.core.compose.LogCompositions +import io.element.android.x.designsystem.components.dialogs.ConfirmationDialog import io.element.android.x.features.roomlist.model.MatrixUser @Composable @@ -53,52 +49,12 @@ fun RoomListTopBar( }, scrollBehavior = scrollBehavior, ) - if (openDialog.value) { - AskLogoutConfirmDialog(onLogoutClicked) { - openDialog.value = false - } - } -} - -@Composable -fun AskLogoutConfirmDialog(onLogoutClicked: () -> Unit, onDismiss: () -> Unit) { - AlertDialog( - onDismissRequest = onDismiss, - title = { - Text(text = "Log out") - }, - text = { - Text("Do you confirm you want to log out?") - }, - confirmButton = { - Row( - modifier = Modifier.padding(all = 8.dp), - horizontalArrangement = Arrangement.Center - ) { - Button( - modifier = Modifier.fillMaxWidth(), - onClick = { - onDismiss() - onLogoutClicked() - }) - { - Text("Logout") - } - } - }, - dismissButton = { - Row( - modifier = Modifier.padding(all = 8.dp), - horizontalArrangement = Arrangement.Center - ) { - Button( - modifier = Modifier.fillMaxWidth(), - onClick = onDismiss - ) - { - Text("Cancel") - } - } - } + // Log out confirmation dialog + ConfirmationDialog( + openDialog, + title = "Log out", + content = "Do you confirm you want to log out?", + submitText = "Log out", + onSubmitClicked = onLogoutClicked, ) } diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt new file mode 100644 index 0000000000..f45d743fd1 --- /dev/null +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt @@ -0,0 +1,80 @@ +package io.element.android.x.designsystem.components.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@Composable +fun ConfirmationDialog( + isDisplayed: MutableState, + title: String, + content: String, + submitText: String = "OK", + cancelText: String = "Cancel", + onSubmitClicked: () -> Unit = {}, + onDismiss: () -> Unit = {}, +) { + if (!isDisplayed.value) return + AlertDialog( + onDismissRequest = onDismiss, + title = { + Text(text = title) + }, + text = { + Text(content) + }, + confirmButton = { + Row( + modifier = Modifier.padding(all = 8.dp), + horizontalArrangement = Arrangement.Center + ) { + Button( + modifier = Modifier.fillMaxWidth(), + onClick = { + isDisplayed.value = false + onDismiss() + onSubmitClicked() + }) + { + Text(submitText) + } + } + }, + dismissButton = { + Row( + modifier = Modifier.padding(all = 8.dp), + horizontalArrangement = Arrangement.Center + ) { + Button( + modifier = Modifier.fillMaxWidth(), + onClick = { + isDisplayed.value = false + onDismiss() + }) { + Text(cancelText) + } + } + } + ) +} + +@Composable +@Preview +private fun ConfirmationDialogPreview() { + ConfirmationDialog( + isDisplayed = remember { mutableStateOf(true) }, + title = "Title", + content = "Content", + ) +} \ No newline at end of file