From 25989135a8cc72caf80431e7d433d3cbec77d628 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 21 Aug 2026 09:35:35 +0200 Subject: [PATCH] Add error content to Localazy --- .../impl/timeline/TimelinePresenter.kt | 12 ++++++---- .../sendfailure/SendFailureDialogState.kt | 11 ++++++++- .../SendFailureDialogStateProvider.kt | 18 ++++++++++++++- .../sendfailure/SendFailureDialogView.kt | 23 ++++++++++++++++++- .../impl/src/main/res/values/localazy.xml | 5 ++++ tools/localazy/config.json | 1 + 6 files changed, 63 insertions(+), 7 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt index fb64e0c096..6d5e0b2bf1 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt @@ -258,25 +258,29 @@ class TimelinePresenter( is LocalEventSendState.Failed.InvalidMimeType -> { sendFailureDialogState = SendFailureDialogState.Show( event = event.event, - message = "Invalid mime type: ${sendStateFailure.mimeType}", + sendFailureType = SendFailureDialogState.SendFailureType.InvalidMimeType(sendStateFailure.mimeType), ) } LocalEventSendState.Failed.MissingMediaContent -> { sendFailureDialogState = SendFailureDialogState.Show( event = event.event, - message = "Missing media content", + sendFailureType = SendFailureDialogState.SendFailureType.MissingMediaContent, ) } LocalEventSendState.Failed.SendingFromUnverifiedDevice -> { sendFailureDialogState = SendFailureDialogState.Show( event = event.event, - message = "Sending from unverified device", + sendFailureType = SendFailureDialogState.SendFailureType.SendingFromUnverifiedDevice, ) } is LocalEventSendState.Failed.Unknown -> { sendFailureDialogState = SendFailureDialogState.Show( event = event.event, - message = sendStateFailure.error.takeIf { it.isNotBlank() } ?: "Unknown error", + sendFailureType = if (sendStateFailure.error.isNotBlank()) { + SendFailureDialogState.SendFailureType.Error(sendStateFailure.error) + } else { + SendFailureDialogState.SendFailureType.Unknown + } ) } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/sendfailure/SendFailureDialogState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/sendfailure/SendFailureDialogState.kt index c3d3b2d9b0..02da5a6503 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/sendfailure/SendFailureDialogState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/sendfailure/SendFailureDialogState.kt @@ -16,6 +16,15 @@ sealed interface SendFailureDialogState { data class Show( val event: TimelineItem.Event, - val message: String, + val sendFailureType: SendFailureType, ) : SendFailureDialogState + + @Immutable + sealed interface SendFailureType { + data class InvalidMimeType(val mimeType: String) : SendFailureType + data object MissingMediaContent : SendFailureType + data object SendingFromUnverifiedDevice : SendFailureType + data class Error(val message: String) : SendFailureType + data object Unknown : SendFailureType + } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/sendfailure/SendFailureDialogStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/sendfailure/SendFailureDialogStateProvider.kt index b6730f0392..55c894c0d9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/sendfailure/SendFailureDialogStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/sendfailure/SendFailureDialogStateProvider.kt @@ -16,7 +16,23 @@ class SendFailureDialogStateProvider : PreviewParameterProvider Unit is SendFailureDialogState.Show -> { // Show the dialog with the message and actions + val content = when (sendFailureDialogState.sendFailureType) { + is SendFailureDialogState.SendFailureType.InvalidMimeType -> stringResource( + id = R.string.error_sending_failure_invalid_mime_type, + sendFailureDialogState.sendFailureType.mimeType, + ) + is SendFailureDialogState.SendFailureType.MissingMediaContent -> stringResource( + id = R.string.error_sending_failure_missing_media_content, + ) + is SendFailureDialogState.SendFailureType.SendingFromUnverifiedDevice -> stringResource( + id = R.string.error_sending_failure_sending_from_unverified_device, + ) + is SendFailureDialogState.SendFailureType.Error -> stringResource( + id = R.string.error_sending_failure_other, + sendFailureDialogState.sendFailureType.message + ) + is SendFailureDialogState.SendFailureType.Unknown -> stringResource( + id = R.string.error_sending_failure_unknown, + ) + } + ConfirmationDialog( modifier = modifier, title = stringResource(id = CommonStrings.common_sending_failed), - content = sendFailureDialogState.message, + content = content, onDismiss = onDismiss, submitText = stringResource(id = CommonStrings.action_retry), onSubmitClick = { onRetry(sendFailureDialogState.event) }, diff --git a/features/messages/impl/src/main/res/values/localazy.xml b/features/messages/impl/src/main/res/values/localazy.xml index 556ab00ee0..e29b83af41 100644 --- a/features/messages/impl/src/main/res/values/localazy.xml +++ b/features/messages/impl/src/main/res/values/localazy.xml @@ -7,6 +7,11 @@ "Encrypted by an unknown or deleted device." "Encrypted by a device not verified by its owner." "Encrypted by an unverified user." + "Invalid mime type: %s" + "Missing media content" + "Error details: %s" + "Sending from unverified device" + "Unknown error" "Flip image horizontally" "Flipped horizontally" "Original" diff --git a/tools/localazy/config.json b/tools/localazy/config.json index 8a7790be1e..dddb21a6cf 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -271,6 +271,7 @@ "screen_room_retry.*", "screen_room_timeline.*", "screen\\.room\\.timeline.*", + "error\\.sending_failure\\..*", "screen\\.room_timeline.*", "screen_room_typing.*", "screen\\.image_edition\\..*",