From 4fa367c491770b74eb4ef6f7fa6f53961ebd391c Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 29 Oct 2024 13:07:02 +0400 Subject: [PATCH] Gift setup improvements --- .../Sources/GiftSetupScreen.swift | 71 +++++++++++++------ .../ListMultilineTextFieldItemComponent.swift | 14 ++++ 2 files changed, 63 insertions(+), 22 deletions(-) diff --git a/submodules/TelegramUI/Components/Gifts/GiftSetupScreen/Sources/GiftSetupScreen.swift b/submodules/TelegramUI/Components/Gifts/GiftSetupScreen/Sources/GiftSetupScreen.swift index e503f27700..465ffb2c88 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftSetupScreen/Sources/GiftSetupScreen.swift +++ b/submodules/TelegramUI/Components/Gifts/GiftSetupScreen/Sources/GiftSetupScreen.swift @@ -417,6 +417,33 @@ final class GiftSetupScreenComponent: Component { } } + @objc private func previewTap() { + func hasFirstResponder(_ view: UIView) -> Bool { + if view.isFirstResponder { + return true + } + for subview in view.subviews { + if hasFirstResponder(subview) { + return true + } + } + return false + } + + self.currentInputMode = .keyboard + if hasFirstResponder(self) { + if let titleView = self.introSection.findTaggedView(tag: self.textInputTag) as? ListMultilineTextFieldItemComponent.View { + if titleView.isActive { + titleView.deactivateInput() + } else { + self.endEditing(true) + } + } + } else { + self.state?.updated(transition: .spring(duration: 0.4)) + } + } + func update(component: GiftSetupScreenComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: ComponentTransition) -> CGSize { self.isUpdating = true defer { @@ -693,28 +720,7 @@ final class GiftSetupScreenComponent: Component { )))) self.resetText = nil - - var inputHeight: CGFloat = 0.0 - inputHeight += self.updateInputMediaNode( - component: component, - availableSize: availableSize, - bottomInset: environment.safeInsets.bottom, - inputHeight: 0.0, - effectiveInputHeight: environment.deviceMetrics.standardInputHeight(inLandscape: false), - metrics: environment.metrics, - deviceMetrics: environment.deviceMetrics, - transition: transition - ) - if self.inputMediaNode == nil { - if environment.inputHeight.isZero && self.textInputState.isEditing, let previousInputHeight = self.previousInputHeight { - inputHeight = previousInputHeight - } else { - inputHeight = environment.inputHeight - } - } - let peerName = self.peerMap[component.peerId]?.compactDisplayTitle ?? "" - let introFooter: AnyComponent? switch component.subject { case .premium: @@ -751,7 +757,26 @@ final class GiftSetupScreenComponent: Component { } contentHeight += introSectionSize.height contentHeight += sectionSpacing - + + var inputHeight: CGFloat = 0.0 + inputHeight += self.updateInputMediaNode( + component: component, + availableSize: availableSize, + bottomInset: environment.safeInsets.bottom, + inputHeight: 0.0, + effectiveInputHeight: environment.deviceMetrics.standardInputHeight(inLandscape: false), + metrics: environment.metrics, + deviceMetrics: environment.deviceMetrics, + transition: transition + ) + if self.inputMediaNode == nil { + if environment.inputHeight.isZero && self.textInputState.isEditing, let previousInputHeight = self.previousInputHeight { + inputHeight = previousInputHeight + } else { + inputHeight = environment.inputHeight + } + } + let listItemParams = ListViewItemLayoutParams(width: availableSize.width - sideInset * 2.0, leftInset: 0.0, rightInset: 0.0, availableHeight: 10000.0, isStandalone: true) if let accountPeer = self.peerMap[component.context.account.peerId] { let subject: ChatGiftPreviewItem.Subject @@ -793,6 +818,8 @@ final class GiftSetupScreenComponent: Component { if introContentView.superview == nil { if let placeholderView = self.introSection.findTaggedView(tag: self.introPlaceholderTag) { placeholderView.addSubview(introContentView) + + placeholderView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.previewTap))) } } transition.setFrame(view: introContentView, frame: CGRect(origin: CGPoint(), size: introContentSize)) diff --git a/submodules/TelegramUI/Components/ListMultilineTextFieldItemComponent/Sources/ListMultilineTextFieldItemComponent.swift b/submodules/TelegramUI/Components/ListMultilineTextFieldItemComponent/Sources/ListMultilineTextFieldItemComponent.swift index 7623336e54..415ca72422 100644 --- a/submodules/TelegramUI/Components/ListMultilineTextFieldItemComponent/Sources/ListMultilineTextFieldItemComponent.swift +++ b/submodules/TelegramUI/Components/ListMultilineTextFieldItemComponent/Sources/ListMultilineTextFieldItemComponent.swift @@ -227,12 +227,26 @@ public final class ListMultilineTextFieldItemComponent: Component { return false } + public var isActive: Bool { + if let textFieldView = self.textField.view as? TextFieldComponent.View { + return textFieldView.isActive + } else { + return false + } + } + public func activateInput() { if let textFieldView = self.textField.view as? TextFieldComponent.View { textFieldView.activateInput() } } + public func deactivateInput() { + if let textFieldView = self.textField.view as? TextFieldComponent.View { + textFieldView.deactivateInput() + } + } + public func insertText(text: NSAttributedString) { if let textFieldView = self.textField.view as? TextFieldComponent.View { textFieldView.insertText(text)