diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index ef9003f9aa..5afa7eac96 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -4278,6 +4278,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G adOpaqueId = adAttribute.opaqueId } } + if adOpaqueId == nil, let panelMessage = self.chatDisplayNode.adPanelNode?.message, let adAttribute = panelMessage.adAttribute { + adOpaqueId = adAttribute.opaqueId + } let _ = self.context.engine.accountData.updateAdMessagesEnabled(enabled: false).start() if let adOpaqueId { self.removeAd(opaqueId: adOpaqueId) @@ -5541,7 +5544,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G adMessage ).startStrict(next: { [weak self] peerView, globalNotificationSettings, onlineMemberCount, hasScheduledMessages, peerReportNotice, pinnedCount, threadInfo, hasSearchTags, hasSavedChats, isPremiumRequiredForMessaging, managingBot, adMessage in if let strongSelf = self { - if strongSelf.peerView === peerView && strongSelf.reportIrrelvantGeoNotice == peerReportNotice && strongSelf.hasScheduledMessages == hasScheduledMessages && strongSelf.threadInfo == threadInfo && strongSelf.presentationInterfaceState.hasSearchTags == hasSearchTags && strongSelf.presentationInterfaceState.hasSavedChats == hasSavedChats && strongSelf.presentationInterfaceState.isPremiumRequiredForMessaging == isPremiumRequiredForMessaging && managingBot == strongSelf.presentationInterfaceState.contactStatus?.managingBot { + if strongSelf.peerView === peerView && strongSelf.reportIrrelvantGeoNotice == peerReportNotice && strongSelf.hasScheduledMessages == hasScheduledMessages && strongSelf.threadInfo == threadInfo && strongSelf.presentationInterfaceState.hasSearchTags == hasSearchTags && strongSelf.presentationInterfaceState.hasSavedChats == hasSavedChats && strongSelf.presentationInterfaceState.isPremiumRequiredForMessaging == isPremiumRequiredForMessaging && managingBot == strongSelf.presentationInterfaceState.contactStatus?.managingBot && adMessage?.id == strongSelf.presentationInterfaceState.adMessage?.id { return } @@ -5827,11 +5830,15 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } var adMessage = adMessage - if let peer = strongSelf.presentationInterfaceState.renderedPeer?.peer as? TelegramUser, peer.botInfo != nil { + if let peer = peerView.peers[peerView.peerId] as? TelegramUser, peer.botInfo != nil { } else { adMessage = nil } + if strongSelf.presentationInterfaceState.adMessage?.id != adMessage?.id { + animated = true + } + strongSelf.updateChatPresentationInterfaceState(animated: animated, interactive: false, { return $0.updatedPeer { _ in return renderedPeer diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index 48edaa17be..0b8f034d5e 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -1432,21 +1432,32 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate { var dismissedAdPanelNode: ChatAdPanelNode? var adPanelHeight: CGFloat? if let _ = self.chatPresentationInterfaceState.adMessage { + var animateAppearance = false let adPanelNode: ChatAdPanelNode if let current = self.adPanelNode { adPanelNode = current } else { adPanelNode = ChatAdPanelNode(context: self.context, animationCache: self.controllerInteraction.presentationContext.animationCache, animationRenderer: self.controllerInteraction.presentationContext.animationRenderer) adPanelNode.controllerInteraction = self.controllerInteraction + adPanelNode.clipsToBounds = true + animateAppearance = true } if self.adPanelNode != adPanelNode { dismissedAdPanelNode = self.adPanelNode self.adPanelNode = adPanelNode - self.contentContainerNode.contentNode.addSubnode(adPanelNode) + self.titleAccessoryPanelContainer.addSubnode(adPanelNode) + + adPanelNode.clipsToBounds = true } - adPanelHeight = adPanelNode.updateLayout(width: layout.size.width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, transition: transition, interfaceState: self.chatPresentationInterfaceState) + let height = adPanelNode.updateLayout(width: layout.size.width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, transition: transition, interfaceState: self.chatPresentationInterfaceState) + adPanelHeight = height + if transition.isAnimated && animateAppearance { + adPanelNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) + adPanelNode.subnodeTransform = CATransform3DMakeTranslation(0.0, -height, 0.0) + transition.updateSublayerTransformOffset(layer: adPanelNode.layer, offset: CGPoint()) + } } else if let adPanelNode = self.adPanelNode { dismissedAdPanelNode = adPanelNode self.adPanelNode = nil @@ -1759,7 +1770,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate { var adPanelFrame: CGRect? if let _ = self.adPanelNode, let panelHeight = adPanelHeight { - adPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: panelHeight)) + adPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: extraNavigationBarHeight), size: CGSize(width: layout.size.width, height: panelHeight)) insets.top += panelHeight extraNavigationBarHeight += panelHeight } @@ -2212,12 +2223,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate { } if let adPanelNode = self.adPanelNode, let adPanelFrame, !adPanelNode.frame.equalTo(adPanelFrame) { - if adPanelNode.frame.width.isZero { - adPanelNode.frame = adPanelFrame - transition.animatePositionAdditive(node: adPanelNode, offset: CGPoint(x: 0.0, y: -adPanelFrame.height)) - } else { - transition.updateFrame(node: adPanelNode, frame: adPanelFrame) - } + adPanelNode.frame = adPanelFrame } if let secondaryInputPanelNode = self.secondaryInputPanelNode, let apparentSecondaryInputPanelFrame = apparentSecondaryInputPanelFrame, !secondaryInputPanelNode.frame.equalTo(apparentSecondaryInputPanelFrame) { @@ -2339,6 +2345,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate { if let dismissedAdPanelNode { var dismissedPanelFrame = dismissedAdPanelNode.frame dismissedPanelFrame.origin.y = -dismissedPanelFrame.size.height + transition.updateAlpha(node: dismissedAdPanelNode, alpha: 0.0) transition.updateFrame(node: dismissedAdPanelNode, frame: dismissedPanelFrame, completion: { [weak dismissedAdPanelNode] _ in dismissedAdPanelNode?.removeFromSupernode() })