From 8fe196cd7a9e07afe4eeafe898ef644829c66caa Mon Sep 17 00:00:00 2001 From: Clark Date: Thu, 9 Nov 2023 12:29:59 -0500 Subject: [PATCH] Don't renotify every single message on new message. --- .../notifications/v2/NotificationItem.kt | 16 +++++----- .../v2/NotificationThumbnails.kt | 29 +++++++++++++++++++ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationItem.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationItem.kt index 90bd7b82c2..382aacd022 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationItem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationItem.kt @@ -193,8 +193,12 @@ sealed class NotificationItem(val threadRecipient: Recipient, protected val reco } data class ThumbnailInfo(val uri: Uri? = null, val contentType: String? = null) { + var needsShrinking = false + private set + companion object { val NONE = ThumbnailInfo() + val NEEDS_SHRINKING = ThumbnailInfo().apply { needsShrinking = true } } } } @@ -208,7 +212,7 @@ class MessageNotification(threadRecipient: Recipient, record: MessageRecord) : N override val isNewNotification: Boolean = notifiedTimestamp == 0L && !record.isEditMessage val hasSelfMention = record.hasSelfMention() - private var thumbnailInfo: ThumbnailInfo? = null + private var thumbnailInfo: ThumbnailInfo = NotificationThumbnails.getWithoutModifying(this) override fun getPrimaryTextActual(context: Context): CharSequence { return if (KeyCachingService.isLocked(context)) { @@ -262,15 +266,13 @@ class MessageNotification(threadRecipient: Recipient, record: MessageRecord) : N } override fun getThumbnailInfo(context: Context): ThumbnailInfo { - if (thumbnailInfo == null) { - thumbnailInfo = if (SignalStore.settings().messageNotificationsPrivacy.isDisplayMessage && !KeyCachingService.isLocked(context)) { - NotificationThumbnails.get(context, this) - } else { - ThumbnailInfo() + if (thumbnailInfo.needsShrinking) { + if (SignalStore.settings().messageNotificationsPrivacy.isDisplayMessage && !KeyCachingService.isLocked(context)) { + thumbnailInfo = NotificationThumbnails.get(context, this) } } - return thumbnailInfo!! + return thumbnailInfo } override fun canReply(context: Context): Boolean { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationThumbnails.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationThumbnails.kt index 12745702da..474bb7a90b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationThumbnails.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationThumbnails.kt @@ -33,6 +33,35 @@ object NotificationThumbnails { private val thumbnailCache = LinkedHashMap(MAX_CACHE_SIZE) + fun getWithoutModifying(notificationItem: NotificationItem): NotificationItem.ThumbnailInfo { + val thumbnailSlide: Slide? = notificationItem.slideDeck?.thumbnailSlide + + if (thumbnailSlide == null || thumbnailSlide.uri == null) { + return NotificationItem.ThumbnailInfo.NONE + } + + if (thumbnailSlide.fileSize > SUPPORTED_SIZE_THRESHOLD) { + return NotificationItem.ThumbnailInfo.NONE + } + + if (thumbnailSlide.fileSize < TARGET_SIZE) { + return NotificationItem.ThumbnailInfo(thumbnailSlide.publicUri, thumbnailSlide.contentType) + } + + val messageId = MessageId(notificationItem.id) + val thumbnail: CachedThumbnail? = synchronized(thumbnailCache) { thumbnailCache[messageId] } + + if (thumbnail != null) { + return if (thumbnail != CachedThumbnail.PENDING) { + NotificationItem.ThumbnailInfo(thumbnail.uri, thumbnail.contentType) + } else { + NotificationItem.ThumbnailInfo.NONE + } + } + + return NotificationItem.ThumbnailInfo.NEEDS_SHRINKING + } + fun get(context: Context, notificationItem: NotificationItem): NotificationItem.ThumbnailInfo { val thumbnailSlide: Slide? = notificationItem.slideDeck?.thumbnailSlide