|
12 | 12 | @property(readonly, nonatomic) NSString *address; |
13 | 13 | @end |
14 | 14 |
|
15 | | -@class CKBalloonView; |
16 | | - |
17 | 15 | @interface CKTranscriptCollectionViewController : UIViewController <MFMailComposeViewControllerDelegate> |
18 | | -- (id<CKMessage>)messageForBalloonView:(CKBalloonView *)view; |
| 16 | +- (id<CKMessage>)messageForBalloonView:(id)view; |
19 | 17 | - (BOOL)shouldShowReportForMessage:(id<CKMessage>)message; |
20 | 18 | @end |
21 | 19 |
|
22 | | -%hook CKBalloonView |
| 20 | +%hook CKTranscriptCollectionViewController |
23 | 21 |
|
24 | | -- (void)showMenu { |
25 | | - %orig; |
26 | | - NSString *title = @{REPORT_DICT}[[[NSLocale preferredLanguages] objectAtIndex:0]]; |
27 | | - if (!title) |
28 | | - title = REPORT_DEFAULT; |
29 | | - UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:title action:@selector(report:)]; |
30 | | - NSMutableArray *menuItems = [[UIMenuController sharedMenuController].menuItems mutableCopy]; |
31 | | - [menuItems addObject:report]; |
32 | | - [UIMenuController sharedMenuController].menuItems = menuItems; |
33 | | - [[UIMenuController sharedMenuController] update]; |
| 22 | +- (NSArray *)menuItemsForBalloonView:(id)view { |
| 23 | + if ([self shouldShowReportForMessage:[self messageForBalloonView:view]]) { |
| 24 | + NSMutableArray *menuItems = [%orig(view) mutableCopy]; |
| 25 | + NSString *title = @{REPORT_DICT}[[[NSLocale preferredLanguages] objectAtIndex:0]]; |
| 26 | + if (!title) |
| 27 | + title = REPORT_DEFAULT; |
| 28 | + UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:title action:@selector(report:)]; |
| 29 | + [menuItems addObject:report]; |
| 30 | + return menuItems; |
| 31 | + } else |
| 32 | + return %orig(view); |
34 | 33 | } |
35 | 34 |
|
36 | | -%end |
37 | | - |
38 | | -%hook CKTranscriptCollectionViewController |
39 | | - |
40 | 35 | %new |
41 | | -- (void)balloonView:(CKBalloonView *)view report:(id)sender { |
| 36 | +- (void)balloonView:(id)view report:(id)sender { |
42 | 37 | NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; |
43 | 38 | id _center = center; |
44 | 39 | __block id _token = [center addObserverForName:UIMenuControllerDidHideMenuNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { |
| 40 | + [_center removeObserver:_token]; |
45 | 41 | UIImage *_UICreateScreenUIImage(); |
46 | 42 | NSData *screenshot = UIImagePNGRepresentation(_UICreateScreenUIImage()); |
47 | 43 | MFMailComposeViewController *mc = [MFMailComposeViewController new]; |
|
55 | 51 | [mc setToRecipients:@[ @"[email protected]"]]; |
56 | 52 | [mc addAttachmentData:screenshot mimeType:@"image/png" fileName:@"screenshot.png"]; |
57 | 53 | [self presentViewController:mc animated:YES completion:nil]; |
58 | | - [_center removeObserver:_token]; |
59 | 54 | }]; |
60 | 55 | } |
61 | 56 |
|
|
64 | 59 | return message.isiMessage && !message.isOutgoing; |
65 | 60 | } |
66 | 61 |
|
67 | | -- (BOOL)balloonView:(CKBalloonView *)view canPerformAction:(SEL)action withSender:(id)sender { |
68 | | - return %orig(view, action, sender) || ((action == @selector(balloonView:report:)) && [self shouldShowReportForMessage:[self messageForBalloonView:view]]); |
| 62 | +- (BOOL)balloonView:(id)view canPerformAction:(SEL)action withSender:(id)sender { |
| 63 | + return %orig(view, action, sender) || (action == @selector(balloonView:report:)); |
69 | 64 | } |
70 | 65 |
|
71 | 66 | %new |
|
0 commit comments