diff --git a/submodules/TelegramCallsUI/Sources/VoiceChatController.swift b/submodules/TelegramCallsUI/Sources/VoiceChatController.swift index a6fe0e6ebd..2dc3efbc70 100644 --- a/submodules/TelegramCallsUI/Sources/VoiceChatController.swift +++ b/submodules/TelegramCallsUI/Sources/VoiceChatController.swift @@ -1670,6 +1670,8 @@ public final class VoiceChatController: ViewController { self.contentContainer.view.bounds = initialBounds }, completion: { _ in if self.actionButton.supernode !== self.bottomPanelNode { + self.audioOutputNode.isHidden = false + self.leaveNode.isHidden = false self.audioOutputNode.layer.removeAllAnimations() self.leaveNode.layer.removeAllAnimations() self.bottomPanelNode.addSubnode(self.audioOutputNode) @@ -1906,24 +1908,12 @@ public final class VoiceChatController: ViewController { } override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { -// if let callState = self.callState, case .connected = callState.networkState, let muteState = callState.muteState, !muteState.canUnmute { -// return false -// } -// if let recognizer = gestureRecognizer as? UIPanGestureRecognizer { -// let location = recognizer.location(in: self.view) -// if let view = super.hitTest(location, with: nil) { -// if let gestureRecognizers = view.gestureRecognizers, view != self.view { -// for gestureRecognizer in gestureRecognizers { -// if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer, gestureRecognizer.isEnabled { -// if panGestureRecognizer.state != .began { -// panGestureRecognizer.isEnabled = false -// panGestureRecognizer.isEnabled = true -// } -// } -// } -// } -// } -// } + if gestureRecognizer is DirectionalPanGestureRecognizer { + let location = gestureRecognizer.location(in: self.bottomPanelNode.view) + if self.audioOutputNode.frame.contains(location) || self.leaveNode.frame.contains(location) { + return false + } + } return true } @@ -2263,6 +2253,12 @@ public final class VoiceChatController: ViewController { overlayController?.animateOut(reclaim: true, completion: { [weak self] immediate in if let strongSelf = self, immediate { strongSelf.controllerNode.bottomPanelNode.addSubnode(strongSelf.controllerNode.actionButton) + strongSelf.controllerNode.bottomPanelNode.addSubnode(strongSelf.controllerNode.audioOutputNode) + strongSelf.controllerNode.bottomPanelNode.addSubnode(strongSelf.controllerNode.leaveNode) + + if immediate, let layout = strongSelf.validLayout { + strongSelf.containerLayoutUpdated(layout, transition: .immediate) + } } }) strongSelf.reclaimActionButton = nil diff --git a/submodules/TelegramCallsUI/Sources/VoiceChatOverlayController.swift b/submodules/TelegramCallsUI/Sources/VoiceChatOverlayController.swift index 931955f57c..0be01d7c31 100644 --- a/submodules/TelegramCallsUI/Sources/VoiceChatOverlayController.swift +++ b/submodules/TelegramCallsUI/Sources/VoiceChatOverlayController.swift @@ -95,21 +95,21 @@ public final class VoiceChatOverlayController: ViewController { return } + self.initialLeftButtonPosition = leftButton.position + self.initialRightButtonPosition = rightButton.position + actionButton.update(snap: true, animated: !self.isSlidOffscreen && !self.isButtonHidden) if self.isSlidOffscreen { - leftButton.isHidden = false - rightButton.isHidden = false + leftButton.isHidden = true + rightButton.isHidden = true actionButton.layer.sublayerTransform = CATransform3DMakeTranslation(slideOffset, 0.0, 0.0) return } else if self.isButtonHidden { - leftButton.isHidden = false - rightButton.isHidden = false + leftButton.isHidden = true + rightButton.isHidden = true actionButton.isHidden = true return } - - self.initialLeftButtonPosition = leftButton.position - self.initialRightButtonPosition = rightButton.position let center = CGPoint(x: actionButton.frame.width / 2.0, y: actionButton.frame.height / 2.0) leftButton.layer.animatePosition(from: leftButton.position, to: center, duration: 0.15, timingFunction: CAMediaTimingFunctionName.easeOut.rawValue, removeOnCompletion: false, completion: { [weak leftButton] _ in @@ -164,6 +164,15 @@ public final class VoiceChatOverlayController: ViewController { actionButton.layer.sublayerTransform = CATransform3DIdentity actionButton.update(snap: false, animated: false) actionButton.position = CGPoint(x: targetPosition.x, y: 268.0 / 2.0) + + leftButton.isHidden = false + rightButton.isHidden = false + if let leftButtonPosition = self.initialLeftButtonPosition { + leftButton.position = CGPoint(x: actionButton.position.x + leftButtonPosition.x, y: actionButton.position.y) + } + if let rightButtonPosition = self.initialRightButtonPosition { + rightButton.position = CGPoint(x: actionButton.position.x + rightButtonPosition.x, y: actionButton.position.y) + } completion(true) } else if self.isButtonHidden { actionButton.isHidden = false @@ -171,6 +180,15 @@ public final class VoiceChatOverlayController: ViewController { actionButton.layer.sublayerTransform = CATransform3DIdentity actionButton.update(snap: false, animated: false) actionButton.position = CGPoint(x: targetPosition.x, y: 268.0 / 2.0) + + leftButton.isHidden = false + rightButton.isHidden = false + if let leftButtonPosition = self.initialLeftButtonPosition { + leftButton.position = CGPoint(x: actionButton.position.x + leftButtonPosition.x, y: actionButton.position.y) + } + if let rightButtonPosition = self.initialRightButtonPosition { + rightButton.position = CGPoint(x: actionButton.position.x + rightButtonPosition.x, y: actionButton.position.y) + } completion(true) } else { self.animating = true @@ -204,10 +222,10 @@ public final class VoiceChatOverlayController: ViewController { let center = CGPoint(x: actionButton.frame.width / 2.0, y: actionButton.frame.height / 2.0) leftButton.isHidden = false - leftButton.layer.animatePosition(from: center, to: leftButtonPosition, duration: 0.25, delay: 0.1, timingFunction: CAMediaTimingFunctionName.easeOut.rawValue, removeOnCompletion: false) + leftButton.layer.animatePosition(from: center, to: leftButtonPosition, duration: 0.25, delay: 0.12, timingFunction: CAMediaTimingFunctionName.easeOut.rawValue, removeOnCompletion: false) rightButton.isHidden = false - rightButton.layer.animatePosition(from: center, to: rightButtonPosition, duration: 0.25, delay: 0.1, timingFunction: CAMediaTimingFunctionName.easeOut.rawValue, removeOnCompletion: false) + rightButton.layer.animatePosition(from: center, to: rightButtonPosition, duration: 0.25, delay: 0.12, timingFunction: CAMediaTimingFunctionName.easeOut.rawValue, removeOnCompletion: false) } actionButton.update(snap: false, animated: true)