Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: chrome/browser/ui/cocoa/notifications/notification_response_builder_mac.mm

Issue 2065943002: Abstract notification clicks in its own dictionary (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "chrome/browser/ui/cocoa/notifications/notification_response_builder_mac .h"
6
7 #import "chrome/browser/ui/cocoa/notifications/notification_constants_mac.h"
8 #include "base/logging.h"
9
10 namespace {
11
12 // Make sure this Obj-C enum is kept in sync with the
13 // PlatformNotificationServiceImpl NotificationOperation enum.
14 // The latter cannot be reused because the XPC service is not aware of
15 // PlatformNotificationCenter.
16 typedef enum notificationOperations {
17 NOTIFICATION_CLICK,
18 NOTIFICATION_CLOSE,
19 NOTIFICATION_SETTINGS
20 } NotificationOperation;
21 }
Peter Beverloo 2016/06/16 17:02:43 nits: types start with a capital, blank line above
Miguel Garcia 2016/06/17 17:53:08 Yeah I looked it up to see how people defined enum
22
23 @implementation NotificationResponseBuilder
24
25 + (NSDictionary*)buildDictionary:(NSUserNotification*)notification {
26 NSString* origin =
27 [[notification userInfo]
28 objectForKey:notification_constants::kNotificationOrigin]
29 ? [[notification userInfo]
30 objectForKey:notification_constants::kNotificationOrigin]
31 : @"";
32 DCHECK([[notification userInfo]
33 objectForKey:notification_constants::kNotificationId]);
34 NSString* notificationId = [[notification userInfo]
35 objectForKey:notification_constants::kNotificationId];
36
37 DCHECK([[notification userInfo]
38 objectForKey:notification_constants::kNotificationProfileId]);
39 NSString* profileId = [[notification userInfo]
40 objectForKey:notification_constants::kNotificationProfileId];
41
42 DCHECK([[notification userInfo]
43 objectForKey:notification_constants::kNotificationIncognito]);
44 NSNumber* incognito = [[notification userInfo]
45 objectForKey:notification_constants::kNotificationIncognito];
46
47 // Initialize operation and button index for the case where the
48 // notification itself was clicked.
49 NotificationOperation operation = NOTIFICATION_CLICK;
50 int buttonIndex = -1;
51
52 // Determine whether the user clicked on a button, and if they did, whether it
53 // was a developer-provided button or the mandatory Settings button.
54 if (notification.activationType ==
55 NSUserNotificationActivationTypeActionButtonClicked) {
56 NSArray* alternateButtons = @[];
57 if ([notification
58 respondsToSelector:@selector(_alternateActionButtonTitles)]) {
59 alternateButtons =
60 [notification valueForKey:@"_alternateActionButtonTitles"];
61 }
62
63 bool multipleButtons = (alternateButtons.count > 0);
64
65 // No developer actions, just the settings button.
66 if (!multipleButtons) {
67 operation = NOTIFICATION_SETTINGS;
68 buttonIndex = -1;
69 } else {
70 // 0 based array containing.
71 // Button 1
72 // Button 2 (optional)
73 // Settings
74 NSNumber* actionIndex =
75 [notification valueForKey:@"_alternateActionIndex"];
76 operation = (actionIndex.unsignedLongValue == alternateButtons.count - 1)
77 ? NOTIFICATION_SETTINGS
78 : NOTIFICATION_CLICK;
79 buttonIndex =
80 (actionIndex.unsignedLongValue == alternateButtons.count - 1)
81 ? -1
82 : actionIndex.intValue;
83 }
84 }
85
86 return @{
87 notification_constants::kNotificationOrigin : origin,
88 notification_constants::kNotificationId : notificationId,
89 notification_constants::kNotificationProfileId : profileId,
90 notification_constants::kNotificationIncognito : incognito,
91 notification_constants::
92 kNotificationOperation : [NSNumber numberWithInt:operation],
Peter Beverloo 2016/06/16 17:02:43 nit: could we wrap after the colon, avoiding break
Miguel Garcia 2016/06/17 17:53:08 Done.
93 notification_constants::
94 kNotificationButtonIndex : [NSNumber numberWithInt:buttonIndex],
95 };
96 }
97
98 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698