QoL: Native notification improvements

Only send native notification when document is not visible, clear notifications when document become visible.
This commit is contained in:
Haocen 2022-09-13 01:35:05 -04:00 committed by GitHub
parent a96dde25c0
commit 529be8c55e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -420,7 +420,7 @@ class Notifications {
}); });
} }
_notify(message, body, closeTimeout = 20000) { _notify(message, body) {
const config = { const config = {
body: body, body: body,
icon: '/images/logo_transparent_128x128.png', icon: '/images/logo_transparent_128x128.png',
@ -435,14 +435,19 @@ class Notifications {
} }
// Notification is persistent on Android. We have to close it manually // Notification is persistent on Android. We have to close it manually
if (closeTimeout) { const visibilitychangeHandler = () => {
setTimeout(_ => notification.close(), closeTimeout); if (document.visibilityState === 'visible') {
notification.close();
document.removeEventListener('visibilitychange', visibilitychangeHandler);
} }
};
document.addEventListener('visibilitychange', visibilitychangeHandler);
return notification; return notification;
} }
_messageNotification(message) { _messageNotification(message) {
if (document.visibilityState !== 'visible') {
if (isURL(message)) { if (isURL(message)) {
const notification = this._notify(message, 'Click to open link'); const notification = this._notify(message, 'Click to open link');
this._bind(notification, e => window.open(message, '_blank', null, true)); this._bind(notification, e => window.open(message, '_blank', null, true));
@ -451,12 +456,15 @@ class Notifications {
this._bind(notification, e => this._copyText(message, notification)); this._bind(notification, e => this._copyText(message, notification));
} }
} }
}
_downloadNotification(message) { _downloadNotification(message) {
if (document.visibilityState !== 'visible') {
const notification = this._notify(message, 'Click to download'); const notification = this._notify(message, 'Click to download');
if (!window.isDownloadSupported) return; if (!window.isDownloadSupported) return;
this._bind(notification, e => this._download(notification)); this._bind(notification, e => this._download(notification));
} }
}
_download(notification) { _download(notification) {
document.querySelector('x-dialog [download]').click(); document.querySelector('x-dialog [download]').click();