From 62e53f89608e147985441c7f748c29dcb319acb8 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 15 Apr 2025 00:22:05 +0400 Subject: [PATCH] Various fixes --- .../Sources/ChatListController.swift | 1 + .../ContextUI/Sources/ContextController.swift | 14 +++++++++++++ .../Sources/ChatUserInfoItem.swift | 20 ++++++++++--------- .../TelegramUI/Sources/ChatController.swift | 6 ++++-- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/submodules/ChatListUI/Sources/ChatListController.swift b/submodules/ChatListUI/Sources/ChatListController.swift index 843d60fc0c..fe88c71cd7 100644 --- a/submodules/ChatListUI/Sources/ChatListController.swift +++ b/submodules/ChatListUI/Sources/ChatListController.swift @@ -1523,6 +1523,7 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController if let self, let contextController { if animateIn { contextController.statusBar.statusBarStyle = .Ignore + contextController.animateDismissalIfNeeded() self.present(contextController, in: .window(.root)) return { contextController.dismissNow() diff --git a/submodules/ContextUI/Sources/ContextController.swift b/submodules/ContextUI/Sources/ContextController.swift index 58711d3b14..f88dbae702 100644 --- a/submodules/ContextUI/Sources/ContextController.swift +++ b/submodules/ContextUI/Sources/ContextController.swift @@ -1365,6 +1365,16 @@ final class ContextControllerNode: ViewControllerTracingNode, ASScrollViewDelega } } + func animateDismissalIfNeeded() { + guard let layout = self.validLayout, layout.metrics.isTablet else { + return + } + if let sourceContainer = self.sourceContainer { + sourceContainer.animateOut(result: .dismissWithoutContent, completion: {}) + return + } + } + func getActionsMinHeight() -> ContextController.ActionsHeight? { if !self.actionsContainerNode.bounds.height.isZero { return ContextController.ActionsHeight( @@ -2784,6 +2794,10 @@ public final class ContextController: ViewController, StandalonePresentableContr } } + public func animateDismissalIfNeeded() { + self.controllerNode.animateDismissalIfNeeded() + } + public func cancelReactionAnimation() { self.controllerNode.cancelReactionAnimation() } diff --git a/submodules/TelegramUI/Components/Chat/ChatUserInfoItem/Sources/ChatUserInfoItem.swift b/submodules/TelegramUI/Components/Chat/ChatUserInfoItem/Sources/ChatUserInfoItem.swift index 3ad695ce52..c8d1b2c137 100644 --- a/submodules/TelegramUI/Components/Chat/ChatUserInfoItem/Sources/ChatUserInfoItem.swift +++ b/submodules/TelegramUI/Components/Chat/ChatUserInfoItem/Sources/ChatUserInfoItem.swift @@ -289,14 +289,7 @@ public final class ChatUserInfoItemNode: ListViewItemNode, ASGestureRecognizerDe backgroundSize.height += verticalInset let constrainedWidth = params.width - (horizontalInset + horizontalContentInset) * 2.0 - let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.peer.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) + item.peer.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) + item.peer.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder), font: Font.semibold(15.0), textColor: primaryTextColor), backgroundColor: nil, maximumNumberOfLines: 2, truncationType: .end, constrainedSize: CGSize(width: constrainedWidth, height: CGFloat.greatestFiniteMagnitude), alignment: .center, cutout: nil, insets: UIEdgeInsets())) - backgroundSize.height += titleLayout.size.height - backgroundSize.height += verticalSpacing - - let (subtitleLayout, subtitleApply) = makeSubtitleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.presentationData.strings.Chat_NonContactUser_Subtitle, font: Font.regular(13.0), textColor: subtitleColor), backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: constrainedWidth, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) - backgroundSize.height += subtitleLayout.size.height - backgroundSize.height += verticalSpacing + paragraphSpacing - + let infoConstrainedSize = CGSize(width: floor(constrainedWidth * 0.7), height: CGFloat.greatestFiniteMagnitude) var maxTitleWidth: CGFloat = 0.0 @@ -388,8 +381,17 @@ public final class ChatUserInfoItemNode: ListViewItemNode, ASGestureRecognizerDe groupsTitleLayoutAndApply = nil groupsValueLayoutAndApply = nil } + + let titleConstrainedWidth = maxTitleWidth + attributeSpacing + maxValueWidth + let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.peer.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder), font: Font.semibold(15.0), textColor: primaryTextColor), backgroundColor: nil, maximumNumberOfLines: 3, truncationType: .end, constrainedSize: CGSize(width: titleConstrainedWidth, height: CGFloat.greatestFiniteMagnitude), alignment: .center, cutout: nil, insets: UIEdgeInsets())) + backgroundSize.height += titleLayout.size.height + backgroundSize.height += verticalSpacing + + let (subtitleLayout, subtitleApply) = makeSubtitleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.presentationData.strings.Chat_NonContactUser_Subtitle, font: Font.regular(13.0), textColor: subtitleColor), backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: titleConstrainedWidth, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) + backgroundSize.height += subtitleLayout.size.height + backgroundSize.height += verticalSpacing + paragraphSpacing - backgroundSize.width = horizontalContentInset * 2.0 + max(titleLayout.size.width, maxTitleWidth + attributeSpacing + maxValueWidth) + backgroundSize.width = horizontalContentInset * 2.0 + maxTitleWidth + attributeSpacing + maxValueWidth let disclaimerText: NSMutableAttributedString if let verification = item.verification { diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 7bf2eaaf26..a2b9c83eb9 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -7522,8 +7522,10 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G self.view.frame = initialFrame self.containerLayoutUpdated(initialLayout, transition: .immediate) self.containerLayoutUpdated(updatedLayout, transition: transition) - self.chatDisplayNode.historyNode.layer.animateScaleX(from: initialLayout.size.width / updatedLayout.size.width, to: 1.0, duration: 0.4, timingFunction: kCAMediaTimingFunctionSpring) - self.chatDisplayNode.historyNode.layer.animatePosition(from: CGPoint(x: (updatedLayout.size.width - initialLayout.size.width) / 2.0, y: 0.0), to: .zero, duration: 0.4, timingFunction: kCAMediaTimingFunctionSpring, additive: true) + if !updatedLayout.metrics.isTablet { + self.chatDisplayNode.historyNode.layer.animateScaleX(from: initialLayout.size.width / updatedLayout.size.width, to: 1.0, duration: 0.4, timingFunction: kCAMediaTimingFunctionSpring) + self.chatDisplayNode.historyNode.layer.animatePosition(from: CGPoint(x: (updatedLayout.size.width - initialLayout.size.width) / 2.0, y: 0.0), to: .zero, duration: 0.4, timingFunction: kCAMediaTimingFunctionSpring, additive: true) + } self.chatDisplayNode.inputPanelBackgroundNode.layer.removeAllAnimations() self.chatDisplayNode.inputPanelBackgroundNode.layer.animatePosition(from: CGPoint(x: 0.0, y: self.chatDisplayNode.inputPanelNode?.frame.height ?? 45.0), to: .zero, duration: 0.4, timingFunction: kCAMediaTimingFunctionSpring, additive: true) self.view.layer.animate(from: 14.0, to: updatedLayout.deviceMetrics.screenCornerRadius, keyPath: "cornerRadius", timingFunction: kCAMediaTimingFunctionSpring, duration: 0.4)