diff --git a/submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGVideoMessageCaptureController.h b/submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGVideoMessageCaptureController.h index eb81ffdcd6..73b0488a07 100644 --- a/submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGVideoMessageCaptureController.h +++ b/submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGVideoMessageCaptureController.h @@ -21,7 +21,7 @@ @property (nonatomic, copy) void (^micLevel)(CGFloat level); @property (nonatomic, copy) void (^onDuration)(NSTimeInterval duration); @property (nonatomic, copy) void(^finishedWithVideo)(NSURL *videoURL, UIImage *previewImage, NSUInteger fileSize, NSTimeInterval duration, CGSize dimensions, id liveUploadData, TGVideoEditAdjustments *adjustments, bool, int32_t); -@property (nonatomic, copy) void(^onDismiss)(bool isAuto); +@property (nonatomic, copy) void(^onDismiss)(bool isAuto, bool isCancelled); @property (nonatomic, copy) void(^onStop)(void); @property (nonatomic, copy) void(^onCancel)(void); @property (nonatomic, copy) void(^didDismiss)(void); diff --git a/submodules/LegacyComponents/Sources/TGModernConversationInputMicButton.m b/submodules/LegacyComponents/Sources/TGModernConversationInputMicButton.m index 89f2dd9983..b47a97ccb1 100644 --- a/submodules/LegacyComponents/Sources/TGModernConversationInputMicButton.m +++ b/submodules/LegacyComponents/Sources/TGModernConversationInputMicButton.m @@ -457,6 +457,8 @@ static const CGFloat outerCircleMinScale = innerCircleRadius / outerCircleRadius _lockPanelWrapperView.transform = CGAffineTransformMakeTranslation(0.0f, 100.0f); _lockPanelWrapperView.alpha = 0.0f; + _lock.transform = CGAffineTransformIdentity; + if (iosMajorVersion() >= 8) { [UIView animateWithDuration:0.50 delay:0.0 usingSpringWithDamping:0.55f initialSpringVelocity:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{ _innerCircleView.transform = CGAffineTransformIdentity; @@ -548,6 +550,10 @@ static const CGFloat outerCircleMinScale = innerCircleRadius / outerCircleRadius } - (void)animateLock { + if (!_animatedIn) { + return; + } + _lockView.lockness = 1.0f; [_lock updateLockness:1.0]; @@ -718,10 +724,6 @@ static const CGFloat outerCircleMinScale = innerCircleRadius / outerCircleRadius return false; } else if (distanceX < -100.0 && !_xFeedbackOccured) { - if (iosMajorVersion() >= 10) { - UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium]; - [generator impactOccurred]; - } _xFeedbackOccured = true; } else if (distanceX > -100.0) { _xFeedbackOccured = false; @@ -732,10 +734,6 @@ static const CGFloat outerCircleMinScale = innerCircleRadius / outerCircleRadius return false; } else if (distanceY < -60.0 && !_yFeedbackOccured) { - if (iosMajorVersion() >= 10) { - UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium]; - [generator impactOccurred]; - } _yFeedbackOccured = true; } else if (distanceY > -60.0) { _yFeedbackOccured = false; diff --git a/submodules/LegacyComponents/Sources/TGVideoMessageCaptureController.m b/submodules/LegacyComponents/Sources/TGVideoMessageCaptureController.m index cb36c397d6..cf05bf2cba 100644 --- a/submodules/LegacyComponents/Sources/TGVideoMessageCaptureController.m +++ b/submodules/LegacyComponents/Sources/TGVideoMessageCaptureController.m @@ -628,7 +628,7 @@ typedef enum _dismissed = cancelled; if (self.onDismiss != nil) - self.onDismiss(_automaticDismiss); + self.onDismiss(_automaticDismiss, cancelled); if (_player != nil) [_player pause]; diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 243d159f44..94ca4540d0 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -2550,7 +2550,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G $0.updatedInputTextPanelState { panelState in if let videoRecorder = videoRecorder { if panelState.mediaRecordingState == nil { - return panelState.withUpdatedMediaRecordingState(.video(status: .recording(videoRecorder.audioStatus), isLocked: false)) + return panelState.withUpdatedMediaRecordingState(.video(status: .recording(videoRecorder.audioStatus), isLocked: strongSelf.lockMediaRecordingRequestId == strongSelf.beginMediaRecordingRequestId)) } } else { return panelState.withUpdatedMediaRecordingState(nil) @@ -2562,12 +2562,11 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if let videoRecorder = videoRecorder { strongSelf.recorderFeedback?.impact(.light) - videoRecorder.onDismiss = { - if let strongSelf = self { - strongSelf.beginMediaRecordingRequestId += 1 - strongSelf.lockMediaRecordingRequestId = nil - strongSelf.videoRecorder.set(.single(nil)) - } + videoRecorder.onDismiss = { [weak self] isCancelled in + self?.chatDisplayNode.updateRecordedMediaDeleted(isCancelled) + self?.beginMediaRecordingRequestId += 1 + self?.lockMediaRecordingRequestId = nil + self?.videoRecorder.set(.single(nil)) } videoRecorder.onStop = { if let strongSelf = self { diff --git a/submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift b/submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift index 6647a84968..944230b6c2 100644 --- a/submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift @@ -1011,9 +1011,9 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { if !deltaOffset.isZero { audioRecordingCancelIndicator.layer.animatePosition(from: CGPoint(x: deltaOffset, y: 0.0), to: CGPoint(), duration: 0.3, additive: true) } - } else if audioRecordingCancelIndicator.layer.animation(forKey: "slide_juggle") == nil { + } else if audioRecordingCancelIndicator.layer.animation(forKey: "slide_juggle") == nil, baseWidth > 320 { let slideJuggleAnimation = CABasicAnimation(keyPath: "transform") - slideJuggleAnimation.toValue = CATransform3DMakeTranslation(-6, 0, 0) + slideJuggleAnimation.toValue = CATransform3DMakeTranslation(6, 0, 0) slideJuggleAnimation.duration = 1 slideJuggleAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut) slideJuggleAnimation.autoreverses = true @@ -1023,11 +1023,9 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { let audioRecordingTimeSize = audioRecordingTimeNode.measure(CGSize(width: 200.0, height: 100.0)) - let cancelMinX = audioRecordingCancelIndicator.alpha > 0.5 ? audioRecordingCancelIndicator.frame.minX : width - audioRecordingInfoContainerNode.frame = CGRect( origin: CGPoint( - x: min(leftInset, cancelMinX - audioRecordingTimeSize.width - 8.0 - 28.0), + x: min(leftInset, width - audioRecordingTimeSize.width - 8.0 - 28.0), y: 0.0 ), size: CGSize(width: baseWidth, height: panelHeight) @@ -1051,7 +1049,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { self.addSubnode(audioRecordingDotNode) } - animateDotAppearing = transition.isAnimated && !isLocked && !hideInfo + animateDotAppearing = transition.isAnimated && !hideInfo audioRecordingDotNode.frame = CGRect(origin: CGPoint(x: leftInset + 2.0 - UIScreenPixel, y: panelHeight - 44 + 1), size: CGSize(width: 40.0, height: 40)) if animateDotAppearing { @@ -1074,9 +1072,10 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { } if hideInfo { - audioRecordingDotNode.layer.animateAlpha(from: audioRecordingDotNode.alpha, to: 0, duration: 0.15, delay: 0, removeOnCompletion: false) - audioRecordingTimeNode.layer.animateAlpha(from: audioRecordingTimeNode.alpha, to: 0, duration: 0.15, delay: 0, removeOnCompletion: false) - audioRecordingCancelIndicator.layer.animateAlpha(from: audioRecordingCancelIndicator.alpha, to: 0, duration: 0.15, delay: 0, removeOnCompletion: false) + audioRecordingDotNode.layer.removeAllAnimations() + audioRecordingDotNode.layer.animateAlpha(from: CGFloat(audioRecordingDotNode.layer.presentation()?.opacity ?? 1), to: 0, duration: 0.15, delay: 0, removeOnCompletion: false) + audioRecordingTimeNode.layer.animateAlpha(from: CGFloat(audioRecordingTimeNode.layer.presentation()?.opacity ?? 1), to: 0, duration: 0.15, delay: 0, removeOnCompletion: false) + audioRecordingCancelIndicator.layer.animateAlpha(from: CGFloat(audioRecordingCancelIndicator.layer.presentation()?.opacity ?? 1), to: 0, duration: 0.15, delay: 0, removeOnCompletion: false) } } else { self.actionButtons.micButton.audioRecorder = nil @@ -1091,8 +1090,6 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { if let audioRecordingInfoContainerNode = self.audioRecordingInfoContainerNode { self.audioRecordingInfoContainerNode = nil - //transition.updateTransformScale(node: audioRecordingInfoContainerNode, scale: 0) - //transition.updatePosition(node: audioRecordingInfoContainerNode, position: CGPoint(x: audioRecordingInfoContainerNode.position.x - 10, y: audioRecordingInfoContainerNode.position.y)) transition.updateAlpha(node: audioRecordingInfoContainerNode, alpha: 0) { [weak audioRecordingInfoContainerNode] _ in audioRecordingInfoContainerNode?.removeFromSupernode() } @@ -1104,7 +1101,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { self?.audioRecordingDotNode = nil - audioRecordingDotNode.layer.animateScale(from: 1.0, to: 0.3, duration: 0.15, delay: 0, removeOnCompletion: false) + audioRecordingDotNode.layer.animateScale(from: CGFloat(audioRecordingDotNode.layer.presentation()?.opacity ?? 1), to: 0.3, duration: 0.15, delay: 0, removeOnCompletion: false) audioRecordingDotNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, delay: 0, removeOnCompletion: false) { [weak audioRecordingDotNode] _ in audioRecordingDotNode?.removeFromSupernode() } diff --git a/submodules/TelegramUI/Sources/LegacyInstantVideoController.swift b/submodules/TelegramUI/Sources/LegacyInstantVideoController.swift index 1d7aa884ef..eaf43ed8a0 100644 --- a/submodules/TelegramUI/Sources/LegacyInstantVideoController.swift +++ b/submodules/TelegramUI/Sources/LegacyInstantVideoController.swift @@ -29,7 +29,7 @@ final class InstantVideoControllerRecordingStatus { final class InstantVideoController: LegacyController, StandalonePresentableController { private var captureController: TGVideoMessageCaptureController? - var onDismiss: (() -> Void)? + var onDismiss: ((Bool) -> Void)? var onStop: (() -> Void)? private let micLevelValue = ValuePromise(0.0) @@ -59,8 +59,8 @@ final class InstantVideoController: LegacyController, StandalonePresentableContr captureController.onDuration = { [weak self] duration in self?.durationValue.set(duration) } - captureController.onDismiss = { [weak self] _ in - self?.onDismiss?() + captureController.onDismiss = { [weak self] _, isCancelled in + self?.onDismiss?(isCancelled) } captureController.onStop = { [weak self] in self?.onStop?()