mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 12:07:28 +00:00
Merge branch 'develop' into feature/user_location_state
This commit is contained in:
-5
@@ -119,7 +119,6 @@ private fun RoomListModalBottomSheetContent(
|
||||
leadingContent = ListItemContent.Icon(
|
||||
iconSource = IconSource.Vector(CompoundIcons.MarkAsRead())
|
||||
),
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
} else {
|
||||
ListItem(
|
||||
@@ -133,7 +132,6 @@ private fun RoomListModalBottomSheetContent(
|
||||
leadingContent = ListItemContent.Icon(
|
||||
iconSource = IconSource.Vector(CompoundIcons.MarkAsUnread())
|
||||
),
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
}
|
||||
val (textResId, icon) = if (contextMenu.isFavorite) {
|
||||
@@ -159,7 +157,6 @@ private fun RoomListModalBottomSheetContent(
|
||||
onClick = {
|
||||
onFavoriteChange(!contextMenu.isFavorite)
|
||||
},
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
ListItem(
|
||||
headlineContent = {
|
||||
@@ -174,7 +171,6 @@ private fun RoomListModalBottomSheetContent(
|
||||
CompoundIcons.Settings(),
|
||||
)
|
||||
),
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
if (canReportRoom) {
|
||||
ListItem(
|
||||
@@ -211,7 +207,6 @@ private fun RoomListModalBottomSheetContent(
|
||||
leadingContent = ListItemContent.Icon(
|
||||
iconSource = IconSource.Vector(CompoundIcons.Delete())
|
||||
),
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="banner_battery_optimization_submit_android">"禁用优化"</string>
|
||||
<string name="banner_battery_optimization_title_android">"通知未送达?"</string>
|
||||
<string name="banner_new_sound_message">"通知提示音已升级:更清晰、更快速、干扰更少。"</string>
|
||||
<string name="banner_new_sound_title">"我们已更新你的声音"</string>
|
||||
<string name="banner_new_sound_title">"我们已更新提示音"</string>
|
||||
<string name="banner_set_up_recovery_content">"你的聊天已被端到端加密自动备份。如果你无法访问所有设备,则需要使用恢复密钥并保留数字身份。"</string>
|
||||
<string name="banner_set_up_recovery_submit">"获取恢复密钥"</string>
|
||||
<string name="banner_set_up_recovery_title">"备份聊天"</string>
|
||||
|
||||
+1
-1
@@ -249,7 +249,7 @@ private fun ActionListViewContent(
|
||||
leadingContent = ListItemContent.Icon(IconSource.Resource(action.icon)),
|
||||
style = when {
|
||||
action.destructive -> ListItemStyle.Destructive
|
||||
else -> ListItemStyle.Primary
|
||||
else -> ListItemStyle.Default
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
-8
@@ -34,7 +34,6 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||
import io.element.android.libraries.designsystem.theme.components.IconSource
|
||||
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||
import io.element.android.libraries.designsystem.theme.components.ListItemStyle
|
||||
import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet
|
||||
import io.element.android.libraries.designsystem.theme.components.Text
|
||||
|
||||
@@ -106,25 +105,21 @@ private fun AttachmentSourcePickerMenu(
|
||||
modifier = Modifier.clickable { state.eventSink(MessageComposerEvent.PickAttachmentSource.PhotoFromCamera) },
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.TakePhoto())),
|
||||
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_camera_photo)) },
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
ListItem(
|
||||
modifier = Modifier.clickable { state.eventSink(MessageComposerEvent.PickAttachmentSource.VideoFromCamera) },
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.VideoCall())),
|
||||
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_camera_video)) },
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
ListItem(
|
||||
modifier = Modifier.clickable { state.eventSink(MessageComposerEvent.PickAttachmentSource.FromGallery) },
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Image())),
|
||||
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_gallery)) },
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
ListItem(
|
||||
modifier = Modifier.clickable { state.eventSink(MessageComposerEvent.PickAttachmentSource.FromFiles) },
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Attachment())),
|
||||
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_files)) },
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
if (state.canShareLocation) {
|
||||
ListItem(
|
||||
@@ -134,7 +129,6 @@ private fun AttachmentSourcePickerMenu(
|
||||
},
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.LocationPin())),
|
||||
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_location)) },
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
}
|
||||
ListItem(
|
||||
@@ -144,14 +138,12 @@ private fun AttachmentSourcePickerMenu(
|
||||
},
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Polls())),
|
||||
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_poll)) },
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
if (enableTextFormatting) {
|
||||
ListItem(
|
||||
modifier = Modifier.clickable { state.eventSink(MessageComposerEvent.ToggleTextFormatting(enabled = true)) },
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.TextFormatting())),
|
||||
headlineContent = { Text(stringResource(R.string.screen_room_attachment_text_formatting)) },
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+69
-36
@@ -32,7 +32,11 @@ import io.element.android.compound.theme.ElementTheme
|
||||
import io.element.android.compound.tokens.generated.CompoundIcons
|
||||
import io.element.android.features.messages.impl.timeline.TimelineRoomInfo
|
||||
import io.element.android.features.messages.impl.timeline.aTimelineItemEvent
|
||||
import io.element.android.features.messages.impl.timeline.aTimelineItemReadReceipts
|
||||
import io.element.android.features.messages.impl.timeline.aTimelineRoomInfo
|
||||
import io.element.android.features.messages.impl.timeline.components.receipt.ReadReceiptViewState
|
||||
import io.element.android.features.messages.impl.timeline.components.receipt.TimelineItemReadReceiptView
|
||||
import io.element.android.features.messages.impl.timeline.components.receipt.aReadReceiptData
|
||||
import io.element.android.features.messages.impl.timeline.model.TimelineItem
|
||||
import io.element.android.features.messages.impl.timeline.model.event.RtcNotificationState
|
||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRtcNotificationContent
|
||||
@@ -48,46 +52,63 @@ internal fun TimelineItemCallNotifyView(
|
||||
timelineRoomInfo: TimelineRoomInfo,
|
||||
event: TimelineItem.Event,
|
||||
content: TimelineItemRtcNotificationContent,
|
||||
renderReadReceipts: Boolean,
|
||||
isLastOutgoingMessage: Boolean,
|
||||
onLongClick: (TimelineItem.Event) -> Unit,
|
||||
onReadReceiptsClick: (TimelineItem.Event) -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
Row(
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.border(1.dp, ElementTheme.colors.borderInteractiveSecondary, RoundedCornerShape(8.dp))
|
||||
.combinedClickable(
|
||||
enabled = true,
|
||||
onClick = {},
|
||||
onLongClick = { onLongClick(event) },
|
||||
onLongClickLabel = stringResource(CommonStrings.action_open_context_menu),
|
||||
Column(modifier = modifier) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(start = 16.dp, end = 16.dp, top = 16.dp)
|
||||
.border(1.dp, ElementTheme.colors.borderInteractiveSecondary, RoundedCornerShape(8.dp))
|
||||
.combinedClickable(
|
||||
enabled = true,
|
||||
onClick = {},
|
||||
onLongClick = { onLongClick(event) },
|
||||
onLongClickLabel = stringResource(CommonStrings.action_open_context_menu),
|
||||
)
|
||||
.onKeyboardContextMenuAction { onLongClick(event) }
|
||||
.padding(12.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.size(20.sp.toDp()),
|
||||
imageVector = getIcon(timelineRoomInfo, content),
|
||||
contentDescription = null,
|
||||
tint = ElementTheme.colors.iconSecondary,
|
||||
)
|
||||
.onKeyboardContextMenuAction { onLongClick(event) }
|
||||
.padding(12.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.size(20.sp.toDp()),
|
||||
imageVector = getIcon(timelineRoomInfo, content),
|
||||
contentDescription = null,
|
||||
tint = ElementTheme.colors.iconSecondary,
|
||||
)
|
||||
|
||||
Text(
|
||||
modifier = Modifier.weight(1f),
|
||||
text = stringResource(getTextRes(timelineRoomInfo, content)),
|
||||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
color = ElementTheme.colors.textSecondary,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
Text(
|
||||
modifier = Modifier.weight(1f),
|
||||
text = stringResource(getTextRes(timelineRoomInfo, content)),
|
||||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
color = ElementTheme.colors.textSecondary,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
|
||||
Text(
|
||||
text = event.sentTime,
|
||||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
color = ElementTheme.colors.textSecondary,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
Text(
|
||||
text = event.sentTime,
|
||||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
color = ElementTheme.colors.textSecondary,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
}
|
||||
|
||||
TimelineItemReadReceiptView(
|
||||
state = ReadReceiptViewState(
|
||||
sendState = event.localSendState,
|
||||
isLastOutgoingMessage = isLastOutgoingMessage,
|
||||
receipts = event.readReceiptState.receipts,
|
||||
),
|
||||
renderReadReceipts = renderReadReceipts,
|
||||
onReadReceiptsClick = { onReadReceiptsClick(event) },
|
||||
modifier = Modifier.padding(top = 4.dp),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -125,7 +146,10 @@ private fun getIcon(
|
||||
@PreviewsDayNight
|
||||
@Composable
|
||||
internal fun TimelineItemCallNotifyViewPreview() = ElementPreview {
|
||||
Column(modifier = Modifier.padding(2.dp), verticalArrangement = Arrangement.spacedBy(2.dp)) {
|
||||
val readReceiptState = aTimelineItemReadReceipts(
|
||||
receipts = List(3) { aReadReceiptData(it) },
|
||||
)
|
||||
Column(modifier = Modifier.padding(bottom = 16.dp)) {
|
||||
listOf(false, true).forEach { isDm ->
|
||||
listOf(CallIntent.AUDIO, CallIntent.VIDEO).forEach { callIntent ->
|
||||
listOf(
|
||||
@@ -136,9 +160,18 @@ internal fun TimelineItemCallNotifyViewPreview() = ElementPreview {
|
||||
val content = TimelineItemRtcNotificationContent(callIntent, state)
|
||||
TimelineItemCallNotifyView(
|
||||
timelineRoomInfo = aTimelineRoomInfo(isDm = isDm),
|
||||
event = aTimelineItemEvent(content = content),
|
||||
event = aTimelineItemEvent(
|
||||
content = content,
|
||||
readReceiptState = readReceiptState,
|
||||
),
|
||||
content = content,
|
||||
// Render read receipts for the first item only
|
||||
renderReadReceipts = !isDm &&
|
||||
callIntent == CallIntent.AUDIO &&
|
||||
state == RtcNotificationState.Started,
|
||||
isLastOutgoingMessage = false,
|
||||
onLongClick = {},
|
||||
onReadReceiptsClick = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -124,11 +124,13 @@ internal fun TimelineItemRow(
|
||||
}
|
||||
is TimelineItemRtcNotificationContent -> {
|
||||
TimelineItemCallNotifyView(
|
||||
modifier = Modifier.padding(start = 16.dp, end = 16.dp, top = 16.dp),
|
||||
timelineRoomInfo = timelineRoomInfo,
|
||||
event = timelineItem,
|
||||
content = timelineItem.content,
|
||||
renderReadReceipts = renderReadReceipts,
|
||||
isLastOutgoingMessage = isLastOutgoingMessage,
|
||||
onLongClick = onLongClick,
|
||||
onReadReceiptsClick = onReadReceiptClick,
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
<string name="emoji_picker_category_places">"Reisimine ja kohad"</string>
|
||||
<string name="emoji_picker_category_recent">"Hiljutised emojid"</string>
|
||||
<string name="emoji_picker_category_symbols">"Sümbolid"</string>
|
||||
<string name="screen_image_edition_a11y_rotate_to_the_left">"Pööra pilti vasakule"</string>
|
||||
<plurals name="screen_image_edition_a11y_rotation_state">
|
||||
<item quantity="one">"%1$d kraad"</item>
|
||||
<item quantity="other">"%1$d kraadi"</item>
|
||||
</plurals>
|
||||
<string name="screen_image_edition_title">"Muuda fotot"</string>
|
||||
<string name="screen_media_upload_preview_caption_warning">"Selgitused ja alapealkirjad ei pruugi olla nähtavad vanemate rakenduste kasutajatele."</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"Klõpsa üleslaaditava video kvaliteedi muutmiseks"</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"Faili üleslaadimine ei õnnestunud."</string>
|
||||
@@ -26,6 +32,7 @@
|
||||
<string name="screen_media_upload_preview_item_count">"Objekt %1$d/%2$d"</string>
|
||||
<string name="screen_media_upload_preview_optimize_image_quality_title">"Optimeeri pildikvaliteeti"</string>
|
||||
<string name="screen_media_upload_preview_processing">"Töötlen…"</string>
|
||||
<string name="screen_media_upload_preview_title">"Lisa meediumi"</string>
|
||||
<string name="screen_report_content_block_user">"Blokeeri kasutaja"</string>
|
||||
<string name="screen_report_content_block_user_hint">"Vali see eelistus, kui sa soovid peita selle kasutaja kõik senised ja tulevased sõnumid"</string>
|
||||
<string name="screen_report_content_explanation">"Teade selle sõnumi kohta edastatakse sinu koduserveri haldajale. Haldajal ei ole võimalik lugeda krüptitud sõnumite sisu."</string>
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
<string name="emoji_picker_category_places">"Matkustaminen ja paikat"</string>
|
||||
<string name="emoji_picker_category_recent">"Viimeaikaiset emojit"</string>
|
||||
<string name="emoji_picker_category_symbols">"Symbolit"</string>
|
||||
<plurals name="screen_image_edition_a11y_rotation_state">
|
||||
<item quantity="one">"%1$d aste"</item>
|
||||
<item quantity="other">"%1$d astetta"</item>
|
||||
</plurals>
|
||||
<string name="screen_media_upload_preview_caption_warning">"Kuvatekstit eivät välttämättä näy ihmisille, jotka käyttävät vanhempia sovelluksia."</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"Napauta muuttaaksesi videon lähetyslaatua"</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"Tiedostoa ei voitu lähettää."</string>
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
<string name="emoji_picker_category_places">"Voyages & lieux"</string>
|
||||
<string name="emoji_picker_category_recent">"Emojis récents"</string>
|
||||
<string name="emoji_picker_category_symbols">"Symboles"</string>
|
||||
<plurals name="screen_image_edition_a11y_rotation_state">
|
||||
<item quantity="one">"%1$d degré"</item>
|
||||
<item quantity="other">"%1$d degrés"</item>
|
||||
</plurals>
|
||||
<string name="screen_media_upload_preview_caption_warning">"Les légendes peuvent ne pas être visibles pour les utilisateurs d’anciennes applications."</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"Cliquez pour modifier la qualité d’envoi de la vidéo"</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"Le fichier n’a pas pu être envoyé."</string>
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
<string name="emoji_picker_category_places">"旅・場所"</string>
|
||||
<string name="emoji_picker_category_recent">"最近使用"</string>
|
||||
<string name="emoji_picker_category_symbols">"記号"</string>
|
||||
<string name="screen_image_edition_a11y_rotate_to_the_left">"画像を左に回転"</string>
|
||||
<plurals name="screen_image_edition_a11y_rotation_state">
|
||||
<item quantity="other">"%1$d°"</item>
|
||||
</plurals>
|
||||
<string name="screen_image_edition_title">"写真を編集"</string>
|
||||
<string name="screen_media_upload_preview_caption_warning">"古いアプリケーションを使用しているユーザーはキャプションを見られない可能性があります。"</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"動画のアップロード画質を変更するにはタップしてください"</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"ファイルをアップロードに失敗しました。"</string>
|
||||
|
||||
@@ -16,6 +16,13 @@
|
||||
<string name="emoji_picker_category_places">"Podróż i miejsca"</string>
|
||||
<string name="emoji_picker_category_recent">"Ostatnie emoji"</string>
|
||||
<string name="emoji_picker_category_symbols">"Symbole"</string>
|
||||
<string name="screen_image_edition_a11y_rotate_to_the_left">"Obróć obraz w lewo"</string>
|
||||
<plurals name="screen_image_edition_a11y_rotation_state">
|
||||
<item quantity="one">"%1$d stopień"</item>
|
||||
<item quantity="few">"%1$d stopnie"</item>
|
||||
<item quantity="many">"%1$d stopni"</item>
|
||||
</plurals>
|
||||
<string name="screen_image_edition_title">"Edytuj zdjęcie"</string>
|
||||
<string name="screen_media_upload_preview_caption_warning">"Opis może być niedostępny dla osób korzystających ze starszej wersji aplikacji."</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"Dotknij, aby zmienić jakość przesyłania wideo."</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"Nie udało się przesłać pliku."</string>
|
||||
|
||||
@@ -16,6 +16,13 @@
|
||||
<string name="emoji_picker_category_places">"Путешествия и места"</string>
|
||||
<string name="emoji_picker_category_recent">"Недавние эмодзи"</string>
|
||||
<string name="emoji_picker_category_symbols">"Символы"</string>
|
||||
<string name="screen_image_edition_a11y_rotate_to_the_left">"Повернуть изображение влево."</string>
|
||||
<plurals name="screen_image_edition_a11y_rotation_state">
|
||||
<item quantity="one">"%1$d градус"</item>
|
||||
<item quantity="few">"%1$d градуса"</item>
|
||||
<item quantity="many">"%1$d градусов"</item>
|
||||
</plurals>
|
||||
<string name="screen_image_edition_title">"Редактировать фото"</string>
|
||||
<string name="screen_media_upload_preview_caption_warning">"Подпись может быть не видна пользователям старых приложений."</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"Нажмите, чтобы изменить качество загружаемого видео."</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"Файл не может быть загружен."</string>
|
||||
@@ -26,6 +33,7 @@
|
||||
<string name="screen_media_upload_preview_item_count">"%1$d из %2$d"</string>
|
||||
<string name="screen_media_upload_preview_optimize_image_quality_title">"Оптимизировать качество изображения"</string>
|
||||
<string name="screen_media_upload_preview_processing">"Обработка…"</string>
|
||||
<string name="screen_media_upload_preview_title">"Добавить медиа"</string>
|
||||
<string name="screen_report_content_block_user">"Заблокировать пользователя"</string>
|
||||
<string name="screen_report_content_block_user_hint">"Отметьте, хотите ли вы скрыть все текущие и будущие сообщения от этого пользователя"</string>
|
||||
<string name="screen_report_content_explanation">"Это сообщение будет передано администратору вашего домашнего сервера. Они не смогут прочитать зашифрованные сообщения."</string>
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
<string name="emoji_picker_category_places">"文旅景点"</string>
|
||||
<string name="emoji_picker_category_recent">"最近的 Emoji"</string>
|
||||
<string name="emoji_picker_category_symbols">"符号"</string>
|
||||
<string name="screen_image_edition_a11y_rotate_to_the_left">"向左旋转图像"</string>
|
||||
<plurals name="screen_image_edition_a11y_rotation_state">
|
||||
<item quantity="other">"%1$d 度"</item>
|
||||
</plurals>
|
||||
<string name="screen_image_edition_title">"编辑照片"</string>
|
||||
<string name="screen_media_upload_preview_caption_warning">"使用旧版应用程序的用户可能无法看到字幕。"</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"点按以更改视频上传质量"</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"无法上传该文件。"</string>
|
||||
|
||||
+4
-4
@@ -286,7 +286,7 @@ private fun SoundsPreferenceCategory(state: NotificationSettingsState) {
|
||||
type = RingtoneManager.TYPE_NOTIFICATION,
|
||||
current = state.messageSound.sound,
|
||||
defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI,
|
||||
onSoundPicked = { sound -> state.eventSink(NotificationSettingsEvents.SetMessageSound(sound)) },
|
||||
onSoundPick = { sound -> state.eventSink(NotificationSettingsEvents.SetMessageSound(sound)) },
|
||||
)
|
||||
// Skip the initial 0 emission so the picker doesn't auto-open on screen entry; only
|
||||
// increments fired by LaunchMessageSoundPicker should launch it.
|
||||
@@ -313,7 +313,7 @@ private fun SoundsPreferenceCategory(state: NotificationSettingsState) {
|
||||
type = RingtoneManager.TYPE_RINGTONE,
|
||||
current = state.callRingtone.sound,
|
||||
defaultUri = Settings.System.DEFAULT_RINGTONE_URI,
|
||||
onSoundPicked = { sound -> state.eventSink(NotificationSettingsEvents.SetCallRingtone(sound)) },
|
||||
onSoundPick = { sound -> state.eventSink(NotificationSettingsEvents.SetCallRingtone(sound)) },
|
||||
)
|
||||
// Skip the initial 0 emission so the picker doesn't auto-open on screen entry; only
|
||||
// increments fired by LaunchCallRingtonePicker should launch it.
|
||||
@@ -441,7 +441,7 @@ private fun rememberSoundPickerOnClick(
|
||||
type: Int,
|
||||
current: NotificationSound,
|
||||
defaultUri: Uri,
|
||||
onSoundPicked: (NotificationSound) -> Unit,
|
||||
onSoundPick: (NotificationSound) -> Unit,
|
||||
): () -> Unit {
|
||||
// Paparazzi previews don't provide a LocalActivityResultRegistryOwner, which
|
||||
// rememberLauncherForActivityResult requires. Skip the launcher in inspection mode and
|
||||
@@ -453,7 +453,7 @@ private fun rememberSoundPickerOnClick(
|
||||
if (result.resultCode == Activity.RESULT_OK) {
|
||||
val sound = result.data?.toPickedNotificationSound(defaultUri)
|
||||
if (sound != null) {
|
||||
onSoundPicked(sound)
|
||||
onSoundPick(sound)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
<string name="screen_labs_header_title">"Kas tahad katsetada?"</string>
|
||||
<string name="screen_labs_title">"Katsed"</string>
|
||||
<string name="screen_notification_settings_additional_settings_section_title">"Täiendavad seadistused"</string>
|
||||
<string name="screen_notification_settings_call_ringtone_label">"Kõne helin"</string>
|
||||
<string name="screen_notification_settings_calls_label">"Hääl- ja videokõned"</string>
|
||||
<string name="screen_notification_settings_configuration_mismatch">"Eelistused ei sobi omavahel"</string>
|
||||
<string name="screen_notification_settings_configuration_mismatch_description">"Et eelistusi oleks kergem leida, me oleme lihtsustanud teavituste seadistusi. Kuigi mõned varem valitud eelistused pole siin näha, siis nad kehtivad jätkuvalt.
|
||||
@@ -76,10 +77,52 @@ Kui sa jätkad muutmist, siis võivad muutuda ka need peidetud eelistused."</str
|
||||
<string name="screen_notification_settings_invite_for_me_label">"Kutsed"</string>
|
||||
<string name="screen_notification_settings_mentions_only_disclaimer">"Sinu koduserver ei toeta seda funktsionaalsust krüptitud jututubades ja seega ei pruugi kõik teavitused sinuni jõuda."</string>
|
||||
<string name="screen_notification_settings_mentions_section_title">"Mainimiste alusel"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_choose_other">"Vali muu helin…"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_current_subtitle">"Hetkel on kasutusel %1$s"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_title">"Sõnumi heli"</string>
|
||||
<string name="screen_notification_settings_message_sound_label">"Sõnumi heli"</string>
|
||||
<string name="screen_notification_settings_mode_all">"Kõik"</string>
|
||||
<string name="screen_notification_settings_mode_mentions">"Mainimiste alusel"</string>
|
||||
<string name="screen_notification_settings_notification_section_title">"Teavita mind"</string>
|
||||
<string name="screen_notification_settings_room_mention_label">"Teavita mind @jututoa puhul"</string>
|
||||
<string name="screen_notification_settings_sound_custom_fallback">"Kohandatud"</string>
|
||||
<string name="screen_notification_settings_sound_custom_sound_button_title">"Sinu valitud helin…"</string>
|
||||
<string name="screen_notification_settings_sound_delete_sound_error_title">"Viga faili kustutamisel"</string>
|
||||
<string name="screen_notification_settings_sound_element_default">"Elementi vaikimisi väärtus"</string>
|
||||
<string name="screen_notification_settings_sound_element_fade">"Elemendi hajumine"</string>
|
||||
<string name="screen_notification_settings_sound_import_sound_error_title">"Viga faili importimisel"</string>
|
||||
<string name="screen_notification_settings_sound_preview_sound_error_title">"Viga helina eelvaate esitamisel"</string>
|
||||
<string name="screen_notification_settings_sound_section_title">"Helin"</string>
|
||||
<string name="screen_notification_settings_sound_set_sound_error_dismiss_a11y">"Sulge helinavea viga"</string>
|
||||
<string name="screen_notification_settings_sound_set_sound_error_title">"Viga helina seadistamisel"</string>
|
||||
<string name="screen_notification_settings_sound_silent">"Vaikne"</string>
|
||||
<string name="screen_notification_settings_sound_system_alert">"Hoiatus"</string>
|
||||
<string name="screen_notification_settings_sound_system_anticipate">"Ootus"</string>
|
||||
<string name="screen_notification_settings_sound_system_bell">"Kelluke"</string>
|
||||
<string name="screen_notification_settings_sound_system_bloom">"Õitsemine"</string>
|
||||
<string name="screen_notification_settings_sound_system_calypso">"Kalüpso"</string>
|
||||
<string name="screen_notification_settings_sound_system_chime">"Kellamäng"</string>
|
||||
<string name="screen_notification_settings_sound_system_choo_choo">"Tšuhh-tšuhh"</string>
|
||||
<string name="screen_notification_settings_sound_system_default">"Süsteemi vaikimisi väärtus"</string>
|
||||
<string name="screen_notification_settings_sound_system_descent">"Laskumine"</string>
|
||||
<string name="screen_notification_settings_sound_system_electronic">"Elektrooniline"</string>
|
||||
<string name="screen_notification_settings_sound_system_fanfare">"Tuututamine"</string>
|
||||
<string name="screen_notification_settings_sound_system_glass">"Klaas"</string>
|
||||
<string name="screen_notification_settings_sound_system_horn">"Pasun"</string>
|
||||
<string name="screen_notification_settings_sound_system_ladder">"Redel"</string>
|
||||
<string name="screen_notification_settings_sound_system_minuet">"Menuett"</string>
|
||||
<string name="screen_notification_settings_sound_system_news_flash">"Uudisvälgatus"</string>
|
||||
<string name="screen_notification_settings_sound_system_noir">"Sünge"</string>
|
||||
<string name="screen_notification_settings_sound_system_sherwood_forest">"Sherwoodi mets"</string>
|
||||
<string name="screen_notification_settings_sound_system_spell">"Loits"</string>
|
||||
<string name="screen_notification_settings_sound_system_suspense">"Põnevus"</string>
|
||||
<string name="screen_notification_settings_sound_system_swish">"Vihin-vuhin"</string>
|
||||
<string name="screen_notification_settings_sound_system_telegraph">"Telegraaf"</string>
|
||||
<string name="screen_notification_settings_sound_system_tiptoes">"Kikivarvul"</string>
|
||||
<string name="screen_notification_settings_sound_system_tri_tone">"Kolmetooniline"</string>
|
||||
<string name="screen_notification_settings_sound_system_tweet">"Säuts"</string>
|
||||
<string name="screen_notification_settings_sound_system_typewriters">"Kirjutusmasinad"</string>
|
||||
<string name="screen_notification_settings_sound_system_update">"Uuenda"</string>
|
||||
<string name="screen_notification_settings_system_notifications_action_required">"Teavituste saamiseks palun muuda oma %1$s."</string>
|
||||
<string name="screen_notification_settings_system_notifications_action_required_content_link">"süsteemi seadistusi"</string>
|
||||
<string name="screen_notification_settings_system_notifications_turned_off">"Süsteemi teavitused on välja lülitatud"</string>
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
<string name="screen_labs_header_title">"Chcesz poeksperymentować?"</string>
|
||||
<string name="screen_labs_title">"Laboratoria"</string>
|
||||
<string name="screen_notification_settings_additional_settings_section_title">"Dodatkowe ustawienia"</string>
|
||||
<string name="screen_notification_settings_call_ringtone_label">"Dzwonek połączenia"</string>
|
||||
<string name="screen_notification_settings_calls_label">"Połączenia audio i wideo"</string>
|
||||
<string name="screen_notification_settings_configuration_mismatch">"Niezgodność konfiguracji"</string>
|
||||
<string name="screen_notification_settings_configuration_mismatch_description">"Uprościliśmy Ustawienia powiadomień, aby ułatwić nawigowanie między opcjami. Niektóre ustawienia, które wybrałeś mogły zniknąć, lecz są wciąż aktywne.
|
||||
@@ -77,10 +78,15 @@ Niektóre ustawienia mogą ulec zmianie, jeśli kontynuujesz."</string>
|
||||
<string name="screen_notification_settings_invite_for_me_label">"Zaproszenia"</string>
|
||||
<string name="screen_notification_settings_mentions_only_disclaimer">"Twój serwer domowy nie wspiera tej opcji w pokojach szyfrowanych, możesz nie otrzymać powiadomień z niektórych pokoi."</string>
|
||||
<string name="screen_notification_settings_mentions_section_title">"Wzmianki"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_choose_other">"Wybierz inny dźwięk…"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_current_subtitle">"Aktualnie używany %1$s"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_title">"Dźwięk wiadomości"</string>
|
||||
<string name="screen_notification_settings_message_sound_label">"Dźwięk wiadomości"</string>
|
||||
<string name="screen_notification_settings_mode_all">"Wszystkie"</string>
|
||||
<string name="screen_notification_settings_mode_mentions">"Wzmianki"</string>
|
||||
<string name="screen_notification_settings_notification_section_title">"Powiadamiaj mnie przez"</string>
|
||||
<string name="screen_notification_settings_room_mention_label">"Powiadom mnie na @pokój"</string>
|
||||
<string name="screen_notification_settings_sound_custom_fallback">"Własny"</string>
|
||||
<string name="screen_notification_settings_sound_custom_sound_button_title">"Własny dźwięk…"</string>
|
||||
<string name="screen_notification_settings_sound_delete_sound_error_title">"Błąd usuwania pliku"</string>
|
||||
<string name="screen_notification_settings_sound_element_default">"Domyślny Element"</string>
|
||||
@@ -88,7 +94,9 @@ Niektóre ustawienia mogą ulec zmianie, jeśli kontynuujesz."</string>
|
||||
<string name="screen_notification_settings_sound_import_sound_error_title">"Błąd importowania pliku"</string>
|
||||
<string name="screen_notification_settings_sound_preview_sound_error_title">"Wystąpił błąd podczas podglądania dźwięku powiadomień"</string>
|
||||
<string name="screen_notification_settings_sound_section_title">"Dźwięk"</string>
|
||||
<string name="screen_notification_settings_sound_set_sound_error_dismiss_a11y">"Pomiń dźwięk błędu"</string>
|
||||
<string name="screen_notification_settings_sound_set_sound_error_title">"Nie udało się ustawić dźwięku powiadomień"</string>
|
||||
<string name="screen_notification_settings_sound_silent">"Cichy"</string>
|
||||
<string name="screen_notification_settings_sound_system_alert">"Alert"</string>
|
||||
<string name="screen_notification_settings_sound_system_anticipate">"Oczekiwanie"</string>
|
||||
<string name="screen_notification_settings_sound_system_bell">"Dzwonek"</string>
|
||||
@@ -96,6 +104,7 @@ Niektóre ustawienia mogą ulec zmianie, jeśli kontynuujesz."</string>
|
||||
<string name="screen_notification_settings_sound_system_calypso">"Kalipso"</string>
|
||||
<string name="screen_notification_settings_sound_system_chime">"Gong"</string>
|
||||
<string name="screen_notification_settings_sound_system_choo_choo">"Ciuchcia"</string>
|
||||
<string name="screen_notification_settings_sound_system_default">"Ustawienie domyślne"</string>
|
||||
<string name="screen_notification_settings_sound_system_descent">"Opadający"</string>
|
||||
<string name="screen_notification_settings_sound_system_electronic">"Elektroniczna"</string>
|
||||
<string name="screen_notification_settings_sound_system_fanfare">"Fanfary"</string>
|
||||
|
||||
@@ -81,6 +81,39 @@
|
||||
<string name="screen_notification_settings_mode_mentions">"Упоминания"</string>
|
||||
<string name="screen_notification_settings_notification_section_title">"Уведомлять меня"</string>
|
||||
<string name="screen_notification_settings_room_mention_label">"Уведомлять меня при упоминании @room"</string>
|
||||
<string name="screen_notification_settings_sound_custom_sound_button_title">"Пользовательский звук…"</string>
|
||||
<string name="screen_notification_settings_sound_delete_sound_error_title">"Ошибка при удалении файла"</string>
|
||||
<string name="screen_notification_settings_sound_element_default">"Element по умолчанию"</string>
|
||||
<string name="screen_notification_settings_sound_import_sound_error_title">"Ошибка импорта файла"</string>
|
||||
<string name="screen_notification_settings_sound_preview_sound_error_title">"Ошибка предварительного прослушиванием звука"</string>
|
||||
<string name="screen_notification_settings_sound_section_title">"Звук"</string>
|
||||
<string name="screen_notification_settings_sound_set_sound_error_title">"Проблема с настройкой звукового оповещения"</string>
|
||||
<string name="screen_notification_settings_sound_system_alert">"Оповещение"</string>
|
||||
<string name="screen_notification_settings_sound_system_anticipate">"Anticipate"</string>
|
||||
<string name="screen_notification_settings_sound_system_bell">"Bell"</string>
|
||||
<string name="screen_notification_settings_sound_system_bloom">"Bloom"</string>
|
||||
<string name="screen_notification_settings_sound_system_calypso">"Calypso"</string>
|
||||
<string name="screen_notification_settings_sound_system_chime">"Chime"</string>
|
||||
<string name="screen_notification_settings_sound_system_choo_choo">"Choo Choo"</string>
|
||||
<string name="screen_notification_settings_sound_system_descent">"Descent"</string>
|
||||
<string name="screen_notification_settings_sound_system_electronic">"Electronic"</string>
|
||||
<string name="screen_notification_settings_sound_system_fanfare">"Fanfare"</string>
|
||||
<string name="screen_notification_settings_sound_system_glass">"Glass"</string>
|
||||
<string name="screen_notification_settings_sound_system_horn">"Horn"</string>
|
||||
<string name="screen_notification_settings_sound_system_ladder">"Ladder"</string>
|
||||
<string name="screen_notification_settings_sound_system_minuet">"Minuet"</string>
|
||||
<string name="screen_notification_settings_sound_system_news_flash">"News Flash"</string>
|
||||
<string name="screen_notification_settings_sound_system_noir">"Noir"</string>
|
||||
<string name="screen_notification_settings_sound_system_sherwood_forest">"Sherwood Forest"</string>
|
||||
<string name="screen_notification_settings_sound_system_spell">"Spell"</string>
|
||||
<string name="screen_notification_settings_sound_system_suspense">"Suspense"</string>
|
||||
<string name="screen_notification_settings_sound_system_swish">"Swish"</string>
|
||||
<string name="screen_notification_settings_sound_system_telegraph">"Telegraph"</string>
|
||||
<string name="screen_notification_settings_sound_system_tiptoes">"Tiptoes"</string>
|
||||
<string name="screen_notification_settings_sound_system_tri_tone">"Tri-tone"</string>
|
||||
<string name="screen_notification_settings_sound_system_tweet">"Tweet"</string>
|
||||
<string name="screen_notification_settings_sound_system_typewriters">"Typewriters"</string>
|
||||
<string name="screen_notification_settings_sound_system_update">"Обновить"</string>
|
||||
<string name="screen_notification_settings_system_notifications_action_required">"Чтобы получать уведомления, измените %1$s."</string>
|
||||
<string name="screen_notification_settings_system_notifications_action_required_content_link">"системные настройки"</string>
|
||||
<string name="screen_notification_settings_system_notifications_turned_off">"Системные уведомления выключены"</string>
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
<string name="screen_labs_header_title">"想尝试新功能?"</string>
|
||||
<string name="screen_labs_title">"实验室"</string>
|
||||
<string name="screen_notification_settings_additional_settings_section_title">"更多设置"</string>
|
||||
<string name="screen_notification_settings_call_ringtone_label">"来电铃声"</string>
|
||||
<string name="screen_notification_settings_calls_label">"音视频通话"</string>
|
||||
<string name="screen_notification_settings_configuration_mismatch">"配置不匹配"</string>
|
||||
<string name="screen_notification_settings_configuration_mismatch_description">"我们简化了通知设置,使选项更易于查找。你曾经选择的某些自定义设置未在此处显示,但它们仍然有效。
|
||||
@@ -75,18 +76,25 @@
|
||||
<string name="screen_notification_settings_invite_for_me_label">"邀请"</string>
|
||||
<string name="screen_notification_settings_mentions_only_disclaimer">"主服务器不支持在加密房间中的此选项,因此在某些房间你可能无法收到通知。"</string>
|
||||
<string name="screen_notification_settings_mentions_section_title">"提及"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_choose_other">"选择其它提示音…"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_current_subtitle">"当前正在使用 %1$s"</string>
|
||||
<string name="screen_notification_settings_message_sound_dialog_title">"消息提示音"</string>
|
||||
<string name="screen_notification_settings_message_sound_label">"消息提示音"</string>
|
||||
<string name="screen_notification_settings_mode_all">"全部"</string>
|
||||
<string name="screen_notification_settings_mode_mentions">"提及"</string>
|
||||
<string name="screen_notification_settings_notification_section_title">"通知我以下类型"</string>
|
||||
<string name="screen_notification_settings_room_mention_label">"提及所有成员(@room)时通知我"</string>
|
||||
<string name="screen_notification_settings_sound_custom_sound_button_title">"自定义声音…"</string>
|
||||
<string name="screen_notification_settings_sound_custom_fallback">"自定义"</string>
|
||||
<string name="screen_notification_settings_sound_custom_sound_button_title">"自定义提示音…"</string>
|
||||
<string name="screen_notification_settings_sound_delete_sound_error_title">"删除文件时出错"</string>
|
||||
<string name="screen_notification_settings_sound_element_default">"Element 默认"</string>
|
||||
<string name="screen_notification_settings_sound_element_fade">"Element 淡入"</string>
|
||||
<string name="screen_notification_settings_sound_import_sound_error_title">"导入文件时出错"</string>
|
||||
<string name="screen_notification_settings_sound_preview_sound_error_title">"预览提示音时出现问题"</string>
|
||||
<string name="screen_notification_settings_sound_section_title">"声音"</string>
|
||||
<string name="screen_notification_settings_sound_section_title">"提示音"</string>
|
||||
<string name="screen_notification_settings_sound_set_sound_error_dismiss_a11y">"忽略提示音错误"</string>
|
||||
<string name="screen_notification_settings_sound_set_sound_error_title">"设置提示音时出现问题"</string>
|
||||
<string name="screen_notification_settings_sound_silent">"静默"</string>
|
||||
<string name="screen_notification_settings_sound_system_alert">"提醒声"</string>
|
||||
<string name="screen_notification_settings_sound_system_anticipate">"悉心期盼"</string>
|
||||
<string name="screen_notification_settings_sound_system_bell">"铃铛"</string>
|
||||
@@ -94,6 +102,7 @@
|
||||
<string name="screen_notification_settings_sound_system_calypso">"即兴曲调"</string>
|
||||
<string name="screen_notification_settings_sound_system_chime">"风铃"</string>
|
||||
<string name="screen_notification_settings_sound_system_choo_choo">"火车鸣笛"</string>
|
||||
<string name="screen_notification_settings_sound_system_default">"系统默认"</string>
|
||||
<string name="screen_notification_settings_sound_system_descent">"渐弱"</string>
|
||||
<string name="screen_notification_settings_sound_system_electronic">"电子乐"</string>
|
||||
<string name="screen_notification_settings_sound_system_fanfare">"嘹亮吹奏声"</string>
|
||||
|
||||
+2
@@ -20,6 +20,7 @@ interface BugReporter {
|
||||
* @param problemDescription the bug description
|
||||
* @param canContact true if the user opt in to be contacted directly
|
||||
* @param sendPushRules true to include the push rules
|
||||
* @param ghIssueNumber it not null, the GitHub issue number to link the bug report to.
|
||||
* @param listener the listener
|
||||
*/
|
||||
suspend fun sendBugReport(
|
||||
@@ -29,6 +30,7 @@ interface BugReporter {
|
||||
problemDescription: String,
|
||||
canContact: Boolean = false,
|
||||
sendPushRules: Boolean = false,
|
||||
ghIssueNumber: Int? = null,
|
||||
listener: BugReporterListener
|
||||
)
|
||||
|
||||
|
||||
+1
@@ -18,4 +18,5 @@ sealed interface BugReportEvents {
|
||||
data class SetCanContact(val canContact: Boolean) : BugReportEvents
|
||||
data class SetSendScreenshot(val sendScreenshot: Boolean) : BugReportEvents
|
||||
data class SetSendPushRules(val sendPushRules: Boolean) : BugReportEvents
|
||||
data class SetGhIssueNumber(val ghIssueNumber: Int?) : BugReportEvents
|
||||
}
|
||||
|
||||
+5
-1
@@ -113,6 +113,9 @@ class BugReportPresenter(
|
||||
sendingProgress.floatValue = 0f
|
||||
sendingAction.value = AsyncAction.Uninitialized
|
||||
}
|
||||
is BugReportEvents.SetGhIssueNumber -> updateFormState(formState) {
|
||||
copy(ghIssueNumber = event.ghIssueNumber)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,7 +145,8 @@ class BugReportPresenter(
|
||||
problemDescription = formState.description,
|
||||
canContact = formState.canContact,
|
||||
sendPushRules = formState.sendPushRules,
|
||||
listener = listener
|
||||
ghIssueNumber = formState.ghIssueNumber,
|
||||
listener = listener,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -32,6 +32,7 @@ data class BugReportFormState(
|
||||
val canContact: Boolean,
|
||||
val sendScreenshot: Boolean,
|
||||
val sendPushRules: Boolean,
|
||||
val ghIssueNumber: Int?,
|
||||
) : Parcelable {
|
||||
companion object {
|
||||
val Default = BugReportFormState(
|
||||
@@ -40,6 +41,7 @@ data class BugReportFormState(
|
||||
canContact = false,
|
||||
sendScreenshot = false,
|
||||
sendPushRules = false,
|
||||
ghIssueNumber = null,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+43
@@ -34,6 +34,7 @@ import androidx.compose.ui.unit.dp
|
||||
import coil3.compose.AsyncImage
|
||||
import coil3.request.CachePolicy
|
||||
import coil3.request.ImageRequest
|
||||
import io.element.android.compound.theme.ElementTheme
|
||||
import io.element.android.features.rageshake.impl.R
|
||||
import io.element.android.libraries.architecture.AsyncAction
|
||||
import io.element.android.libraries.designsystem.components.async.AsyncActionView
|
||||
@@ -155,6 +156,48 @@ fun BugReportView(
|
||||
title = stringResource(R.string.screen_bug_report_send_notification_settings_title),
|
||||
subtitle = stringResource(R.string.screen_bug_report_send_notification_settings_description),
|
||||
)
|
||||
PreferenceRow {
|
||||
var ghIssueNumberState by textFieldState(
|
||||
stateValue = state.formState.ghIssueNumber?.toString() ?: ""
|
||||
)
|
||||
TextField(
|
||||
value = ghIssueNumberState,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.onTabOrEnterKeyFocusNext(LocalFocusManager.current),
|
||||
enabled = isFormEnabled,
|
||||
label = stringResource(id = R.string.screen_bug_report_github_issue_label),
|
||||
placeholder = "1234",
|
||||
supportingText = stringResource(id = R.string.screen_bug_report_github_issue_description),
|
||||
leadingIcon = {
|
||||
Text(
|
||||
text = "#",
|
||||
style = ElementTheme.typography.fontBodyLgMedium,
|
||||
color = ElementTheme.colors.textSecondary,
|
||||
)
|
||||
},
|
||||
onValueChange = {
|
||||
if (it.isEmpty()) {
|
||||
ghIssueNumberState = ""
|
||||
eventSink(BugReportEvents.SetGhIssueNumber(null))
|
||||
} else {
|
||||
val number = it.toIntOrNull()?.takeIf { ghInt -> ghInt in 1..99_999 }
|
||||
number?.let { ghIssueNumber ->
|
||||
ghIssueNumberState = ghIssueNumber.toString()
|
||||
eventSink(BugReportEvents.SetGhIssueNumber(ghIssueNumber))
|
||||
}
|
||||
}
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(
|
||||
keyboardType = KeyboardType.Number,
|
||||
imeAction = ImeAction.Next,
|
||||
),
|
||||
keyboardActions = KeyboardActions(onNext = {
|
||||
keyboardController?.hide()
|
||||
}),
|
||||
singleLine = true,
|
||||
)
|
||||
}
|
||||
// Submit
|
||||
PreferenceRow {
|
||||
Button(
|
||||
|
||||
+4
@@ -123,6 +123,7 @@ class DefaultBugReporter(
|
||||
problemDescription: String,
|
||||
canContact: Boolean,
|
||||
sendPushRules: Boolean,
|
||||
ghIssueNumber: Int?,
|
||||
listener: BugReporterListener,
|
||||
) {
|
||||
val url = bugReporterUrlProvider.provide().first()
|
||||
@@ -144,6 +145,9 @@ class DefaultBugReporter(
|
||||
val crashCallStack = crashDataStore.crashInfo().first()
|
||||
val bugDescription = buildString {
|
||||
append(problemDescription)
|
||||
ghIssueNumber?.let {
|
||||
append("\n\nhttps://github.com/element-hq/element-x-android/issues/$it")
|
||||
}
|
||||
if (crashCallStack.isNotEmpty() && withCrashLogs) {
|
||||
append("\n\n\n\n--------------------------------- crash call stack ---------------------------------\n")
|
||||
append(crashCallStack)
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
<string name="screen_bug_report_editor_placeholder">"Palun kirjelda probleemi…"</string>
|
||||
<string name="screen_bug_report_editor_supporting">"Kui vähegi võimalik, siis kirjuta inglise keeles."</string>
|
||||
<string name="screen_bug_report_error_description_too_short">"Kirjeldus on liiga lühike. Palun jaga täpsemat teavet selle kohta, mis juhtus. Tänud juba ette!"</string>
|
||||
<string name="screen_bug_report_github_issue_description">"Võid sisestada seotud GitHubi veateate numbri, kui see on olemas."</string>
|
||||
<string name="screen_bug_report_github_issue_label">"Veateade GitHubis"</string>
|
||||
<string name="screen_bug_report_include_crash_logs">"Saada krahhilogid"</string>
|
||||
<string name="screen_bug_report_include_logs">"Luba logide saatmine"</string>
|
||||
<string name="screen_bug_report_include_logs_error">"Sinu logid on väga mahukad ja neid ei saa siia lisada. Palun saada logid meile mõnel muul viisil."</string>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<string name="screen_bug_report_editor_placeholder">"描述问题…"</string>
|
||||
<string name="screen_bug_report_editor_supporting">"请尽可能用英文描述。"</string>
|
||||
<string name="screen_bug_report_error_description_too_short">"描述太短,请提供详细情况。谢谢!"</string>
|
||||
<string name="screen_bug_report_github_issue_description">"你可以输入与之相关的 GitHub issue 编号(如果有)。"</string>
|
||||
<string name="screen_bug_report_include_crash_logs">"发送崩溃日志"</string>
|
||||
<string name="screen_bug_report_include_logs">"允许日志"</string>
|
||||
<string name="screen_bug_report_include_logs_error">"日志文件过大,无法包含在本次报告中,请通过其它方式发送给我们。"</string>
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
<string name="screen_bug_report_editor_placeholder">"Describe the problem…"</string>
|
||||
<string name="screen_bug_report_editor_supporting">"If possible, please write the description in English."</string>
|
||||
<string name="screen_bug_report_error_description_too_short">"The description is too short, please provide more details about what happened. Thanks!"</string>
|
||||
<string name="screen_bug_report_github_issue_description">"You can enter the number of an associated GitHub issue, if any."</string>
|
||||
<string name="screen_bug_report_github_issue_label">"GitHub issue"</string>
|
||||
<string name="screen_bug_report_include_crash_logs">"Send crash logs"</string>
|
||||
<string name="screen_bug_report_include_logs">"Allow logs"</string>
|
||||
<string name="screen_bug_report_include_logs_error">"Your logs are excessively large so cannot be included in this report, please send them to us another way."</string>
|
||||
|
||||
+12
@@ -107,6 +107,18 @@ class BugReportPresenterTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - set GitHub issue number`() = runTest {
|
||||
val presenter = createPresenter()
|
||||
presenter.test {
|
||||
val initialState = awaitItem()
|
||||
initialState.eventSink.invoke(BugReportEvents.SetGhIssueNumber(1))
|
||||
assertThat(awaitItem().formState).isEqualTo(BugReportFormState.Default.copy(ghIssueNumber = 1))
|
||||
initialState.eventSink.invoke(BugReportEvents.SetGhIssueNumber(null))
|
||||
assertThat(awaitItem().formState).isEqualTo(BugReportFormState.Default.copy(ghIssueNumber = null))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - reset all`() = runTest {
|
||||
val presenter = createPresenter(
|
||||
|
||||
+1
@@ -28,6 +28,7 @@ class FakeBugReporter(val mode: Mode = Mode.Success) : BugReporter {
|
||||
problemDescription: String,
|
||||
canContact: Boolean,
|
||||
sendPushRules: Boolean,
|
||||
ghIssueNumber: Int?,
|
||||
listener: BugReporterListener,
|
||||
) {
|
||||
delay(100)
|
||||
|
||||
-1
@@ -181,7 +181,6 @@ private fun ChangeOwnRoleBottomSheet(
|
||||
ListItem(
|
||||
headlineContent = { Text(stringResource(CommonStrings.action_cancel)) },
|
||||
onClick = ::dismiss,
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -278,7 +278,6 @@ private fun RoomMemberActionsBottomSheet(
|
||||
when (val action = actionState.action) {
|
||||
is ModerationAction.DisplayProfile -> {
|
||||
ListItem(
|
||||
style = ListItemStyle.Primary,
|
||||
headlineContent = { Text(stringResource(R.string.screen_bottom_sheet_manage_room_member_member_user_info)) },
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.UserProfile())),
|
||||
onClick = {
|
||||
|
||||
-1
@@ -84,7 +84,6 @@ private fun PreferenceBlockUser(
|
||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Block())),
|
||||
onClick = { if (!isLoading) eventSink(UserProfileEvents.UnblockUser(needsConfirmation = true)) },
|
||||
trailingContent = if (isLoading) ListItemContent.Custom(loadingCurrentValue) else null,
|
||||
style = ListItemStyle.Primary,
|
||||
)
|
||||
} else {
|
||||
ListItem(
|
||||
|
||||
Reference in New Issue
Block a user