diff --git a/client/scripts/network.js b/client/scripts/network.js index eb59901..7f50e67 100644 --- a/client/scripts/network.js +++ b/client/scripts/network.js @@ -512,6 +512,10 @@ class Events { static on(type, callback) { return window.addEventListener(type, callback, false); } + + static off(type, callback) { + return window.removeEventListener(type, callback, false); + } } diff --git a/client/scripts/ui.js b/client/scripts/ui.js index 0c15984..426bbc9 100644 --- a/client/scripts/ui.js +++ b/client/scripts/ui.js @@ -420,7 +420,7 @@ class Notifications { }); } - _notify(message, body, closeTimeout = 20000) { + _notify(message, body) { const config = { body: body, icon: '/images/logo_transparent_128x128.png', @@ -435,27 +435,35 @@ class Notifications { } // Notification is persistent on Android. We have to close it manually - if (closeTimeout) { - setTimeout(_ => notification.close(), closeTimeout); - } + const visibilitychangeHandler = () => { + if (document.visibilityState === 'visible') { + notification.close(); + Events.off('visibilitychange', visibilitychangeHandler); + } + }; + Events.on('visibilitychange', visibilitychangeHandler); return notification; } _messageNotification(message) { - if (isURL(message)) { - const notification = this._notify(message, 'Click to open link'); - this._bind(notification, e => window.open(message, '_blank', null, true)); - } else { - const notification = this._notify(message, 'Click to copy text'); - this._bind(notification, e => this._copyText(message, notification)); + if (document.visibilityState !== 'visible') { + if (isURL(message)) { + const notification = this._notify(message, 'Click to open link'); + this._bind(notification, e => window.open(message, '_blank', null, true)); + } else { + const notification = this._notify(message, 'Click to copy text'); + this._bind(notification, e => this._copyText(message, notification)); + } } } _downloadNotification(message) { - const notification = this._notify(message, 'Click to download'); - if (!window.isDownloadSupported) return; - this._bind(notification, e => this._download(notification)); + if (document.visibilityState !== 'visible') { + const notification = this._notify(message, 'Click to download'); + if (!window.isDownloadSupported) return; + this._bind(notification, e => this._download(notification)); + } } _download(notification) {