Fix browser notification permission request logic (#13543)
* Add notification permission handling code * Request notification permission when enabling any notification setting * Add badge to notification settings when permissions insufficient * Disable alerts by default, requesting permission and enable them on onboardingmaster
parent
5e1364c448
commit
f54ca3d08e
@ -1,8 +1,20 @@ |
||||
import { changeSetting, saveSettings } from './settings'; |
||||
import { requestBrowserPermission } from './notifications'; |
||||
|
||||
export const INTRODUCTION_VERSION = 20181216044202; |
||||
|
||||
export const closeOnboarding = () => dispatch => { |
||||
dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION)); |
||||
dispatch(saveSettings()); |
||||
|
||||
dispatch(requestBrowserPermission((permission) => { |
||||
if (permission === 'granted') { |
||||
dispatch(changeSetting(['notifications', 'alerts', 'follow'], true)); |
||||
dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true)); |
||||
dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true)); |
||||
dispatch(changeSetting(['notifications', 'alerts', 'mention'], true)); |
||||
dispatch(changeSetting(['notifications', 'alerts', 'poll'], true)); |
||||
dispatch(saveSettings()); |
||||
} |
||||
})); |
||||
}; |
||||
|
@ -0,0 +1,29 @@ |
||||
// Handles browser quirks, based on
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API
|
||||
|
||||
const checkNotificationPromise = () => { |
||||
try { |
||||
Notification.requestPermission().then(); |
||||
} catch(e) { |
||||
return false; |
||||
} |
||||
|
||||
return true; |
||||
}; |
||||
|
||||
const handlePermission = (permission, callback) => { |
||||
// Whatever the user answers, we make sure Chrome stores the information
|
||||
if(!('permission' in Notification)) { |
||||
Notification.permission = permission; |
||||
} |
||||
|
||||
callback(Notification.permission); |
||||
}; |
||||
|
||||
export const requestNotificationPermission = (callback) => { |
||||
if (checkNotificationPromise()) { |
||||
Notification.requestPermission().then((permission) => handlePermission(permission, callback)); |
||||
} else { |
||||
Notification.requestPermission((permission) => handlePermission(permission, callback)); |
||||
} |
||||
}; |
Loading…
Reference in new issue