diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt index 44dc403110fff81ff35e95df42266ab08fc81037..2036067ea25745cf4d9224d287d79ddee4f11c8d 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt @@ -65,6 +65,7 @@ import java.awt.event.WindowFocusListener import javax.annotation.concurrent.Immutable import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Duration.Companion.seconds enum class Screen { STARTUP, @@ -136,6 +137,9 @@ constructor( DisposableEffect(Unit) { + val notificationCoolDown = 5.seconds.inWholeMilliseconds + var lastNotification = 0L + val eventListener = EventListener { e -> when (e) { is LifecycleEvent -> @@ -150,15 +154,21 @@ constructor( override fun windowLostFocus(e: WindowEvent?) { focusState.focused = false + // reset notification cool-down + lastNotification = 0 } } val messageCounterListener: MessageCounterListener = { (total, contacts) -> if (total > 0 && !focusState.focused) { window.iconImage = iconBadge - if (configuration.visualNotifications) - visualNotificationProvider.notifyPrivateMessages(total, contacts) - if (configuration.soundNotifications) - soundNotificationProvider.notifyPrivateMessages(total, contacts) + val currentTime = System.currentTimeMillis() + if (currentTime - lastNotification > notificationCoolDown) { + if (configuration.visualNotifications) + visualNotificationProvider.notifyPrivateMessages(total, contacts) + if (configuration.soundNotifications) + soundNotificationProvider.notifyPrivateMessages(total, contacts) + lastNotification = currentTime + } } }