From c70b1e968153d8db3e51a2740f3f6223a6a8c4af Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Tue, 20 Jun 2017 12:33:23 -0400 Subject: [PATCH] Make system messages deletable // FREEBIE --- .../ConversationView/MessagesViewController.m | 16 ++++++++ Signal/src/views/OWSSystemMessageCell.h | 3 ++ Signal/src/views/OWSSystemMessageCell.m | 39 +++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/Signal/src/ViewControllers/ConversationView/MessagesViewController.m b/Signal/src/ViewControllers/ConversationView/MessagesViewController.m index 321006319..f60c27c3a 100644 --- a/Signal/src/ViewControllers/ConversationView/MessagesViewController.m +++ b/Signal/src/ViewControllers/ConversationView/MessagesViewController.m @@ -2671,6 +2671,22 @@ typedef enum : NSUInteger { } } +- (void)didLongPressSystemMessageCell:(OWSSystemMessageCell *)systemMessageCell; +{ + OWSAssert([NSThread isMainThread]); + OWSAssert(systemMessageCell); + OWSAssert(systemMessageCell.interaction); + + DDLogDebug(@"%@ long pressed system message cell: %@", self.tag, systemMessageCell); + + [systemMessageCell becomeFirstResponder]; + + UIMenuController *theMenu = [UIMenuController sharedMenuController]; + + [theMenu setTargetRect:systemMessageCell.titleLabel.frame inView:systemMessageCell]; + [theMenu setMenuVisible:YES animated:YES]; +} + #pragma mark - ContactEditingDelegate - (void)didFinishEditingContact diff --git a/Signal/src/views/OWSSystemMessageCell.h b/Signal/src/views/OWSSystemMessageCell.h index 60dfc1444..236e6ce99 100644 --- a/Signal/src/views/OWSSystemMessageCell.h +++ b/Signal/src/views/OWSSystemMessageCell.h @@ -8,10 +8,12 @@ NS_ASSUME_NONNULL_BEGIN @class TSInteraction; +@class OWSSystemMessageCell; @protocol OWSSystemMessageCellDelegate - (void)didTapSystemMessageWithInteraction:(TSInteraction *)interaction; +- (void)didLongPressSystemMessageCell:(OWSSystemMessageCell *)systemMessageCell; @end @@ -21,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, weak) id systemMessageCellDelegate; +@property (nonatomic, readonly) UILabel *titleLabel; @property (nonatomic, nullable, readonly) TSInteraction *interaction; - (void)configureWithInteraction:(TSInteraction *)interaction; diff --git a/Signal/src/views/OWSSystemMessageCell.m b/Signal/src/views/OWSSystemMessageCell.m index 1a59b3d36..c4feb1a3f 100644 --- a/Signal/src/views/OWSSystemMessageCell.m +++ b/Signal/src/views/OWSSystemMessageCell.m @@ -72,6 +72,10 @@ NS_ASSUME_NONNULL_BEGIN UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; [self addGestureRecognizer:tap]; + + UILongPressGestureRecognizer *longpress = + [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongpressGesture:)]; + [self addGestureRecognizer:longpress]; } + (NSString *)cellReuseIdentifier @@ -290,6 +294,21 @@ NS_ASSUME_NONNULL_BEGIN self.interaction = nil; } +#pragma mark - editing + +- (BOOL)canBecomeFirstResponder +{ + return YES; +} + +- (void)delete:(nullable id)sender +{ + DDLogInfo(@"%@ chose delete", self.logTag); + OWSAssert(self.interaction); + + [self.interaction remove]; +} + #pragma mark - Gesture recognizers - (void)handleTapGesture:(UITapGestureRecognizer *)tap @@ -299,6 +318,26 @@ NS_ASSUME_NONNULL_BEGIN [self.systemMessageCellDelegate didTapSystemMessageWithInteraction:self.interaction]; } +- (void)handleLongpressGesture:(UILongPressGestureRecognizer *)longpress +{ + OWSAssert(self.interaction); + if (longpress.state == UIGestureRecognizerStateBegan) { + [self.systemMessageCellDelegate didLongPressSystemMessageCell:self]; + } +} + +#pragma mark - Logging + ++ (NSString *)logTag +{ + return [NSString stringWithFormat:@"[%@]", self.class]; +} + +- (NSString *)logTag +{ + return self.class.logTag; +} + @end NS_ASSUME_NONNULL_END