From 70a0f0195192456809068fcc2c4e9c3fee5b91ab Mon Sep 17 00:00:00 2001 From: Isaac <> Date: Fri, 14 Nov 2025 05:25:18 +0800 Subject: [PATCH] Fix view once --- .../Sources/ChatTextInputPanelNode.swift | 14 +++++------ .../Sources/VideoMessageCameraScreen.swift | 24 ++++++++++++++----- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelNode.swift b/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelNode.swift index 8b24bc6241..16ebe0de79 100644 --- a/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelNode.swift @@ -1002,6 +1002,10 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg self.recordMoreButton.addTarget(self, action: #selector(self.recordMorePressed), forControlEvents: [.touchUpInside]) self.view.addSubview(self.recordMoreButton.view) + + if let viewForOverlayContent = self.viewForOverlayContent { + viewForOverlayContent.addSubnode(self.viewOnceButton) + } } required init?(coder aDecoder: NSCoder) { @@ -1016,10 +1020,6 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg override public func didLoad() { super.didLoad() - - if let viewForOverlayContent = self.viewForOverlayContent { - viewForOverlayContent.addSubnode(self.viewOnceButton) - } } public func loadTextInputNodeIfNeeded() { @@ -3379,7 +3379,8 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg if case let .audio(_, isLocked) = recordingState { viewOnceIsVisible = isLocked } else if case let .video(_, isLocked) = recordingState { - viewOnceIsVisible = isLocked + let _ = isLocked + //viewOnceIsVisible = isLocked } } if let mediaDraftState = interfaceState.interfaceState.mediaDraftState, case .audio = mediaDraftState.contentType { @@ -3407,9 +3408,6 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg self.recordMoreButton.bounds = CGRect(origin: .zero, size: recordMoreButtonFrame.size) transition.updatePosition(node: self.recordMoreButton, position: recordMoreButtonFrame.center) - if self.viewOnceButton.alpha.isZero && viewOnceIsVisible { - self.viewOnceButton.update(isSelected: self.viewOnce, animated: false) - } if self.recordMoreButton.alpha.isZero && recordMoreIsVisible { self.recordMoreButton.update(isSelected: false, animated: false) } diff --git a/submodules/TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift b/submodules/TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift index 3826db5194..d97c26a6d1 100644 --- a/submodules/TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift +++ b/submodules/TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift @@ -119,6 +119,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { let cameraState: CameraState let containerSize: CGSize let previewFrame: CGRect + let safeInsets: UIEdgeInsets let isPreviewing: Bool let isMuted: Bool let totalDuration: Double @@ -135,6 +136,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { cameraState: CameraState, containerSize: CGSize, previewFrame: CGRect, + safeInsets: UIEdgeInsets, isPreviewing: Bool, isMuted: Bool, totalDuration: Double, @@ -150,6 +152,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { self.cameraState = cameraState self.containerSize = containerSize self.previewFrame = previewFrame + self.safeInsets = safeInsets self.isPreviewing = isPreviewing self.isMuted = isMuted self.totalDuration = totalDuration @@ -169,6 +172,9 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { if lhs.previewFrame != rhs.previewFrame { return false } + if lhs.safeInsets != rhs.safeInsets { + return false + } if lhs.cameraState != rhs.cameraState { return false } @@ -529,6 +535,11 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { let state = context.state let availableSize = context.component.containerSize + var sideInset: CGFloat = 8.0 + if component.safeInsets.bottom <= 32.0 { + sideInset += 18.0 + } + state.cameraState = component.cameraState var viewOnceOffset: CGFloat = 102.0 @@ -619,12 +630,12 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { ) context.add(flipButtonBackground - .position(CGPoint(x: flipButton.size.width / 2.0 + 8.0, y: availableSize.height - flipButton.size.height / 2.0 - 8.0)) + .position(CGPoint(x: flipButton.size.width / 2.0 + sideInset, y: availableSize.height - flipButton.size.height / 2.0 - 8.0)) .appear(.default(scale: true, alpha: true)) .disappear(.default(scale: true, alpha: true)) ) context.add(flipButton - .position(CGPoint(x: flipButton.size.width / 2.0 + 8.0, y: availableSize.height - flipButton.size.height / 2.0 - 8.0)) + .position(CGPoint(x: flipButton.size.width / 2.0 + sideInset, y: availableSize.height - flipButton.size.height / 2.0 - 8.0)) .appear(.default(scale: true, alpha: true)) .disappear(.default(scale: true, alpha: true)) ) @@ -698,13 +709,13 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { ) context.add(flashButtonBackground - .position(CGPoint(x: flipButton.size.width + 8.0 + flashButton.size.width / 2.0 + 11.0, y: availableSize.height - flashButton.size.height / 2.0 - 8.0)) + .position(CGPoint(x: flipButton.size.width + sideInset + flashButton.size.width / 2.0 + 11.0, y: availableSize.height - flashButton.size.height / 2.0 - 8.0)) .appear(.default(scale: true, alpha: true)) .disappear(.default(scale: true, alpha: true)) ) context.add(flashButton - .position(CGPoint(x: flipButton.size.width + 8.0 + flashButton.size.width / 2.0 + 11.0, y: availableSize.height - flashButton.size.height / 2.0 - 8.0)) + .position(CGPoint(x: flipButton.size.width + sideInset + flashButton.size.width / 2.0 + 11.0, y: availableSize.height - flashButton.size.height / 2.0 - 8.0)) .appear(.default(scale: true, alpha: true)) .disappear(.default(scale: true, alpha: true)) ) @@ -751,7 +762,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { transition: context.transition ) context.add(viewOnceButton - .position(CGPoint(x: availableSize.width - viewOnceButton.size.width / 2.0 - 8.0, y: availableSize.height - viewOnceButton.size.height / 2.0 - 8.0 - viewOnceOffset)) + .position(CGPoint(x: availableSize.width - viewOnceButton.size.width / 2.0 - sideInset, y: availableSize.height - viewOnceButton.size.height / 2.0 - 8.0 - viewOnceOffset)) .appear(.default(scale: true, alpha: true)) .disappear(.default(scale: true, alpha: true)) ) @@ -791,7 +802,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent { transition: context.transition ) context.add(recordMoreButton - .position(CGPoint(x: availableSize.width - recordMoreButton.size.width / 2.0 - 8.0, y: availableSize.height - recordMoreButton.size.height / 2.0 - 22.0)) + .position(CGPoint(x: availableSize.width - recordMoreButton.size.width / 2.0 - sideInset, y: availableSize.height - recordMoreButton.size.height / 2.0 - 22.0)) .appear(.default(scale: true, alpha: true)) .disappear(.default(scale: true, alpha: true)) ) @@ -1546,6 +1557,7 @@ public class VideoMessageCameraScreen: ViewController { cameraState: self.cameraState, containerSize: backgroundFrame.size, previewFrame: previewFrame, + safeInsets: layout.safeInsets, isPreviewing: self.previewState != nil || self.transitioningToPreview, isMuted: self.previewState?.isMuted ?? true, totalDuration: self.previewState?.composition.duration.seconds ?? 0.0,