Skip to content

Commit

Permalink
Explicitly ask user for notification authorisation on launch
Browse files Browse the repository at this point in the history
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
  • Loading branch information
claucambra committed May 18, 2022
1 parent 797fbff commit 6d0f095
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/gui/systray.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ Systray::Systray()

#ifdef Q_OS_MACOS
setUserNotificationCenterDelegate();
checkNotificationAuth();
checkNotificationAuth(MacNotificationAuthorizationOptions::Default); // No provisional auth, ask user explicitly first time
registerNotificationCategories(QString(tr("Download")));
#else
connect(AccountManager::instance(), &AccountManager::accountAdded,
Expand Down
7 changes: 6 additions & 1 deletion src/gui/systray.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,13 @@ class AccessManagerFactory : public QQmlNetworkAccessManagerFactory
};

#ifdef Q_OS_MACOS
enum MacNotificationAuthorizationOptions {
Default = 0,
Provisional
};

void setUserNotificationCenterDelegate();
void checkNotificationAuth();
void checkNotificationAuth(MacNotificationAuthorizationOptions authOptions = MacNotificationAuthorizationOptions::Provisional);
void registerNotificationCategories(const QString &localizedDownloadString);
bool canOsXSendUserNotification();
void sendOsXUserNotification(const QString &title, const QString &message);
Expand Down
15 changes: 13 additions & 2 deletions src/gui/systray.mm
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center

namespace OCC {

enum MacNotificationAuthorizationOptions {
Default = 0,
Provisional
};

double statusBarThickness()
{
return [NSStatusBar systemStatusBar].thickness;
Expand Down Expand Up @@ -78,10 +83,16 @@ void registerNotificationCategories(const QString &localisedDownloadString) {
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:generalCategory, updateCategory, nil]];
}

void checkNotificationAuth()
void checkNotificationAuth(MacNotificationAuthorizationOptions additionalAuthOption = MacNotificationAuthorizationOptions::Provisional)
{
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound + UNAuthorizationOptionProvisional)
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert + UNAuthorizationOptionSound;

if(additionalAuthOption == MacNotificationAuthorizationOptions::Provisional) {
authOptions += UNAuthorizationOptionProvisional;
}

[center requestAuthorizationWithOptions:(authOptions)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
// Enable or disable features based on authorization.
if(granted) {
Expand Down

0 comments on commit 6d0f095

Please sign in to comment.