From ec6b1a44deae3b5d36f092b5be09fb8fc6dad23e Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 14 Jun 2023 16:36:57 -0400 Subject: [PATCH] Add text formatting support to release notes channel. --- .../jobs/RetrieveRemoteAnnouncementsJob.kt | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt index 1eae6ee9ed..57736c9639 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt @@ -187,10 +187,31 @@ class RetrieveRemoteAnnouncementsJob private constructor(private val force: Bool resolvedNotes .filterNotNull() .forEach { note -> - val body = "${note.translation.title}\n\n${note.translation.body}" + val title = "${note.translation.title}\n\n" + val body = "$title${note.translation.body}" val bodyRangeList = BodyRangeList.newBuilder() .addStyle(BodyRangeList.BodyRange.Style.BOLD, 0, note.translation.title.length) + if (note.translation.bodyRanges?.isNotEmpty() == true) { + note.translation.bodyRanges + .filter { it.style != null && it.start != null && it.length != null } + .map { it.copy(start = it.start!! + title.length) } + .forEach { + val style = when (it.style!!) { + "bold" -> BodyRangeList.BodyRange.Style.BOLD + "italic" -> BodyRangeList.BodyRange.Style.ITALIC + "strikethrough" -> BodyRangeList.BodyRange.Style.STRIKETHROUGH + "spoiler" -> BodyRangeList.BodyRange.Style.SPOILER + "mono" -> BodyRangeList.BodyRange.Style.MONOSPACE + else -> null + } + + if (style != null && it.start!! in body.indices && (it.start + it.length!! - 1) in body.indices) { + bodyRangeList.addStyle(style, it.start, it.length) + } + } + } + if (note.releaseNote.link?.isNotEmpty() == true && note.translation.linkText?.isNotEmpty() == true) { val linkIndex = body.indexOf(note.translation.linkText) if (linkIndex != -1 && linkIndex + note.translation.linkText.length < body.length) { @@ -405,7 +426,14 @@ class RetrieveRemoteAnnouncementsJob private constructor(private val force: Bool @JsonProperty val linkText: String?, @JsonProperty val title: String, @JsonProperty val body: String, - @JsonProperty val callToActionText: String? + @JsonProperty val callToActionText: String?, + @JsonProperty val bodyRanges: List? + ) + + data class ReleaseNoteBodyRange( + @JsonProperty val style: String?, + @JsonProperty val start: Int?, + @JsonProperty val length: Int? ) data class TranslatedRemoteMegaphone(