mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Apply patch
This commit is contained in:
parent
923ba33306
commit
66fa48e404
@ -21,7 +21,7 @@
|
|||||||
@property (nonatomic, copy) void (^micLevel)(CGFloat level);
|
@property (nonatomic, copy) void (^micLevel)(CGFloat level);
|
||||||
@property (nonatomic, copy) void (^onDuration)(NSTimeInterval duration);
|
@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(^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(^onStop)(void);
|
||||||
@property (nonatomic, copy) void(^onCancel)(void);
|
@property (nonatomic, copy) void(^onCancel)(void);
|
||||||
@property (nonatomic, copy) void(^didDismiss)(void);
|
@property (nonatomic, copy) void(^didDismiss)(void);
|
||||||
|
@ -457,6 +457,8 @@ static const CGFloat outerCircleMinScale = innerCircleRadius / outerCircleRadius
|
|||||||
_lockPanelWrapperView.transform = CGAffineTransformMakeTranslation(0.0f, 100.0f);
|
_lockPanelWrapperView.transform = CGAffineTransformMakeTranslation(0.0f, 100.0f);
|
||||||
_lockPanelWrapperView.alpha = 0.0f;
|
_lockPanelWrapperView.alpha = 0.0f;
|
||||||
|
|
||||||
|
_lock.transform = CGAffineTransformIdentity;
|
||||||
|
|
||||||
if (iosMajorVersion() >= 8) {
|
if (iosMajorVersion() >= 8) {
|
||||||
[UIView animateWithDuration:0.50 delay:0.0 usingSpringWithDamping:0.55f initialSpringVelocity:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{
|
[UIView animateWithDuration:0.50 delay:0.0 usingSpringWithDamping:0.55f initialSpringVelocity:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{
|
||||||
_innerCircleView.transform = CGAffineTransformIdentity;
|
_innerCircleView.transform = CGAffineTransformIdentity;
|
||||||
@ -548,6 +550,10 @@ static const CGFloat outerCircleMinScale = innerCircleRadius / outerCircleRadius
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)animateLock {
|
- (void)animateLock {
|
||||||
|
if (!_animatedIn) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_lockView.lockness = 1.0f;
|
_lockView.lockness = 1.0f;
|
||||||
[_lock updateLockness:1.0];
|
[_lock updateLockness:1.0];
|
||||||
|
|
||||||
@ -718,10 +724,6 @@ static const CGFloat outerCircleMinScale = innerCircleRadius / outerCircleRadius
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
} else if (distanceX < -100.0 && !_xFeedbackOccured) {
|
} else if (distanceX < -100.0 && !_xFeedbackOccured) {
|
||||||
if (iosMajorVersion() >= 10) {
|
|
||||||
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
|
|
||||||
[generator impactOccurred];
|
|
||||||
}
|
|
||||||
_xFeedbackOccured = true;
|
_xFeedbackOccured = true;
|
||||||
} else if (distanceX > -100.0) {
|
} else if (distanceX > -100.0) {
|
||||||
_xFeedbackOccured = false;
|
_xFeedbackOccured = false;
|
||||||
@ -732,10 +734,6 @@ static const CGFloat outerCircleMinScale = innerCircleRadius / outerCircleRadius
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
} else if (distanceY < -60.0 && !_yFeedbackOccured) {
|
} else if (distanceY < -60.0 && !_yFeedbackOccured) {
|
||||||
if (iosMajorVersion() >= 10) {
|
|
||||||
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
|
|
||||||
[generator impactOccurred];
|
|
||||||
}
|
|
||||||
_yFeedbackOccured = true;
|
_yFeedbackOccured = true;
|
||||||
} else if (distanceY > -60.0) {
|
} else if (distanceY > -60.0) {
|
||||||
_yFeedbackOccured = false;
|
_yFeedbackOccured = false;
|
||||||
|
@ -628,7 +628,7 @@ typedef enum
|
|||||||
_dismissed = cancelled;
|
_dismissed = cancelled;
|
||||||
|
|
||||||
if (self.onDismiss != nil)
|
if (self.onDismiss != nil)
|
||||||
self.onDismiss(_automaticDismiss);
|
self.onDismiss(_automaticDismiss, cancelled);
|
||||||
|
|
||||||
if (_player != nil)
|
if (_player != nil)
|
||||||
[_player pause];
|
[_player pause];
|
||||||
|
@ -2550,7 +2550,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
$0.updatedInputTextPanelState { panelState in
|
$0.updatedInputTextPanelState { panelState in
|
||||||
if let videoRecorder = videoRecorder {
|
if let videoRecorder = videoRecorder {
|
||||||
if panelState.mediaRecordingState == nil {
|
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 {
|
} else {
|
||||||
return panelState.withUpdatedMediaRecordingState(nil)
|
return panelState.withUpdatedMediaRecordingState(nil)
|
||||||
@ -2562,12 +2562,11 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
if let videoRecorder = videoRecorder {
|
if let videoRecorder = videoRecorder {
|
||||||
strongSelf.recorderFeedback?.impact(.light)
|
strongSelf.recorderFeedback?.impact(.light)
|
||||||
|
|
||||||
videoRecorder.onDismiss = {
|
videoRecorder.onDismiss = { [weak self] isCancelled in
|
||||||
if let strongSelf = self {
|
self?.chatDisplayNode.updateRecordedMediaDeleted(isCancelled)
|
||||||
strongSelf.beginMediaRecordingRequestId += 1
|
self?.beginMediaRecordingRequestId += 1
|
||||||
strongSelf.lockMediaRecordingRequestId = nil
|
self?.lockMediaRecordingRequestId = nil
|
||||||
strongSelf.videoRecorder.set(.single(nil))
|
self?.videoRecorder.set(.single(nil))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
videoRecorder.onStop = {
|
videoRecorder.onStop = {
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
|
@ -1011,9 +1011,9 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
|||||||
if !deltaOffset.isZero {
|
if !deltaOffset.isZero {
|
||||||
audioRecordingCancelIndicator.layer.animatePosition(from: CGPoint(x: deltaOffset, y: 0.0), to: CGPoint(), duration: 0.3, additive: true)
|
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")
|
let slideJuggleAnimation = CABasicAnimation(keyPath: "transform")
|
||||||
slideJuggleAnimation.toValue = CATransform3DMakeTranslation(-6, 0, 0)
|
slideJuggleAnimation.toValue = CATransform3DMakeTranslation(6, 0, 0)
|
||||||
slideJuggleAnimation.duration = 1
|
slideJuggleAnimation.duration = 1
|
||||||
slideJuggleAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
|
slideJuggleAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
|
||||||
slideJuggleAnimation.autoreverses = true
|
slideJuggleAnimation.autoreverses = true
|
||||||
@ -1023,11 +1023,9 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
|||||||
|
|
||||||
let audioRecordingTimeSize = audioRecordingTimeNode.measure(CGSize(width: 200.0, height: 100.0))
|
let audioRecordingTimeSize = audioRecordingTimeNode.measure(CGSize(width: 200.0, height: 100.0))
|
||||||
|
|
||||||
let cancelMinX = audioRecordingCancelIndicator.alpha > 0.5 ? audioRecordingCancelIndicator.frame.minX : width
|
|
||||||
|
|
||||||
audioRecordingInfoContainerNode.frame = CGRect(
|
audioRecordingInfoContainerNode.frame = CGRect(
|
||||||
origin: CGPoint(
|
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
|
y: 0.0
|
||||||
),
|
),
|
||||||
size: CGSize(width: baseWidth, height: panelHeight)
|
size: CGSize(width: baseWidth, height: panelHeight)
|
||||||
@ -1051,7 +1049,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
|||||||
self.addSubnode(audioRecordingDotNode)
|
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))
|
audioRecordingDotNode.frame = CGRect(origin: CGPoint(x: leftInset + 2.0 - UIScreenPixel, y: panelHeight - 44 + 1), size: CGSize(width: 40.0, height: 40))
|
||||||
if animateDotAppearing {
|
if animateDotAppearing {
|
||||||
@ -1074,9 +1072,10 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if hideInfo {
|
if hideInfo {
|
||||||
audioRecordingDotNode.layer.animateAlpha(from: audioRecordingDotNode.alpha, to: 0, duration: 0.15, delay: 0, removeOnCompletion: false)
|
audioRecordingDotNode.layer.removeAllAnimations()
|
||||||
audioRecordingTimeNode.layer.animateAlpha(from: audioRecordingTimeNode.alpha, to: 0, duration: 0.15, delay: 0, removeOnCompletion: false)
|
audioRecordingDotNode.layer.animateAlpha(from: CGFloat(audioRecordingDotNode.layer.presentation()?.opacity ?? 1), to: 0, duration: 0.15, delay: 0, removeOnCompletion: false)
|
||||||
audioRecordingCancelIndicator.layer.animateAlpha(from: audioRecordingCancelIndicator.alpha, 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 {
|
} else {
|
||||||
self.actionButtons.micButton.audioRecorder = nil
|
self.actionButtons.micButton.audioRecorder = nil
|
||||||
@ -1091,8 +1090,6 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
|||||||
|
|
||||||
if let audioRecordingInfoContainerNode = self.audioRecordingInfoContainerNode {
|
if let audioRecordingInfoContainerNode = self.audioRecordingInfoContainerNode {
|
||||||
self.audioRecordingInfoContainerNode = nil
|
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
|
transition.updateAlpha(node: audioRecordingInfoContainerNode, alpha: 0) { [weak audioRecordingInfoContainerNode] _ in
|
||||||
audioRecordingInfoContainerNode?.removeFromSupernode()
|
audioRecordingInfoContainerNode?.removeFromSupernode()
|
||||||
}
|
}
|
||||||
@ -1104,7 +1101,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
|||||||
|
|
||||||
self?.audioRecordingDotNode = nil
|
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.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, delay: 0, removeOnCompletion: false) { [weak audioRecordingDotNode] _ in
|
||||||
audioRecordingDotNode?.removeFromSupernode()
|
audioRecordingDotNode?.removeFromSupernode()
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ final class InstantVideoControllerRecordingStatus {
|
|||||||
final class InstantVideoController: LegacyController, StandalonePresentableController {
|
final class InstantVideoController: LegacyController, StandalonePresentableController {
|
||||||
private var captureController: TGVideoMessageCaptureController?
|
private var captureController: TGVideoMessageCaptureController?
|
||||||
|
|
||||||
var onDismiss: (() -> Void)?
|
var onDismiss: ((Bool) -> Void)?
|
||||||
var onStop: (() -> Void)?
|
var onStop: (() -> Void)?
|
||||||
|
|
||||||
private let micLevelValue = ValuePromise<Float>(0.0)
|
private let micLevelValue = ValuePromise<Float>(0.0)
|
||||||
@ -59,8 +59,8 @@ final class InstantVideoController: LegacyController, StandalonePresentableContr
|
|||||||
captureController.onDuration = { [weak self] duration in
|
captureController.onDuration = { [weak self] duration in
|
||||||
self?.durationValue.set(duration)
|
self?.durationValue.set(duration)
|
||||||
}
|
}
|
||||||
captureController.onDismiss = { [weak self] _ in
|
captureController.onDismiss = { [weak self] _, isCancelled in
|
||||||
self?.onDismiss?()
|
self?.onDismiss?(isCancelled)
|
||||||
}
|
}
|
||||||
captureController.onStop = { [weak self] in
|
captureController.onStop = { [weak self] in
|
||||||
self?.onStop?()
|
self?.onStop?()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user