electron/brightray/browser/mac/notification_center_delegate.mm

69 lines
2.2 KiB
Text
Raw Normal View History

2015-12-24 13:55:18 +00:00
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "brightray/browser/mac/notification_center_delegate.h"
2015-12-24 13:55:18 +00:00
#include "brightray/browser/mac/cocoa_notification.h"
#include "brightray/browser/mac/notification_presenter_mac.h"
2015-12-24 13:55:18 +00:00
@implementation NotificationCenterDelegate
2018-04-20 18:47:04 +00:00
- (instancetype)initWithPresenter:
(brightray::NotificationPresenterMac*)presenter {
self = [super init];
if (!self)
return nil;
presenter_ = presenter;
return self;
}
2015-12-24 13:55:18 +00:00
- (void)userNotificationCenter:(NSUserNotificationCenter*)center
didDeliverNotification:(NSUserNotification*)notif {
auto* notification = presenter_->GetNotification(notif);
2017-05-30 09:06:51 +00:00
if (notification)
notification->NotificationDisplayed();
2015-12-24 13:55:18 +00:00
}
- (void)userNotificationCenter:(NSUserNotificationCenter*)center
2018-04-20 18:47:04 +00:00
didActivateNotification:(NSUserNotification*)notif {
auto* notification = presenter_->GetNotification(notif);
if (getenv("ELECTRON_DEBUG_NOTIFICATIONS")) {
2018-04-20 18:47:04 +00:00
LOG(INFO) << "Notification activated (" << [notif.identifier UTF8String]
<< ")";
}
2017-05-29 10:02:33 +00:00
if (notification) {
2018-04-20 18:47:04 +00:00
// Ref:
// https://developer.apple.com/documentation/foundation/nsusernotificationactivationtype?language=objc
if (notif.activationType ==
NSUserNotificationActivationTypeContentsClicked) {
notification->NotificationClicked();
2018-04-20 18:47:04 +00:00
} else if (notif.activationType ==
NSUserNotificationActivationTypeActionButtonClicked) {
2018-01-17 03:07:54 +00:00
notification->NotificationActivated();
2018-04-20 18:47:04 +00:00
} else if (notif.activationType ==
NSUserNotificationActivationTypeReplied) {
notification->NotificationReplied([notif.response.string UTF8String]);
} else {
if (@available(macOS 10.10, *)) {
if (notif.activationType ==
NSUserNotificationActivationTypeAdditionalActionClicked) {
notification->NotificationActivated(
[notif additionalActivationAction]);
}
}
2017-05-29 10:02:33 +00:00
}
}
2015-12-24 13:55:18 +00:00
}
- (BOOL)userNotificationCenter:(NSUserNotificationCenter*)center
shouldPresentNotification:(NSUserNotification*)notification {
// Display notifications even if the app is active.
return YES;
}
@end