Browse Source

Merge pull request #1726 from vector-im/feature/bma/improveDialogApi

Improve dialog api
julioromano/desugar_nio
Benoit Marty 11 months ago committed by GitHub
parent
commit
8cc541b5fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt
  2. 2
      libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ListDialog.kt
  3. 6
      libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/SingleSelectionDialog.kt
  4. 75
      libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/AlertDialogContent.kt
  5. BIN
      tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme.components_null_Dialogs_Dialogwiththirdbutton_0_null,NEXUS_5,1.0,en].png

11
libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt

@ -32,17 +32,17 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable @Composable
fun ErrorDialog( fun ErrorDialog(
content: String, content: String,
onDismiss: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
title: String = ErrorDialogDefaults.title, title: String = ErrorDialogDefaults.title,
submitText: String = ErrorDialogDefaults.submitText, submitText: String = ErrorDialogDefaults.submitText,
onDismiss: () -> Unit = {},
) { ) {
AlertDialog(modifier = modifier, onDismissRequest = onDismiss) { AlertDialog(modifier = modifier, onDismissRequest = onDismiss) {
ErrorDialogContent( ErrorDialogContent(
title = title, title = title,
content = content, content = content,
submitText = submitText, submitText = submitText,
onSubmitText = onDismiss, onSubmitClicked = onDismiss,
) )
} }
} }
@ -50,17 +50,17 @@ fun ErrorDialog(
@Composable @Composable
private fun ErrorDialogContent( private fun ErrorDialogContent(
content: String, content: String,
onSubmitClicked: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
title: String = ErrorDialogDefaults.title, title: String = ErrorDialogDefaults.title,
submitText: String = ErrorDialogDefaults.submitText, submitText: String = ErrorDialogDefaults.submitText,
onSubmitText: () -> Unit = {},
) { ) {
SimpleAlertDialogContent( SimpleAlertDialogContent(
modifier = modifier, modifier = modifier,
title = title, title = title,
content = content, content = content,
cancelText = submitText, submitText = submitText,
onCancelClicked = onSubmitText, onSubmitClicked = onSubmitClicked,
) )
} }
@ -76,6 +76,7 @@ internal fun ErrorDialogPreview() {
DialogPreview { DialogPreview {
ErrorDialogContent( ErrorDialogContent(
content = "Content", content = "Content",
onSubmitClicked = {},
) )
} }
} }

2
libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ListDialog.kt

@ -38,8 +38,8 @@ import io.element.android.libraries.ui.strings.CommonStrings
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun ListDialog( fun ListDialog(
onDismissRequest: () -> Unit,
onSubmit: () -> Unit, onSubmit: () -> Unit,
onDismissRequest: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
title: String? = null, title: String? = null,
subtitle: String? = null, subtitle: String? = null,

6
libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/SingleSelectionDialog.kt

@ -77,8 +77,8 @@ fun SingleSelectionDialog(
private fun SingleSelectionDialogContent( private fun SingleSelectionDialogContent(
options: ImmutableList<ListOption>, options: ImmutableList<ListOption>,
onOptionSelected: (Int) -> Unit, onOptionSelected: (Int) -> Unit,
onDismissRequest: () -> Unit,
dismissButtonTitle: String, dismissButtonTitle: String,
onDismissRequest: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
title: String? = null, title: String? = null,
initialSelection: Int? = null, initialSelection: Int? = null,
@ -88,8 +88,8 @@ private fun SingleSelectionDialogContent(
title = title, title = title,
subtitle = subtitle, subtitle = subtitle,
modifier = modifier, modifier = modifier,
cancelText = dismissButtonTitle, submitText = dismissButtonTitle,
onCancelClicked = onDismissRequest, onSubmitClicked = onDismissRequest,
applyPaddingToContents = false, applyPaddingToContents = false,
) { ) {
LazyColumn { LazyColumn {

75
libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/AlertDialogContent.kt

@ -53,51 +53,51 @@ import kotlin.math.max
@Composable @Composable
internal fun SimpleAlertDialogContent( internal fun SimpleAlertDialogContent(
content: String, content: String,
cancelText: String, submitText: String,
onCancelClicked: () -> Unit, onSubmitClicked: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
title: String? = null, title: String? = null,
subtitle: @Composable (() -> Unit)? = null, subtitle: @Composable (() -> Unit)? = null,
submitText: String? = null,
destructiveSubmit: Boolean = false, destructiveSubmit: Boolean = false,
onSubmitClicked: () -> Unit = {}, cancelText: String? = null,
onCancelClicked: () -> Unit = {},
thirdButtonText: String? = null, thirdButtonText: String? = null,
onThirdButtonClicked: () -> Unit = {}, onThirdButtonClicked: () -> Unit = {},
applyPaddingToContents: Boolean = true, applyPaddingToContents: Boolean = true,
icon: @Composable (() -> Unit)? = null, icon: @Composable (() -> Unit)? = null,
) { ) {
SimpleAlertDialogContent( SimpleAlertDialogContent(
modifier = modifier,
icon = icon,
title = title,
subtitle = subtitle,
content = { content = {
Text( Text(
text = content, text = content,
style = ElementTheme.materialTypography.bodyMedium, style = ElementTheme.materialTypography.bodyMedium,
) )
}, },
cancelText = cancelText,
onCancelClicked = onCancelClicked,
modifier = modifier,
title = title,
subtitle = subtitle,
submitText = submitText, submitText = submitText,
destructiveSubmit = destructiveSubmit, destructiveSubmit = destructiveSubmit,
onSubmitClicked = onSubmitClicked, onSubmitClicked = onSubmitClicked,
cancelText = cancelText,
onCancelClicked = onCancelClicked,
thirdButtonText = thirdButtonText, thirdButtonText = thirdButtonText,
onThirdButtonClicked = onThirdButtonClicked, onThirdButtonClicked = onThirdButtonClicked,
icon = icon,
applyPaddingToContents = applyPaddingToContents, applyPaddingToContents = applyPaddingToContents,
) )
} }
@Composable @Composable
internal fun SimpleAlertDialogContent( internal fun SimpleAlertDialogContent(
cancelText: String, submitText: String,
onCancelClicked: () -> Unit, onSubmitClicked: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
title: String? = null, title: String? = null,
subtitle: @Composable (() -> Unit)? = null, subtitle: @Composable (() -> Unit)? = null,
submitText: String? = null,
destructiveSubmit: Boolean = false, destructiveSubmit: Boolean = false,
onSubmitClicked: () -> Unit = {}, cancelText: String? = null,
onCancelClicked: () -> Unit = {},
thirdButtonText: String? = null, thirdButtonText: String? = null,
onThirdButtonClicked: () -> Unit = {}, onThirdButtonClicked: () -> Unit = {},
applyPaddingToContents: Boolean = true, applyPaddingToContents: Boolean = true,
@ -121,15 +121,13 @@ internal fun SimpleAlertDialogContent(
onClick = onThirdButtonClicked, onClick = onThirdButtonClicked,
) )
} }
if (cancelText != null) {
TextButton( TextButton(
modifier = Modifier.testTag( modifier = Modifier.testTag(TestTags.dialogNegative),
if (submitText == null) TestTags.dialogPositive else TestTags.dialogNegative
),
text = cancelText, text = cancelText,
size = ButtonSize.Medium, size = ButtonSize.Medium,
onClick = onCancelClicked, onClick = onCancelClicked,
) )
if (submitText != null) {
Button( Button(
modifier = Modifier.testTag(TestTags.dialogPositive), modifier = Modifier.testTag(TestTags.dialogPositive),
text = submitText, text = submitText,
@ -138,6 +136,15 @@ internal fun SimpleAlertDialogContent(
onClick = onSubmitClicked, onClick = onSubmitClicked,
destructive = destructiveSubmit, destructive = destructiveSubmit,
) )
} else {
TextButton(
modifier = Modifier.testTag(TestTags.dialogPositive),
text = submitText,
enabled = enabled,
size = ButtonSize.Medium,
onClick = onSubmitClicked,
destructive = destructiveSubmit,
)
} }
} }
}, },
@ -438,8 +445,8 @@ internal fun DialogWithTitleIconAndOkButtonPreview() {
}, },
title = "Dialog Title", title = "Dialog Title",
content = "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made. Learn more", content = "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made. Learn more",
cancelText = "OK", submitText = "OK",
onCancelClicked = {}, onSubmitClicked = {},
) )
} }
} }
@ -454,8 +461,8 @@ internal fun DialogWithTitleAndOkButtonPreview() {
SimpleAlertDialogContent( SimpleAlertDialogContent(
title = "Dialog Title", title = "Dialog Title",
content = "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made. Learn more", content = "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made. Learn more",
cancelText = "OK", submitText = "OK",
onCancelClicked = {}, onSubmitClicked = {},
) )
} }
} }
@ -469,8 +476,8 @@ internal fun DialogWithOnlyMessageAndOkButtonPreview() {
DialogPreview { DialogPreview {
SimpleAlertDialogContent( SimpleAlertDialogContent(
content = "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made. Learn more", content = "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made. Learn more",
cancelText = "OK", submitText = "OK",
onCancelClicked = {}, onSubmitClicked = {},
) )
} }
} }
@ -478,7 +485,6 @@ internal fun DialogWithOnlyMessageAndOkButtonPreview() {
@Preview(group = PreviewGroup.Dialogs, name = "Dialog with destructive button") @Preview(group = PreviewGroup.Dialogs, name = "Dialog with destructive button")
@Composable @Composable
@Suppress("MaxLineLength")
internal fun DialogWithDestructiveButtonPreview() { internal fun DialogWithDestructiveButtonPreview() {
ElementThemedPreview(showBackground = false) { ElementThemedPreview(showBackground = false) {
DialogPreview { DialogPreview {
@ -488,7 +494,24 @@ internal fun DialogWithDestructiveButtonPreview() {
cancelText = "Cancel", cancelText = "Cancel",
submitText = "Delete", submitText = "Delete",
destructiveSubmit = true, destructiveSubmit = true,
onCancelClicked = {}, onSubmitClicked = {},
)
}
}
}
@Preview(group = PreviewGroup.Dialogs, name = "Dialog with third button")
@Composable
internal fun DialogWithThirdButtonPreview() {
ElementThemedPreview(showBackground = false) {
DialogPreview {
SimpleAlertDialogContent(
title = "Dialog Title",
content = "A dialog with a third button",
cancelText = "Cancel",
submitText = "Delete",
thirdButtonText = "Other",
onSubmitClicked = {},
) )
} }
} }

BIN
tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme.components_null_Dialogs_Dialogwiththirdbutton_0_null,NEXUS_5,1.0,en].png (Stored with Git LFS)

Binary file not shown.
Loading…
Cancel
Save