diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 325ec37a8..58a36d5e8 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -300,7 +300,6 @@ 452037D11EE84975004E4CDF /* DebugUISessionState.m in Sources */ = {isa = PBXBuildFile; fileRef = 452037D01EE84975004E4CDF /* DebugUISessionState.m */; }; 4520D8D51D417D8E00123472 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4520D8D41D417D8E00123472 /* Photos.framework */; }; 4521C3C01F59F3BA00B4C582 /* TextFieldHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521C3BF1F59F3BA00B4C582 /* TextFieldHelper.swift */; }; - 4523149E1F7E916B003A428C /* SlideOffAnimatedTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4523149D1F7E916B003A428C /* SlideOffAnimatedTransition.swift */; }; 452314A01F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4523149F1F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift */; }; 4523D016206EDC2B00A2AB51 /* LRUCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4523D015206EDC2B00A2AB51 /* LRUCache.swift */; }; 452B999020A34B6B006F2F9E /* AddContactShareToExistingContactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 452B998F20A34B6B006F2F9E /* AddContactShareToExistingContactViewController.swift */; }; @@ -944,7 +943,6 @@ 452037D01EE84975004E4CDF /* DebugUISessionState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUISessionState.m; sourceTree = ""; }; 4520D8D41D417D8E00123472 /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; }; 4521C3BF1F59F3BA00B4C582 /* TextFieldHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldHelper.swift; sourceTree = ""; }; - 4523149D1F7E916B003A428C /* SlideOffAnimatedTransition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SlideOffAnimatedTransition.swift; path = UserInterface/SlideOffAnimatedTransition.swift; sourceTree = ""; }; 4523149F1F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DirectionalPanGestureRecognizer.swift; sourceTree = ""; }; 4523D015206EDC2B00A2AB51 /* LRUCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRUCache.swift; sourceTree = ""; }; 452B998F20A34B6B006F2F9E /* AddContactShareToExistingContactViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactShareToExistingContactViewController.swift; sourceTree = ""; }; @@ -1859,7 +1857,6 @@ 450DF2071E0DD29E003D14BE /* Notifications */, 34FD936E1E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.h */, 34FD936F1E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.m */, - 4523149D1F7E916B003A428C /* SlideOffAnimatedTransition.swift */, 34B3F8331E8DF1700035BE1A /* ViewControllers */, 76EB052B18170B33006006FC /* Views */, ); @@ -3331,7 +3328,6 @@ 4539B5861F79348F007141FF /* PushRegistrationManager.swift in Sources */, 45FBC5D11DF8592E00E9B410 /* SignalCall.swift in Sources */, 340FC8BB204DAC8D007AEB0F /* OWSAddToContactViewController.m in Sources */, - 4523149E1F7E916B003A428C /* SlideOffAnimatedTransition.swift in Sources */, 340FC8C0204DB7D2007AEB0F /* OWSBackupExportJob.m in Sources */, 45F32C232057297A00A300D5 /* MediaPageViewController.swift in Sources */, 3466087420E5649700AFFE73 /* OWSLayerView.swift in Sources */, diff --git a/Signal/src/UserInterface/SlideOffAnimatedTransition.swift b/Signal/src/UserInterface/SlideOffAnimatedTransition.swift deleted file mode 100644 index c3651d5e6..000000000 --- a/Signal/src/UserInterface/SlideOffAnimatedTransition.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -import UIKit -import SignalMessaging - -@objc -class SlideOffAnimatedTransition: NSObject, UIViewControllerAnimatedTransitioning { - - func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - - let containerView = transitionContext.containerView - guard let fromView = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)?.view else { - owsFail("No fromView") - return - } - guard let toView = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)?.view else { - owsFail("No toView") - return - } - - let width = containerView.frame.width - let offsetFrame = fromView.frame.offsetBy(dx: (CurrentAppContext().isRTL ? +width : -width), dy: 0) - toView.frame = fromView.frame - - fromView.layer.shadowRadius = 15.0 - fromView.layer.shadowOpacity = 1.0 - toView.layer.opacity = 0.9 - - containerView.insertSubview(toView, belowSubview: fromView) - UIView.animate(withDuration: transitionDuration(using: transitionContext), delay: 0, options: .curveLinear, animations: { - fromView.frame = offsetFrame - - toView.layer.opacity = 1.0 - fromView.layer.shadowOpacity = 0.1 - }, completion: { _ in - toView.layer.opacity = 1.0 - toView.layer.shadowOpacity = 0 - - fromView.layer.opacity = 1.0 - fromView.layer.shadowOpacity = 0 - - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - - func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { - return 0.3 - } - -} diff --git a/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h b/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h index 8348a091d..64c5d4ecd 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h +++ b/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h @@ -28,9 +28,6 @@ NS_ASSUME_NONNULL_BEGIN - (void)conversationCell:(ConversationViewCell *)cell didLongpressSystemMessageViewItem:(ConversationViewItem *)viewItem; -- (void)didPanWithGestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer - viewItem:(ConversationViewItem *)conversationItem; - #pragma mark - System Cell - (void)tappedNonBlockingIdentityChangeForRecipientId:(nullable NSString *)signalId; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m index 4bc40b0d4..fe158bf3c 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m @@ -70,12 +70,6 @@ NS_ASSUME_NONNULL_BEGIN UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressGesture:)]; [self.contentView addGestureRecognizer:longPress]; - - PanDirectionGestureRecognizer *panGesture = [[PanDirectionGestureRecognizer alloc] - initWithDirection:(CurrentAppContext().isRTL ? PanDirectionLeft : PanDirectionRight) - target:self - action:@selector(handlePanGesture:)]; - [self addGestureRecognizer:panGesture]; } - (void)dealloc @@ -464,17 +458,6 @@ NS_ASSUME_NONNULL_BEGIN } } -- (void)handlePanGesture:(UIPanGestureRecognizer *)panRecognizer -{ - OWSAssert(self.delegate); - - if ([self isGestureInCellHeader:panRecognizer]) { - return; - } - - [self.delegate didPanWithGestureRecognizer:panRecognizer viewItem:self.viewItem]; -} - - (BOOL)isGestureInCellHeader:(UIGestureRecognizer *)sender { OWSAssert(self.viewItem); diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index e8f04599d..35e50c88a 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -145,10 +145,6 @@ typedef enum : NSUInteger { ConversationInputToolbarDelegate, GifPickerViewControllerDelegate> -// Show message info animation -@property (nullable, nonatomic) UIPercentDrivenInteractiveTransition *showMessageDetailsTransition; -@property (nullable, nonatomic) UIPanGestureRecognizer *currentShowMessageDetailsPanGesture; - @property (nonatomic) TSThread *thread; @property (nonatomic, readonly) YapDatabaseConnection *editingDatabaseConnection; @property (nonatomic, readonly) AudioActivity *voiceNoteAudioActivity; @@ -5161,110 +5157,6 @@ typedef enum : NSUInteger { return cell; } -#pragma mark - swipe to show message details - -- (void)didPanWithGestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer - viewItem:(ConversationViewItem *)conversationItem -{ - self.currentShowMessageDetailsPanGesture = gestureRecognizer; - - const CGFloat swipeTranslation - = ([gestureRecognizer translationInView:self.view].x * (CurrentAppContext().isRTL ? +1.f : -1.f)); - const CGFloat ratioComplete = CGFloatClamp(swipeTranslation / self.view.frame.size.width, 0, 1); - - switch (gestureRecognizer.state) { - case UIGestureRecognizerStateBegan: { - TSInteraction *interaction = conversationItem.interaction; - if ([interaction isKindOfClass:[TSIncomingMessage class]] || - [interaction isKindOfClass:[TSOutgoingMessage class]]) { - - // Canary check in case we later have another reason to set navigationController.delegate - we don't - // want to inadvertently clobber it here. - OWSAssert(self.navigationController.delegate == nil); - self.navigationController.delegate = self; - - [self showDetailViewForViewItem:conversationItem]; - } else { - OWSFail(@"%@ Can't show message metadata for message of type: %@", self.logTag, [interaction class]); - } - break; - } - case UIGestureRecognizerStateChanged: { - UIPercentDrivenInteractiveTransition *transition = self.showMessageDetailsTransition; - if (!transition) { - DDLogVerbose(@"%@ transition not set up yet", self.logTag); - return; - } - [transition updateInteractiveTransition:ratioComplete]; - break; - } - case UIGestureRecognizerStateEnded: { - const CGFloat velocity = [gestureRecognizer velocityInView:self.view].x; - - UIPercentDrivenInteractiveTransition *transition = self.showMessageDetailsTransition; - if (!transition) { - DDLogVerbose(@"%@ transition not set up yet", self.logTag); - return; - } - - // Complete the transition if moved sufficiently far or fast - // Note this is trickier for incoming, since you are already on the left, and have less space. - if (ratioComplete > 0.3 || velocity < -800) { - [transition finishInteractiveTransition]; - } else { - [transition cancelInteractiveTransition]; - } - break; - } - case UIGestureRecognizerStateCancelled: - case UIGestureRecognizerStateFailed: { - UIPercentDrivenInteractiveTransition *transition = self.showMessageDetailsTransition; - if (!transition) { - DDLogVerbose(@"%@ transition not set up yet", self.logTag); - return; - } - - [transition cancelInteractiveTransition]; - break; - } - default: - break; - } -} - -- (nullable id)navigationController: - (UINavigationController *)navigationController - animationControllerForOperation:(UINavigationControllerOperation)operation - fromViewController:(UIViewController *)fromVC - toViewController:(UIViewController *)toVC -{ - return [SlideOffAnimatedTransition new]; -} - -- (nullable id) - navigationController:(UINavigationController *)navigationController -interactionControllerForAnimationController:(id)animationController -{ - // We needed to be the navigation controller delegate to specify the interactive "slide left for message details" - // animation But we may not want to be the navigation controller delegate permanently. - self.navigationController.delegate = nil; - - UIPanGestureRecognizer *recognizer = self.currentShowMessageDetailsPanGesture; - if (recognizer == nil) { - // Not in the middle of the `currentShowMessageDetailsPanGesture`, abort. - return nil; - } - - if (recognizer.state == UIGestureRecognizerStateBegan) { - self.showMessageDetailsTransition = [UIPercentDrivenInteractiveTransition new]; - self.showMessageDetailsTransition.completionCurve = UIViewAnimationCurveEaseOut; - } else { - self.showMessageDetailsTransition = nil; - } - - return self.showMessageDetailsTransition; -} - #pragma mark - UICollectionViewDelegate - (void)collectionView:(UICollectionView *)collectionView