diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index ddf2caa9e..70e42084b 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -420,7 +420,7 @@ 4C20B2B920CA10DE001BAC90 /* ConversationSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C20B2B820CA10DE001BAC90 /* ConversationSearchViewController.swift */; }; 4C4AEC4520EC343B0020E72B /* DismissableTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4AEC4420EC343B0020E72B /* DismissableTextField.swift */; }; 4CC0B59C20EC5F2E00CF6EE0 /* ConversationConfigurationSyncOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC0B59B20EC5F2E00CF6EE0 /* ConversationConfigurationSyncOperation.swift */; }; - 4CFF4C0A20F55BBA005DA313 /* MessageActionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF4C0920F55BBA005DA313 /* MessageActionsViewController.swift */; }; + 4CFF4C0B20F56104005DA313 /* MessageActionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF4C0920F55BBA005DA313 /* MessageActionsViewController.swift */; }; 70377AAB1918450100CAF501 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70377AAA1918450100CAF501 /* MobileCoreServices.framework */; }; 768A1A2B17FC9CD300E00ED8 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 768A1A2A17FC9CD300E00ED8 /* libz.dylib */; }; 76C87F19181EFCE600C4ACAB /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76C87F18181EFCE600C4ACAB /* MediaPlayer.framework */; }; @@ -1691,7 +1691,6 @@ 452EC6DE205E9E30000E787C /* MediaGalleryViewController.swift */, 45F32C1D205718B000A300D5 /* MediaPageViewController.swift */, 454A84032059C787008B8C75 /* MediaTileViewController.swift */, - 4CFF4C0920F55BBA005DA313 /* MessageActionsViewController.swift */, 34CA1C261F7156F300E51C51 /* MessageDetailViewController.swift */, 34B3F84F1E8DF1700035BE1A /* NewContactThreadViewController.h */, 34B3F8501E8DF1700035BE1A /* NewContactThreadViewController.m */, @@ -1851,7 +1850,6 @@ 450DF2061E0DD28D003D14BE /* UserInterface */ = { isa = PBXGroup; children = ( - 4541B719209D2D860008608F /* ViewModels */, 450DF2071E0DD29E003D14BE /* Notifications */, 34FD936E1E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.h */, 34FD936F1E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.m */, @@ -1890,6 +1888,7 @@ 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */, 34D99C8A1F27B13B00D284D6 /* OWSViewController.h */, 34D99C8B1F27B13B00D284D6 /* OWSViewController.m */, + 4CFF4C0920F55BBA005DA313 /* MessageActionsViewController.swift */, 45A60E7220AC674100FB1ABF /* ReturnToCallViewController.swift */, ); path = ViewControllers; @@ -1934,13 +1933,6 @@ path = SignalMessaging; sourceTree = ""; }; - 4541B719209D2D860008608F /* ViewModels */ = { - isa = PBXGroup; - children = ( - ); - path = ViewModels; - sourceTree = ""; - }; 4541B71C209D3B4F0008608F /* ViewModels */ = { isa = PBXGroup; children = ( @@ -3137,6 +3129,7 @@ 344D6CEC20069E070042AF96 /* NewNonContactConversationViewController.m in Sources */, 346129FB1FD5F31400532771 /* OWS101ExistingUsersBlockOnIdentityChange.m in Sources */, 344F248D2007CCD600CFB4F4 /* DisplayableText.swift in Sources */, + 4CFF4C0B20F56104005DA313 /* MessageActionsViewController.swift in Sources */, 450998651FD8A34D00D89EB3 /* DeviceSleepManager.swift in Sources */, 3466087220E550F400AFFE73 /* ConversationStyle.swift in Sources */, 3478506B1FD9B78A007B8332 /* NoopCallMessageHandler.swift in Sources */, @@ -3249,7 +3242,6 @@ 4585C4681ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift in Sources */, 4C20B2B920CA10DE001BAC90 /* ConversationSearchViewController.swift in Sources */, 450D19131F85236600970622 /* RemoteVideoView.m in Sources */, - 4CFF4C0A20F55BBA005DA313 /* MessageActionsViewController.swift in Sources */, B6B9ECFC198B31BA00C620D3 /* PushManager.m in Sources */, 34386A54207D271D009F5D9C /* NeverClearView.swift in Sources */, 45DF5DF21DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift in Sources */, diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index c5362fb84..5e2a1e9e7 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -1982,7 +1982,7 @@ typedef enum : NSUInteger { - (void)conversationCellDidLongpressText:(ConversationViewCell *)cell viewItem:(ConversationViewItem *)viewItem { - UIViewController *messageActionsViewController = [MessageActionsViewController new]; + MessageActionsViewController *messageActionsViewController = [MessageActionsViewController new]; [[OWSWindowManager sharedManager] presentMessageActions:messageActionsViewController]; } diff --git a/Signal/src/ViewControllers/MessageActionsViewController.swift b/Signal/src/ViewControllers/MessageActionsViewController.swift deleted file mode 100644 index 4aaf9748b..000000000 --- a/Signal/src/ViewControllers/MessageActionsViewController.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -import Foundation - -@objc -class MessageActionsViewController: UIViewController { - - override func loadView() { - self.view = UIView() - view.backgroundColor = .purple - } -} diff --git a/SignalMessaging/ViewControllers/MessageActionsViewController.swift b/SignalMessaging/ViewControllers/MessageActionsViewController.swift new file mode 100644 index 000000000..96b10c5ae --- /dev/null +++ b/SignalMessaging/ViewControllers/MessageActionsViewController.swift @@ -0,0 +1,25 @@ +// +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// + +import Foundation + +@objc +class MessageActionsViewController: UIViewController { + + @objc + weak var delegate: MessageActionsDelegate? + + override func loadView() { + self.view = UIView() + view.backgroundColor = .purple + + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTapBackground)) + self.view.addGestureRecognizer(tapGesture) + } + + @objc + func didTapBackground() { + self.delegate?.dismissMessageActions(self) + } +} diff --git a/SignalMessaging/utils/OWSWindowManager.h b/SignalMessaging/utils/OWSWindowManager.h index 23f435471..ccdcbf9f6 100644 --- a/SignalMessaging/utils/OWSWindowManager.h +++ b/SignalMessaging/utils/OWSWindowManager.h @@ -4,6 +4,8 @@ NS_ASSUME_NONNULL_BEGIN +@class MessageActionsViewController; + // This VC can become first responder // when presented to ensure that the input accessory is updated. @interface OWSWindowRootViewController : UIViewController @@ -12,12 +14,20 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - +@protocol MessageActionsDelegate + +- (void)dismissMessageActions:(MessageActionsViewController *)messageActionsViewController; + +@end + +#pragma mark - + extern NSString *const OWSWindowManagerCallDidChangeNotification; const CGFloat OWSWindowManagerCallScreenHeight(void); extern const UIWindowLevel UIWindowLevel_Background; -@interface OWSWindowManager : NSObject +@interface OWSWindowManager : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -29,7 +39,7 @@ extern const UIWindowLevel UIWindowLevel_Background; #pragma mark - Message Actions -- (void)presentMessageActions:(UIViewController *)messageActionsViewController; +- (void)presentMessageActions:(MessageActionsViewController *)messageActionsViewController; #pragma mark - Calls diff --git a/SignalMessaging/utils/OWSWindowManager.m b/SignalMessaging/utils/OWSWindowManager.m index a4b7fa7ff..df5308c14 100644 --- a/SignalMessaging/utils/OWSWindowManager.m +++ b/SignalMessaging/utils/OWSWindowManager.m @@ -12,7 +12,6 @@ NS_ASSUME_NONNULL_BEGIN NSString *const OWSWindowManagerCallDidChangeNotification = @"OWSWindowManagerCallDidChangeNotification"; - const CGFloat OWSWindowManagerCallScreenHeight(void) { if ([UIDevice currentDevice].isIPhoneX) { @@ -235,17 +234,21 @@ const UIWindowLevel UIWindowLevel_MessageActions(void) [self ensureWindowState]; } -#pragma mark - Calls +#pragma mark - Message Actions -- (void)presentMessageActions:(UIViewController *)messageActionsViewController +- (void)presentMessageActions:(MessageActionsViewController *)messageActionsViewController { + messageActionsViewController.delegate = self; self.messageActionsViewController = messageActionsViewController; self.messageActionsWindow.rootViewController = messageActionsViewController; + [self ensureWindowState]; } -- (void)dismissMessageActions +- (void)dismissMessageActions:(UIViewController *)messageActionsViewController { + OWSAssert(self.messageActionsViewController == messageActionsViewController); + self.messageActionsWindow.rootViewController = nil; self.messageActionsViewController = nil; @@ -372,6 +375,7 @@ const UIWindowLevel UIWindowLevel_MessageActions(void) [self ensureMessageActionsWindowHidden]; [self ensureScreenBlockWindowHidden]; } else if (self.messageActionsViewController) { + // Show Message Actions [self ensureRootWindowHidden]; [self ensureReturnToCallWindowHidden];