Avoid duplicate BigText notification content

This commit is contained in:
ajp_anton
2026-07-27 22:32:28 +00:00
parent 6a41b922e3
commit ebb05acc02
2 changed files with 59 additions and 7 deletions
@@ -22,15 +22,33 @@ data class NotificationSnapshot(
object NotificationContents {
fun extract(notification: Notification): String? {
val parts = linkedSetOf<String>()
val extras = notification.extras ?: Bundle.EMPTY
messagingContents(extras)?.let { return it }
extras.getCharSequence(Notification.EXTRA_TITLE)?.addTo(parts)
extras.getCharSequence(Notification.EXTRA_TEXT)?.addTo(parts)
extras.getCharSequence(Notification.EXTRA_BIG_TEXT)?.addTo(parts)
extras.getCharSequence(Notification.EXTRA_SUB_TEXT)?.addTo(parts)
extras.getCharSequence(Notification.EXTRA_SUMMARY_TEXT)?.addTo(parts)
extras.getCharSequenceArray(Notification.EXTRA_TEXT_LINES)?.forEach { it?.addTo(parts) }
return genericContents(
title = extras.getCharSequence(Notification.EXTRA_TITLE),
text = extras.getCharSequence(Notification.EXTRA_TEXT),
bigText = extras.getCharSequence(Notification.EXTRA_BIG_TEXT),
subText = extras.getCharSequence(Notification.EXTRA_SUB_TEXT),
summaryText = extras.getCharSequence(Notification.EXTRA_SUMMARY_TEXT),
textLines = extras.getCharSequenceArray(Notification.EXTRA_TEXT_LINES).orEmpty().asList(),
)
}
/** Uses BigTextStyle's expanded content instead of its alternate collapsed rendering. */
internal fun genericContents(
title: CharSequence?,
text: CharSequence?,
bigText: CharSequence?,
subText: CharSequence?,
summaryText: CharSequence?,
textLines: List<CharSequence?>,
): String? {
val parts = linkedSetOf<String>()
title?.addTo(parts)
(bigText.takeIf { it.hasText() } ?: text)?.addTo(parts)
subText?.addTo(parts)
summaryText?.addTo(parts)
textLines.forEach { it?.addTo(parts) }
return parts.takeIf { it.isNotEmpty() }?.joinToString("\n")
}
@@ -92,5 +110,7 @@ object NotificationContents {
toString().trim().takeIf { it.isNotEmpty() }?.let(parts::add)
}
private fun CharSequence?.hasText(): Boolean = !this.isNullOrBlank()
private const val MAX_IMAGE_DIMENSION = 1600
}